Пример #1
0
def main():
    # 1st human player is created.
    score_keeper = Score()
    h1 = HumanPlayer(score_keeper, 'x', "Reuven")
    # h2 = HumanPlayer(score_keeper, 'o', "Shimon")
    # a1 = AIPlayer(score_keeper, 'x')
    # a2 = AIPlayer(score_keeper, 'o', "Bot2")

    while True:
        """
        You need to create 2nd 'o' player, either Human or AI, and select its name.
        For details see GameManager docs
        """
        opponent = GameManager.get_opponent_player(score_keeper)
        board_size = GameManager.input_board_size()

        game_manager = GameManager(h1, opponent, board_size)
        board = game_manager.board
        while not game_manager.game_over():
            game_manager.print_board()
            try:
                current_player = game_manager.current_player()
                next_move = current_player.next_move(board)
                print(next_move)
                if game_manager.is_valid_move(next_move):
                    game_manager.play(next_move)
            except exceptions.ParseMoveError as err:
                print(err)
                continue
            except exceptions.OutOfBoardError as err:
                print(f"Illegal move, {err.row, err.col} is out of board!")
                continue
            finally:
                print('Try again')
                continue

        game_manager.print_board()
        winner = game_manager.get_winner()
        if winner is not None:
            print(f"{winner.value}! {winner.name} won")
            winner.sign_victory()
        else:
            print("No winner, game over...")

        score_keeper.print()

        next_game = input("Want to play again? Y/N ?")
        if next_game == 'Y':
            continue
        else:
            print("Bye!")
            break
Пример #2
0
    def _build(self, mod, Log):
        ''' Builds application using variables provided by user '''
        if Log == None:
            Log = Log()

        if (self._seed < 1):
            random.seed(time.time())
            self._seed = random.random()

        self.Log = Log
        self.Scorer = Score(mod, self.Log)
        self.Encoder = Encoder(seed=self._seed, probability=self._probability)
        self.GPT = GPT2LanguageModel(model_name=self.model)
Пример #3
0
 def setUp(self):
     self.pw_map = Mapa("test")
     self.score = Score()
     self.hcriat = CreaturesHandler()
     self.hcriat.jugadores = {}
     self.hcriat.pw_map = self.pw_map
     self.hcriat.score = self.score
Пример #4
0
    def _build(self, Log, Scorer):
        if Log == None:
            Log = Logger()
        if Scorer == None:
            Scorer = Score()

        self.Log = Log
        self.Scorer = Scorer
        self.Encoder = Encoder()
        self.GPT = GPT2LanguageModel(model_name=self.model)
Пример #5
0
 def __render_score(self):
     for sprite in self.score_group.sprites():
         self.score_group.remove(sprite)
     i = 0
     score_points = f"{self.score}"
     spacing = SCREEN_SIZE[1] / 24
     size = len(score_points)
     margin_left = int((SCREEN_SIZE[0] / 2) -
                       (size * spacing + size * 2) / 2)
     for num in score_points:
         score = Score(num=num,
                       pos=(margin_left + (i * (spacing + 2)),
                            SCREEN_SIZE[1] / 10))
         self.score_group.add(score)
         i += 1
Пример #6
0
    def update(self, game_time):
        time_delta = (game_time - self.game_time)
        self.coin_box_time += time_delta
        self.transition_time = self.coin_box_time
        self.game_time = game_time

        if self.num_coins == 0:
            self.display_frame = self.empty_frame
        else:
            if 0 < self.coin_box_time <= 400:
                self.frame_idx = 0
            elif 400 < self.coin_box_time <= 600:
                self.frame_idx = 1
            elif 600 < self.coin_box_time <= 700:
                self.frame_idx = 2
            elif self.coin_box_time > 700:
                self.frame_idx = 0
                self.coin_box_time = 0

            self.display_frame = self.coin_box_frames[self.frame_idx]

        if self.in_transition is True:
            if self.transition_time > 10:
                self.y_offset -= 1
                self.transition_time = 0
            if self.y_offset == 0:
                self.in_transition = False
        else:
            self.transition_time = 0

        for item in self.coin_score_group:
            item.update(game_time)
            if isinstance(item, Coin):
                if not item.is_bouncing:
                    item.kill()
                    score = Score(self.rect.x + 5, self.rect.y - 25, c.SCORE_COIN)
                    self.coin_score_group.add(score)
