示例#1
0
文件: level.py 项目: hanycopes/ezgame
class Level:
    logger = logging.getLogger("Level")

    def __init__(self, level_id: int, settings: Settings,
                 game_clock: GameClock):
        self.settings = settings
        self.game_clock = game_clock

        level_loader = LevelLoader(level_id)
        self.level_map = level_loader.get_level_map()

        self.gravity = Vector(0, 1)

        player_start_pos = Vector.from_tuple(self.level_map.player_start_pos)
        self.player = Player(level_loader.get_player_images(),
                             player_start_pos)

        # TODO: initialize environment
        # self.walls =
        # self.door =
        # self.ladders =
        # ....

    def update(self):
        self.game_clock.update(self.settings.fps)

        game_surface = pygame.display.get_surface()
        game_surface.fill(self.settings.background_color)

        self.level_map.update(game_surface)
        self.player.apply_force(self.gravity)
        self.player.update(game_surface, self.game_clock.deltatime)
示例#2
0
 def init_player(self, color, player_type):
     marbles = set()
     target = set()
     # target zone
     target = initial_positions(oponent_color(color)) # modulo 6, but starting at 1 instead of 0
     # initial zone
     for position in initial_positions(color):
         i,j = position
         self.board[i][j] = color
         marbles.add(Marble(self, position, color, target))
     if color == GREEN:
         if self.weights[0] is not None:
             if player_type == NEURAL_TYPE:
                 self.players[color] = NeuralPlayer(target, marbles, color, self, self.weights[0])  
             else:
                 self.players[color] = Player(target, marbles, color, self, self.weights[0]) 
         else:
             if player_type == NEURAL_TYPE:
                 self.players[color] = NeuralPlayer(target, marbles, color, self, NNQFunction(color))
             else:
                 self.players[color] = Player(target, marbles, color, self)
     elif color == RED:
         if self.weights[1] is not None:
             if player_type == NEURAL_TYPE:
                 self.players[color] = NeuralPlayer(target, marbles, color, self, self.weights[1])
             else:
                 self.players[color] =  Player(target, marbles, color, self, self.weights[1])
         else:
             if player_type == NEURAL_TYPE:
                 self.players[color] = NeuralPlayer(target, marbles, color, self, NNQFunction(color))
             else:
                 self.players[color] = Player(target, marbles, color, self)
示例#3
0
    def __init__(self):
        self.changeTo = None
        self.states = {"play", "intro", "pause", "setting"}
        self.player = None
        self.letter = []

        # Creates src.player.Player object
        self.player = Player()

        # Summons a letterspit and creates enemy list
        self.lettergen = Letterspit()
        self.lettergen.cap = 20
        self.lettergen.level = 1
        self.enemylist = []

        self.armageddon_status = False
        self.armageddon_cur = 0
        self.arma_counter = 0

        self.money = 0
        self.turrets = []
        self.money_font = pygame.font.SysFont("Arial", 50)

        self.timer = 0
        self.cnter = 0
示例#4
0
 def setUp(self):
     self.board_3x3 = Board(3)
     self.board_5x5 = Board(5)
     self.game = Game()
     self.game.board = Board(3)
     self.game.player1 = Player("Toothless", "X")
     self.game.player2 = Player("Hiccup", "O")
示例#5
0
文件: app.py 项目: c-ancia/diskplayer
def index():
    overrideform = OverrideForm()
    override = None
    has_content = None
    current_content = None

    # Check if floppy exists
    lsblk = get_floppy()

    # Check if the floppy has content
    if lsblk == "sda":
        rec = Recorder(path=media_filepath)
        has_content = rec.file_exists()
        if has_content == False:
            return redirect(url_for('record'))
        else:
            # Get current playback
            pla = Player(config_path)
            current_content = pla.get_current_playback()

    # Check if the user decided to override the floppy or not
    if overrideform.validate_on_submit():
        form_data = request.form
        override = form_data["override"]
        if override == "1":
            return redirect(url_for('record', override=override))

    return render_template('index.html',
                           lsblk=lsblk,
                           has_content=has_content,
                           current_content=current_content,
                           override=override,
                           overrideform=overrideform)
示例#6
0
def test_scoreboard_update(scoreboard):
    player = Player()
    player.score = 200
    player.nickname = "LeeroyJenkins"
    scoreboard.AddToScoreboard(player)
    assert "LeeroyJenkins" in scoreboard._board
    assert scoreboard._board["LeeroyJenkins"] == 200
class TestPlayerGetsHit(unittest.TestCase):
    def setUp(self):
        self.player = Player("P")

    def test_player_gets_hit_increases_hits_against(self):
        self.player.hit()
        self.assertEqual(self.player.hits, 1)
示例#8
0
class GameScreen(GameMixin):
    player = Player('X', True)
    opponent = Player('O', False)
    _players = (player, opponent)

    def set_attacker_text(self):
        self.ids['attacker_text'].text = f'Ходит {self.attacker.name}'
    def update_player_functionality(self, x: int, y: int):
        players = self.get_players("remained")
        player_buttons = list(map(lambda player: player.get_button(), players))

        if self.player_panel is not None:
            if self.player_panel.update(x, y, self.timer):
                return  # to not check for other buttons bellow the panel

        des = False  # random flag... This is fine
        for i, btn in enumerate(player_buttons):
            if btn.pressed(x, y):
                # print("player {}".format(i + 1))
                if players[i].select(
                ) == "selected":  # select the clicked player
                    y = 140 if y < 140 else y  # change player panel's position to not spawn over the down an left edges
                    x = WIDTH - 160 if x > WIDTH - 160 else x
                    self.player_panel = PlayerPanel(x, y, players[i],
                                                    (self.team1, self.team2))
                    if len(
                            list(
                                filter(lambda player: player.selected,
                                       players))) == 2:
                        Player.de_select(
                            players, i)  # de-select previous clicked player
                else:
                    self.player_panel = None
                des = True

        if not des:
            Player.de_select(players)
            self.player_panel = None
