Example #1
0
def get_computer_move():
    state = json.load(request.body)
    print(state)
    board_array = state['game_board']
    to_play_id = state['to_play_id']
    current_state = GameState(board_array, to_play_id)
    _, preds, moves = ai_player.get_preds(current_state)
    computer_move = np.argmax(preds)
    board_array[computer_move] = to_play_id
    new_game_state = GameState(board_array, -to_play_id)
    to_play = 'player2' if state['to_play'] == 'player1' else 'player1'
    rv = {
        'player1': state['player1'],
        'player2': state['player2'],
        'game_board': new_game_state.board,
        'endgame': new_game_state.isEndGame,
        'to_play': to_play,
        'legal_moves': new_game_state._allowedActions(),
        'to_play_id': -to_play_id
    }
    if rv[to_play] == 'assisted':
        _, preds, moves = ai_player.get_preds(new_game_state)
        print(preds)
        print(list(np.argpartition(preds, -3)[-3:]))
        rv['legal_moves'] = list(np.argpartition(preds, -3)[-3:])

    return json.dumps(rv)
Example #2
0
def play():
    req = json.load(request.body)
    print(req)
    state = req['current_state']
    board_array = state['game_board']
    board_array[req['move']] = 1 if state['to_play'] == 'player1' else -1
    to_play_id = -state['to_play_id']
    new_game_state = GameState(board_array, to_play_id)
    to_play = 'player2' if state['to_play'] == 'player1' else 'player1'
    rv = {
        'player1': state['player1'],
        'player2': state['player2'],
        'game_board': new_game_state.board,
        'endgame': new_game_state.isEndGame,
        'to_play': to_play,
        'legal_moves': new_game_state._allowedActions(),
        'to_play_id': to_play_id
    }
    if rv[to_play] == 'assisted':
        _, preds, moves = ai_player.get_preds(new_game_state)
        print(preds)
        print(list(np.argpartition(preds, -3)[-3:]))
        rv['legal_moves'] = list(np.argpartition(preds, -3)[-3:])

    return json.dumps(rv)
Example #3
0
    def backFill(self, leaf, value, breadcrumbs):
        lg.logger_mcts.debug('------DOING BACKFILL------')

        currentPlayer = GameState.current_player_from_id(leaf.state_id)

        for edge in breadcrumbs:
            playerTurn = GameState.current_player_from_id(edge.inNode.state_id)
            if playerTurn == currentPlayer:
                direction = 1
            else:
                direction = -1

            edge.stats['N'] = edge.stats['N'] + 1
            edge.stats['W'] = edge.stats['W'] + value * direction
            edge.stats['Q'] = edge.stats['W'] / edge.stats['N']

            lg.logger_mcts.debug(
                'updating edge with value %f for player %d... N = %d, W = %f, Q = %f',
                value * direction, playerTurn, edge.stats['N'],
                edge.stats['W'], edge.stats['Q'])

            if lg.logger_mcts.isEnabledFor(logging.DEBUG):
                lg.logger_mcts.debug(
                    GameState.from_id(edge.outNode.state_id,
                                      config.GRID_SHAPE).render())
Example #4
0
    def test_id(self):
        """Je transforme les victoires de test_victory_true_4 en id"""
        """Puis je crée un GameState à partir de cet id"""
        """Et je teste si le nouveau GameState est égal à l'ancien"""

        for ligne in range(GRID_SHAPE[0] + 1 - NB_TOKENS_VICTORY,
                           GRID_SHAPE[0]):
            for column in range(0, GRID_SHAPE[1] + 1 - NB_TOKENS_VICTORY):
                #On aligne 4 PLAYER_1 dans la diagonale dont le point de départ (bas,gauche) est (ligne,column)
                board = np.full(GRID_SHAPE, NONE, dtype=np.int8)
                for i, j in zip(range(ligne, ligne - NB_TOKENS_VICTORY, -1),
                                range(column, column + NB_TOKENS_VICTORY)):
                    board[i, j] = PLAYER_1
                    board[0:i, j] = PLAYER_2
                    board[i, 0:j] = PLAYER_2
                #On remplit les lignes sous ligne avec PLAYER_2
                board[0:ligne - 3, :] = PLAYER_2
                game_state = GameState(currentPlayer=PLAYER_1, board=board)

                id = game_state.id

                new_game_state = GameState.from_id(id, board.shape)

                # See https://stackoverflow.com/questions/3302949/best-way-to-assert-for-numpy-array-equality
                self.assertIsNone(
                    np.testing.assert_array_equal(new_game_state.board,
                                                  game_state.board))
                self.assertEqual(new_game_state.currentPlayer,
                                 game_state.currentPlayer)
Example #5
0
def route(game_id, data, userid, username):
    command = None
    params = []
    if data:
        command = COMMAND_MAPPINGS.get(data[0].lower())
        if len(data) > 1:
            params = data[1:]
    if command:
        game_state = GameState()
        game_state.load(game_id)
        try:
            return command(commands.Game(game_state), params, userid, username).to_json()
        finally:
            game_state.save(game_id)
    return {
        "text": u"""Usage: /slack command, where commands are:
reset [confirm]:  reset the game if "confirm" is passed as the parameter
setup [add|remove]: display the current setup. If add is the parameter, add rest of text as setup text. If remove, remove the nth item.
pool [reroll|setup]: show the current dice pool. if setup passed as a parameter, setup the initial pool. if reroll passed in, reroll all dice in the pool.
register [name]: register your player name with the game
unregister [name]: unregister yourself or the specified user
status: output current status to channel
take [color number]: take a die from the pool
give [color number] [user]: give a die to another player. use "pool" as player name to return to the pool. 
roll: roll all your dice and give the aggregate score
spend: spend one your dice (so you no longer have it)"""
    }
Example #6
0
    def evaluateLeaf(self, leaf, value, done, breadcrumbs):

        lg.logger_mcts.debug('------EVALUATING LEAF------')

        if not done:

            state = GameState.from_id(leaf.state_id, config.GRID_SHAPE)
            value, probs, allowedActions = self.get_preds(state)
            lg.logger_mcts.debug('PREDICTED VALUE FOR %d: %f',
                                 state.currentPlayer, value)

            for idx, allowedAction in enumerate(allowedActions):
                if allowedAction:
                    newState, _, _ = state.takeAction(idx)
                    if newState.id not in self.mcts.tree:
                        node = mc.Node(newState)
                        self.mcts.addNode(node)
                        lg.logger_mcts.debug('added node...%s...p = %f',
                                             node.state_id, probs[idx])
                    else:
                        node = self.mcts.tree[newState.id]
                        lg.logger_mcts.debug('existing node...%s...',
                                             node.state_id)

                    newEdge = mc.Edge(leaf, node, probs[idx], idx)
                    leaf.edges.append((idx, newEdge))

        else:
            lg.logger_mcts.debug(
                'GAME VALUE FOR %d: %f',
                GameState.current_player_from_id(leaf.state_id), value)

        return ((value, breadcrumbs))
