示例#1
0
def test_game_cycle(game):
    game.make_turn(Vector([0, 0]))
    game.make_turn(Vector([2, 2]))
    game.make_turn(Vector([0, 1]))
    game.make_turn(Vector([2, 1]))
    game.make_turn(Vector([0, 2]))
    assert game.winner == Color.black
示例#2
0
def test_put_stone(board):
    board.put_stone(Vector([0, 0]), Color.white)
    board.put_stone(Vector([1, 1]), Color.white)
    board.put_stone(Vector([2, 2]), Color.white)
    assert board.map[0][0] == Color.white\
        and board.map[1][1] == Color.white \
        and board.map[2][2] == Color.white
示例#3
0
 def game_on_board(self, players, with_foul):
     self.game = Game(game_params.board_width, game_params.board_height,
                      game_params.length_to_win, players, with_foul)
     game_params.PLAYER_COUNT = len(self.game.players)
     if self.game_client is not None:
         self.game_client.message_monitor.game = self.game
     self.display.blit(view_params.board_back, (0, 0))
     pygame.time.wait(200)
     click_handler = ClickHandler()
     cycle = True
     self.clock.tick(20)
     while cycle:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 cycle = False
                 if self.game_client is not None:
                     self.game_client.close_event()
                     if self.game_server is not None:
                         pygame.time.wait(100)
                         self.game_server.close()
                         self.game_server = None
                 pygame.quit()
         click_pos = pygame.mouse.get_pos()
         click = pygame.mouse.get_pressed()
         current_player = self.game.current_player
         if current_player.entity == const.PlayerEntity.human:
             if click_handler.check_click(click_pos, click):
                 if click_handler.handle() is not None:
                     x, y = click_handler.handle()
                     if self.game_client is not None:
                         if current_player.color.value \
                                 == self.game_client.message_monitor.id:
                             message = {
                                 RequestParams.TYPE: RequestType.MOVE,
                                 RequestParams.ID:
                                 current_player.color.value,
                                 RequestParams.MOVE: (x, y)
                             }
                             if self.game.board[Vector([x, y])] \
                                     == const.Color.non:
                                 self.game_client.send_message(message)
                                 self.game.make_turn(Vector([x, y]))
                     else:
                         self.game.make_turn(Vector([x, y]))
                 else:
                     continue
         else:
             x, y = current_player.make_move(self.game)
             self.game.make_turn(Vector([x, y]))
         if pygame.key.get_pressed()[pygame.K_z]:
             self.game.undo_turn()
             pygame.time.wait(150)
             self.clear()
         if self.game.winner is not None:
             pygame.time.wait(150)
             cycle = False
             self.scoreboard.update_stat(self.game)
             self.end_game()
         self.update_map()
         pygame.display.update()
示例#4
0
def test_undo_moves(players, expected):
    game = g.Game(5, 5, 3, players)
    game.make_turn(Vector([0, 0]))
    game.make_turn(Vector([0, 1]))
    game.make_turn(Vector([0, 2]))
    game.undo_turn()
    assert game.current_player.color == expected
    assert game.board[0, 2] == Color.non
示例#5
0
def test_find_line(board, c1, c2, c3, expected):
    board.put_stone(Vector(c1), Color.black)
    board.put_stone(Vector(c2), Color.black)
    board.put_stone(Vector(c3), Color.black)
    for direct in directions:
        length = board.find_line(Vector(c3), direct, Color.black, 1)
        if length == expected:
            assert length == expected
示例#6
0
 def make_move(self, game):
     if not game.smart_bot:
         x = random.randint(0, game.board.width - 1)
         y = random.randint(0, game.board.height - 1)
         vec = Vector([x, y])
         while game.board[vec] != Color.non:
             x = random.randint(0, game.board.width - 1)
             y = random.randint(0, game.board.height - 1)
             vec = Vector([x, y])
         return x, y