示例#10
0
    def test_move_directly_do_not_pass_go(self):
        # Resetting property instance
        Properties.properties = _init_properties()

        # Resetting game pieces
        Player._game_pieces = [
            'battleship', 'dog', 'iron', 'shoe', 'thimble', 'top hat',
            'wheelbarrow'
        ]
        self.player = Player()

        self.player.action(Actions.MOVE_DIRECTLY_TO_TILE_DO_NOT_PASS_GO, 30)
        self.assertEqual(self.player.position, 30,
                         'Moving directly to 30 (Do not pass GO)')
        self.assertEqual(
            self.player.cash, 1500,
            'Should still be 1500 after moving to 30 (Do not pass GO)')

        self.player.action(Actions.MOVE_DIRECTLY_TO_TILE_DO_NOT_PASS_GO, 10)
        self.assertEqual(self.player.position, 10,
                         'Moving directly to 10 from 30 (Do not pass GO)')
        self.assertEqual(
            self.player.cash, 1500,
            'Should have passed GO after moving to 10 from 30. Cash stays same.'
        )
示例#11
0
 def __init__(self, config=None):
     self.field_width = 10
     self.field_height = 10
     self.field_objects = []
     for j in range(self.field_height):
         self.field_objects.append(
             [Objects.empty_field for i in range(self.field_width)])
     self.checker = Checker(self)
     self.player1 = Player(config.white, 1)
     self.player2 = Player(config.black, 2)
     self.timer1 = Timer(config.timer, config.duration)
     self.timer2 = Timer(config.timer, config.duration)
     self.cur_timer = None
     self.new_game = False
     self.is_first_move = True
     self.is_over = False
     self.cur_figure = None
     self.cur_player = self.player1
     self.cur_move = None
     self.init_field()
     self.was_taken = False
     self.logger = Logger()
     self.dump_logger = Logger()
     self.moves_quantity = 0
     self.game_file = config.game_file
     self.pause = 0.2
     self.load = config.load_game
     self.loaded_moves = queue.Queue()
     self.loaded_moves_amount = 0
     if self.load:
         self.load_moves()
     self.interface = Interface(self)
示例#12
0
    def test_move_player(self):
        # Resetting property instance
        Properties.properties = _init_properties()

        # Resetting game pieces
        Player._game_pieces = [
            'battleship', 'dog', 'iron', 'shoe', 'thimble', 'top hat',
            'wheelbarrow'
        ]
        self.player = Player()

        self.player.action(Actions.MOVE_TO_TILE, 11)
        self.assertEqual(self.player.position, 11,
                         'Moving from 0, 11 spaces. Should be 11')
        self.assertEqual(self.player.cash, 1500,
                         'Should be 1500. Not passing GO (1)')

        self.player.action(Actions.MOVE_TO_TILE, 11)
        self.assertEqual(self.player.position, 22,
                         'Moving from 11, 11 spaces. Should be 22')
        self.assertEqual(self.player.cash, 1500,
                         'Should be 1500. Not passing GO (2)')

        self.player.action(Actions.MOVE_TO_TILE, 11)
        self.assertEqual(self.player.position, 33,
                         'Moving from 22, 11 spaces. Should be 33')
        self.assertEqual(self.player.cash, 1500,
                         'Should be 1500. Not passing GO (3)')

        self.player.action(Actions.MOVE_TO_TILE, 11)
        self.assertEqual(self.player.position, 4,
                         'Moving from 33, 11 spaces. Should be 4')
        self.assertEqual(self.player.cash, 1700,
                         'Should be 1700 after passing GO')
示例#13
0
 def load(self, saveFile):
     """
     Loads the game from a save file, creates an empty game if the save is None
     """
     save = json.load(open(saveFile, "r"))
     self.map = Map(save['map'])
     self.player = Player(save['player'])
示例#14
0
文件: scene.py 项目: mullevik/vizzard
    def __init__(self, screen: Surface, clock: Clock):
        super().__init__(screen, clock)
        self.environment = Environment(self.settings,
                                       open("../assets/maps/default.txt",
                                            "r").read())

        self.animation_manager = AnimationManager(self)

        self.vertical_shift = 0
        self.environment_renderer = EnvironmentRenderer(self.environment,
                                                        self.settings)

        self.text_event_handler = TextEventHandler(self)
        self.add_event_handler(self.text_event_handler)
        self.player_controller = PlayerController(self)

        self.recording = Recording()

        self.player = Player()
        self.player.set_position(self.environment.get_starting_position())
        self.player_sprite = PlayerSprite(self, self.player)
        self.player_group = pygame.sprite.GroupSingle(self.player_sprite)

        self.shard_group = pygame.sprite.Group([])

        self.particle_group = pygame.sprite.Group([])

        self.hud_ui_group = GameHudFactory.build_group(self)

        self.player_group.update()
        self.spawn_pack_of_shards()
示例#15
0
 def setUp(self):
     self.player1 = Player('Evie')
     self.player2 = Player('Amelia')
     self.pg = Game()
     self.pg.add_player(self.player1)
     self.pg.add_player(self.player2)
     self.pg.setup_game(SETTINGS_LOCATION)
