No title

import pygame import random import sys # Initialize pygame pygame.init() # Screen dimensions SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("Temple Run 2 Clone") # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) BROWN = (139, 69, 19) # Player class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((30, 50)) self.image.fill(BLUE) self.rect = self.image.get_rect() self.rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT - 100) self.speed = 5 self.lane = 1 # 0: left, 1: middle, 2: right self.jumping = False self.jump_count = 10 self.score = 0 def update(self): # Lane positions lane_positions = [SCREEN_WIDTH // 4, SCREEN_WIDTH // 2, 3 * SCREEN_WIDTH // 4] target_x = lane_positions[self.lane] # Smooth lane transition if self.rect.centerx < target_x: self.rect.x += self.speed elif self.rect.centerx > target_x: self.rect.x -= self.speed # Jumping mechanic if self.jumping: if self.jump_count >= -10: neg = 1 if self.jump_count < 0: neg = -1 self.rect.y -= (self.jump_count ** 2) * 0.5 * neg self.jump_count -= 1 else: self.jumping = False self.jump_count = 10 self.rect.y = SCREEN_HEIGHT - 100 def jump(self): if not self.jumping: self.jumping = True def move_left(self): if self.lane > 0: self.lane -= 1 def move_right(self): if self.lane < 2: self.lane += 1 # Obstacle class Obstacle(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((random.randint(30, 80), random.randint(30, 60))) self.image.fill(RED) self.rect = self.image.get_rect() self.rect.x = random.choice([SCREEN_WIDTH // 4, SCREEN_WIDTH // 2, 3 * SCREEN_WIDTH // 4]) self.rect.y = -100 self.speed = random.randint(5, 10) def update(self): self.rect.y += self.speed if self.rect.top > SCREEN_HEIGHT: self.kill() # Coin class Coin(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((20, 20)) self.image.fill((255, 215, 0)) # Gold color pygame.draw.circle(self.image, (255, 255, 0), (10, 10), 10) self.rect = self.image.get_rect() self.rect.x = random.choice([SCREEN_WIDTH // 4, SCREEN_WIDTH // 2, 3 * SCREEN_WIDTH // 4]) self.rect.y = -50 self.speed = random.randint(3, 7) def update(self): self.rect.y += self.speed if self.rect.top > SCREEN_HEIGHT: self.kill() # Game setup player = Player() all_sprites = pygame.sprite.Group(player) obstacles = pygame.sprite.Group() coins = pygame.sprite.Group() clock = pygame.time.Clock() font = pygame.font.SysFont(None, 36) # Game variables obstacle_timer = 0 coin_timer = 0 game_over = False score = 0 # Game loop running = True while running: # Event handling for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.move_left() if event.key == pygame.K_RIGHT: player.move_right() if event.key == pygame.K_UP or event.key == pygame.K_SPACE: player.jump() if game_over and event.key == pygame.K_r: # Reset game player = Player() all_sprites = pygame.sprite.Group(player) obstacles = pygame.sprite.Group() coins = pygame.sprite.Group() score = 0 game_over = False if not game_over: # Spawn obstacles obstacle_timer += 1 if obstacle_timer > 60: # Every second new_obstacle = Obstacle() obstacles.add(new_obstacle) all_sprites.add(new_obstacle) obstacle_timer = 0 # Spawn coins coin_timer += 1 if coin_timer > 30: # Every half second if random.random() < 0.3: # 30% chance to spawn a coin new_coin = Coin() coins.add(new_coin) all_sprites.add(new_coin) coin_timer = 0 # Update all_sprites.update() # Collision detection with obstacles if pygame.sprite.spritecollide(player, obstacles, False): game_over = True # Coin collection coins_collected = pygame.sprite.spritecollide(player, coins, True) for coin in coins_collected: score += 10 # Drawing screen.fill(BLACK) # Draw path (three lanes) pygame.draw.rect(screen, BROWN, (0, SCREEN_HEIGHT - 50, SCREEN_WIDTH, 50)) pygame.draw.line(screen, WHITE, (SCREEN_WIDTH // 3, SCREEN_HEIGHT - 50), (SCREEN_WIDTH // 3, SCREEN_HEIGHT), 2) pygame.draw.line(screen, WHITE, (2 * SCREEN_WIDTH // 3, SCREEN_HEIGHT - 50), (2 * SCREEN_WIDTH // 3, SCREEN_HEIGHT), 2) all_sprites.draw(screen) # Display score score_text = font.render(f"Score: {score}", True, WHITE) screen.blit(score_text, (10, 10)) if game_over: game_over_text = font.render("GAME OVER! Press R to restart", True, RED) screen.blit(game_over_text, (SCREEN_WIDTH // 2 - 180, SCREEN_HEIGHT // 2)) pygame.display.flip() clock.tick(60) pygame.quit() sys.exit()

Post a Comment

Previous Post Next Post

Popular Items

Ballance ball

No title