Пример #1
0
def menu():
    fast = False
    if fast:
        board = generate_board(3)
        return Game([Player("p1"), Player("p2")], board)

    players = []
    print(
        '''Entre respectivamente o tamanho da quadra que voce quer usar, um valor de 3 a 10, 
    e o qantidade de jogadores que vao jogar. Minimo 2, maximo 5, para sair digite sair a qualquer momento'''
    )

    while True:
        board_size = int(input('Tamanho do tabuleiro: '))
        if 2 < board_size <= 10:
            break
    while True:
        pos = len(players)
        player_name = input('Nome do jogador ' + (pos + 1).__str__() + ": ")
        players.append(Player(player_name))

        # verifica se o tamanho do tabuleiro é 3 e se tem 2 jogadores e continua o jogo, fica impossivel
        # jogar com mais de dois jogadores no mesmo tabuleiro
        if board_size.__eq__(3) and len(players).__eq__(2):
            break

        if board_size > 3 and len(players) >= 2:
            more = input('Continuar(S/N)? ')
            if more.upper().__eq__("N"):
                break

    board = generate_board(board_size)
    return Game(players, board)
Пример #2
0
    def reset_game(self):
        try:
            self.model = Game(int(self.size.get()), int(self.num_mines.get()))
        except ValueError:
            self.model = Game()

        self.view.reset_view(self.model, self.reveal_field)
Пример #3
0
    def test_game_fire(self, MockShip):
        ship = MockShip()
        ship.is_dead.return_value = False
        rules = Rules(mode='standard', opponent='human')

        player1 = Player('p1')

        player2 = Player('p2')
        player2.ships.append(ship)

        g = Game(1, player1, player2, rules)
        ship.is_hit.return_value = True

        expected = True
        actual = g.fire(Coordinates('a', 1))
        self.assertEqual(expected, actual)

        g = Game(1, player1, player2, rules)
        ship.is_hit.return_value = False

        expected = False
        actual = g.fire(Coordinates('b', 3))
        self.assertEqual(expected, actual)

        expected = False
        actual = g.fire(Coordinates('i', 10))
        self.assertEqual(expected, actual)
Пример #4
0
    def init_game(self, mode):
        game = Game()
        controller = Controller(game)

        ai = AI(game)
        first_player = Player(PieceColor.WHITE, controller,
                              ai if mode == GameMode.AI_VS_HUMAN else None)
        second_player = Player(PieceColor.BLACK, controller,
                               ai if mode == GameMode.HUMAN_VS_AI else None)

        players = [first_player, second_player]

        game_board = GameBoardWidget(game)
        for player in players:
            if player.type == PlayerType.HUMAN:
                game_board.move_receive_from_ui.append(
                    player.move_receive_from_ui_handler)

        if first_player.type == PlayerType.AI:
            first_player.move_complete_event(PieceColor.BLACK)

        Clock.schedule_interval(lambda delta_time: game_board.update(), 0.03)

        self.clear_widgets()

        game_widget = GameWidget(game)
        size = (game_board.width, game_board.height + 50)
        game_widget.size = size
        Window.size = size
        game_widget.set_game_board(game_board)
        self.add_widget(game_widget)
Пример #5
0
def test_npc_interaction():
    """
      start
        |
        w1 <- dialog becomes available
        |
        end
    """
    game = Game('test')
    start = Waypoint(game.graph, 'start')
    w1 = Waypoint(game.graph, 'w1')
    end = Waypoint(game.graph, 'end')
    start.add_destination(w1)
    w1.add_destination(end)
    game.set_start(start)
    npc_dialog = Dialog()
    ds = Mail(npc_dialog.graph, 'test subject', 'test body')
    with pytest.raises(PlayerStateException):
        NonPlayableCharacter('test', 'npc', npc_dialog)
    npc_dialog.set_start(ds)
    npc_dialog.start.waypoints.append(w1)
    game.add_non_playable_character(NonPlayableCharacter('test', 'npc', npc_dialog))
    instance = game.create_new_game()
    instance.add_player(Player('test', 'player'), 'testy', 'mctestpants')
    assert len(instance.npc_states) == 1
    assert ds not in [k for k, _ in instance.player_states[0].inventory.values()]
    interactions = instance.player_states[0].move_to(w1)
    assert len(interactions.keys()) == 1 and len(interactions.values()) == 1