示例#16
0
    def __init__(self):
        self.run = True
        self.player = Player()
        self.board = Board(os.path.join("..", "worlds", "world.txt"))
        self.screen = pygame.display.set_mode(Game.RESOLUTION)
        self.clock = pygame.time.Clock()

        self.execute()
    def test_play_option_has_stand(self):
        from src.player import Player

        testPlayer = Player()
        testCanSplit = True
        testCanInsure = False

        self.assertIn('stand', testPlayer.get_play_options(canSplit=testCanSplit, canInsure=testCanInsure).lower())
    def test_play_option_cant_insure_when_unavalible(self):
        from src.player import Player

        testPlayer = Player()
        testCanSplit = False
        testCanInsure = False

        self.assertNotIn('insure', testPlayer.get_play_options(canSplit=testCanSplit, canInsure=testCanInsure).lower())
    def test_play_option_can_split_when_avalible(self):
        from src.player import Player

        testPlayer = Player()
        testCanSplit = True
        testCanInsure = False

        self.assertIn('split', testPlayer.get_play_options(canSplit=testCanSplit, canInsure=testCanInsure).lower())
示例#20
0
 def test_player_moves(self):
     mockProps = {'history': []}
     mockPlayer = Player(mockProps)
     mockPlayer.move(1)
     mockPlayer.move(2)
     self.assertEqual(len(mockPlayer.history), 2)
     self.assertEqual(mockPlayer.history[0], 1)
     self.assertEqual(mockPlayer.history[1], 2)
示例#21
0
    def move(self, player: Player, knight_id: int, move_id: int):
        """
        Mueve el caballo a una posicion determinada, haciendo todo lo necesario
        que implica el movimiento del caballo. Como lo es comerse a un caballo,
        denegar movimientos no validos, etc.

        Args:
            player (Player): Jugador que está realizando el movimiento.
            knight_id (int): Identificador de caballo que se esta moviendo.
            move_id (int): Identificador del movimiento del caballo.

        Raises:
            NameError: MovimientoFueraDelTablero se gatilla cuando el movimiento
                       del caballo lo lleva fuera del tablero.
            NameError: MovimientoInvalido se gatilla cuando el movimiento del
                       caballo no es valido.
        """
        # Obteniendo jugador y caballo
        knight = player.get_knight(knight_id)

        # ? Prueba
        x, y = knight.get_position()
        knight2 = self.board[y][x]
        x2, y2 = knight2.get_position()
        if not knight2 == knight:
            import sys
            print(f"IDS: {knight.id_} {knight2.id_}")
            print(f'POS: ({x},{y}) ({x2},{y2})')
            print("Error, son distintos")
            self.print_board()
            #sys.exit()

        if not knight.alive:
            raise NameError("CaballoMuerto")

        # Obtieniendo posiciones del caballo
        x, y = knight.get_position()
        nx, ny = knight.get_movement(move_id)

        if ny < 0 or ny >= len(self.board) or nx < 0 or nx >= len(
                self.board[ny]):
            raise NameError("MovimientoFueraDelTablero")

        other_knight = self.board[ny][nx]
        if other_knight is None:
            self.board[y][x] = None
            self.board[ny][nx] = knight
            knight.set_position(nx, ny)
        elif player.is_enemy(other_knight):
            player.add_point()
            self.board[y][x] = None
            self.board[ny][nx] = knight
            knight.set_position(nx, ny)
            other_knight.alive = False
        else:
            # Este error se gatilla cuando se intenta ir a una casilla con un
            # aleado en ella.
            raise NameError("MovimientoInvalido")
示例#22
0
 def setUp(self) -> None:
     #            0         10        20 "
     #            0123456789|123456789|12"
     dummy_map = "  .o/o///.Soo//o///.. \n" \
                 " ..//..               "
     self.settings = GameSettings(scale_factor=1.)
     self.environment = Environment(self.settings, dummy_map)
     self.player = Player()
     self.player.set_position(self.environment.get_starting_position())
示例#23
0
def test_player_say_snap(capsys, auto_mode: bool):
    """Check say_snap function, behaviour depends on auto_mode attribute"""
    player1 = Player(name="Witcher fan", hand=[], auto_mode=auto_mode)
    with patch("sys.stdin", StringIO("".join("I pressed Enter here"))):
        assert type(player1.say_snap()) is float
        # If auto_mode if False, expect waiting for input
        if not auto_mode:
            msg = capsys.readouterr()
            assert str(msg.out).startswith("Hurry! Press ENTER")
示例#24
0
 def test_get_winner_spade(self):
     moves: List[Move] = [
         Move(Player("Ann"), Card("10", "C")),
         Move(Player("Betsy"), Card("K", "C")),
         Move(Player("Caroline"), Card("3", "C")),
         Move(Player("Diane"), Card("2", "S")),
     ]
     t: Trick = Trick(moves)
     self.assertEqual(t.get_winner(), Player("Diane"))
示例#25
0
 def __init__(self):
     self.width = 1000
     self.height = 800
     self.player = Player(x=15, y=15, width=10, height=10, speed=1)
     self.game_display = None
     self.tile_size = 25
     self.wall_size = 1
     self.maze = Maze(x=20, y=10, tile_size=self.tile_size,
                      wall_size=self.wall_size)  # , file="..\\image\\maze.png")