Пример #7
0
 def setUp(self):
     self.score_keeper = Score()
     self.h1 = HumanPlayer(self.score_keeper, 'x', "Reuven")
     self.h2 = HumanPlayer(self.score_keeper, 'o', "Shimon")
     self.a1 = AIPlayer(self.score_keeper, 'x')
     self.a2 = AIPlayer(self.score_keeper, 'o', "Bot2")
Пример #8
0
 def kill_enemy(self, score_group):
     self.state = c.ENEMY_STATE_DEAD
     score = Score(self.rect.x + 5, self.rect.y - 25, self.kill_score)
     score_group.add(score)
     return self.kill_score
Пример #9
0
def main():
    pg.init()
    pg.font.init()
    screen = pg.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
    pg.display.set_caption('My_game')
    clock = pg.time.Clock()

    # sprites
    img = load_image('player.png')
    Player.images = [img]
    img = load_image('player_shot.png')
    Player_shot.images = [img]
    img = load_image('enemy_new.png')
    Enemy.images = [img]

    # sounds
    crow_sound = load_sound('crow.wav')
    shot_sound = load_sound('shot.wav')
    shot_sound.set_volume(0.1)

    background = pg.Surface(SCREEN_RECT.size)
    background.fill(BACKGROUND_COLOR)
    screen.blit(background, (0, 0))

    pg.display.flip()

    # Создание контейнеров
    all = pg.sprite.RenderUpdates()
    shots = pg.sprite.Group()
    enemies = pg.sprite.Group()

    # Присвоение контейнеров
    Player.containers = all
    Player_shot.containers = all, shots
    Enemy.containers = all, enemies

    player = Player()
    # Таймеры появлений объектов
    gun_timer = 0
    enemy_spawn_timer = 0
    crow_sound_timer = 0
    score_delta = 0
    score = Score()
    game_over = False

    def check_quit_keys():
        for event in pg.event.get():
            if event.type == QUIT or \
                    (event.type == KEYDOWN and event.key == K_ESCAPE):
                return True

    if pg.font:
        all.add(score)

    # initialiaing fonts
    pg.font.init()
    my_font = pg.font.SysFont('Comic Sans MS', 40)
    my_font_bot = pg.font.SysFont('Comic Sans MS', 20)
    text_over = my_font.render('Game over', False, (0, 0, 0))
    text_score = my_font.render('Score: ' + str(score.score), False, (0, 0, 0))
    instruction = my_font_bot.render('Press S to start a new game ', False,
                                     (0, 0, 0))

    while player.alive():
        if check_quit_keys():
            break

        key_state = pg.key.get_pressed()
        horiz_direction = key_state[K_RIGHT] - key_state[K_LEFT]
        vert_direction = key_state[K_DOWN] - key_state[K_UP]
        player.move(horiz_direction, vert_direction)

        score_delta = 0

        for shot in shots:
            enemies_hit_list = pg.sprite.spritecollide(shot, enemies, True)
            if len(enemies_hit_list) > 0:
                if crow_sound_timer <= 0:
                    crow_sound.play()
                    crow_sound_timer = Enemy.CROW_SOUND_COOLDOWN
                shot.kill()
                score_delta += len(enemies_hit_list)
        crow_sound_timer -= 1

        if score_delta > 0:
            score.set_score_delta(score_delta)

        d = pg.sprite.spritecollide(player, enemies, True)
        if len(d) > 0:
            player.kill()
            text_score = my_font.render('Score: ' + str(score.score), False,
                                        (0, 0, 0))
            game_over = True

        if key_state[K_x]:
            if gun_timer != 0:
                gun_timer = gun_timer - 1
            else:
                Player_shot(player.get_guns()[0])
                Player_shot(player.get_guns()[1])
                shot_sound.play()
                gun_timer = Player_shot.GUN_RELOAD

        if enemy_spawn_timer != 0:
            enemy_spawn_timer = enemy_spawn_timer - 1
        else:
            Enemy()
            enemy_spawn_timer = Enemy.SPAWN_COOLDOWN

        all.clear(screen, background)
        all.update()
        pg.display.update(all.draw(screen))
        clock.tick(60)
    while game_over:
        if check_quit_keys():
            break

        key_state = pg.key.get_pressed()
        if key_state[K_s]:
            main()
            break
        screen.blit(background, (0, 0))
        screen.blit(text_over, (100, 0))
        screen.blit(text_score, (125, 100))
        screen.blit(instruction, (50, 600))
        pg.display.update()
        clock.tick(60)
    pg.quit()
