用Python代码实现天天酷跑游戏(附源码)
玩家控制角色跳跃障碍物生成和移动碰撞检测分数系统无限滚动地面你可以基于这个框架继续扩展,添加更多功能和视觉效果,使其更接近商业游戏的水平。
·
今天教大家用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. 游戏扩展建议
- 添加图片资源:替换简单的几何图形为实际的游戏素材
- 添加音效:跳跃、碰撞、背景音乐等
- 多种障碍物:不同高度、大小的障碍物,甚至移动的障碍物
- 道具系统:加速、无敌、磁铁等道具
- 角色动画:奔跑、跳跃、滑行等动画效果
- 游戏菜单:开始界面、暂停界面、结束界面
- 难度递增:随着分数增加,游戏速度加快或障碍物增多
10. 总结
这个简化版的天天酷跑游戏包含了核心玩法:
- 玩家控制角色跳跃
- 障碍物生成和移动
- 碰撞检测
- 分数系统
- 无限滚动地面
你可以基于这个框架继续扩展,添加更多功能和视觉效果,使其更接近商业游戏的水平。
更多推荐
所有评论(0)