def test_game_state_returns_stones_sown_on_opponents_side_player_two(self): player_number = 1 pot_number = 4 board_log = [[[0, 2, 1, 0, 2, 9], [0, 0, 0, 3, 8, 8], [4, 11]], [[0, 2, 1, 0, 2, 9], [0, 0, 0, 0, 9, 9], [4, 12]]] gets_extra_turn = True is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_sown_on_opponents_side"] == 0
def test_game_state_returns_if_final_turn(self): player_number = 0 pot_number = 2 board_log = [[[4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4], [0, 0]], [[4, 4, 0, 5, 5, 5], [4, 4, 4, 4, 4, 4], [1, 0]]] gets_extra_turn = True is_game_over = True result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["is_final_turn"] == True
def test_game_state_returns_stones_captured_for_player_two(self): player_number = 1 pot_number = 0 board_log = [[[2, 7, 3, 7, 8, 1], [13, 0, 3, 2, 1, 0], [14, 21]], [[3, 8, 4, 8, 9, 0], [0, 1, 4, 3, 2, 1], [14, 24]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_captured"] == 3
def test_game_state_returns_kroos_on_opponents_side_index_end(self): player_number = 0 pot_number = 2 board_log = [[[25, 15, 13, 3, 16, 9], [12, 27, 8, 23, 16, 0], [0, 0]], [[26, 16, 0, 4, 17, 10], [13, 28, 9, 0, 17, 1], [26, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["kroos_on_opponents_side_index_end"] == [1, 2, 3, 5]
def test_game_state_returns_score_difference_at_end_from_whole_board(self): player_number = 0 pot_number = 5 board_log = [[[4, 1, 1, 4, 0, 4], [0, 4, 4, 0, 4, 0], [23, 14]], [[4, 1, 1, 4, 0, 0], [1, 5, 5, 0, 4, 0], [24, 14]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["score_difference_at_end_whole_board"] == 5
def test_game_state_returns_stones_on_opponents_side_at_end(self): player_number = 0 pot_number = 5 board_log = [[[5, 3, 16, 2, 0, 4], [0, 19, 3, 8, 0, 2], [16, 18]], [[5, 3, 16, 2, 0, 0], [1, 20, 4, 8, 0, 2], [17, 18]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_on_opponents_side_at_end"] == 35
def test_game_state_returns_current_winning_player_from_whole_board_analysis_when_draw(self): player_number = 0 pot_number = 5 board_log = [[[4, 1, 1, 4, 0, 4], [0, 4, 4, 0, 40, 0], [23, 14]], [[4, 1, 1, 4, 0, 0], [1, 5, 5, 0, 9, 0], [24, 14]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["current_winning_player_whole_board"] == "draw"
def test_game_state_returns_current_winning_player_when_there_is_a_draw(self): player_number = 0 pot_number = 5 board_log = [[[4, 1, 1, 4, 0, 1], [0, 4, 4, 0, 4, 0], [23, 24]], [[4, 1, 1, 4, 0, 0], [0, 4, 4, 0, 4, 0], [24, 24]]] gets_extra_turn = True is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["current_winning_player"] == "draw"
def test_game_state_returns_stones_sown_on_opponents_side_when_there_are_fewer_stones(self): player_number = 0 pot_number = 5 board_log = [[[4, 1, 1, 4, 0, 4], [0, 4, 4, 0, 4, 0], [0, 0]], [[4, 1, 1, 4, 0, 0], [1, 5, 5, 0, 4, 0], [1, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_sown_on_opponents_side"] == 3
def test_game_state_returns_stones_sown_on_opponents_side_player_one(self): player_number = 1 pot_number = 3 board_log = [[[25, 15, 0, 3, 16, 9], [13, 27, 8, 23, 16, 0], [0, 0]], [[27, 17, 2, 5, 18, 11], [15, 2, 11, 25, 18, 2], [0, 2]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_sown_on_opponents_side"] == 12
def test_game_state_returns_stones_sown_on_own_side_when_a_turn_loops_around(self): player_number = 0 pot_number = 2 board_log = [[[4, 4, 16, 4, 4, 4], [4, 4, 4, 4, 4, 4], [0, 0]], [[5, 5, 1, 6, 6, 6], [5, 5, 5, 5, 5, 5], [1, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_sown_on_own_side"] == 9
def test_game_state_returns_stones_sown_on_own_side(self): player_number = 0 pot_number = 3 board_log = [[[4, 0, 0, 4, 0, 4], [0, 4, 4, 0, 4, 0], [0, 0]], [[4, 0, 0, 0, 1, 5], [1, 4, 4, 0, 4, 0], [1, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_sown_on_own_side"] == 2
def test_game_state_returns_opponent_score(self): player_number = 0 pot_number = 5 board_log = [[[4, 1, 1, 4, 0, 4], [0, 4, 4, 0, 4, 0], [23, 14]], [[4, 1, 1, 4, 0, 0], [1, 5, 5, 0, 4, 0], [24, 14]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["opponent_score"] == 14
def test_game_state_returns_stones_captured_for_player_one(self): player_number = 0 pot_number = 2 board_log = [[[4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4], [0, 0]], [[4, 4, 0, 5, 5, 5], [4, 4, 4, 4, 4, 4], [1, 0]], [[4, 4, 0, 0, 6, 6], [5, 5, 4, 4, 4, 4], [2, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["stones_captured"] == 1
def test_game_state_returns_empty_pots_on_opponents_side(self): player_number = 0 pot_number = 3 board_log = [[[4, 0, 0, 4, 0, 4], [0, 4, 4, 0, 4, 0], [0, 0]], [[4, 0, 0, 0, 1, 5], [1, 4, 4, 0, 4, 0], [1, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["empty_pots_on_opponents_side_start"] == [1, 4, 6] assert result["empty_pots_on_opponents_side_end"] == [4, 6]
def test_game_state_returns_number_of_moves_available_on_opponents_side_at_start(self): player_number = 0 pot_number = 3 board_log = [[[4, 0, 0, 4, 0, 4], [0, 4, 4, 0, 4, 0], [0, 0]], [[4, 0, 0, 0, 1, 5], [1, 4, 4, 0, 4, 0], [1, 0]]] gets_extra_turn = False is_game_over = False result = game_state.get_game_state(player_number, pot_number, board_log, gets_extra_turn, is_game_over) assert result["moves_available_on_opponents_side_at_start"] == [2, 3, 5] assert result["moves_available_on_opponents_side_at_end"] == [1, 2, 3, 5]
def move(self): # This function is called on every turn of a game. It's how your snake decides where to move. # Valid moves are "up", "down", "left", or "right". # TODO: Use the information in cherrypy.request.json to decide your next move. data = cherrypy.request.json board_setup = game_state.get_game_state(data) print(board_setup) # Choose a random direction to move in possible_moves = ["up", "down", "left", "right"] move = random.choice(possible_moves) print(f"MOVE: {move}") return {"move": move}
def play(self, player_number, pot_number): self.check_player_turn_number(player_number) player_number = player_number - 1 pot_number = pot_number - 1 self.validate_turn(player_number, pot_number) turn = self.generate_turn(player_number, pot_number) self.game_board_log.append(turn[0]) self.check_for_game_over(turn[0]) gets_extra_turn = self.check_for_extra_turn(turn[1]) if len(self.game_board_log ) > 1: # If not the initial board set up, add state new_game_state = game_state.get_game_state( player_number, pot_number, self.game_board_log, gets_extra_turn, self.game_is_over, self.game_number) self.game_state_log.append(new_game_state) if self.game_is_over == True: return False else: return gets_extra_turn