Example #7
0
    def init_new_game(self):
        self.game = GameState(self.display,
                level=([(2, 2)] if self.dev else None))
        self.game.listen('menu-click', self.on_menu_click)
        self.game.listen('game-over', self.on_game_over)

        self.solver.game = self.game

        self.game_over_state.game = self.game
Example #8
0
    def test_victory_false_3(self):

        grid_shape = GRID_SHAPE
        board = np.full(grid_shape, NONE, dtype=np.int8)
        board[0, 3] = PLAYER_1
        game_state = GameState(grid_shape=grid_shape,
                               currentPlayer=PLAYER_1,
                               board=board)
        is_victory = game_state._isVictory(3, PLAYER_1)
        self.assertEqual(is_victory, False)
Example #9
0
def state(slug):
    valid_chars(slug)
    body = request.json
    if body['newOrLoad'] == 'new':
        game_state = GameState.new(slug, body['password'])
    if body['newOrLoad'] == 'load':
        game_state = GameState.load(slug, body['password'])
        if game_state is None:
            raise NotFound("Game %s does not exist" % slug)
    db.save(slug, game_state.data)
    return make_response(game_state)
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Space Invaders')
        self.ui = GUI()
        self.setFixedSize(Constants.WINDOW_WIDTH, Constants.WINDOW_HEIGHT)
        self.setWindowIcon(self.ui.icon)
        self.current_mode = WindowMode.CHOICE_LEVEL

        self.update_timer = QtCore.QTimer()
        self.update_timer.timeout.connect(self.update)
        self.update_timer.start(10)

        self.button_record = Rectangle(90, 430, 430, 53)
        self.button_select = Rectangle(90, 500, 430, 53)

        self.current_level = 0

        try:
            levels = AllLevels(AllLevels.LEVELS_FILE)
        except EmptyLevelsFile as e:
            QtWidgets.QMessageBox.critical(
                self, "Failed to launch the game",
                f"{AllLevels.LEVELS_FILE} is empty. Write levels for the game",
                QtWidgets.QMessageBox.Ok)
            sys.exit(8)
        except Exception as e:
            QtWidgets.QMessageBox.critical(
                self, "Failed to launch the game",
                f"{AllLevels.LEVELS_FILE} not found: \n{e}",
                QtWidgets.QMessageBox.Ok)
            sys.exit(7)

        self.count_levels = levels.get_count_level()

        self.game = GameState(levels, QtCore.QTimer.stop, QtCore.QTimer.start)
        self.game.init_game(**self.get_game_timer())

        self.update_timer = QtCore.QTimer()
        self.update_timer.timeout.connect(self.update_timeout)
        self.update_timer.start(10)

        self.previous_score = self.game.score
        self.previous_ship_live = self.game.ship.live
        self.previous_game_mode = self.game.current_mode

        self.music = Music()
        self.music.play_background()

        self.scoreboard = Scoreboard(self.count_levels)
        self.current_player = None
        self.names_players = self.scoreboard.get_players()

        self.show()
        self.show_name_choice()
Example #11
0
def minimax_alpha_beta(moves_log,
                       state: game.GameState,
                       max_player: MinimaxPlayer,
                       max_depth=5,
                       depth=0,
                       alpha=-INF,
                       beta=INF) -> (int, int):
    winner = state.get_winner()
    if winner is not None:
        # TODO: consider depth
        score = INF - depth if winner is max_player else -INF + depth
        return NO_MOVE, score  # state.eval_state()

    moves = game.to_non_empty(state.get_moves())
    if not moves:
        return NO_MOVE, TIE_SCORE

    moves = list(moves)
    random.shuffle(moves)

    if depth >= max_depth:
        return NO_MOVE, state.eval()

    is_max_player = (depth % 2 == 0)
    best_moves = []
    best_score = None
    for move in moves:
        recursive_score = \
            minimax_alpha_beta(moves_log + [move], state.move(move), max_player, max_depth, depth + 1, alpha, beta)[1]
        if is_max_player:
            if best_score is None or recursive_score > best_score:
                best_score = recursive_score
                best_moves = [move]
                if best_score > alpha:
                    alpha = recursive_score
            elif recursive_score == best_score:
                best_moves.append(move)
        else:
            if best_score is None or recursive_score < best_score:
                best_score = recursive_score
                best_moves = [move]
                if best_score < beta:
                    beta = recursive_score
            elif recursive_score == best_score:
                best_moves.append(move)

        if alpha > beta:
            break

    # print(f'Depth {depth}/{max_depth}: [{",".join(str(i) for i in moves_log)}] | '
    #       f'As {state.get_curr_player().get_char()}, '
    #       f'my best moves are: [{",".join(str(i) for i in best_moves)}] with score: {best_score}')

    return random.choice(best_moves) if best_moves else None, best_score
Example #12
0
class TestHit(unittest.TestCase):
    def setUp(self):
        self.mock_1 = GameState(['AB', 'CD'], 301, 'fake1', True)
        self.mock_1.advance_player()
        self.mock_1.add_dart('T20', 60)
        self.mock_1.add_dart('T20', 60)
        self.res = hit(self.mock_1)
        
    def test_a(self):
        assert len(self.res) > 0
        self.assertIn({'use': False, 'text': 'score_120', 'weight': 150}, self.res)

    def test_b(self):
        for e in self.res:
            self.assertIn(e['text'], texts)
Example #13
0
def test_angle():
    state = GameState(1, 1)
    print "Convert 45 to simple ", state.angle_to_simp(45)
    print "Convert 45 to geo ", state.angle_to_geo(45)
    print "Convert 90 to simple ", state.angle_to_simp(90)
    print "Convert 90 to geo ", state.angle_to_geo(90)
    print "Convert 270 to simple ", state.angle_to_simp(270)
    print "Convert 270 to geo ", state.angle_to_geo(270)
Example #14
0
    def get_action(self, state: GameState, connection):
        # TODO: Doc
        options = state.get_valid_actions()[:]
        for option in options:
            new_state = state.apply_action(option, self.other_type)
            is_term, winner = new_state.is_terminal()
            if is_term and winner > 0:
                return option

            new_state = state.apply_action(option, self.type)
            is_term, winner = new_state.is_terminal()
            if is_term and winner < 0:
                return option
        choice = random.choice(options)
        return choice
Example #15
0
def start(player_token, gm_token, state_file_path, name, token_path):
    logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        level=logging.INFO)

    if Path(state_file_path).exists():
        with open(state_file_path, 'r') as f:
            game_state = json.load(f)

        logger.info('Loaded existing state.')
    else:
        game_state = GameState(name)
        logger.info('Created new state.')

    session.state = game_state
    session.player_token = player_token
    session.gm_token = gm_token
    session.state_file_path = state_file_path

    initialize_handlers()

    with open(token_path, 'r') as f:
        telegram_token = f.read()

    start_server(telegram_token)
