完成基本协议

develop
huangjielun 3 years ago
parent 54761a1c93
commit 2fa04276b3

@ -190,30 +190,33 @@ def transfer_message(msg):
def client_thread(conn, addr): def client_thread(conn, addr):
while True: while True:
data = conn.recv(1024) try:
if not data: data = conn.recv(1024)
break if not data:
print(data) break
data = json.loads(data) print(data)
data = json.loads(data)
if not 'type' in data:
transfer_message(data['msg']) if not 'type' in data:
continue transfer_message(data['msg'])
if data['type'] == 0: continue
join_game_handler(data['msg'], addr, conn) if data['type'] == 0:
continue join_game_handler(data['msg'], addr, conn)
elif data['type'] == 1: continue
transfer_message(data['msg']) elif data['type'] == 1:
continue transfer_message(data['msg'])
elif data['type'] == 2: continue
quit_game_handler(data['msg']) elif data['type'] == 2:
break quit_game_handler(data['msg'])
elif data['type'] == 3: break
elif data['type'] == 3:
break
else:
#delivering message between the two clients
transfer_message(data['msg'])
continue
except:
break break
else:
#delivering message between the two clients
transfer_message(data['msg'])
continue
#came out of loop #came out of loop
conn.close() conn.close()

@ -97,7 +97,6 @@ def ack_exit_game(conn,side):#退出游戏或超时
"side":side "side":side
} }
send_msg_to(conn,data) send_msg_to(conn,data)
conn.close()
return return
def handle_move(msg): def handle_move(msg):

@ -1638,14 +1638,22 @@ def server_thread(conn,addr) :
player.status_2 = status_2 player.status_2 = status_2
player.request = request player.request = request
player.game_id = game_id player.game_id = game_id
player.side = side
player.invalid = 1 player.invalid = 1
if request == "stop" or request == "report":
if side == 0:
player.Left_win = 1
elif side == 1:
player.Right_win = 1
elif request == "quit":
if side == 0:
player.Right_win = 1
elif side == 1:
player.Left_win = 1
break break
elif msg["status"] == 3: elif msg["status"] == 3:
status_2, game_id, side = C.handle_time_over(msg) status_2, game_id, side = C.handle_time_over(msg)
player.status_2 = status_2 player.status_2 = status_2
player.game_id = game_id player.game_id = game_id
player.side = side
player.invalid = 1 player.invalid = 1
break break
except: except:

