Пример #1
0
class GameManager(arcade.Window):
    def __init__(self):
        super().__init__(c.SCREEN_WIDTH, c.SCREEN_HEIGHT, "Sprite Example")

        # Set the working directory (where we expect to find files) to the same
        # directory this .py file is in. You can leave this out of your own
        # code, but it is needed to easily run the examples using "python -m"
        # as mentioned at the top of this program.
        file_path = os.path.dirname(os.path.abspath(__file__))
        os.chdir(file_path)

        # Variables that will hold sprite lists
        self.player_list = None
        self.obstacle_list = None
        self.set_update_rate(1 / 200)
        self.gameRunning = True
        self.counter = 0

        self.generation = CactusJumperGenerator()

        # Set up the player info
        self.player_sprite = None
        self.score = 1

        # Don't show the mouse cursor
        self.set_mouse_visible(False)

        arcade.set_background_color(arcade.color.AMAZON)

    def setup(self):
        """ Set up the game and initialize the variables. """
        obsSpeed = random.uniform(7, 11)
        obsWidth = random.uniform(30, 50)
        # Sprite lists
        self.obstacle = Obstacle(obsSpeed)
        self.obstacle.width = obsWidth
        self.generation.obstacle = self.obstacle
        self.generation.populate()
        self.player_list = arcade.SpriteList()

        # Score

        # Set up the player
        # Character image from kenney.nl

        for sprite in self.generation.population:
            self.player_list.append(sprite)

        self.fitList = [player.getFittness() for player in self.player_list]

        # Create the coins

    def on_draw(self):
        """ Draw everything """
        arcade.start_render()
        self.obstacle.draw()
        self.player_list.draw()

        arcade.draw_line(0, 100, c.SCREEN_WIDTH, 100, arcade.color.BLACK, 2)

        texture = arcade.load_texture("res/dirt.png")
        scale = .25

        for i in range(50, c.SCREEN_WIDTH, 100):
            arcade.draw_texture_rectangle(i, 50, scale * texture.width,
                                          scale * texture.height, texture, 0)

        output = f"Generation: {self.score}"
        arcade.draw_text(output, 600, 450, arcade.color.WHITE, 14)
        output2 = str(self.fitList)
        arcade.draw_text(output2, 100, 450, arcade.color.WHITE, 14)

        for p in self.player_list:
            o = "G:" + str(p.age)
            o2 = "F: %.2f" % p.getFittness()
            o3 = "JP: %.2f" % p.jumpPos
            o4 = "JH: %.2f" % p.jumpHeight
            o5 = "%.2f" % (p.gene[0][0])
            o6 = "%.2f" % (p.gene[0][1])
            o7 = "%.2f" % (p.gene[1][0])
            o8 = "%.2f" % (p.gene[1][1])
            arcade.draw_text(o, p.center_x, p.center_y + 30,
                             arcade.color.WHITE, 14)
            arcade.draw_text(o2, p.center_x, p.center_y + 10,
                             arcade.color.WHITE, 14)
            arcade.draw_text(o3, p.center_x, p.center_y - 10,
                             arcade.color.WHITE, 14)
            arcade.draw_text(o4, p.center_x, p.center_y - 30,
                             arcade.color.WHITE, 14)
            arcade.draw_text(o5, p.center_x - 20, p.center_y + 80,
                             arcade.color.WHITE, 8)
            arcade.draw_text(o6, p.center_x - 20, p.center_y + 70,
                             arcade.color.WHITE, 8)
            arcade.draw_text(o7, p.center_x - 20, p.center_y + 60,
                             arcade.color.WHITE, 8)
            arcade.draw_text(o8, p.center_x - 20, p.center_y + 50,
                             arcade.color.WHITE, 8)

    def update(self, delta_time):

        # if not self.obstacle_list:
        # self.obstacle_list.append(Obstacle(OBSTACLE_SPEED))

        # elif NEW_OBSTACLE_PER_FRAME > random.randint(0,100) and self.obstacle_list[-1].center_x <= 900:
        # self.obstacle_list.append(Obstacle(OBSTACLE_SPEED))
        self.counter += 1
        print(self.counter)
        self.obstacle.move()

        for player in self.player_list:
            if player.readyToJump():
                player.jump()

        hit_list = arcade.check_for_collision_with_list(
            self.obstacle, self.player_list)
        for player in hit_list:
            player.touched = 1000
        self.player_list.update()
        self.obstacle.update()

        # Loop through each colliding sprite, remove it, and add to the score.
        if self.generation.jumpingFinished() and self.obstacle.center_x < 10:
            self.generation.selection()
            self.score += 1
            self.setup()

    def on_key_press(self, key, modifiers):
        """ Called whenever the user presses a key. """
        if key == arcade.key.SPACE:
            pass
Пример #2
0
        if event.type == pygame.QUIT: sys.exit()
    while running:
        clock.tick(30)

        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    bird.vy = -10

        if bird.vy <= 10:
            bird.vy += 1
        bird.rect = bird.rect.move([0, bird.vy])
        if bird.rect.y > 500 or bird.rect.y < 0:
            running = False

        obstacle.move(6)
        if obstacle.getX() < -50:
            obstacle.setX(550)
            obstacle.randomizeGap()
            points += 1

        if bird.rect.colliderect(obstacle.lowerRect) or bird.rect.colliderect(
                obstacle.upperRect):
            running = False

        screen.fill((0, 0, 0))
        screen.blit(bird.img, bird.rect)
        screen.blit(obstacle.upperImg, obstacle.upperRect)
        screen.blit(obstacle.lowerImg, obstacle.lowerRect)
        label = myfont.render(str(points), 1, (255, 255, 0))
        screen.blit(label, (0, 0))
Пример #3
0
def game_loop():

    gameEnded = False
    pygame.event.clear()

    a = 0
    t0 = time()

    while not gameEnded:
        road.draw()

        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                gameEnded = True

            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    gameEnded = True

                elif event.key == pygame.K_UP or event.key == pygame.K_w:
                    a = ACCELARATION

                elif (event.key == pygame.K_LEFT or event.key == pygame.K_a
                      or event.key == pygame.K_RIGHT
                      or event.key == pygame.K_d):
                    a = 0

            elif event.type == pygame.KEYUP:
                if (event.key == pygame.K_UP or event.key == pygame.K_DOWN
                        or event.key == pygame.K_w or event.key == pygame.K_s
                        or event.key == pygame.K_LEFT
                        or event.key == pygame.K_a
                        or event.key == pygame.K_RIGHT
                        or event.key == pygame.K_d):
                    a = 0

            elif event.type == E_ADDOBSTACLE:
                obstacle = Obstacle()
                bush = Bush()

                allSprites.add(bush)
                bushes.add(bush)

                if not car.rect.colliderect(obstacle.rect):
                    allSprites.add(obstacle)
                    obstacles.add(obstacle)

        t1 = time()
        dt = (t1 - t0)
        t0 = t1

        pressed_keys = pygame.key.get_pressed()

        car.update(pressed_keys, ACCELARATION, dt)

        for obstacle in obstacles:
            if obstacle.rect.colliderect(car.rect):
                gameEnded = True
                crash()
                break
            else:
                obstacle.move(ACCELARATION, dt)

        for bush in bushes:
            bush.move(ACCELARATION, dt)

        road.move(ACCELARATION, dt)

        allSprites.draw(road.gameDisplay)

        pygame.display.update()

        clock.tick(30)