示例#7
0
def test_check_fouls_forks(two_human_players):
    game = g.Game(5, 5, 5, two_human_players, True)
    game.make_turn(Vector([3, 1]))
    game.make_turn(Vector([0, 0]))
    game.make_turn(Vector([3, 2]))
    game.make_turn(Vector([0, 1]))
    game.make_turn(Vector([1, 3]))
    game.make_turn(Vector([1, 0]))
    game.make_turn(Vector([2, 3]))
    game.make_turn(Vector([1, 1]))
    game.make_turn(Vector([3, 3]))
    assert game.board[Vector([3, 3])] == Color.non
示例#8
0
 def make_move(self, game):
     weights_table = {}
     for x in range(game.board.width):
         for y in range(game.board.height):
             vector = Vector([x, y])
             if game.board[vector] != Color.non:
                 continue
             weights_table[vector] = count_weight(game, vector)
     values = list(weights_table.values())
     keys = list(weights_table.keys())
     return keys[values.index(max(values))]
示例#9
0
 def run(self):
     while True:
         self.request = pickle.loads(self.server_socket.recv(1024))
         if self.request[RequestParams.TYPE] == RequestType.CURRENT_PLAYERS:
             self.player_params = self.request[RequestParams.PLAYERS]
             player_id = self.request[RequestParams.ID].value - 1
             player = self.request[RequestParams.PLAYERS][player_id]
             if self.id is None:
                 self.id = player[RequestParams.ID].value
             self.max_players = self.request[RequestParams.MAX_PLAYERS]
         elif self.request[RequestParams.TYPE] == RequestType.BEGIN:
             self.start_button.is_pressed = True
         elif self.request[RequestParams.TYPE] == RequestType.MOVE:
             place = self.request[RequestParams.MOVE]
             self.game.make_turn(Vector([place[0], place[1]]))
         elif self.request[RequestParams.TYPE] == RequestType.RESTART:
             self.restart_button.is_pressed = True
示例#10
0
def test_prepare_map(board):
    board[Vector([0, 0])] = 1
    board[Vector([1, 1])] = 2
    board.map = board.prepare_map()
    assert board.map[0][0] == Color.non and board.map[1][1] == Color.non
    assert len(board.map[0]) == 5
示例#11
0
from enum import Enum
from renjuu.game.vector import Vector


directions = [Vector([1, 0]), Vector([0, 1]),
              Vector([1, -1]), Vector([1, 1])]


class GameMode(Enum):
    with_bot = 0
    with_human = 1


class PlayerEntity(Enum):
    human = 0
    bot = 1


class Color(Enum):
    non = 0
    black = 1
    white = 2
    red = 3
    blue = 4
    yellow = 5
    green = 6
    pink = 7
    gray = 8

    def __lt__(self, other):
        return self.value < other.value
示例#12
0
def test_check_winner(game, c1, c2, c3, expected):
    game.board.put_stone(Vector(c1), Color.black)
    game.board.put_stone(Vector(c2), Color.black)
    game.board.put_stone(Vector(c3), Color.black)
    game.check_winner(Vector(c3), Color.black)
    assert game.winner == Color.black
示例#13
0
def test_check_draw(two_human_players):
    game = g.Game(3, 3, 4, two_human_players)
    for i in range(game.board.width):
        for j in range(game.board.height):
            game.make_turn(Vector([i, j]))
    assert game.winner == Color.non
示例#14
0
def test_check_fouls_long(two_human_players):
    game = g.Game(10, 10, 5, two_human_players, True)
    game.make_turn(Vector([1, 3]))
    game.make_turn(Vector([0, 0]))
    game.make_turn(Vector([2, 3]))
    game.make_turn(Vector([0, 1]))
    game.make_turn(Vector([3, 3]))
    game.make_turn(Vector([1, 0]))
    game.make_turn(Vector([5, 3]))
    game.make_turn(Vector([1, 1]))
    game.make_turn(Vector([6, 3]))
    game.make_turn(Vector([9, 9]))
    game.make_turn(Vector([4, 3]))
    assert game.board[Vector([4, 3])] == Color.non