@ -1624,7 +1624,7 @@ def server_thread(conn,addr) :
player.id = id player.id = id
player.invalid = 1 player.invalid = 1
continue continue
if msg["status"] == 1: elif msg["status"] == 1:
status_2,counterpart_name,game_id,side,think_time,total_time = C.handle_new_player(msg) status_2,counterpart_name,game_id,side,think_time,total_time = C.handle_new_player(msg)
player.game_id = game_id player.game_id = game_id
player.status_2 = status_2 player.status_2 = status_2
@ -1639,19 +1639,36 @@ def server_thread(conn,addr) :
player.status_2 = status_2 player.status_2 = status_2
player.request = request player.request = request
player.game_id = game_id player.game_id = game_id
player.side = side
player.invalid = 1 player.invalid = 1
break if request == "stop" or request == "report":
if side == 0:
player.Left_win = 1
elif side == 1:
player.Right_win = 1
elif request == "quit":
if side == 0:
player.Right_win = 1
elif side == 1:
player.Left_win = 1
#print(player.status_2)
continue
elif msg["status"] == 3: elif msg["status"] == 3:
status_2, game_id, side = C.handle_time_over(msg) status_2, game_id, side = C.handle_time_over(msg)
player.status_2 = status_2 player.status_2 = status_2
player.game_id = game_id player.game_id = game_id
player.side = side
player.invalid = 1 player.invalid = 1
if side == 0:
player.Right_win = 1
elif side == 1:
player.Left_win = 1
break break
except: except:
break break
conn.close() try:
conn.close()
except:
return
mutex_playing = Lock() mutex_playing = Lock()
@ -1678,28 +1695,7 @@ class Config:
MAX_THNIKING_TIME = 60 MAX_THNIKING_TIME = 60
MAX_TOTAL_TIME = 600 MAX_TOTAL_TIME = 600
def pause():
pass
def report():
pass
def quit():
return 0
def surrender():
pass
def start_menu():
pygame.init()
surface = pygame.display.set_mode((600, 400))
menu = pygame_menu.Menu('DO YOUR ACTIONS', 400, 300, theme = pygame_menu.themes.THEME_BLUE)
menu.add.button('Pause', pause)
menu.add.button('Surrender', surrender)
menu.add.button('Report', report)
menu.add.button('Quit', pygame_menu.events.EXIT)
draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion,
r_leopard, r_mouse, r_fox, 0, 0, 0, 0, 0, 0, 0)
menu.mainloop(surface)
def main(): def main():
global l_animals,r_animals global l_animals,r_animals
global player, Axis global player, Axis
@ -1707,11 +1703,11 @@ def main():
MAP = init.calc_map() MAP = init.calc_map()
MAP1 = init.clac_MAP1() MAP1 = init.clac_MAP1()
game_status = start_game.starting_screen() game_status = start_game.starting_screen()
Left_win = Right_win = 0
demo = 0 # 标识是否为网络版 demo = 0 # 标识是否为网络版
stop = 0 # 标识是否请求暂停游戏 pause = 0 # 标识是否请求暂停游戏
exit = 0 # 标识是否请求退出游戏 exit = 0 # 标识是否请求退出游戏
report = 0 # 标识是否举报对方 report = 0 # 标识是否举报对方
other_player_move = 0 # 标识对方是否能移动
if not game_status: if not game_status:
return False return False
elif game_status == 1: elif game_status == 1:
@ -1725,6 +1721,8 @@ def main():
if demo == 1: if demo == 1:
name = input("Please tell us your name:") name = input("Please tell us your name:")
player.name = name player.name = name
Left_win = player.Left_win
Right_win = player.Right_win
Address = (Config.SOCKET_HOST, Config.SOCKET_PORT) Address = (Config.SOCKET_HOST, Config.SOCKET_PORT)
if demo == 1: if demo == 1:
C.load_config() C.load_config()
@ -1733,19 +1731,36 @@ def main():
C.conn_to_server(client, name) C.conn_to_server(client, name)
while run: while run:
clock.tick(FPS) clock.tick(FPS)
if demo == 1 and exit == 1:
if left_win(x, y, MAP, MAP1): request = "quit"
C.exit_game(client,request,player.game_id,player.side)
if player.side == 0:
player.Right_win = Right_win = 1
elif player.side == 1:
player.Left_win = Left_win = 1
if left_win(x, y, MAP, MAP1) or (demo == 1 and Left_win == 1):
run = False run = False
if right_win(x, y, MAP, MAP1): if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1):
run = False run = False
if demo == 1: if demo == 1:
C.start_new_thread(server_thread, (client,Address)) C.start_new_thread(server_thread, (client,Address))
Right_win = player.Right_win
Left_win = player.Left_win
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.KEYDOWN: if event.type == pygame.QUIT:
if event.key == pygame.K_ESCAPE:
start_game.starting_menu()
elif event.type == pygame.QUIT:
run = False run = False
elif event.type == pygame.KEYDOWN and demo == 1: # and demo == 1
if event.key == pygame.K_ESCAPE:
flag = start_game.starting_menu()
if flag == 1:
pause = 1
report = exit = 0
elif flag == 2:
report = 1
pause = exit = 0
elif flag == 3:
exit = 1
report = pause = 0
elif event.type == pygame.MOUSEBUTTONDOWN: elif event.type == pygame.MOUSEBUTTONDOWN:
b1, b2, b3 = pygame.mouse.get_pressed() b1, b2, b3 = pygame.mouse.get_pressed()
if b1 and not b3: if b1 and not b3:
@ -2119,16 +2134,33 @@ def main():
draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion, draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion,
r_leopard, r_mouse, r_fox, id, x, y, status, MAP, MAP1, turn) r_leopard, r_mouse, r_fox, id, x, y, status, MAP, MAP1, turn)
if left_win(x, y, MAP, MAP1): if left_win(x, y, MAP, MAP1) or (demo == 1 and Left_win == 1):
run = False run = False
if right_win(x, y, MAP, MAP1): if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1):
run = False run = False
if left_win(x, y, MAP, MAP1): if left_win(x, y, MAP, MAP1) or (demo == 1 and Left_win == 1):
if demo == 1 and player.side == 0:
if pause == 1:
request = "stop"
C.exit_game(client,request,player.game_id,player.side)
print_text(WIN, font, 500, 400, "Red Win!", RED) print_text(WIN, font, 500, 400, "Red Win!", RED)
pygame.display.update() pygame.display.update()
if right_win(x, y, MAP, MAP1): if player.status_2 == 2 and demo == 1 :
C.ack_exit_game(client, player.side)
#client.close()
if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1):
if demo == 1 and player.side == 1:
if pause == 1:
request = "stop"
C.exit_game(client,request,player.game_id,player.side)
print_text(WIN, font, 500, 400, "Blue Win!", BLUE) print_text(WIN, font, 500, 400, "Blue Win!", BLUE)
pygame.display.update() pygame.display.update()
if player.status_2 == 2 and demo == 1 :
print('******')
C.ack_exit_game(client,player.side)
#client.close()
time.sleep(2) time.sleep(2)
#os.system("pause") #os.system("pause")
return start_game.starting_screen() return start_game.starting_screen()
@ -2136,7 +2168,7 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
again = 1 again = 1
while again == 1: while again > 0:
l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion, r_leopard, r_fox, r_mouse=init.refresh() l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion, r_leopard, r_fox, r_mouse=init.refresh()
draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion, draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion,
r_leopard, r_mouse, r_fox,0,0,0,0,0,0,0) r_leopard, r_mouse, r_fox,0,0,0,0,0,0,0)