Пример #6
0
def test_create_and_delete_game(wait_for_api, create_clean_db, client):
    # create our game
    game = Game('test')
    start = Waypoint(game.graph, 'start')
    w1 = Waypoint(game.graph, 'w1')
    w2 = Waypoint(game.graph, 'w2', items=['some item'])
    end = Waypoint(game.graph, 'end')
    start.add_destination(w1)
    task = Task(w2, 'test description', 'test text', 'answer')
    w1.add_task(task)
    w2.add_destination(end)
    game.set_start(start)
    # create user
    lg = client.post(
        f"{ROOT_URL}/register", json=default_account
    )
    assert lg.status_code == 201
    token = json.loads(lg.data)
    # convert it to an API object
    game_data = generate_api_game(game)
    lg = client.post(
        f"{ROOT_URL}/games", json=game_data, headers={'X-TOKEN': token}
    )
    assert lg.status_code == 201
    lg = client.get(
        f"{ROOT_URL}/games"
    )
    assert lg.status_code == 200
    assert game.title in [g['title'] for g in lg.data]
Пример #7
0
def test_player_at_another_game(mocker):
    ps, gs = setup()

    data = copy.deepcopy(GAME_DICT)

    # Game starts
    data["state"] = GameState.PLAYING
    gs[1].update(**data)

    data["state"] = GameState.OPEN
    data["uid"] = 2
    data["teams"] = {1: ["Guy"]}
    g2 = Game(playerset=ps, **data)

    gUpd = mocker.Mock()
    ps[1].newCurrentGame.connect(gUpd)

    gs[2] = g2
    gUpd.assert_called_with(ps[1], g2, gs[1])
    gUpd.reset_mock()

    # Test if closing the first game changes player state
    data = copy.deepcopy(GAME_DICT)
    data["state"] = GameState.CLOSED
    gs[1].update(**data)
    assert not gUpd.called
def create(id):
    details = game_data.details(id)
    game = Game(key_name=str(id), genres=[])
    if details:
        game.name = details['name']
        game.genres = details['genres']
    game.put()
Пример #9
0
    def _build_hosted_game(self, main_mod, mapname=None):
        if mapname is None:
            mapname = util.settings.value("fa.games/gamemap", "scmp_007")

        if self._me.player is not None:
            host = self._me.player.login
        else:
            host = "Unknown"

        title = util.settings.value("fa.games/gamename", host + "'s game")
        friends_only = util.settings.value("friends_only", False, type=bool)

        return Game(
            playerset=self._playerset,
            uid=0,  # Mock
            state=GameState.OPEN,  # Mock
            launched_at=None,
            num_players=1,
            max_players=12,
            title=title,
            host=host,
            mapname=mapname,
            map_file_path="",  # Mock
            teams={1: [host]},
            featured_mod=main_mod,
            featured_mod_versions={},
            sim_mods={},
            password_protected=False,  # Filled in later
            visibility=(GameVisibility.FRIENDS
                        if friends_only else GameVisibility.PUBLIC))
Пример #10
0
def test_game_at_missing_player(mocker):
    ps = Playerset()
    gs = Gameset(ps)

    p = Player(**{"id_": 1, "login": "******"})
    ps[p.id] = p
    p = Player(**{"id_": 2, "login": "******"})
    ps[p.id] = p

    data = copy.deepcopy(GAME_DICT)
    g1 = Game(playerset=ps, **data)
    pAdd = mocker.Mock()
    g1.connectedPlayerAdded.connect(pAdd)

    gs[1] = g1
    assert len(g1.players) == 3
    gps = [g1.to_player(n) for n in g1.players if g1.is_connected(n)]
    assert len(gps) == 2
    assert ps[1] in gps
    assert ps[2] in gps

    assert not pAdd.called
    p = Player(**{"id_": 3, "login": "******"})
    ps[p.id] = p
    pAdd.assert_called_with(g1, ps[3])

    gps = [g1.to_player(n) for n in g1.players if g1.is_connected(n)]
    assert len(gps) == 3
    assert ps[3] in gps
    assert g1.is_ingame(ps[3].login)
    assert ps[3].currentGame is g1
Пример #11
0
def test_player_at_game_change(mocker):
    ps = Playerset()
    gs = Gameset(ps)

    p = Player(**{"id_": 1, "login": "******"})
    ps[p.id] = p
    p = Player(**{"id_": 2, "login": "******"})
    ps[p.id] = p
    p = Player(**{"id_": 3, "login": "******"})
    ps[p.id] = p

    data = copy.deepcopy(GAME_DICT)
    g1 = Game(playerset=ps, **data)

    gUpd = mocker.Mock()
    ps[1].newCurrentGame.connect(gUpd)

    gs[1] = g1
    gUpd.assert_called_with(ps[1], g1, None)
    gUpd.reset_mock()

    data["state"] = GameState.PLAYING
    gs[1].update(**data)

    assert not gUpd.called

    data["state"] = GameState.CLOSED
    gs[1].update(**data)
    gUpd.assert_called_with(ps[1], None, g1)