示例#15
0
def test_game_cycle_with_bot(bot_and_human_players):
    game = g.Game(5, 5, 3, bot_and_human_players)
    game.make_turn(Vector([0, 0]))
    game.make_turn(Vector(game.current_player.make_move(game)))
    if game.board.map[0][1] == Color.non:
        game.make_turn(Vector([0, 1]))
    else:
        game.make_turn(Vector([1, 0]))
        game.make_turn(Vector(game.current_player.make_move(game)))
        if game.board.map[2][0] == Color.non:
            game.make_turn(Vector([2, 0]))
        else:
            game.make_turn(Vector([1, 1]))
            game.make_turn(Vector(game.current_player.make_move(game)))
            if game.board.map[2][2] == Color.non:
                game.make_turn(Vector([2, 2]))
            else:
                game.make_turn(Vector([2, 1]))
    game.make_turn(Vector(game.current_player.make_move(game)))
    if game.board.map[0][2] == Color.non:
        game.make_turn(Vector([0, 2]))
    elif game.board.map[1][0] == Color.non:
        game.make_turn(Vector([1, 0]))
        game.make_turn(Vector(game.current_player.make_move(game)))
        if game.board.map[2][0] == Color.non:
            game.make_turn(Vector([2, 0]))
        elif game.board.map[1][1] == Color.non:
            game.make_turn(Vector([1, 1]))
            game.make_turn(Vector(game.current_player.make_move(game)))
            if game.board.map[1][2] == Color.non:
                game.make_turn(Vector([1, 2]))
            elif game.board.map[2][1] == Color.non:
                game.make_turn(Vector([2, 1]))
            elif game.board.map[2][2] == Color.non:
                game.make_turn(Vector([2, 2]))
            else:
                assert game.winner == Color.white
                return
        else:
            assert game.winner == Color.white
            return
    else:
        game.make_turn(Vector([1, 1]))
        game.make_turn(Vector(game.current_player.make_move(game)))
        if game.board.map[2][2] == Color.non:
            game.make_turn(Vector([2, 2]))
        else:
            game.make_turn(Vector([1, 2]))
    assert game.winner == Color.black
示例#16
0
def test_vector_not_equals(c1, c2):
    v1 = Vector(c1)
    v2 = Vector(c2)
    assert v1 != v2
示例#17
0
    v2 = Vector(c2)
    assert v1 == v2


@pytest.mark.parametrize("c1, c2", [([1, 1], [2, 2]),
                                    ([1, 1], [1, 2]),
                                    ([1, 1], [2, 1]),
                                    ([2, 1], [2, 2])])
def test_vector_not_equals(c1, c2):
    v1 = Vector(c1)
    v2 = Vector(c2)
    assert v1 != v2


@pytest.mark.parametrize("c1, c2, expected",
                         [([1, 1], [2, 2], Vector([3, 3])),
                          ([1, 1], [1, 2], Vector([2, 3])),
                          ([1, 1], [2, 1], Vector([3, 2])),
                          ([2, 1], [2, 2], Vector([4, 3]))])
def test_add_vector(c1, c2, expected):
    v1 = Vector(c1)
    v2 = Vector(c2)
    assert v1 + v2 == expected


@pytest.mark.parametrize("c1, c2, expected",
                         [([1, 1], [2, 2], Vector([-1, -1])),
                          ([1, 1], [1, 2], Vector([0, -1])),
                          ([1, 1], [2, 1], Vector([-1, 0])),
                          ([2, 1], [2, 2], Vector([0, -1]))])
def test_sub_vector(c1, c2, expected):
示例#18
0
def test_add_vector(c1, c2, expected):
    v1 = Vector(c1)
    v2 = Vector(c2)
    assert v1 + v2 == expected
示例#19
0
def test_create_vector():
    v1 = Vector([0, 0])
    assert v1.x == 0
    assert v1.y == 0
示例#20
0
def test_block_try_block_forks(game, human, bot, moves, expected):
    for move in moves:
        game.board.put_stone(Vector(move), human.color)
    game.switch_players()
    game.make_turn(bot.make_move(game))
    assert game.board[Vector(expected)] == Color.white
示例#21
0
def test_block_line_with_4(game, bot, moves, expected):
    for move in moves:
        game.make_turn(Vector(move))
        game.make_turn(bot.make_move(game))
    assert game.board[Vector(expected)] == Color.white
示例#22
0
def test_sub_vector(c1, c2, expected):
    v1 = Vector(c1)
    v2 = Vector(c2)
    assert v1 - v2 == expected