Example #16
0
 def test_game_starts_at_default_start(self):
     from game import GameState
     game = new_game(configuration={'default': 'test'})
     test = GameState('test')
     game.add_state(test)
     self.assertEquals('test', game.state)
     self.assertEquals('sms', game.type)
Example #17
0
    def create_phase_loader(self) -> PhaseLoader:
        if not self.tiles:
            location_map = DEFAULT_LOCATIONS
        else:
            location_map = self.load_tiles(self.tiles)

        assert self._location_spec in {LocationTransformer.ROLL_SPEC, LocationTransformer.DIRECT_SPEC}, \
            f'Unknown location spec {self._location_spec}'
        location_transformer = LocationTransformer(self._location_spec, location_map)

        assert 0 < len(self.players) == len(self.cards) <= 5, 'Improper number of players/cards'
        assert len(set(self.players)) == len(self.players), 'Players not unique'
        player_hands = dict(zip(self.players, self.cards))

        assert self.governor_location is not None and self.smuggler_location is not None, \
            'Missing location of governor or smuggler'
        governor_location = location_transformer.apply(self.governor_location)
        smuggler_location = location_transformer.apply(self.smuggler_location)

        assert sum(self.small_demand.values()) == sum(self.large_demand.values()) == 5, 'Missing large or small demand'

        game_state = GameState(
            self.players,
            location_map,
            self.small_demand,
            self.large_demand,
            governor_location,
            smuggler_location,
            player_hands,
        )

        return PhaseLoader(game_state, location_transformer)
Example #18
0
def harvest():
    data = request.json  # data={slug,x,y,password}
    game_state = GameState.load(data['slug'], data['password'])
    message = game_state.harvest(data['x'], data['y'])
    game_state.add_recipes()
    db.save(data['slug'], game_state.data)
    return make_response(game_state, message)
Example #19
0
    def test_act_game_mid_3(self):
        """PLAYER_2 should chose action 4, in order to win"""
        """Because whatever PLAYER_1 does after that, PLAYER_2 wins"""

        agent = self.init_random_agent(mcts_sims=5000)

        board = np.full(config.GRID_SHAPE, config.NONE, dtype=np.int8)
        # X = PLAYER_1 , O = PLAYER_2
        #['-', '-', '-', '-', '-', '-', '-']
        #['-', '-', '-', '-', '-', '-', '-']
        #['-', '-', '-', 'X', '-', '-', '-']
        #['-', '-', '-', 'O', '-', '-', '-']
        #['X', 'X', '-', 'X', '-', '-', '-']
        #['X', 'O', '-', 'O', '-', 'O', '-']
        board[0,
              0] = board[1,
                         0] = board[1,
                                    1] = board[1,
                                               3] = board[3,
                                                          3] = config.PLAYER_1
        board[0, 1] = board[0, 3] = board[2, 3] = board[0, 5] = config.PLAYER_2

        game_state = GameState(grid_shape=config.GRID_SHAPE,
                               currentPlayer=config.PLAYER_2,
                               board=board)
        # act(game_state, 1) : learning mode
        # act(game_state, 0) : deterministic
        action, pi, MCTS_value, NN_value = agent.act(game_state, 1)

        self.assertEqual(action, 4)
        self.assertNotEqual(MCTS_value, config.VALUE_VICTORY)
Example #20
0
 def is_winner(self, player: str) -> bool:
     """ Check if player is the winner
     """
     enemy = GameState(player).get_next_player()
     return self.is_over(self.current_state)\
         and self.current_state.hands[enemy][LEFT_HAND] == 0 \
         and self.current_state.hands[enemy][RIGHT_HAND] == 0
Example #21
0
def unlock():
    data = request.json  # data={slug,x,y,password}
    game_state = GameState.load(data['slug'], data['password'])
    message = game_state.unlock(data['x'], data['y'])
    game_state.check_cash()
    db.save(data['slug'], game_state.data)
    return make_response(game_state, message)
Example #22
0
 def test_overharvest(self):
     slug = "TEST" + uuid.uuid4().hex
     gs = GameState.new(slug, 'pwd')
     recipe_id = CONFIG.general['firstRecipe']
     seed_id = CONFIG.recipes[recipe_id]['seedId']
     seed_data = CONFIG.seeds[seed_id]
     gs.buy(recipe_id)
     gs.sow(seed_id, 0, 0)
     plot = gs.get_plot(0, 0)
     plot['sowTime'] -= seed_data[
         'harvestTimeSeconds'] * 1000 + 3000  # set plant time to long enough ago that we can harvest
     cash_before = gs.data['resources'][CONFIG.CASH_RESOURCE]
     gs.data['seedCounts'][seed_id] = CONFIG.general['max_seed_count']
     msg = gs.harvest(0, 0)
     # hacky way to extract number of seeds harvested
     seeds_generated = seed_data['seed']
     if 'Got ' in msg:
         seeds_generated += int(msg.split('Got ')[1].split()[0])
     cash_after = gs.data['resources'][CONFIG.CASH_RESOURCE]
     expected_cash_after = cash_before + seed_data['yield'][
         CONFIG.CASH_RESOURCE] + seeds_generated * seed_data['sellCost']
     self.assertEqual(
         cash_after, expected_cash_after,
         "Did not get the correct amount of money when breaking seed limit.  Got $%s, expected $%s"
         % (cash_after, expected_cash_after))
Example #23
0
def _game_state(board):
    return GameState(board=board,
                     offense=None,
                     defense=None,
                     turn_count=1,
                     move_count=1,
                     to_move=None)
Example #24
0
def sell():
    data = request.json  # data={slug,seed,password}
    game_state = GameState.load(data['slug'], data['password'])
    message = game_state.sell(data['seed'])
    game_state.check_cash()
    db.save(data['slug'], game_state.data)
    return make_response(game_state, message)
def board_demo():
    gs = GameState()

    zidaan_player = gs.players['Zidaan']

    zidaan_player.create_unit(Worker, location=3)
    zidaan_player.create_unit(Worker, location=5)
    zidaan_player.create_unit(Combat, location=0)
    zidaan_player.create_unit(Combat, location=11)
    zidaan_player.create_unit(Hero, location=10)

    print("\n=============== BOARD DEMO ===============")
    print("\nZidaan Resource Layout")
    zidaan_player.board.display('board')

    print("\nZidaan Unit Layout")
    zidaan_player.board.display('units')

    print("\nPlayer Resource Count BEFORE Gathering")
    zidaan_player.display_resource_count()

    print("\nPlayer Resource Count AFTER Gathering")
    zidaan_player.gather_resources()
    zidaan_player.display_resource_count()
    print("")
 def state_value(self, state: GameState) -> float:
     """Return the probability of the state being winning from the neural network"""
     prob_distribution = self.neural_network.predict_proba([state.vector_representation()])[0]
     # The first value in prob_distribution is the probability of the value being -1
     # and the second is the probability of the value being 1
     if self.is_player1:
         return prob_distribution[1]
     return prob_distribution[0]