Пример #12
0
def test_simple_graph_generation():
    game = Game('test')
    start = Waypoint(game.graph, 'start')
    end = Waypoint(game.graph, 'end')
    start.add_destination(end)
    assert len(game.graph.nodes) == 2
    assert len(game.graph.edges) == 1
    assert not game.start_is_set()
Пример #13
0
 def test_turn_board_with_lines(self):
     game = Game()
     board = game.gameState.board.copy()
     game.gameState.board[18, 5] = 1
     game.gameState.board[28, 6] = 1
     board[30, 2] = 1
     board[20, 1] = 1
     self.assertEqual(
         turn_board(game.gameState.board).tolist(), board.tolist())
Пример #14
0
    def test_is_game_over(self, MockShip):
        ship = MockShip()
        ship.is_dead.return_value = False
        player1 = Player('p1')

        player2 = Player('p2')
        rules = Rules(mode='standard', opponent='human')

        g = Game(1, player1, player2, rules)
        self.assertTrue(g.is_game_over())

        player1.ships.append(ship)
        g = Game(1, player1, player2, rules)
        self.assertTrue(g.is_game_over())

        player2.ships.append(ship)
        g = Game(1, player1, player2, rules)
        self.assertFalse(g.is_game_over())
Пример #15
0
    def train(self, rounds: int) -> None:
        for i in range(rounds):
            initial_state = self._choose_initial_state()
            # safe, because of acyclic Markov Process
            self._pi[initial_state] = np.random.choice(list(Action))

            game = Game(player_policy=self.policy)
            game_info = game.play_starting_in(initial_state)
            self._update_with(game_info)
Пример #16
0
    def __init__(self):
        self.root = tk.Tk()

        self.size = tk.StringVar()
        self.num_mines = tk.StringVar()
        self.size.set(6)
        self.num_mines.set(3)

        self.model = Game(int(self.size.get()), int(self.num_mines.get()))
        self.view = MainWindow(self.root, self.model, self.reveal_field, self.reset_game, self.size, self.num_mines)
Пример #17
0
def main():
    args = parse_args()
    field_io = FieldIO(FileSerializer())
    field = field_io.load_from_file(args.field)
    game = Game(field)
    ui = UI(game, UISerializer())
    ui.run(args.tick_time, args.confirm)
    if args.save:
        field_io.save_to_file(args.save, game.field)
        print('Field saved.')
Пример #18
0
def test_adding_task_adds_path():
    game = Game('test')
    start = Waypoint(game.graph, 'start')
    end = Waypoint(game.graph, 'end')
    task = Task(end, 'test description', 'test text', 'answer')
    start.add_task(task)
    game.set_start(start)
    assert len(game.graph.nodes) == 2
    assert len(game.graph.edges) == 1
    assert game.start_is_set()
Пример #19
0
    def test_game_next_player(self):
        rules = Rules(mode='standard', opponent='human')

        p1 = Player('p1')
        p2 = Player('p2')

        g = Game(1, p1, p2, rules)

        expected = p2
        actual = g.next_player()
        self.assertEqual(expected, actual)
Пример #20
0
def game():
    """
                  start  (path with dialog)
                  /   \
               w1 (m1) w2 (d1)
                  \   /
                   knot1
                 /  |  \
                w3  w4 w5  <- with task t1,t2,t3
                \   |
                  end <- task from dialog td1
    :return: game with described graph
    """
    #TODO, check interaction model in waypoint
    dialog = Dialog()
    dialog_start = Mail(dialog.graph, 'start sub', 'start body')
    m1 = Mail(dialog.graph, 'second sub', 'second body')
    td1 = Task(None, 'some task 1', 'some task', 'some solution')
    d1 = Speech(dialog.graph, 'content', task=td1)

    game = Game('test')
    start = Waypoint(game.graph, 'start')
    w1 = Waypoint(game.graph, 'w1')
    w2 = Waypoint(game.graph, 'w2')
    knot = Waypoint(game.graph, 'knot')
    w3 = Waypoint(game.graph, 'w3')
    t1 = Task(w3, 'some task 1', 'some task')
    w4 = Waypoint(game.graph, 'w4')
    t2 = Task(w4, 'some task 2', 'some task')
    w5 = Waypoint(game.graph, 'w5')
    t3 = Task(w5, 'some task 3', 'some task')
    end = Waypoint(game.graph, 'end')
    start.add_destination(w1, 1.1)
    start.add_destination(w2)
    w1.add_destination(knot)
    w2.add_destination(knot)
    knot.add_task(t1)
    knot.add_task(t2)
    knot.add_task(t3)
    w3.add_destination(end)
    w4.add_destination(end)
    game.set_start(start)

    dialog_end = Speech(dialog.graph, 'next content', destination=end)
    dialog.set_start(dialog_start)
    dialog_start.add_follow_up(d1)
    dialog_start.add_follow_up(m1)
    dialog_start.waypoints.append(start)
    d1.add_follow_up(dialog_end, None)

    game.add_non_playable_character(NonPlayableCharacter(
        'bob', 'test', dialog))

    return game
