From 2fa04276b35ba2088efeccba191c43b749d2aa6e Mon Sep 17 00:00:00 2001 From: huangjielun <2872405629@qq.com> Date: Tue, 13 Sep 2022 20:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9F=BA=E6=9C=AC=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/server.py | 47 ++++++++-------- src/Client_connection.py | 1 - src/main.py | 12 ++++- src/main_an.py | 112 +++++++++++++++++++++++++-------------- src/socket_client.py | 4 +- src/test.py | 33 +++++++++--- 6 files changed, 137 insertions(+), 72 deletions(-) diff --git a/server/server.py b/server/server.py index 9770956..af71617 100644 --- a/server/server.py +++ b/server/server.py @@ -190,30 +190,33 @@ def transfer_message(msg): def client_thread(conn, addr): while True: - data = conn.recv(1024) - if not data: - break - print(data) - data = json.loads(data) + try: + data = conn.recv(1024) + if not data: + break + print(data) + data = json.loads(data) - if not 'type' in data: - transfer_message(data['msg']) - continue - if data['type'] == 0: - join_game_handler(data['msg'], addr, conn) - continue - elif data['type'] == 1: - transfer_message(data['msg']) - continue - elif data['type'] == 2: - quit_game_handler(data['msg']) - break - elif data['type'] == 3: + if not 'type' in data: + transfer_message(data['msg']) + continue + if data['type'] == 0: + join_game_handler(data['msg'], addr, conn) + continue + elif data['type'] == 1: + transfer_message(data['msg']) + continue + elif data['type'] == 2: + quit_game_handler(data['msg']) + break + elif data['type'] == 3: + break + else: + #delivering message between the two clients + transfer_message(data['msg']) + continue + except: break - else: - #delivering message between the two clients - transfer_message(data['msg']) - continue #came out of loop conn.close() diff --git a/src/Client_connection.py b/src/Client_connection.py index 3592c50..34aba80 100644 --- a/src/Client_connection.py +++ b/src/Client_connection.py @@ -97,7 +97,6 @@ def ack_exit_game(conn,side):#退出游戏或超时 "side":side } send_msg_to(conn,data) - conn.close() return def handle_move(msg): diff --git a/src/main.py b/src/main.py index 9f71163..c1c3727 100644 --- a/src/main.py +++ b/src/main.py @@ -1638,14 +1638,22 @@ def server_thread(conn,addr) : player.status_2 = status_2 player.request = request player.game_id = game_id - player.side = side 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 elif msg["status"] == 3: status_2, game_id, side = C.handle_time_over(msg) player.status_2 = status_2 player.game_id = game_id - player.side = side player.invalid = 1 break except: diff --git a/src/main_an.py b/src/main_an.py index 018f8cb..1c8ed6f 100644 --- a/src/main_an.py +++ b/src/main_an.py @@ -1624,7 +1624,7 @@ def server_thread(conn,addr) : player.id = id player.invalid = 1 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) player.game_id = game_id player.status_2 = status_2 @@ -1639,19 +1639,36 @@ def server_thread(conn,addr) : player.status_2 = status_2 player.request = request player.game_id = game_id - player.side = side 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: status_2, game_id, side = C.handle_time_over(msg) player.status_2 = status_2 player.game_id = game_id - player.side = side player.invalid = 1 + if side == 0: + player.Right_win = 1 + elif side == 1: + player.Left_win = 1 break except: break - conn.close() + try: + conn.close() + except: + return mutex_playing = Lock() @@ -1678,28 +1695,7 @@ class Config: MAX_THNIKING_TIME = 60 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(): global l_animals,r_animals global player, Axis @@ -1707,11 +1703,11 @@ def main(): MAP = init.calc_map() MAP1 = init.clac_MAP1() game_status = start_game.starting_screen() + Left_win = Right_win = 0 demo = 0 # 标识是否为网络版 - stop = 0 # 标识是否请求暂停游戏 + pause = 0 # 标识是否请求暂停游戏 exit = 0 # 标识是否请求退出游戏 report = 0 # 标识是否举报对方 - other_player_move = 0 # 标识对方是否能移动 if not game_status: return False elif game_status == 1: @@ -1725,6 +1721,8 @@ def main(): if demo == 1: name = input("Please tell us your name:") player.name = name + Left_win = player.Left_win + Right_win = player.Right_win Address = (Config.SOCKET_HOST, Config.SOCKET_PORT) if demo == 1: C.load_config() @@ -1733,19 +1731,36 @@ def main(): C.conn_to_server(client, name) while run: clock.tick(FPS) - - if left_win(x, y, MAP, MAP1): + if demo == 1 and exit == 1: + 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 - if right_win(x, y, MAP, MAP1): + if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1): run = False if demo == 1: C.start_new_thread(server_thread, (client,Address)) + Right_win = player.Right_win + Left_win = player.Left_win for event in pygame.event.get(): - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: - start_game.starting_menu() - elif event.type == pygame.QUIT: + if event.type == pygame.QUIT: 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: b1, b2, b3 = pygame.mouse.get_pressed() 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, 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 - if right_win(x, y, MAP, MAP1): + if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1): 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) 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) pygame.display.update() + if player.status_2 == 2 and demo == 1 : + print('******') + C.ack_exit_game(client,player.side) + #client.close() + time.sleep(2) #os.system("pause") return start_game.starting_screen() @@ -2136,7 +2168,7 @@ def main(): if __name__ == "__main__": 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() 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) diff --git a/src/socket_client.py b/src/socket_client.py index 9e4cf83..726f3e8 100644 --- a/src/socket_client.py +++ b/src/socket_client.py @@ -1,5 +1,5 @@ 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.game_id = game_id self.side = side @@ -10,6 +10,8 @@ class Player: self.counterpart_name = counterpart_name self.request = request self.invalid = invalid + self.Left_win = Left_win + self.Right_win = Right_win class Chessmen_axis: diff --git a/src/test.py b/src/test.py index 98d5396..5f9eea1 100644 --- a/src/test.py +++ b/src/test.py @@ -1,6 +1,27 @@ -import init -for x in range(0,9): - for y in range(0,7): - new_x,new_y=init.tran(x,y) - new_x,new_y=init.calc(new_x,new_y) - print(x,y,new_x,new_y) \ No newline at end of file +import pygame +import pygame_menu +import math + +def draw_update_function(widget, menu): + 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) \ No newline at end of file