示例#26
0
    def __init__(self, window):
        # Store a reference to the application window
        self.window = window
        # Key handler shortcut
        self.keys = window.keys
        # The rendering batch
        self.batch = pyglet.graphics.Batch()
        self.score_batch = pyglet.graphics.Batch()
        #self.laser_batch = pyglet.graphics.Batch()
        # The lasers
        self.laser_group = LaserGroup()

        # The foreground rendering groups
        self.scoregroup_hi = pyglet.graphics.OrderedGroup(1)
        self.scoregroup_lo = pyglet.graphics.OrderedGroup(0)
        self.slime_group = pyglet.graphics.OrderedGroup(2)
        self.print_group = pyglet.graphics.OrderedGroup(1)
        self.bg_group = pyglet.graphics.OrderedGroup(0)
        # Manages the background effects
        self.bg = BackgroundManager(batch=self.batch, group=self.bg_group)

        # The collision machinery
        self.coll_funcs = CollisionDispatcher()
        # Each entity pair has an algorithm
        #self.coll_funcs.add(HorizontalLine, Player, coll_player_horizontal_line)
        #self.coll_funcs.add(VerticalLine, Player, coll_player_vertical_line)
        self.coll_funcs.add(HorizontalLaser, Player,
                            coll_player_horizontal_line)
        self.coll_funcs.add(VerticalLaser, Player, coll_player_vertical_line)
        self.coll_funcs.add(Blobule, Player, coll_blob_player)

        # The player blob
        self.blob_group = src.glsl.blob.BlobGroup(300, 300, 8,
                                                  (0.125, 0.375, 0.0))
        self.blobule_group = src.glsl.blob.BlobGroup(0, 0, 8, (0.5, 0.0, 0.5))
        self.player = Player(self, self.blob_group, self.slime_group,
                             self.batch)

        logo = spr('logo.png', batch=self.batch, group=self.scoregroup_hi)
        logo.image.anchor_x, logo.image.anchor_y = 300, logo.image.height / 2
        logo.x, logo.y = 300, 300
        self.logo = logo
        self.logo_fade = False

        self.load_sounds()

        # The blobule powerup
        self.blobule = Blobule(self.blobule_group)

        # The lasers
        self.lines = {}
        self.do_horiz = True
        #pyglet.graphics.glLineWidth(3)

        # Score labels
        self.score = 0
        self.scores = []
示例#27
0
    def render_POST(self, request, conn):
        #if conn.new_player and conn.new_player.code in database["players"]:
        #    return "\nImpossibile creare il personaggio %s perché già esistente.\n" % conn.new_player.name

        page = self.check_number_of_players(request, conn)
        if page:
            return page

        # Ricava gli argomenti del form dalla richiesta
        race = ""
        if "race" in request.args:
            race = Element(request.args["race"][0])

        sex = ""
        if "sex" in request.args:
            sex = Element(request.args["sex"][0])

        constellation = ""
        if "constellation" in request.args:
            constellation = Element(request.args["constellation"][0])

        # Controlla la validità degli argomenti inseriti nel form
        err_msg_race = ""
        if not race:
            err_msg_race = "Scegli la razza che vuoi interpretare"
            race = RACE.NONE
        else:
            # (TD) per ora gestisce la sessualità unica delle Frijen in maniera forzata
            if race == RACE.FRIJEN:
                sex = SEX.FEMALE

        err_msg_sex = ""
        if not sex:
            err_msg_sex = "Scegli la sessualità che vuoi interpretare"
            sex = SEX.NONE

        err_msg_constellation = ""
        if not constellation:
            err_msg_constellation = "Scegli la costellazione sotto cui il tuo personaggio è nato"
            constellation = CONSTELLATION.NONE

        # Se tutti gli argomenti del form sono validi crea il personaggio e
        # passa alla pagina di creazione successiva
        if not err_msg_race and not err_msg_sex and not err_msg_constellation:
            new_player = Player()
            new_player.race = race
            new_player.sex = sex
            new_player.constellation = constellation
            conn.new_player = new_player
            request.redirect("create_player2.html")
            request.finish()
            return server.NOT_DONE_YET

        return self.create_page(request, conn, race, sex, constellation,
                                err_msg_race, err_msg_sex,
                                err_msg_constellation)
示例#28
0
    def test_add_player(self):
        players = [Player('Evie'), Player('Amelia')]

        for player in players:
            self.pg.add_player(player)

            with self.subTest(player=player):
                self.assertIs(self.pg, player.game)
                self.assertIn(player, self.pg.players)
                self.assertEqual(player.name, self.pg.players[-1].name)
示例#29
0
def play_random_card(player: Player, lead_suit: Optional[str]) -> Card:
    # To obey rules, player must play a card in lead suit if he/she has one
    random_card: Card = choice(player.get_cards())
    if lead_suit is None:
        return random_card
    cards_in_lead_suit: List[Card] = player.get_cards_in_suit(lead_suit)
    if len(cards_in_lead_suit) > 0:
        return choice(cards_in_lead_suit)
    else:
        return random_card
示例#30
0
 def game_player_information(self):
     if self.number_players == 2:
         self.players.append(
             Player(self.menu.introduce_player_name("1"), 1, "x", True))
         self.players.append(
             Player(self.menu.introduce_player_name("2"), 2, "o", True))
     else:
         self.players.append(
             Player(self.menu.introduce_player_name("1"), 1, "x", True))
         self.players.append(Player("Machine", 2, "o", False))