Пример #21
0
    def __init__(self, view):
        self.__game = Game()
        self.__view = view

        self.__view.set_info("Next player: {}".format(self.__game.next_player))

        self.__view.connect('cell-clicked', self.on_cell_clicked)
        self.__view.connect('new-game', self.on_new_game)
        self.__view.connect('destroy', Gtk.main_quit)

        self.__view.show_all()
def get_or_create(id):
    game = Game.get_by_key_name(str(id))
    if game:
        return game
    details = game_data.details(id)
    game = Game(key_name=str(id), genres=[])
    if details:
        game.name = details['name']
        game.genres = details['genres']
    game.put()
    return game
Пример #23
0
 def test_allowed_actions_after_by_corner(self):
     game = Game()
     board = game.gameState.board.copy()
     board[26, 4] = 1
     board[30, 5] = 1
     board[33, 6] = 1
     board[38, 6] = 1
     board[37, 7] = 1
     board[36, 7] = 1
     allowed = {(39, 7), (34, 7)}
     self.assertEqual(set(game.gameState.allowed_actions(board, (9, 8))),
                      allowed)
Пример #24
0
    def test_turn_board_with_broad_lines(self):
        game = Game()
        board = game.gameState.board.copy()
        game.gameState.board[4, 0] = 1
        game.gameState.board[42, 0] = 1
        game.gameState.board[6, 7] = 1
        board[44, 7] = 1
        board[6, 7] = 1
        board[42, 0] = 1

        self.assertEqual(
            turn_board(game.gameState.board).tolist(), board.tolist())
Пример #25
0
def new_game():
    print(request.form)
    host_name = 'Host'
    presentation_file = request.files['presentation_file']
    host = Player(host_name)
    game = Game(host)
    game.load_presentation(presentation_file)

    redis_client.set(f'stopwatch.{game.id}', pickle.dumps(epoch()))
    save_game(game)

    return jsonify(game_id=game.id, player_id=host.id)
Пример #26
0
def build_game_with_2maps_winning_picks_team1_and_team3():
    game = Game(None, team1.id_team, team3.id_team, None, 2, 1, team1.id_team,
                3, "Mapa 1", "Mapa 2", "", "", "Mapa 3", team1.actual_rank,
                team3.actual_rank)
    game.team1 = team1
    game.team2 = team3
    map1 = Map(game.id_game, "Mapa 1", 9, 6, 7, 6, 0, 0, 16, 12)
    map2 = Map(game.id_game, "Mapa 2", 8, 7, 8, 4, 0, 0, 16, 11)

    game.maps = [map1, map2]

    return game
Пример #27
0
 def draw_board(self, board):
     lines = self.get_all_lines(board)
     self.set_game_window()
     self.agent = self.bot
     self.env = Game()
     self.board = Board(self.window)
     self.board.draw_board()
     self.board.color_current_point()
     self.board.color_allowable_points()
     self.board.canvas.pack(fill="both", expand=True)
     self.board.draw_lines(lines)
     self.window.mainloop()
