def test_game_get_true_mouthe_pos(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) self.assertEqual( game.get_true_mouthe_pos((game.kx * 2 - 1, game.ky - 1)), (game.kx * 2, game.ky)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 2 + 1, game.ky - 1)), (game.kx * 2, game.ky)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 2 - 1, game.ky + 1)), (game.kx * 2, game.ky)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 2 + 1, game.ky + 1)), (game.kx * 2, game.ky)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 5 - 1, game.ky * 2 - 1)), (game.kx * 5, game.ky * 2)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 5 + 1, game.ky * 2 - 1)), (game.kx * 5, game.ky * 2)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 5 - 1, game.ky * 2 + 1)), (game.kx * 5, game.ky * 2)) self.assertEqual( game.get_true_mouthe_pos((game.kx * 5 + 1, game.ky * 2 + 1)), (game.kx * 5, game.ky * 2))
def test_game_computer_turn_cant_move(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 2, game.ky)] = Computer_checkers(game.kx * 2, game.ky, game.kx, (255, 0, 0)) game.objects[(game.kx * 2, game.ky * 3)] = Player_checkers(game.kx * 2, game.ky * 3, game.kx, (0, 0, 0)) game.objects[(game.kx * 2, game.ky * 5)] = Player_checkers(game.kx * 2, game.ky * 5, game.kx, (0, 0, 0)) game.objects[(game.kx * 5, game.ky * 2)] = Player_checkers(game.kx * 5, game.ky * 2, game.kx, (0, 0, 0)) game.objects[(game.kx * 8, game.ky * 3)] = Player_checkers(game.kx * 8, game.ky * 3, game.kx, (0, 0, 0)) game.computer_turn() self.assertTrue(game.objects[(game.kx * 2, game.ky)] is not None)
def test_game_handle_mouse_down_get_active_checker(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 2, game.ky)] = Player_checkers(game.kx * 2, game.ky, game.kx, (0, 0, 0)) game.handle_mouse_down((game.kx * 2, game.ky)) self.assertEqual(game.active_checker, game.objects.get((game.kx * 2, game.ky)))
def test_game_computer_turn_move_and_eat_checker_up_right(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 2, game.ky * 5)] = Computer_checkers( game.kx * 2, game.ky * 5, game.kx, (255, 0, 0)) game.objects[(game.kx * 5, game.ky * 4)] = Player_checkers(game.kx * 5, game.ky * 4, game.kx, (0, 0, 0)) game.computer_turn() self.assertTrue(game.objects[(game.kx * 5, game.ky * 4)] is None)
def test_game_computer_turn_move_and_eat_checker_down_left_king(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 8, game.ky * 3)] = Computer_checkers( game.kx * 8, game.ky * 3, game.kx, (255, 0, 0)) game.objects[(game.kx * 8, game.ky * 3)].checkers_type = "king" game.objects[(game.kx * 5, game.ky * 4)] = Player_checkers(game.kx * 5, game.ky * 4, game.kx, (0, 0, 0)) game.computer_turn() self.assertTrue(game.objects[(game.kx * 5, game.ky * 4)] is None)
def test_game_computer_turn_move_checker(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 5, game.ky * 2)] = Computer_checkers( game.kx * 5, game.ky * 2, game.kx, (255, 0, 0)) game.objects[(game.kx * 5, game.ky * 6)] = Player_checkers(game.kx * 5, game.ky * 6, game.kx, (0, 0, 0)) game.objects[(game.kx * 5, game.ky * 8)] = Player_checkers(game.kx * 5, game.ky * 8, game.kx, (0, 0, 0)) game.computer_turn() game.computer_turn() self.assertEqual(None, game.objects.get((game.kx * 5, game.ky * 4)))
def test_game_computer_turn_move_checker_become_king(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 5, game.ky * 18)] = Computer_checkers( game.kx * 5, game.ky * 18, game.kx, (255, 0, 0)) game.computer_turn() game.computer_turn() game.computer_turn() self.assertTrue(True)
def test_game_run_computer(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.player_c = 1 game.computer_c = 1 game.objects[(game.kx * 5, game.ky * 2)] = Computer_checkers( game.kx * 5, game.ky * 2, game.kx, (255, 0, 0)) game.objects[(game.kx * 5, game.ky * 4)] = Player_checkers(game.kx * 5, game.ky * 4, game.kx, (0, 0, 0)) game.turn = "Computer" game.run_computer() self.assertTrue(True)
def test_game_handle_mouse_down_move_checker_up_right(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 5, game.ky * 4)] = Player_checkers(game.kx * 5, game.ky * 4, game.kx, (0, 0, 0)) game.handle_mouse_down((game.kx * 5, game.ky * 4)) game.handle_mouse_down((game.kx * 8, game.ky * 3)) self.assertEqual(game.active_checker, None) game.handle_mouse_down((game.kx * 8, game.ky * 3)) self.assertEqual(game.active_checker, game.objects.get((game.kx * 8, game.ky * 3)))
def __init__(self): self.game = Game() self.size = self.game.size low = np.array([[0 for _ in range(self.size)] for _ in range(self.size)]) low = np.array([low, low]) high = np.array([[1 for _ in range(self.size)] for _ in range(self.size)]) high = np.array([high, high]) self.action_space = spaces.Discrete(self.size * self.size) self.observation_space = spaces.Box(low, high) self.seed() self.state = low self.rewards = {'win': 10, 'lost': -10, 'normal': 0, 'advantage': 5, 'tie': 0} self.model = ModelSource()
def test_game_handle_mouse_down_move_and_eat_checker_up_right_king(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.objects[(game.kx * 2, game.ky * 5)] = Player_checkers(game.kx * 2, game.ky * 5, game.kx, (0, 0, 0)) game.objects[(game.kx * 2, game.ky * 5)].checkers_type = "king" game.objects[(game.kx * 5, game.ky * 4)] = Computer_checkers( game.kx * 5, game.ky * 4, game.kx, (255, 0, 0)) game.handle_mouse_down((game.kx * 2, game.ky * 5)) game.handle_mouse_down((game.kx * 8, game.ky * 3)) self.assertEqual(game.active_checker, None) game.handle_mouse_down((game.kx * 8, game.ky * 3)) self.assertEqual(game.active_checker, game.objects.get((game.kx * 8, game.ky * 3)))
def test_game_handle_mouse_event(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.handle_mouse_event(pygame.MOUSEBUTTONDOWN, (0, 0)) self.assertTrue(True)
def test_game_handle_events(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.handle_events() self.assertTrue(True)
def test_game_run_heroku(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.objects = dict() game.player_c = 1 game.computer_c = 1 game.objects[(game.kx * 5, game.ky * 4)] = Player_checkers(game.kx * 5, game.ky * 4, game.kx, (0, 0, 0)) game.objects[(game.kx * 8, game.ky)] = Computer_checkers(game.kx * 8, game.ky, game.kx, (255, 0, 0)) game.handle_mouse_down((game.kx * 5, game.ky * 4)) game.handle_events = MagicMock( return_value=game.handle_mouse_down((game.kx * 5, game.ky * 2))) conf = dict() conf['0'] = str(775 - game.kx * 8) + '-' + str( 800 - game.ky) + '-' + str( 775 - game.kx * 2) + '-' + str(800 - game.ky * 3) + '-0' game.get_config = MagicMock(return_value=conf) game.run_heroku() self.assertTrue(True)
def test_game_draw(self): x_size = 775 y_size = 800 game = Game("Checkers 100", x_size, y_size, "1.png", 120) game.draw() self.assertTrue(True)
class TicTacToe(gym.Env): def __init__(self): self.game = Game() self.size = self.game.size low = np.array([[0 for _ in range(self.size)] for _ in range(self.size)]) low = np.array([low, low]) high = np.array([[1 for _ in range(self.size)] for _ in range(self.size)]) high = np.array([high, high]) self.action_space = spaces.Discrete(self.size * self.size) self.observation_space = spaces.Box(low, high) self.seed() self.state = low self.rewards = {'win': 10, 'lost': -10, 'normal': 0, 'advantage': 5, 'tie': 0} self.model = ModelSource() def seed(self, seed=None): self.np_random, seed = seeding.np_random(seed) return [seed] def get_action_for_opponent(self, x_user, y_user): # return self.get_action_for_opponent_random() return self.get_action_for_opponent_online_bot(x_user, y_user) # return self.get_action_for_opponent_offline_bot() def get_action_for_opponent_random(self): moves = self.game.available_moves() move = np.random.choice(moves) return move def get_action_for_opponent_online_bot(self, x_user, y_user): x_ai, y_ai = self.model.get_ai_move(x_user, y_user) return x_ai * self.size + y_ai def get_action_for_opponent_offline_bot(self): x_ai, y_ai = get_move(self.game.board) return x_ai * self.size + y_ai def make_move(self, action, sign): x = action // self.size y = action % self.size if sign == 1: self.state[0][x][y] = 1 self.game.board[x][y] = 1 elif sign == 2: self.state[1][x][y] = 1 self.game.board[x][y] = 2 return x, y def step(self, action): assert self.action_space.contains(action), "%r (%s) invalid" % (action, type(action)) reward = self.rewards['normal'] done = False x_1, y_1 = self.make_move(action, 1) if self.game.check_win(x_1, y_1, 1): reward = self.rewards['win'] done = True else: opponent_action = self.get_action_for_opponent(x_1, y_1) x_2, y_2 = self.make_move(opponent_action, 2) if self.game.check_win(x_2, y_2, 2): reward = self.rewards['lost'] done = True elif self.game.tie(): reward = self.rewards['tie'] done = True elif self.game.count(1) >= 5: reward = self.rewards['advantage'] done = False return self.state, reward, done, {} def reset(self): self.game.reset() low = np.array([[0 for _ in range(self.size)] for _ in range(self.size)]) low = np.array([low, low]) self.state = low self.model.reset() return self.state def render(self, mode='human'): if not (mode == 'human'): print(self.game.board) return None def close(self): pass
def main(): x_size = 775 # кратно 155 y_size = 800 # кратно 40 Game("Checkers 100", x_size, y_size, "1.png", 120).run_computer()