今天教大家用Python代码实现天天酷跑游戏~

CSDN大礼包:《2025年最新全套学习资料包》免费分享

在这里插入图片描述

下面我将分步骤详细讲解如何使用Python和Pygame库实现一个简化版的天天酷跑游戏。

1. 环境准备

首先需要安装Pygame库:

pip install pygame

2. 游戏基础框架

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 游戏窗口设置
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("天天酷跑")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)

# 游戏时钟
clock = pygame.time.Clock()
FPS = 60

# 游戏主循环
running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 绘制背景
    screen.fill(WHITE)
    
    # 更新显示
    pygame.display.flip()
    
    # 控制帧率
    clock.tick(FPS)

pygame.quit()
sys.exit()

3. 添加玩家角色

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 80))
        self.image.fill(BLUE)
        self.rect = self.image.get_rect()
        self.rect.center = (100, SCREEN_HEIGHT // 2)
        self.velocity = 0
        self.gravity = 0.8
        self.jump_power = -15
        self.on_ground = True
    
    def update(self):
        # 重力作用
        self.velocity += self.gravity
        self.rect.y += self.velocity
        
        # 地面检测
        if self.rect.bottom >= SCREEN_HEIGHT - 50:
            self.rect.bottom = SCREEN_HEIGHT - 50
            self.on_ground = True
            self.velocity = 0
    
    def jump(self):
        if self.on_ground:
            self.velocity = self.jump_power
            self.on_ground = False

# 创建玩家精灵组
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

然后在主循环中更新和绘制玩家:

while running:
    # ... 事件处理 ...
    
    # 按键检测
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE] or keys[pygame.K_UP]:
        player.jump()
    
    # 更新
    all_sprites.update()
    
    # 绘制
    screen.fill(WHITE)
    all_sprites.draw(screen)
    
    # ... 其余代码 ...

4. 添加障碍物

class Obstacle(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.kill()

# 障碍物生成函数
def spawn_obstacle():
    # 随机高度和位置
    height = random.randint(30, 60)
    y = SCREEN_HEIGHT - 50 - height
    obstacle = Obstacle(SCREEN_WIDTH, y, 30, height)
    all_sprites.add(obstacle)
    obstacles.add(obstacle)

# 创建障碍物精灵组
obstacles = pygame.sprite.Group()

# 障碍物生成计时器
obstacle_timer = 0
OBSTACLE_INTERVAL = 1500  # 毫秒

在主循环中添加障碍物生成逻辑:

while running:
    # ... 事件处理 ...
    
    # 障碍物生成
    obstacle_timer += clock.get_time()
    if obstacle_timer >= OBSTACLE_INTERVAL:
        spawn_obstacle()
        obstacle_timer = 0
    
    # ... 更新和绘制 ...

5. 碰撞检测

# 在主循环中添加碰撞检测
hits = pygame.sprite.spritecollide(player, obstacles, False)
if hits:
    print("游戏结束!")
    running = False

6. 添加背景和地面

class Ground(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.rect.left = SCREEN_WIDTH

# 创建地面
grounds = pygame.sprite.Group()
for i in range(2):
    ground = Ground(i * SCREEN_WIDTH, SCREEN_HEIGHT - 50, SCREEN_WIDTH, 50)
    grounds.add(ground)
    all_sprites.add(ground)

7. 添加分数系统

score = 0
font = pygame.font.SysFont(None, 36)

# 在主循环中更新分数
score += 1  # 每帧加1分,实际游戏中可以根据通过障碍物等事件加分

# 绘制分数
score_text = font.render(f"分数: {score}", True, BLACK)
screen.blit(score_text, (10, 10))

8. 完整游戏代码

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 游戏窗口设置
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("天天酷跑")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)

# 游戏时钟
clock = pygame.time.Clock()
FPS = 60

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 80))
        self.image.fill(BLUE)
        self.rect = self.image.get_rect()
        self.rect.center = (100, SCREEN_HEIGHT // 2)
        self.velocity = 0
        self.gravity = 0.8
        self.jump_power = -15
        self.on_ground = True
    
    def update(self):
        # 重力作用
        self.velocity += self.gravity
        self.rect.y += self.velocity
        
        # 地面检测
        if self.rect.bottom >= SCREEN_HEIGHT - 50:
            self.rect.bottom = SCREEN_HEIGHT - 50
            self.on_ground = True
            self.velocity = 0
    
    def jump(self):
        if self.on_ground:
            self.velocity = self.jump_power
            self.on_ground = False

class Obstacle(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.kill()

class Ground(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.rect.left = SCREEN_WIDTH

def spawn_obstacle():
    height = random.randint(30, 60)
    y = SCREEN_HEIGHT - 50 - height
    obstacle = Obstacle(SCREEN_WIDTH, y, 30, height)
    all_sprites.add(obstacle)
    obstacles.add(obstacle)

# 创建精灵组
all_sprites = pygame.sprite.Group()
obstacles = pygame.sprite.Group()
grounds = pygame.sprite.Group()

# 创建玩家
player = Player()
all_sprites.add(player)

# 创建地面
for i in range(2):
    ground = Ground(i * SCREEN_WIDTH, SCREEN_HEIGHT - 50, SCREEN_WIDTH, 50)
    grounds.add(ground)
    all_sprites.add(ground)

# 游戏变量
score = 0
font = pygame.font.SysFont(None, 36)
obstacle_timer = 0
OBSTACLE_INTERVAL = 1500  # 毫秒

# 游戏主循环
running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 按键检测
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE] or keys[pygame.K_UP]:
        player.jump()
    
    # 障碍物生成
    obstacle_timer += clock.get_time()
    if obstacle_timer >= OBSTACLE_INTERVAL:
        spawn_obstacle()
        obstacle_timer = 0
    
    # 更新分数
    score += 1
    
    # 更新
    all_sprites.update()
    
    # 碰撞检测
    hits = pygame.sprite.spritecollide(player, obstacles, False)
    if hits:
        running = False
    
    # 绘制背景
    screen.fill(WHITE)
    
    # 绘制所有精灵
    all_sprites.draw(screen)
    
    # 绘制分数
    score_text = font.render(f"分数: {score}", True, BLACK)
    screen.blit(score_text, (10, 10))
    
    # 更新显示
    pygame.display.flip()
    
    # 控制帧率
    clock.tick(FPS)

pygame.quit()
sys.exit()

9. 游戏扩展建议

  1. 添加图片资源:替换简单的几何图形为实际的游戏素材
  2. 添加音效:跳跃、碰撞、背景音乐等
  3. 多种障碍物:不同高度、大小的障碍物,甚至移动的障碍物
  4. 道具系统:加速、无敌、磁铁等道具
  5. 角色动画:奔跑、跳跃、滑行等动画效果
  6. 游戏菜单:开始界面、暂停界面、结束界面
  7. 难度递增:随着分数增加,游戏速度加快或障碍物增多

10. 总结

这个简化版的天天酷跑游戏包含了核心玩法:

  • 玩家控制角色跳跃
  • 障碍物生成和移动
  • 碰撞检测
  • 分数系统
  • 无限滚动地面

你可以基于这个框架继续扩展,添加更多功能和视觉效果,使其更接近商业游戏的水平。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