示例#31
0
    def render_POST(self, request, conn):
        #if conn.new_player and conn.new_player.code in database["players"]:
        #    return "\nImpossibile creare il personaggio %s perché già esistente.\n" % conn.new_player.name

        page = self.check_number_of_players(request, conn)
        if page:
            return page

        # Ricava gli argomenti del form dalla richiesta
        race = ""
        if "race" in request.args:
            race = Element(request.args["race"][0])

        sex = ""
        if "sex" in request.args:
            sex = Element(request.args["sex"][0])

        constellation = ""
        if "constellation" in request.args:
            constellation = Element(request.args["constellation"][0])

        # Controlla la validità degli argomenti inseriti nel form
        err_msg_race = ""
        if not race:
            err_msg_race = "Scegli la razza che vuoi interpretare"
            race = RACE.NONE
        else:
            # (TD) per ora gestisce la sessualità unica delle Frijen in maniera forzata
            if race == RACE.FRIJEN:
                sex = SEX.FEMALE

        err_msg_sex = ""
        if not sex:
            err_msg_sex = "Scegli la sessualità che vuoi interpretare"
            sex = SEX.NONE

        err_msg_constellation = ""
        if not constellation:
            err_msg_constellation = "Scegli la costellazione sotto cui il tuo personaggio è nato"
            constellation = CONSTELLATION.NONE

        # Se tutti gli argomenti del form sono validi crea il personaggio e
        # passa alla pagina di creazione successiva
        if not err_msg_race and not err_msg_sex and not err_msg_constellation:
            new_player = Player()
            new_player.race          = race
            new_player.sex           = sex
            new_player.constellation = constellation
            conn.new_player = new_player
            request.redirect("create_player2.html")
            request.finish()
            return server.NOT_DONE_YET

        return self.create_page(request, conn, race, sex, constellation,
                         err_msg_race, err_msg_sex, err_msg_constellation)
示例#32
0
 def __init__(self, window):
     # Store a reference to the application window
     self.window = window
     # Key handler shortcut
     self.keys = window.keys
     # The rendering batch
     self.batch = pyglet.graphics.Batch()
     self.score_batch = pyglet.graphics.Batch()
     #self.laser_batch = pyglet.graphics.Batch()
     # The lasers
     self.laser_group = LaserGroup()
     
     # The foreground rendering groups
     self.scoregroup_hi = pyglet.graphics.OrderedGroup(1)
     self.scoregroup_lo = pyglet.graphics.OrderedGroup(0)
     self.slime_group = pyglet.graphics.OrderedGroup(2)
     self.print_group = pyglet.graphics.OrderedGroup(1)
     self.bg_group = pyglet.graphics.OrderedGroup(0)
     # Manages the background effects
     self.bg = BackgroundManager(batch=self.batch, group=self.bg_group)
     
     # The collision machinery        
     self.coll_funcs = CollisionDispatcher()
     # Each entity pair has an algorithm
     #self.coll_funcs.add(HorizontalLine, Player, coll_player_horizontal_line)
     #self.coll_funcs.add(VerticalLine, Player, coll_player_vertical_line)
     self.coll_funcs.add(HorizontalLaser, Player, coll_player_horizontal_line)
     self.coll_funcs.add(VerticalLaser, Player, coll_player_vertical_line)
     self.coll_funcs.add(Blobule, Player, coll_blob_player)
     
     # The player blob
     self.blob_group = src.glsl.blob.BlobGroup(300, 300, 8, (0.125, 0.375, 0.0))
     self.blobule_group = src.glsl.blob.BlobGroup(0, 0, 8, (0.5, 0.0, 0.5))
     self.player = Player(self, self.blob_group, self.slime_group, self.batch)
     
     logo = spr('logo.png', batch = self.batch, group=self.scoregroup_hi)
     logo.image.anchor_x, logo.image.anchor_y = 300, logo.image.height / 2
     logo.x, logo.y = 300, 300
     self.logo = logo
     self.logo_fade = False
     
     self.load_sounds()
     
     # The blobule powerup
     self.blobule = Blobule(self.blobule_group)
     
     # The lasers
     self.lines = {}
     self.do_horiz = True
     #pyglet.graphics.glLineWidth(3)
     
     # Score labels
     self.score = 0
     self.scores = []
class World:
    def __init__(self):
        self.world_map = [
            [5, 1, 1, 1, 1, 1, 1, 6],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [8, 3, 3, 3, 3, 3, 3, 7]
        ]

        self.player = Player("Name")


    def update(self):
        pass

    def render(self, window):
        self.player.render(window)
    def __init__(self):
        self.world_map = [
            [5, 1, 1, 1, 1, 1, 1, 6],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [4, 0, 0, 0, 0, 0, 0, 2],
            [8, 3, 3, 3, 3, 3, 3, 7]
        ]

        self.player = Player("Name")
示例#35
0
    def __init__(self, game_info, sound_manager):
        GameState.__init__(self, GameState.STATE_GAME, GameState.STATE_LOAD)

        self.game_info = game_info
        self.sound_manager = sound_manager

        self.game_info.set_timer_in_seconds(300)

        self.mario_game_time = -1
        self.world_shift = 0

        self.player = Player(self.sound_manager, game_info)

        self.active_sprite_list = pygame.sprite.Group()
        self.active_sprite_list.add(self.player)

        self.level = Level(game_info, self.player, self.sound_manager)

        if constants.DEBUG:
            self.debug_overlay = DebugOverlay(self.game_info, self.player)

        self.sound_manager.play_music(constants.MUSIC_MAIN_THEME)