Example #27
0
    def __init__(self, model):
        if model is None:  #create new model
            # init
            garbage = GameState()
            shape = garbage.board.shape
            output_size = garbage.action_size()
            del garbage

            # Neural net
            input_board = Input(shape=shape)
            input_board_reshaped = Reshape(
                (shape[0], shape[1], 1))(input_board)

            conv1 = Activation('relu')(BatchNormalization(axis=3)(
                Conv2D(nnet_args.filters, (4, 4),
                       padding='same')(input_board_reshaped)))
            conv2 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv1)))
            conv3 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv2)))
            conv4 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv3)))

            #conv4 -> pi
            conv_pi = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.pi_filters, (1, 1))(conv4)))
            conv_pi_flat = Flatten()(conv_pi)
            pi = Dense(output_size, activation='softmax',
                       name='pi')(conv_pi_flat)

            #conv4 -> v
            conv_v = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.v_filters, (1, 1))(conv4)))
            conv_v_flat = Flatten()(conv_v)
            hidden_v = Dense(nnet_args.hidden_dense,
                             activation='relu')(conv_v_flat)
            v = Dense(1, activation='sigmoid', name='v')(hidden_v)

            self.model = Model(inputs=input_board, outputs=[pi, v])
            self.model.compile(
                loss=['categorical_crossentropy', 'mean_squared_error'],
                optimizer=Adam(nnet_args.lr))  #maybe todo loss function

        else:
            self.model = load_model(global_args.save_dir + str(model) + '.h5')
Example #28
0
class Game:
    """
    The core of the application.
    """
    def __init__(self, layout, agents, display_class, turn=AgentRole.Mr_X):
        self.gameState = GameState(GameStateData(layout, agents))
        self.turn = turn
        # create a new <type>+Display object
        self.display = display_class(self.gameState.data)
        self.MOD = len(agents)  # number of players

    def run(self):
        """
        The main loop of the application.
        """
        self.display.start()
        counter = 0

        while self.gameState.isEndState(self.turn) == (False, None, ""):
            # ask for an action and create the new game state
            self.display.wait()

            new_action = self.gameState.data.getAgent(counter).getAction(
                self.gameState, self.display)

            if not new_action is None:  # if there is a possible action, do it
                self.gameState = self.gameState.generateSuccessor(
                    counter, new_action)
            else:
                self.display.wait()

            # update the display
            self.display.update(self.gameState.data)

            self.display.wait()
            # update the player turn
            counter += 1
            counter = counter % self.MOD
            self.turn = AgentRole.Mr_X if counter == 0 else AgentRole.COP

        # end of the main while loop
        self.display.showMessage("GAME OVER\n\n" +
                                 self.gameState.isEndState(self.turn)[2])
        self.display.waitQuit()
        self.display.finish()
Example #29
0
def recipe():
    data = request.json  # data={slug,password}
    game_state = GameState.load(data['slug'], data['password'])

    known_recipes = {}
    for recipe_id in CONFIG.recipes:
        if game_state.is_known_recipe(recipe_id):
            known_recipes[recipe_id] = CONFIG.recipes[recipe_id]
    return make_response(game_state, recipes=known_recipes)
Example #30
0
    def test_victory_true_2(self):
        """Victoires en colonne"""

        grid_shape = GRID_SHAPE

        for ligne in range(0, GRID_SHAPE[0] + 1 - NB_TOKENS_VICTORY):
            for column in range(0, GRID_SHAPE[1]):
                #On met toutes les façons d'aligner 4 PLAYER_1 dans la colonne column
                board = np.full(grid_shape, NONE, dtype=np.int8)
                board[ligne:ligne + NB_TOKENS_VICTORY, column] = PLAYER_1
                #On remplit les lignes sous ligne avec PLAYER_2
                board[0:ligne, :] = PLAYER_2
                game_state = GameState(grid_shape=grid_shape,
                                       currentPlayer=PLAYER_1,
                                       board=board)

                is_victory = game_state._isVictory(column, PLAYER_1)
                self.assertEqual(is_victory, True)
Example #31
0
def test_coord():
    state = GameState(1, 1)
    pt = [0, 0]
    state.pt_to_geo(pt)
    print "origin ", pt
    pt = [1, 0]
    state.pt_to_geo(pt)
    print "x limit ", pt
    pt = [0, 1]
    state.pt_to_geo(pt)
    print "y limit ", pt
Example #32
0
def test_angle():
    state = GameState(1,1)
    print "Convert 45 to simple ", state.angle_to_simp(45)
    print "Convert 45 to geo ", state.angle_to_geo(45)
    print "Convert 90 to simple ", state.angle_to_simp(90)
    print "Convert 90 to geo ", state.angle_to_geo(90)
    print "Convert 270 to simple ", state.angle_to_simp(270)
    print "Convert 270 to geo ", state.angle_to_geo(270)
Example #33
0
    def __init__(self, game_state: GameState, move: int, parent):
        self.game_state = game_state
        self.move = move
        self.parent = parent
        self.is_expanded = False
        self.is_terminal = game_state.get_result() is not None
        self.children = DictWithDefault(lambda move: UCTNode(
            self.game_state.play(move), move, parent=self))
        self.child_priors = np.zeros(
            game_state.get_actions_size(), dtype=np.float32)
        self.child_total_value = np.zeros(
            game_state.get_actions_size(), dtype=np.float32)
        self.child_number_visits = np.zeros(
            game_state.get_actions_size(), dtype=np.int32)
        self.child_player_changed = np.ones(
            game_state.get_actions_size(), dtype=np.int32)

        if tree_stats_enabled:
            self.deepness = parent.deepness + 1
class TestSounds(unittest.TestCase):
    def setUp(self):
        self.mock_1 = GameState(['AB', 'CD'], 301, 'fake1', True)
        self.mock_1.advance_player()
        self.mock_1.add_dart('T20', 60)
        self.mock_1.add_dart('T20', 60)
        self.snd = ISATSounds(test=True)

    def test_events_0(self):
        methods = ['DartStuck', 'ManualNextPlayer']
        for m in methods:
            getattr(self.snd, m)()

    def test_events_1(self):
        methods = ['FrameStarted']
        for m in methods:
            getattr(self.snd, m)(self.mock_1)        

    def test_events_2(self):
        methods = ['Hit', 'HitBust', 'HitWinner', 'EnterHold']
        for m in methods:
            getattr(self.snd, m)(self.mock_1, 'T20')    