Пример #28
0
def play_valid(p1, p2, episodes, random_moves=0):
    """
    plays matches between players to analyse results
    @param p1: player 1
    @param p2: player 2
    @param episodes: number of games
    @param random_moves: number of random moves at the beginning of the match
    @return: dictionary with games results
    """
    env = Game()
    players = {1: p1, -1: p2}
    scores = {
        p1.name: 0,
        p2.name: 0,
        'starting_player': 0,
        'non-starting_player': 0,
    }
    for e in range(int(episodes / 2)):
        log_important('First half, game ', e)
        env.reset()
        env.currentPlayer = 1
        done, result = 0, 0
        turn = 0
        while done == 0:
            move = players[env.currentPlayer].get_move(env, turn, random_moves)
            done, result = env.make_move(move)
            if done == 1:
                scores[players[env.currentPlayer].name] += max(0, result)
                scores[players[-env.currentPlayer].name] += max(0, -result)
            env.change_player()
            turn += 1
    scores['starting_player'] = scores[p1.name] - scores[p2.name]
    scores['non-starting_player'] = int(
        episodes / 2) - scores[p1.name] + scores[p2.name]
    for e in range(int(episodes / 2)):
        log_important('Secound half, game ', e)
        env.reset()
        env.change_player()
        done, result = 0, 0
        turn = 0
        while done == 0:
            move = players[env.currentPlayer].get_move(env, turn, random_moves)
            # print(move[0],'      ',move[1])
            done, result = env.make_move(move)
            if done == 1:
                scores[players[env.currentPlayer].name] += max(0, result)
                scores[players[-env.currentPlayer].name] += max(0, -result)
            env.change_player()
            turn += 1
    scores['starting_player'] += scores[p2.name]
    scores['non-starting_player'] += int(episodes / 2) - scores[p2.name]
    return scores
Пример #29
0
    def test_pickling(self):
        game = Game(PlayerId.ONE, seed=2)
        self.assertEqual(Suit.DIAMONDS, game.game_state.trump)

        actions = [
            # Player TWO wins the first trick. Score: 0-6.
            PlayCardAction(PlayerId.TWO, Card(Suit.HEARTS, CardValue.JACK)),
            PlayCardAction(PlayerId.ONE, Card(Suit.CLUBS, CardValue.KING)),

            # Player TWO closes the talon.
            CloseTheTalonAction(PlayerId.TWO),

            # Player TWO wins the second trick. Score: 0-18.
            PlayCardAction(PlayerId.TWO, Card(Suit.DIAMONDS, CardValue.TEN)),
            PlayCardAction(PlayerId.ONE, Card(Suit.DIAMONDS, CardValue.JACK)),

            # Player TWO wins the third trick. Score: 0-31.
            PlayCardAction(PlayerId.TWO, Card(Suit.HEARTS, CardValue.TEN)),
            PlayCardAction(PlayerId.ONE, Card(Suit.SPADES, CardValue.QUEEN)),

            # Player ONE wins the forth trick. Score: 13-31.
            PlayCardAction(PlayerId.TWO, Card(Suit.CLUBS, CardValue.JACK)),
            PlayCardAction(PlayerId.ONE, Card(Suit.CLUBS, CardValue.ACE)),

            # Player TWO wins the fifth trick. Score: 13-52.
            PlayCardAction(PlayerId.ONE, Card(Suit.SPADES, CardValue.TEN)),
            PlayCardAction(PlayerId.TWO, Card(Suit.SPADES, CardValue.ACE)),

            # Player TWO wins the sixth trick. Score: 13-67.
            PlayCardAction(PlayerId.TWO, Card(Suit.HEARTS, CardValue.ACE)),
            PlayCardAction(PlayerId.ONE, Card(Suit.SPADES, CardValue.KING))
        ]
        for action in actions[:8]:
            game.play_action(action)
        self.assertFalse(game.game_state.is_game_over)
        self.assertEqual(PlayerPair(0, 31), game.game_state.trick_points)
        self.assertFalse(game.game_state.is_to_lead(PlayerId.ONE))
        self.assertFalse(game.game_state.is_to_lead(PlayerId.TWO))

        unpickled_game: Game = loads(dumps(game))
        self.assertEqual(unpickled_game.game_state, game.game_state)
        self.assertFalse(unpickled_game.game_state.is_game_over)
        self.assertFalse(unpickled_game.game_state.is_to_lead(PlayerId.ONE))

        for action in actions[8:]:
            unpickled_game.play_action(action)

        self.assertTrue(unpickled_game.game_state.is_game_over)
        self.assertEqual(PlayerPair(13, 67),
                         unpickled_game.game_state.trick_points)
        self.assertEqual(PlayerPair(0, 3),
                         unpickled_game.game_state.game_points)
Пример #30
0
def get_tags(app_id, name):
    url_tags = 'http://store.steampowered.com/app/%s' % (app_id)
    response_tags = urlfetch.fetch(url_tags, deadline=60).content

    tags = []
    glance_tags = bs(response_tags).find("div", {"class": "glance_tags"})
    if glance_tags:
        tag_elements = glance_tags.findAll("a", {"class": "app_tag"})
        for tag_element in tag_elements:
            tag = tag_element.string.strip()
            tags.append(tag)
            Tag(key_name=tag).put()
    Game(key_name=str(app_id), name=name, tags=tags).put()