示例#36
0
class Engine(object):
    def __init__(self):
        self.world_map = None
        self.start_new_game()

    def start_new_game(self):
        self.player = Player() # create the main player object
        self.load_area('./src/worlds/world000.py', 's0') # first world map
    

    def load_area(self, area_layout, start_scene):
        del self.world_map # free up memory by releasing old map/scene data
        self.world_map = Map(eval(open(area_layout).read()))
        self.serve(start_scene) # serve up the new starting position


    def serve(self, scene): 
        if scene == "death":
            print("You have died. How unfortunate. Better luck next time!")
            self.end_game()
        elif scene == "win":
            print("You made it out alive!\nYou win!!")
            self.end_game()
        elif scene == None:
            return print("You cannot move there.")
        elif scene.split('_')[0] == "map":
            data = scene.split('_')
            self.load_area('./src/worlds/world' + data[1] + '.py', data[2])
        else:
            self.current_scene = self.world_map.next_scene(scene)
            return print(self.current_scene.description)

    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Player command functions will serve as the interface for the player and the rest of the game.
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    def look(self, direction):
        try:
            imagery = self.current_scene.layout[direction]['look']
        except KeyError:
            imagery = "That is not a valid direction."
        else:
            if imagery == None: 
                imagery = "There is nothing to see in that direction."
        return print(imagery)


    def move(self, direction):
        try:
            destination = self.current_scene.layout[direction]['move']
        except KeyError: 
            destination = None
        return self.serve(destination)


    def find(self, command):
        if command == "items":
            self.current_scene.list_items()
        elif command == "npc":
            return print("No NPCs found.")
        else:
            return print("Not a valid command.")


    def check_inv(self, command="inv"):
        return self.player.check_inv()


    def take(self, command):
        item_name = command.strip().lower()
        try:
            item = self.current_scene.items[item_name]
        except KeyError:
            return print("{} is not an item that can be taken.".format(item_name))
        else:
            self.player.add_item(item)
            self.current_scene.remove_item(item_name)


    def drop(self, command):
        item_name = command.strip().lower()
        try:
            item = self.player.inventory[item_name][0]
        except KeyError:
            return print("{} is not an item in your inventory.".format(item_name))
        else:
            item = self.player.drop_item(item)
            self.current_scene.add_item(item)


    def examine(self, command):
        return self.current_scene.examine_item(command)


    def stats_check(self):
        player_stats = self.player.stats_check()
        return print("Health: {0}\nStamina: {1}".format(player_stats[0], player_stats[1]))
示例#37
0
 def setUp(self):
     TestCase.setUp(self)
     self.p = Player('X')
     self.c = ComputerPlayer('O')
     self.b = Board()
示例#38
0
class TestTicTacToe(TestCase):
    def setUp(self):
        TestCase.setUp(self)
        self.p = Player('X')
        self.c = ComputerPlayer('O')
        self.b = Board()

    #
    # - Test Human Player Object
    #
    def test_player_mark(self):
        move = self.p.mark
        self.assertEqual(move, 'X', "Player mark should be 'X'")

    def test_player_first_move(self):
        move = self.p.move(first_move=True)
        self.assertEqual(move, move, "Should return input from player")

    def test_player_subsequent_move(self):
        move = self.p.move()
        self.assertEqual(move, move, "Should return input from player")


    #
    # - Test Computer Player/AI Object
    #
    def test_computer_mark(self):
        m = self.c.mark
        self.assertEqual(m, 'O', "Computer mark should be 'X'")

    def test_counter_first_move_center(self):
        move = self.c.counter_first_move('4', self.b.center, self.b.corners)
        self.assertEqual(move, '5', "Should be '5'")

    def test_counter_first_move_corner(self):
        move = self.c.counter_first_move('5', self.b.center, self.b.corners)
        self.assertTrue(move in self.b.corners, "Should be a corner")

    def test_counter_second_move_edge(self):
        move = self.c.counter_second_move('1', '4', self.b.edges, self.b.corners, self.b.check_edges)
        self.assertTrue(move in self.b.edges, "Should be an edge")

    def test_counter_second_move_corner(self):
        move = self.c.counter_second_move('4', '7', self.b.edges, self.b.corners, self.b.check_edges)
        self.assertTrue(move in self.b.corners, "Should be a corner")

    def test_counter_second_move_two_edges(self):
        self.b.spaces['2'] = self.p.mark
        self.b.spaces['6'] = self.p.mark
        self.b.spaces['5'] = self.c.mark
        move = self.c.counter_second_move('2', '6', self.b.available_edges(), self.b.available_corners(), self.b.check_edges)
        self.assertEqual(move, '3', "Should be '3'. returned {0}".format(move))

    def test_computer_move_none(self):
        move = self.c.move([])
        self.assertEqual(move, None, "Should be None")

    def test_computer_move(self):
        move = self.c.move(self.b.available_spaces())
        self.assertTrue(move in self.b.available_spaces(), 
                        "Should be one of {0}".format(self.b.available_spaces()))

    def test_prevent_win(self):
        self.b.spaces['1'] = self.p.mark
        self.b.spaces['2'] = self.p.mark
        self.b.spaces['3'] = ' '
        space = self.c.prevent_win(self.b.spaces, self.p.mark, self.b.possible_wins)
        self.assertEqual(space, '3', "Space to update should be '3'")

    def test_prevent_win_none(self):
        self.b.spaces['1'] = self.p.mark
        self.b.spaces['2'] = ' '
        self.b.spaces['3'] = ' '
        space = self.c.prevent_win(self.b.spaces, self.p.mark, self.b.possible_wins)
        self.assertEqual(space, None, "Space to update should be None")

    def test_go_for_win(self):
        self.b.spaces['1'] = self.c.mark
        self.b.spaces['5'] = self.c.mark
        self.b.spaces['9'] = ' '
        space = self.c.go_for_win(self.b.spaces, self.c.mark, self.b.possible_wins)
        self.assertEqual(space, '9', "Space to update should be '9'")

    def test_go_for_win_none(self):
        self.b.spaces['1'] = ' '
        self.b.spaces['5'] = self.c.mark
        self.b.spaces['9'] = ' '
        space = self.c.go_for_win(self.b.spaces, self.c.mark, self.b.possible_wins)
        self.assertEqual(space, None, "Space to update should be None")
        
    def tearDown(self):
        TestCase.tearDown(self)