Example #35
0
def test_coord():
    state = GameState(1,1)
    pt = [0, 0]
    state.pt_to_geo(pt)
    print "origin ", pt
    pt = [1, 0]
    state.pt_to_geo(pt)
    print "x limit ", pt
    pt = [0, 1]
    state.pt_to_geo(pt)
    print "y limit ", pt
Example #36
0
 def process_message(self):
     '''
     
     Recieve xml data as parameter and calls appropriate methods 
     for specific type of messges
     '''
             
     messageType = self.root.tag
     
     if messageType == "ChatMessage":
         self.messageDispley.insert(END,self.root[0].text+'\n')
         # if game is full we receive message and set shared object canJoin to false 
         if self.root[0].text.startswith('Unable to join'):
             print "SANJA"
             self.canJoin = False
             #unable to join massage processed so enable joinEvent, 
             self.joinEvent.set()
             
         #trying to start game ****TO BE CHANGED***
         if self.root[0].text.startswith('Start game'):
             self.game = None
             self.gameThread = thread.start_new_thread(self.start_game, (2,))
             
     elif messageType == "ListOfGames":
         #****Mora posebna metoda koja nema parametre jedino tako radi***
         self.list_all_games(self.gameList)
     elif messageType == "ListOfPlayers":
         
         self.list_all_games(self.playersList)
         #if there is more then tow players in game enable startGameButton
         if len(self.playersList.get(0, END)) > 1:
             self.startGameButton.config(state=NORMAL)
      
     elif messageType == "GameState":
         if self.initialGameState:
             self.gameStateEvent.clear()
             self.game = GameState(self.root,self.client.comSocket.getsockname()[1])
             self.gameStateEvent.set()
             self.initialGameState = False
         else:
            
             self.game.changeGameState(self.root)
             print str(self.game.playersList[self.game.ourIndex].fingersRight) + '->' + self.game.playersList[self.game.ourIndex].playerName
             
         
     else:
         print "Error while processing massages"
Example #37
0
 def __init__(self, parent, image_repository):
     super(Board, self).__init__(parent)
     self.started = True
     self.paused = False
     self.image_repository = image_repository
     self.config = Config.get()
     self.size = 50
     self.grid = Grid.random(self.config.properties['board_width'], self.config.properties['board_height'],
                             self.config.properties['rock_count'], self.config.properties['diamond_count'])
     self.game_state = GameState(self.grid, self.grid.cells[1][1], self)
     for x in range(self.grid.width):
         for y in range(self.grid.height):
             self.grid.cells[x][y].game_state = self.game_state
     self.initUI()
     self.timer = QtCore.QTimer()
     self.timer.timeout.connect(self.update_game)
     self.timer.start(100)
Example #38
0
 def setUp(self):
     self.mock_1 = GameState(['AB', 'CD'], 301, 'fake1', True)
     self.mock_1.advance_player()
     self.mock_1.add_dart('T20', 60)
     self.mock_1.add_dart('T20', 60)
     self.res = hit(self.mock_1)
Example #39
0
#!/usr/bin/env python
import sys
from eval import I, is_int
from game import GameState

#DEBUG = sys.argv[1] == '0'
DEBUG = False

g= GameState(sys.argv[1],debug=DEBUG,eval_=True)
g.start()

Turn=g.turn



def buildno(n,m=0):
	if n==m:
		if m==0:
			return ['zero']
		else:
			return []
	elif (n%2==0) and ((m==0) or (n/m>=2)):
		return ['dbl']+buildno(n/2,m)
	else:
		return ['succ']+buildno(n-1,m)

def log(msg, s='x'):
	if DEBUG: print >>sys.stderr, s*70, 'OP', msg

class comb(int):
	def __init__(self,i,clear=False):
Example #40
0
 def test_put(self):
     mf = GameState({})
     mf.put('foo','bar',{'quux': True})
     self.assertEquals({'foo': {'bar': {'quux': True}}},mf.data)
Example #41
0
 def test_delete(self):
     mf = GameState({'a': {'b':True}})
     mf.delete('a','b')
     self.assertEquals(mf.data, {'a': {}})
Example #42
0
class App(object):

    def __init__(self, dev=False):
        self.dev = dev

        pygame.init()

        self.display = pygame.display.set_mode((320, 420))
        pygame.display.set_caption('Lights poof!')

        self.init_bg_surface()

        self.solver = SolverState(self.display)
        self.solver.listen('done-solving', self.on_solver_done)

        self.game_over_state = GameOverState(self.display)
        self.game_over_state.listen('resume-click', self.on_resume_click)
        self.game_over_state.listen('new-click', self.on_new_click)
        self.game_over_state.listen('restart-click', self.on_restart_click)
        self.game_over_state.listen('solve-click', self.on_solve_click)

        self.init_new_game()

        self.menu = MenuState(self.display)
        self.menu.listen('resume-click', self.on_resume_click)
        self.menu.listen('new-click', self.on_new_click)
        self.menu.listen('restart-click', self.on_restart_click)
        self.menu.listen('solve-click', self.on_solve_click)

        self.current_state = None
        self.set_state(self.game)

    def main_loop(self):

        while True:

            for event in pygame.event.get():
                self.handle(event)

            self.draw()
            time.sleep(.01)

    def draw(self):
        # Draw background.
        self.display.blit(self.bg_surface, (0, 0))

        # Draw the state.
        self.current_state.draw()

        # Update the display.
        pygame.display.update()

    def handle(self, event):

        if event.type == QUIT or (event.type == KEYUP and event.key == 27):
            pygame.quit()
            sys.exit()

        else:
            self.current_state.handle(event)

    def init_bg_surface(self):
        bg_image = pygame.image.load('img/bg.png')
        self.bg_surface = pygame.Surface(self.display.get_size())

        x = y = 0
        image_width, image_height = bg_image.get_size()
        bg_width, bg_height = self.display.get_size()

        while x < bg_width:
            y = 0

            while y < bg_height:
                self.bg_surface.blit(bg_image, (x, y))
                y += image_height

            x += image_width

    def init_new_game(self):
        self.game = GameState(self.display,
                level=([(2, 2)] if self.dev else None))
        self.game.listen('menu-click', self.on_menu_click)
        self.game.listen('game-over', self.on_game_over)

        self.solver.game = self.game

        self.game_over_state.game = self.game

    def set_state(self, state):
        old_state = self.current_state
        self.current_state = state

        if hasattr(old_state, 'deactivated'):
            old_state.deactivated()

        if hasattr(self.current_state, 'activated'):
            self.current_state.activated()

    def on_menu_click(self, event):
        self.set_state(self.menu)

    def on_game_over(self, event):
        self.set_state(self.game_over_state)

    def on_resume_click(self, event):
        self.set_state(self.game)

    def on_new_click(self, event):
        self.init_new_game()
        self.set_state(self.game)

    def on_restart_click(self, event):
        self.game.restart()
        self.set_state(self.game)

    def on_solve_click(self, event):
        self.set_state(self.solver)

    def on_solver_done(self, event):
        self.set_state(self.game)
