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
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))
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)