def game_init(self): self.request.send_req(self.socket_player_white, GameClientPDUCodec.connect_ok_pdu(Player.WHITE)) self.request.send_req(self.socket_player_black, GameClientPDUCodec.connect_ok_pdu(Player.BLACK)) initial_board = GameLogic.initial_board_as_affected_positions(8) self.request.send_req(self.socket_player_white, GameClientPDUCodec.update_board_pdu(Player.WHITE, initial_board[0])) self.request.send_req(self.socket_player_white, GameClientPDUCodec.update_board_pdu(Player.BLACK, initial_board[1])) self.request.send_req(self.socket_player_black, GameClientPDUCodec.update_board_pdu(Player.WHITE, initial_board[0])) self.request.send_req(self.socket_player_black, GameClientPDUCodec.update_board_pdu(Player.BLACK, initial_board[1])) self.request.send_req(self.socket_player_black, GameClientPDUCodec.turn_pdu())
def place_pdu(self, context, client, x, y): if client == context.socket_player_white: if GameLogic.is_valid_position(context.boardmodel, x, y, Player.WHITE): affected_positions = GameLogic.get_affected_positions(context.boardmodel, x, y, Player.WHITE) GameLogic.apply_move(context.boardmodel, x, y, Player.WHITE) board_pdu = GameClientPDUCodec.update_board_pdu(Player.WHITE, affected_positions) context.request.send_req(context.socket_player_white, board_pdu) context.request.send_req(context.socket_player_black, board_pdu) next_turn_player = GameLogic.next_turn_player(context.boardmodel, Player.WHITE) white_count, black_count = context.boardmodel.count_disks() # if white_count > 4: # context.end_game() if next_turn_player == Player.WHITE: context.turn = context.socket_player_white context.state = context.WHITE_TURN context.state.turn_req(context) elif next_turn_player == Player.BLACK: context.turn = context.socket_player_black context.state = context.BLACK_TURN context.state.turn_req(context) else: # no valid movements->board full or no valid placements for any player context.end_game() else: context.request.send_req(client, GameClientPDUCodec.place_error_pdu()) context.request.send_req(client, GameClientPDUCodec.turn_pdu()) else: # not your turn # read protocol, I don't remember if it's specified to report the error or not context.request.send_req(client, GameClientPDUCodec.place_error_pdu())