Example #43
0
 def test_get(self):
     mf = GameState({'foo': {'bar': {'quux': True}}})
     self.assertEquals({'quux': True}, mf.get('foo','bar'))
Example #44
0
class Board(QtGui.QFrame):

    status_bar = QtCore.pyqtSignal(str)

    def __init__(self, parent, image_repository):
        super(Board, self).__init__(parent)
        self.started = True
        self.paused = False
        self.image_repository = image_repository
        self.config = Config.get()
        self.size = 50
        self.grid = Grid.random(self.config.properties['board_width'], self.config.properties['board_height'],
                                self.config.properties['rock_count'], self.config.properties['diamond_count'])
        self.game_state = GameState(self.grid, self.grid.cells[1][1], self)
        for x in range(self.grid.width):
            for y in range(self.grid.height):
                self.grid.cells[x][y].game_state = self.game_state
        self.initUI()
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.update_game)
        self.timer.start(100)

    def initUI(self):
        pal = QtGui.QPalette(self.palette())
        pal.setColor(QtGui.QPalette.Background, QtCore.Qt.black)
        self.setAutoFillBackground(True)
        self.setPalette(pal)

        self.show()

    def update_game(self):
        if not self.paused:
            self.game_state.update()
            if self.started and self.game_state.score < self.config.properties['diamond_count']:
                self.status_bar.emit("Score: " + str(self.game_state.score) +
                                     "/" + str(self.config.properties['diamond_count']))
            elif self.started and self.game_state.score == self.config.properties['diamond_count']:
                self.status_bar.emit("You win!!!")
                self.timer.stop()
            else:
                self.status_bar.emit("Game over")
                self.timer.stop()
            self.update()
        else:
            self.status_bar.emit("Paused")

    def paintEvent(self, e):

        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawBrushes(qp)
        qp.end()

    def drawBrushes(self, qp):
        for x in range(self.grid.width):
            for y in range(self.grid.height):
                if self.grid.cells[x][y]:
                    pixmap = self.image_repository.get_pixmap(self.grid.cells[x][y].PIXMAP,
                                                              self.size, self.size)
                    qp.drawPixmap((x - self.game_state.camera_x + 9) * self.size,
                                  (y - self.game_state.camera_y + 7) * self.size, pixmap)
        pixmap = self.image_repository.get_pixmap('gameHero', self.size, self.size)
        qp.drawPixmap((self.game_state.hero.x - self.game_state.camera_x + 9) * self.size,
                      (self.game_state.hero.y - self.game_state.camera_y + 7) * self.size, pixmap)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_P:
            self.paused = not self.paused

        if not self.paused:
            try:
                self.game_state.player_displacement = {
                    QtCore.Qt.Key_Left: (-1, 0),
                    QtCore.Qt.Key_Right: (1, 0),
                    QtCore.Qt.Key_Down: (0, 1),
                    QtCore.Qt.Key_Up: (0, -1)
                }[event.key()]
            except:
                pass
Example #45
0
		try:
			player_num = int(raw_input(players_prompt))
		except:
			print "Please enter a value that makes sense."

	players = []
	for i in range(0, player_num):
		pname = raw_input(name_prompt)
		pcolor = raw_input(color_prompt)
		player = Player(pname, pcolor)
		players.append(player)

	generator = MapGenerator()
	game_map = generator.create_map('dirt', 40)

	state = GameState(game_map=game_map, players=players)

	print "\nBeginning deployment phase"
	for i in range(0, player_num):
		print player_deployments[i] % players[i].name
		deploy_units(state, players[i])

	while True:
		for player in state.players:
			player.begin_turn()
			display_turn_menu(state, player)
			if not player.is_alive():
				game_over(state, player)
		state.play()