示例#39
0
class GameScene(Scene):
    def __init__(self, window):
        # Store a reference to the application window
        self.window = window
        # Key handler shortcut
        self.keys = window.keys
        # The rendering batch
        self.batch = pyglet.graphics.Batch()
        self.score_batch = pyglet.graphics.Batch()
        #self.laser_batch = pyglet.graphics.Batch()
        # The lasers
        self.laser_group = LaserGroup()
        
        # The foreground rendering groups
        self.scoregroup_hi = pyglet.graphics.OrderedGroup(1)
        self.scoregroup_lo = pyglet.graphics.OrderedGroup(0)
        self.slime_group = pyglet.graphics.OrderedGroup(2)
        self.print_group = pyglet.graphics.OrderedGroup(1)
        self.bg_group = pyglet.graphics.OrderedGroup(0)
        # Manages the background effects
        self.bg = BackgroundManager(batch=self.batch, group=self.bg_group)
        
        # The collision machinery        
        self.coll_funcs = CollisionDispatcher()
        # Each entity pair has an algorithm
        #self.coll_funcs.add(HorizontalLine, Player, coll_player_horizontal_line)
        #self.coll_funcs.add(VerticalLine, Player, coll_player_vertical_line)
        self.coll_funcs.add(HorizontalLaser, Player, coll_player_horizontal_line)
        self.coll_funcs.add(VerticalLaser, Player, coll_player_vertical_line)
        self.coll_funcs.add(Blobule, Player, coll_blob_player)
        
        # The player blob
        self.blob_group = src.glsl.blob.BlobGroup(300, 300, 8, (0.125, 0.375, 0.0))
        self.blobule_group = src.glsl.blob.BlobGroup(0, 0, 8, (0.5, 0.0, 0.5))
        self.player = Player(self, self.blob_group, self.slime_group, self.batch)
        
        logo = spr('logo.png', batch = self.batch, group=self.scoregroup_hi)
        logo.image.anchor_x, logo.image.anchor_y = 300, logo.image.height / 2
        logo.x, logo.y = 300, 300
        self.logo = logo
        self.logo_fade = False
        
        self.load_sounds()
        
        # The blobule powerup
        self.blobule = Blobule(self.blobule_group)
        
        # The lasers
        self.lines = {}
        self.do_horiz = True
        #pyglet.graphics.glLineWidth(3)
        
        # Score labels
        self.score = 0
        self.scores = []
        

    def enter(self):
        self.reset_blobule()
        
        if config.options['USE_SOUND']:
            self.window.music_player = pyglet.media.Player()
            self.window.music_player.eos_action = pyglet.media.Player.EOS_LOOP
            self.window.music_player.volume = 0.1
            self.window.music_player.queue(self.window.music_track)
            self.window.music_player.play()
            
        self.window.push_handlers(self.player)
        
        gc.disable()
        if __debug__: print "gc disabled"
    
    def leave(self):
        if __debug__: print "gc enabled"
        self.window.remove_handlers(self.player)
        gc.enable()
    
    def load_sounds(self):
        if config.options['USE_SOUND']:
            self.scream1 = pyglet.media.load('dat/audio/fx/scream1.mp3', streaming=False)
            self.scream2 = pyglet.media.load('dat/audio/fx/scream2.mp3', streaming=False)
            self.scream3 = pyglet.media.load('dat/audio/fx/scream3.mp3', streaming=False)
            self.eat = pyglet.media.load('dat/audio/fx/fx3.mp3', streaming=False)
        
    def reset_blobule(self):
        '''give the blobule a random position'''
        self.blobule_group.setPosition(random.randint(30, 570), random.randint(30, 570))
        
    def add_line(self, r=0):
        '''add a new random line hazard'''
        if r == 500:
            return
        t = 'h' if self.do_horiz else 'v'
        pos = (t, random.randint(0, 600))
        (player_x, player_y) = self.player.get_position()
        if pos in self.lines:
            self.add_line(r+1)
        elif t=='h' and abs(pos[1] - player_y) <= 32:
            self.add_line(r+1)
        elif t=='v' and abs(pos[1] - player_x) <= 32:
            self.add_line(r+1)
        else:
            if t == 'h':
                #newline = HorizontalLine(self, self.laser_batch, None, pos[1])
                newline = HorizontalLaser(self.laser_group, pos[1])
            else:
                #newline = VerticalLine(self, self.laser_batch, None, pos[1])
                newline = VerticalLaser(self.laser_group, pos[1])
            self.lines[pos] = newline
            self.do_horiz = not self.do_horiz
            
    def add_score(self):
        self.score += 1
        (blobule_x, blobule_y) = self.blobule.get_position()
        newscore = ScoreLabel(str(self.score), 
                  blobule_x, blobule_y, 
                  color=(0, 255, 0), size=12, 
                  batch=self.score_batch, group=self.scoregroup_hi)
        self.scores.append(newscore)
        
    def on_key_press(self, symbol, modifiers):
        if not self.logo_fade and self.logo.opacity == 255:
            self.logo_fade = True

    def update(self, dt):
        self.bg.update(dt) # background effects
        self.laser_group.update(dt)
        self.player.update(dt)
        self.blob_group.tick()
        self.blobule_group.tick()
        
        # Line-Player collision
        deleted_lines = []
        for key, line in self.lines.iteritems():
            #line.update(dt)
            if self.coll_funcs.collide(line, self.player):
                deleted_lines.append(key)
                if not self.player.remove_dot():
                    if len(self.player.dots) > 3:
                        if config.options['USE_SOUND']:
                            random.choice((self.scream1, self.scream2)).play().volume = 0.1
                    else:
                        if config.options['USE_SOUND']:
                            self.scream3.play().volume = 0.1
                else:
                    if config.options['USE_SOUND']:
                        random.choice((self.scream1, self.scream2)).play().volume = 0.1
                    self.window.scorescene(score=self.score)
        # clean up the dead lines
        for key in deleted_lines:
            line = self.lines.pop(key)
            line.delete()

        # Player-Blobule collision
        if self.coll_funcs.collide(self.blobule, self.player):
            if config.options['USE_SOUND']:
                self.eat.play().volume = 0.1
            self.add_score()
            self.reset_blobule() # new blobule position
            player_pos = self.player.get_position()
            self.player.add_dot(*player_pos) # increase bodymass
            self.add_line() # new random hazard
            if __debug__:
                print "lines", len(self.lines)
            if self.score >= 5:
                self.bg.do_fade = True
            if self.score >= 15:
                self.bg.do_zoom = True
            if self.score >= 25:
                self.bg.do_spin = True
            
        for label in list(self.scores):
            if label.update(dt):
                self.scores.remove(label)
                label.delete()
                
        if self.logo_fade and self.logo.opacity > 0:
            self.logo.opacity -= 75 * dt
            if self.logo.opacity <= 0:
                self.logo.opacity = 0
                self.logo_fade = False
            
    def draw(self):   
        self.batch.draw()
        self.blobule_group.draw(600, 600)
        self.blob_group.draw(600, 600)
        #self.laser_batch.draw()
        self.laser_group.draw(600, 600, self.blob_group.x, self.blob_group.y, self.score >= 20)
        self.score_batch.draw()