Пример #10
0
class ActionsTest(TestCase):

    def setUp(self):
        self.pw_map = Mapa("test")
        self.score = Score()
        self.hcriat = CreaturesHandler()
        self.hcriat.jugadores = {}
        self.hcriat.pw_map = self.pw_map
        self.hcriat.score = self.score

    def tearDown(self):
        """Cancel all the pending calls to avoid problems"""
        pending = reactor.getDelayedCalls()
        for p in pending:
            if p.active():
                p.cancel()

    def test_main(self):
        server = Server()
        self.assertTrue(isinstance(server.pw_map, Mapa))
        self.assertTrue(isinstance(server.score, Score))
        self.assertTrue(isinstance(server.hcriat, CreaturesHandler))

    def test_login_blue(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertEqual(player.get_team(), 1)

    def test_login_red(self):
        player, _, _, _ = create_player(Team.RED, self.hcriat)
        self.assertEqual(player.get_team(), 2)

    def test_player_get_data(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertEqual(player.get_data(), [2, 1, 34, 2, 100, 100])

    def test_wrong_player_uid(self):
        self.assertRaises(PlayerDoesNotExist, self.hcriat.get_creature_by_uid, 157)

    def test_lost_connection_handler(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        uid = player.uid
        self.hcriat.del_creature_by_uid(uid)
        self.assertRaises(PlayerDoesNotExist, self.hcriat.get_creature_by_uid, uid)

    def test_teleport_player(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        teleport_player(player.uid, 1, 1, self.hcriat)
        self.assertEqual((player.x, player.y), (1, 1))

    def test_move_valid(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        for d in ('n', 's', 'o', 'e'):
            before_x, before_y = player.get_coor()
            moved_player = move_player(player.get_uid(), d, self.hcriat)
            self.assertTrue(before_x != moved_player.x or before_y != moved_player.y)
            player.bloqM.unblock()

    def test_move_invalid(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertRaises(
            InvalidMovementDirection, move_player, player.get_uid(), 'bad_direction', self.hcriat)

    def test_cant_move_exception(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        player.vivo = False
        self.assertRaises(
            CantMove, move_player, player.get_uid(), 'n', self.hcriat)

    def test_blocking_position(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        for d in ('o', 'o', 'o'):
            move_player(player.get_uid(), d, self.hcriat)
            player.bloqM.unblock()
        self.assertRaises(BlockedPosition, move_player, player.get_uid(), 'o', self.hcriat)

    def test_multiple_players_blue(self):
        _, others, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertEqual(others, [])
        _, others, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertEqual(len(others), 1)

    def test_multiple_players_red(self):
        _, others, _, _ = create_player(Team.RED, self.hcriat)
        self.assertEqual(others, [])
        _, others, _, _ = create_player(Team.RED, self.hcriat)
        self.assertEqual(len(others), 1)

    def test_full_team_base(self):
        for _ in range(9):
            create_player(Team.RED, self.hcriat)
        self.assertRaises(TeamBasePositionNotFound, create_player, Team.RED, self.hcriat)

    def test_shoot_directions(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        for d in ('n', 's', 'o', 'e', 'no', 'ne', 'so', 'se'):
            player, shoot_handler = shoot_action(player.get_uid(), d, self.hcriat, None, None)
            self.assertIsNot(shoot_handler, None)
            player.bloqD.unblock()

    def test_shoot_bad_direction(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        self.assertRaises(
            InvalidShootDirection, shoot_action, player.get_uid(), 'bad_dir', self.hcriat, None,
            None)

    def test_shoot_update(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        _, shoot_handler = shoot_action(player.get_uid(), 'n', self.hcriat, None, None)
        before_y = shoot_handler.bala.y
        shoot_handler.loop()
        self.assertEqual(before_y - 1, shoot_handler.bala.y)

    def test_shoot_hit_wall(self):
        player, _, _, _ = create_player(Team.BLUE, self.hcriat)
        _, shoot_handler = shoot_action(player.get_uid(), 'o', self.hcriat, None, None)
        for _ in range(3):
            self.assertTrue(shoot_handler.update())
        self.assertFalse(shoot_handler.update())

    def test_shoot_friend(self):
        player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        player2, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        pw_map.move_player(player2, player1.x+2, player1.y)
        _, shoot_handler = shoot_action(player1.get_uid(), 'e', self.hcriat, None, None)
        for _ in range(3):
            self.assertTrue(shoot_handler.update())

    def test_shoot_enemy(self):
        player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        player2, _, _, pw_map = create_player(Team.RED, self.hcriat)
        pw_map.move_player(player2, player1.x+2, player1.y)
        _, shoot_handler = shoot_action(player1.get_uid(), 'e', self.hcriat, callback, None)
        health_before = player2.vida
        self.assertTrue(shoot_handler.update())  # move 1 sqm
        self.assertFalse(shoot_handler.update())  # hit the enemy
        self.assertLess(player2.vida, health_before)

    def test_cant_shoot_exception(self):
        player1, _, _, _ = create_player(Team.BLUE, self.hcriat)
        player1.vivo = False
        self.assertRaises(
            CantShoot, shoot_action, player1.get_uid(), 'e', self.hcriat, callback, None)

    def test_kill_and_revive_enemy(self):
        player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        player2, _, _, pw_map = create_player(Team.RED, self.hcriat)
        pw_map.move_player(player2, player1.x+1, player1.y)
        _, shoot_handler = shoot_action(
            player1.get_uid(), 'e', self.hcriat, callback, callback)
        player2.vida = 1
        shoot_handler.loop()
        self.assertFalse(player2.vivo)
        revive_player(player2.uid, self.hcriat)
        self.assertTrue(player2.vivo)
        self.assertEqual(player2.vida, CreaturesHandler.VIDA_MAX)

    def test_score_from_blue(self):
        player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        player2, _, _, pw_map = create_player(Team.RED, self.hcriat)

        def die_callback(uid):
            return increase_score(uid, self.hcriat)

        pw_map.move_player(player2, player1.x+1, player1.y)
        _, shoot_handler = shoot_action(
            player1.get_uid(), 'e', self.hcriat, callback, die_callback)
        player2.vida = 1
        self.assertEqual(self.score.blue_score, 0)
        shoot_handler.loop()
        self.assertEqual(self.score.blue_score, 1)

    def test_score_from_red(self):
        player1, _, _, pw_map = create_player(Team.RED, self.hcriat)
        player2, _, _, pw_map = create_player(Team.BLUE, self.hcriat)

        def die_callback(uid):
            return increase_score(uid, self.hcriat)

        pw_map.move_player(player2, player1.x+1, player1.y)
        _, shoot_handler = shoot_action(
            player1.get_uid(), 'e', self.hcriat, callback, die_callback)
        player2.vida = 1
        self.assertEqual(self.score.red_score, 0)
        shoot_handler.loop()
        self.assertEqual(self.score.red_score, 1)

    def test_restart_round(self):
        # wrong player trying to restart
        self.assertIsNone(restart_round(153, self.hcriat))

        # real case
        player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat)
        player2, _, _, pw_map = create_player(Team.RED, self.hcriat)
        # move both once place
        teleport_player(player1.uid, player1.x+1, player1.y+1, self.hcriat)
        teleport_player(player2.uid, player2.x+1, player2.y+1, self.hcriat)
        # change life
        player1.vida = 1
        player2.vida = 1
        # change score
        self.score.murio_azul()
        self.score.murio_rojo()
        # restart
        players, new_score = restart_round(player1.uid, self.hcriat)
        # base positions
        new_blue = players.pop(0) if players[0].team == Team.BLUE else players.pop()
        new_red = players.pop()
        # blue
        self.assertEqual(new_blue.x, pw_map.x_azul)
        self.assertEqual(new_blue.y, pw_map.y_azul)
        self.assertEqual(new_blue.vida, self.hcriat.VIDA_MAX)
        # red
        self.assertEqual(new_red.x, pw_map.x_rojo)
        self.assertEqual(new_red.y, pw_map.y_rojo)
        self.assertEqual(new_red.vida, self.hcriat.VIDA_MAX)
        # score
        self.assertEqual(new_score[0], 0)
        self.assertEqual(new_score[1], 0)
Пример #11
0
class pyReadability():
    '''
        Main class for the applicaiton. Loads the data, encodes it and runs scoring algortim.
    '''
    def __init__(self,
                 model,
                 interact,
                 topK,
                 seed,
                 mod,
                 probability,
                 Log=None):
        ''' Take in variables and starts the program. See readme for inputs'''
        self.model = model
        self.topK = topK
        self.interact = interact
        self._seed = seed
        self._probability = probability
        self._score = -1

        self._build(mod, Log)

    def _build(self, mod, Log):
        ''' Builds application using variables provided by user '''
        if Log == None:
            Log = Log()

        if (self._seed < 1):
            random.seed(time.time())
            self._seed = random.random()

        self.Log = Log
        self.Scorer = Score(mod, self.Log)
        self.Encoder = Encoder(seed=self._seed, probability=self._probability)
        self.GPT = GPT2LanguageModel(model_name=self.model)

    def _run(self, text):
        ''' Runs GTP and gets results '''
        logits = self.GPT.predict(text, "")
        probabilities = torch.nn.functional.softmax(logits)

        best_indices = logits.topk(self.topK)[1]
        self.best_words = [self.GPT[idx.item()] for idx in best_indices]
        self.best_probabilities = probabilities[best_indices].tolist()

    def _getWords(self):
        ''' returns Top-K Words from GPT-2 '''
        return self.best_words

    def _getPropability(self):
        ''' returns top-k Propabilities from GPT-2 '''
        return [round(p * 100, 2) for p in self.best_probabilities]

    def _process(self, text, guess):
        ''' scores inputted text and logs it '''

        self._run(text)
        outputLst = self._output()
        self.Log.Trace(("Answer List : {}".format(outputLst)))

        score = self.Scorer.score(outputLst, guess)
        self.Log.Trace(score)

        self.Log.Info("Score of \'{}\': {}".format(score[0], score[1]))

    def start(self, text=""):
        ''' 
            starts program

            text = Text to be inputted
        '''

        if text == "" and not self.interact:
            raise EnvironmentError(
                "Please input valid text or use the --interact flag")

        if text != "":
            encoded = self.Encoder.encode(text=text)
            for item in encoded:
                if item[0] == '':
                    continue
                self._process(item[0], item[1])

        # Code for Manual Input, meant for debugging not for production use
        else:
            while self.interact:
                text = self.Log.Input("Input Text >> ")

                if text == "":
                    self.Log.Info("Please provide a valid input")
                    continue

                if text == "#?":
                    self.Log.Info(
                        "Available Commands: \n#?: Shows available commands\n#end: Ends Execution"
                    )
                    continue

                if text == "#end":
                    self.Log.Info("Ending Program")
                    break

                guess = self.Log.Input("What will the next word be >> ")
                self._process(text, guess)

        self._score = self.Scorer.calcScore()
        self.Log.Info("Normalized Score: {} | Unnormalized Score: {}".format(
            self.getNormScore(), self.getUnNormScore()))

    def getNormScore(self):
        ''' returns the normalized score '''
        return self._score[0]

    def getUnNormScore(self):
        ''' returns the unormalized score '''
        return self._score[1]

    def getSeed(self):
        ''' returns the seed used '''
        return self._seed

    def getEncoder(self):
        ''' returns the encoder object '''
        return self.Encoder

    def _output(self):
        ''' returns top-k words and propabilities '''
        return [(self._getWords()[i], self._getPropability()[i])
                for i in range(self.topK)]