Example #46
0
class ChatMainForm(Template):
    '''
    Class for graphic presentation of chat client.
    Main form with chat, list of created games, button for creating game.
    If you created game button becomes start game.
    ChatMainForm form with textbox, entry, listbox and button.
    '''
  
    def __init__(self, parent,name):
        '''
        Initialize all gui components...
        
        parent represents root of tk window
        name is  name that client entered
        
        Creates instance of client class and starts thread for receiving messages
        '''
        Template.__init__(self, parent)  
        
        self.client = ChatClient.ChatClient()
        #where to put try block here or in connect method
        self.client.connect_to_server()
          
        self.end = False #for stopping receiving thread 
        self.name = name
      
        #start new thread
        self.thread=thread.start_new_thread( self.receive_server_messages, (1,) )#!!!doesn't work without second argument
        
        #send first message with name
        self.client.send_message(self.name)
        
        self.parent = parent  
        
        
             
        self.initUI()
        
    def initUI(self):
        '''
        Initialize all gui components
        '''
        
        self.nameText = Label(self, text="Chat")
        self.nameText.place(x=270, y=10)
        self.nameText3 = Label(self, text="Players in game")
        self.nameText3.place(x=50,y=10)
        self.nameText2 = Label(self, text="Game list            ")# **********Popravi ovo!!!!!!********
        self.nameText2.place(x=50,y=10)
       
        
        #display chat messages
        self.messageDispley = Text(self,font=tkFont.Font(family="Calibri",size=10),width=28,height=13)
        self.messageDispley.place(x=270, y=40)
        self.messageDispley.insert(END,"Welcome...\n")
        
        #write text messages
        self.message = StringVar()
        self.messageText =Entry(self, textvariable=self.message, width=28)
        self.messageText.place(x=270, y=275)
        
        #send chat massage
        self.nameButton = Button(self, text="Send", width=26, command=self.send_chat_message)
        self.nameButton.place(x=270, y=300)
        
        #lists players in specific game
        self.playersList = Listbox(self)
        self.playersList.place(x=50, y=30)
        
        #lists all games
        self.gameList = Listbox(self)
        self.gameList.place(x=50, y=30)

        #join created game
        self.joinGameButton = Button(self,text="Join game",width=15, command=self.send_join_message)
        self.joinGameButton.place(x=50, y=230)
        
        #start created game
        self.startGameButton = Button(self,text="Start game",width=15, command=self.send_game_start_message)
        self.startGameButton.place(x=50, y=270)
        
        #create new game
        self.createGameButton = Button(self,text="Create new game",width=15, command=self.create_new_game)
        self.createGameButton.place(x=50, y=270)
        
     
    def send_game_start_message(self):
        '''
        Sends signal to server that game is starting
        '''        
        self.startGameButton.config(state=DISABLED)
        self.client.send_message("Start game")
        
    def send_join_message(self):
        '''
        Hides 'create new game' and 'Join game'  buttons and 
        shows 'Players list' listbox.
        Send message with selected game to server
        '''
        #first we think you can join
        self.canJoin = True
        
        items = self.gameList.curselection()  
        #if nothing is selected
        if items == tuple():
            return
        # creating xml document to be send
        root2 = etree.Element("JoinGame")
        ge = etree.SubElement(root2, "game").text =  self.gameList.get(items[0])  
        
        self.client.send_message(etree.tostring(root2))
        #join massage send 
        self.joinEvent.clear()
        #first receive_server_messages thread needs to finish processing message from server        
        self.joinEvent.wait()
        print "BUHA"
        #if we don't receive message from server we hide fields 
        if self.canJoin:
            self.joinGameButton.place_forget()
            self.createGameButton.place_forget()
            self.gameList.place_forget()
            self.nameText2.place_forget()
            self.startGameButton.place_forget()
                 
    def create_new_game(self):
        '''
        Hides 'create new game' and 'Join game'  buttons and 
        shows 'Start game' button and 'Players list' listbox.
        '''
        self.joinGameButton.place_forget()
        self.createGameButton.place_forget()
        self.gameList.place_forget()
        self.nameText2.place_forget()
        self.startGameButton.place(x=50, y=270)
        #can't start until somebody joins
        self.startGameButton.config(state=DISABLED)
        self.client.send_message("Create game")
        
         
    def send_chat_message(self):
        '''
        sends chat message to server
        if message is 'Bye' ends program**to be changed**
         
        '''
        
        # creating xml document to be send
        root2 = etree.Element("ChatMessage")
        etree.SubElement(root2, "message").text = self.message.get()
        
        self.client.send_message(etree.tostring(root2))
        
        if self.message.get() =='Bye':
            print 'sss'
            self.client.comSocket.close
            self.end = True
            self.parent.destroy()   
                     
        self.message.set('')   
        
    
    def find_next_player_index(self,currentPlayerIndex):
        '''
        finds index of next player on turn in playersList
        '''
        index = currentPlayerIndex + 1
        if index == len(self.game.playersList):
            index = 0
        
        while index != currentPlayerIndex:
            #print self.game.playersList[index].isOut
            #print type(self.game.playersList[index].isOut)
            if index ==  len(self.game.playersList):
                index = 0
            if str(self.game.playersList[index].isOut) == 'false':
                #print 'aaaaaaaaa'
                break
            else:
                index += 1;
        #print index
        return index
            
   
    def start_game(self,id):
        
        try:
            white = (255, 255, 255)
            # Call this function so the Pygame library can initialize itself
            pygame.init()
            # Create an 800x600 sized screen
            self.screen = pygame.display.set_mode([800, 600])
            # This sets the name of the window
            pygame.display.set_caption('Fingers game')
            clock = pygame.time.Clock()
            done = False
            firstClick = True
            secondClick = False
            # waits until process_message finish with game object   
            self.gameStateEvent.wait()
                     
            currentPlayer = self.game.playersList[self.game.ourIndex];
            ourField = currentPlayer.field
            nextField = None
                         
            
            hitting = None
            hitted  = None
          
            print "AAAAAAAAAAA"
            while done == False:
              
                clock.tick(10)
                nextIndex = self.find_next_player_index(self.game.ourIndex)
                nextPlayer = self.game.playersList[nextIndex]
                nextField = nextPlayer.field
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        #enable all filed for choosing game
                      
                        self.createGameButton.place(x=50, y=270)
                        self.joinGameButton.place(x=50, y=230)
                        self.nameText2.place(x=50,y=10)
                        self.gameList.place(x=50, y=30)
                        self.initialGameState = True
                        self.game = None
                        
                        self.client.send_message("QUIT")
                        pygame.quit()
                    
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        x, y = event.pos
                        # if game is over we can't play
                       
                        if self.game.gameOver == 'false':
                        
                            if self.client.comSocket.getsockname()[1] == self.game.playerTurn:
                                if firstClick:
                                    # check if left hand picture is clicked
                                    if ourField.image1.get_rect(center=ourField.get_centers()[0]).collidepoint(x, y):
                                        hitting = 'left'
                                        firstClick = False
                                        secondClick = True
                                    # check if right hand picture is clicked
                                    elif ourField.image2.get_rect(center=ourField.get_centers()[1]).collidepoint(x, y):
                                        hitting = 'right'
                                        firstClick = False
                                        secondClick = True
                                elif secondClick:
                                    # check if left hand picture is clicked
                                    if nextField.image1.get_rect(center=nextField.get_centers()[0]).collidepoint(x, y) and nextPlayer.fingersLeft != 0:
                                        hitted = 'left'
                                        secondClick = False
                                        #this turn over reset firstClick and secondClick
                                        firstClick = True
                                        secondClick = False
                                        
                                        self.send_move_message(hitting, hitted)
                                    # check if right hand picture is clicked
                                    elif nextField.image2.get_rect(center=nextField.get_centers()[1]).collidepoint(x, y) and nextPlayer.fingersRight != 0:
                                        
                                        hitted = 'right'
                                        secondClick = False
                                        #this turn over reset firstClick and secondClick
                                        firstClick = True
                                        secondClick = False
                                        self.send_move_message(hitting, hitted)
                                    #check if second hand is from same player and if separation is possible
                                    elif ourField.image1.get_rect(center=ourField.get_centers()[0]).collidepoint(x, y):
                                                                            
                                        if currentPlayer.fingersRight == 0 and (currentPlayer.fingersLeft == 2 or currentPlayer.fingersLeft == 4):                                       
                                            hitted = 'separation'
                                            secondClick = False 
                                            print "SANJA"
                                            #this turn over reset firstClick and secondClick
                                            firstClick = True
                                            secondClick = False
                                            self.send_move_message(hitting, hitted)
                                        else:
                                            firstClick = True
                                    elif ourField.image2.get_rect(center=ourField.get_centers()[1]).collidepoint(x, y):
                                        print "BUHA1"
                                        print currentPlayer.fingersLeft
                                        
                                        if currentPlayer.fingersLeft == 0 and (currentPlayer.fingersRight== 2 or currentPlayer.fingersRight == 4):                                       
                                            print "SANJA"
                                            hitted = 'separation'
                                            secondClick = False 
                                            #this turn over reset firstClick and secondClick
                                            firstClick = True
                                            secondClick = False
                                            self.send_move_message(hitting, hitted)
                                        else:
                                            firstClick = True
                                    
                                    
                                                                
                       
                #write text on screen
                myfont = pygame.font.SysFont("Comic Sans MS", 20)
                winnerFont = pygame.font.SysFont("Comic Sans MS", 36)
                #refresh screen
                self.screen.fill((0, 0, 0))
                
                if self.game.gameOver == 'true':
                    if not self.all_out():
                        labelWinner = winnerFont.render("**** Game over ****", 1, white)
                        labelWinner2 = winnerFont.render("**** somebody left :( *****", 1, white)
                    else:
                        labelWinner = winnerFont.render("*****Winner is " + self.return_winner_name() + " *****", 1, white)
                        labelWinner2 = winnerFont.render(" ", 1, white)
                    self.screen.blit(labelWinner, (180, 220))
                    self.screen.blit(labelWinner2, (180, 250))
                label1 = myfont.render("You: " + self.game.playersList[self.game.ourIndex].playerName, 1, white)
                label2 = myfont.render("Players turn: " + self.game.playersList[self.game.find_index(self.game.playerTurn)].playerName, 1, white)
                
                #add text
                self.screen.blit(label1, (40, 450))
                self.screen.blit(label2, (40, 480))       
                #draw hands         
                self.game.draw_state(self.screen)
                pygame.display.flip()
                
        except:
            traceback.print_exc()
            
    
    def all_out(self):
        '''
        checks if only one player
        is left in game
        '''
        return len([x for x in self.game.playersList if x.isOut == 'false']) == 1
    
    def return_winner_name(self):
        '''
        returns winers name
        '''
        return next(x.playerName for x in self.game.playersList if x.isOut == 'false')
    
    def send_move_message(self,hitting,hitted):
        '''
        creates and sends move message
        based on hitting and hitted hands
        '''
        xmlroot = etree.Element("Move")
        etree.SubElement(xmlroot, "playerPlayed").text = str(self.game.playerTurn)
        etree.SubElement(xmlroot, "hittingHand").text = hitting
        etree.SubElement(xmlroot, "hittedHand").text = hitted
        print etree.tostring(xmlroot)
        self.client.send_message(etree.tostring(xmlroot))
        
    def process_message(self):
        '''
        
        Recieve xml data as parameter and calls appropriate methods 
        for specific type of messges
        '''
                
        messageType = self.root.tag
        
        if messageType == "ChatMessage":
            self.messageDispley.insert(END,self.root[0].text+'\n')
            # if game is full we receive message and set shared object canJoin to false 
            if self.root[0].text.startswith('Unable to join'):
                print "SANJA"
                self.canJoin = False
                #unable to join massage processed so enable joinEvent, 
                self.joinEvent.set()
                
            #trying to start game ****TO BE CHANGED***
            if self.root[0].text.startswith('Start game'):
                self.game = None
                self.gameThread = thread.start_new_thread(self.start_game, (2,))
                
        elif messageType == "ListOfGames":
            #****Mora posebna metoda koja nema parametre jedino tako radi***
            self.list_all_games(self.gameList)
        elif messageType == "ListOfPlayers":
            
            self.list_all_games(self.playersList)
            #if there is more then tow players in game enable startGameButton
            if len(self.playersList.get(0, END)) > 1:
                self.startGameButton.config(state=NORMAL)
         
        elif messageType == "GameState":
            if self.initialGameState:
                self.gameStateEvent.clear()
                self.game = GameState(self.root,self.client.comSocket.getsockname()[1])
                self.gameStateEvent.set()
                self.initialGameState = False
            else:
               
                self.game.changeGameState(self.root)
                print str(self.game.playersList[self.game.ourIndex].fingersRight) + '->' + self.game.playersList[self.game.ourIndex].playerName
                
            
        else:
            print "Error while processing massages"
        
    def list_all_games(self,listBox):
        '''
        Reads all <game> elements from xml
        and shows them in gameList listbox
        '''
        #******Ovov nekad radi nekad ne*********
        lis = []
        print self.root[0]
        for el in iter(self.root[0]):
            lis.append(el.text)
        
        listBox.delete(0, END)
        for e in lis:
            #t = e.text
            listBox.insert(END,e)
        
    
    def receive_server_messages(self,id):
        '''
        receives messages while main thread is running
        
        '''
        
        #event must be defined here because in process_message we 
        # create another event for every message, no good.
        self.gameStateEvent = threading.Event()
        #creating event for disabling thread while event is not set
        self.joinEvent = threading.Event()
        
        self.initialGameState = True
        
        while not self.end:
            try:
                mes = self.client.comSocket.recv(1024)
                # http://lxml.de/tutorial.html
                print mes + '*****'
                self.root = etree.fromstring(mes) 
                
                self.gameStateEvent.clear()
                self.process_message()
                #massage processed so enable joinEvent,
                self.joinEvent.set()
              
                
            except:
                
                traceback.print_exc()
 def setUp(self):
     self.mock_1 = GameState(['AB', 'CD'], 301, 'fake1', True)
     self.mock_1.advance_player()
     self.mock_1.add_dart('T20', 60)
     self.mock_1.add_dart('T20', 60)
     self.snd = ISATSounds(test=True)