示例#40
0
  def testPlayerMakesAMove(self):
    player = Player('X')
    board = BoardMock()
    player.make_move("5", board)

    self.assertEquals(True, board.check_move_played)
示例#41
0
class MarioGame(GameState):
    def __init__(self, game_info, sound_manager):
        GameState.__init__(self, GameState.STATE_GAME, GameState.STATE_LOAD)

        self.game_info = game_info
        self.sound_manager = sound_manager

        self.game_info.set_timer_in_seconds(300)

        self.mario_game_time = -1
        self.world_shift = 0

        self.player = Player(self.sound_manager, game_info)

        self.active_sprite_list = pygame.sprite.Group()
        self.active_sprite_list.add(self.player)

        self.level = Level(game_info, self.player, self.sound_manager)

        if constants.DEBUG:
            self.debug_overlay = DebugOverlay(self.game_info, self.player)

        self.sound_manager.play_music(constants.MUSIC_MAIN_THEME)

    def process_events(self, events):
        for event in events:
            if event.type == pygame.KEYDOWN:
                key = event.key
                if key == pygame.K_LEFT:
                    self.player.go_left()
                if key == pygame.K_RIGHT:
                    self.player.go_right()
                if key == pygame.K_UP:
                    self.player.jump()
                if key == pygame.K_DOWN:
                    self.player.crouch()
                if key == pygame.K_a:
                    self.player.transition(constants.POWER_LARGE)
                if key == pygame.K_s:
                    self.player.transition(constants.POWER_SMALL)
                if key == pygame.K_t:
                    self.player.start_death_sequence()
                if key == pygame.K_ESCAPE or key == pygame.K_q:
                    # TODO should be pause
                    pass

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT and self.player.x_vel < 0:
                    self.player.stop()
                if event.key == pygame.K_RIGHT and self.player.x_vel > 0:
                    self.player.stop()
                if event.key == pygame.K_DOWN:
                    self.player.stop()

    def update(self, game_time):
        if self.mario_game_time == -1:
            self.mario_game_time = game_time
        else:
            self.game_info.timer -= (game_time - self.mario_game_time)
            self.mario_game_time = game_time

        if self.player.rect.bottom > constants.SCREEN_HEIGHT and self.player.transition_state is not constants.TRANSITION_DEATH_SEQUENCE:
            self.player.start_death_sequence()

        if self.player.state == constants.STATE_DEAD:
            self.switch = True
            self.game_info.num_lives -= 1
            if self.game_info.num_lives < 0:
                self.set_next_state(GameState.STATE_GAME_OVER)

        self.level.update(game_time)

    def draw(self, screen):
        self.level.draw(screen)
        self.active_sprite_list.draw(screen)

        if constants.DEBUG:
            self.debug_overlay.draw(screen)
示例#42
0
 def start_new_game(self):
     self.player = Player() # create the main player object
     self.load_area('./src/worlds/world000.py', 's0') # first world map