@ -1,5 +1,5 @@
class Player: class Player:
def __init__(self, counterpart_name=None,name=None, game_id=None, side=None,think_time=30,total_time=600,id = None,status_2 = None,request = None,invalid = 1): def __init__(self, counterpart_name=None,name=None, game_id=None, side=None,think_time=30,total_time=600,id = None,status_2 = None,request = None,invalid = 1,Left_win = 0,Right_win = 0):
self.name = name self.name = name
self.game_id = game_id self.game_id = game_id
self.side = side self.side = side
@ -10,6 +10,8 @@ class Player:
self.counterpart_name = counterpart_name self.counterpart_name = counterpart_name
self.request = request self.request = request
self.invalid = invalid self.invalid = invalid
self.Left_win = Left_win
self.Right_win = Right_win
class Chessmen_axis: class Chessmen_axis:

@ -1,6 +1,27 @@
import init import pygame
for x in range(0,9): import pygame_menu
for y in range(0,7): import math
new_x,new_y=init.tran(x,y)
new_x,new_y=init.calc(new_x,new_y) def draw_update_function(widget, menu):
print(x,y,new_x,new_y) t = widget.get_attribute('t', 0)
t += menu.get_clock().get_time()
widget.set_padding(10*(1 + math.sin(t))) # Oscillating padding
pygame.init()
surface = pygame.display.set_mode((600, 400))
def set_difficulty(value, difficulty):
# Do the job here !
pass
def start_the_game():
# Do the job here !
pass
menu = pygame_menu.Menu('Welcome', 400, 300,
theme=pygame_menu.themes.THEME_BLUE)
menu.add.text_input('Name :', default='John Doe')
menu.add.selector('Difficulty :', [('Hard', 1), ('Easy', 2)], onchange=set_difficulty)
menu.add.button('Play', start_the_game)
menu.add.button('Quit', pygame_menu.events.EXIT)
menu.mainloop(surface)
Loading…
Cancel
Save