Example #48
0
def main():
    parse_args() # Sets CONFIG options.
                 # Must be called before UIManager instantiated.
    
    pygame.init()
    pygame.display.set_caption('Flippyflap Wivs')
    environ['SDL_VIDEO_WINDOW_POS'] = 'center'

    # Load high score
    pd = PersistentData(DATA_PATH)
    if path.exists(DATA_PATH):
        pd.load()
    else:
        pd.high_score = 0
    
    clock = pygame.time.Clock()
    dt = 1
    gdt = 60 / CONFIG.FPS_LIMIT
    gs = GameState()
    gd = GameData(pd.high_score)
    uim = UIManager(gd.n_columns, gdt*gd.scroll_speed)
    end = False

    # Prep for game loop
    pygame.mouse.set_visible(0)
    pygame.event.set_allowed(None)
    pygame.event.set_allowed(
        (pygame.KEYDOWN, pygame.QUIT, pygame.MOUSEBUTTONDOWN)
    )

    # Game loop
    while not end:
        # Transition state
        gs.transition_state()
        
        # Handle Events
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                end = True
            elif event.type == pygame.KEYDOWN:
                handle_event_keydown(gs, event)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                handle_event_mousebuttondown(gs, event)

        if gs.state == gs.QUIT:
            end = True

        if gs.state != gs.PAUSE:
            # Update
            gd.update(gs, gdt)
            uim.update(gs, gd, dt)
            gd.postupdate(gs, gdt)

            # Draw
            uim.draw()

        # Cleanup
        clock.tick(CONFIG.FPS_LIMIT)
        fps = clock.get_fps()
        gdt = 60 / (fps if fps > 15 else CONFIG.FPS_LIMIT)                                       
        dt = fps / CONFIG.FPS_LIMIT
        pygame.event.pump()


    # Save high score
    pd.high_score = gd.high_score
    pd.save()
    pygame.quit()