当前位置:首页>python>复刻经典!用Python打造《天天酷跑》小游戏,童年回忆杀拉满

复刻经典!用Python打造《天天酷跑》小游戏,童年回忆杀拉满

  • 2026-10-11 08:27:51
复刻经典!用Python打造《天天酷跑》小游戏,童年回忆杀拉满

还记得当年在手机上玩到停不下来的《天天酷跑》吗?今天就带大家用Python+Pygame复刻这款经典跑酷游戏,从角色跳跃到障碍躲避,从金币收集到分数统计,零基础也能跟着做,快来解锁属于你的编程版酷跑体验~

🎮 游戏核心玩法

和原版《天天酷跑》核心逻辑一致:

  • 按下空格键开始游戏,再次按空格键控制角色跳跃(支持二段跳)
  • 躲避随机生成的障碍物,碰撞一次减少1条生命,共3条生命
  • 收集金币获取分数,游戏结束后记录最高分
  • 生命耗尽游戏重置,可重新开始挑战
📌 游戏界面
1.游戏开始界面
2.游戏运行中.....
3.游戏失败

🛠️ 技术实现核心解析

1. 核心库与环境搭建

本次游戏开发基于Python的Pygame库,它是专门用于2D游戏开发的模块,能轻松实现图形渲染、事件监听、碰撞检测等功能。

# 安装依赖pip install pygame

2. 核心类设计

(1)玩家角色类(User)

封装角色的位置、尺寸、动画帧、运动状态(站立/跳跃)等属性,通过update方法实现动画切换和跳跃物理效果(重力模拟):

classUser(pygame.sprite.Sprite):def__init__(self, images):        pygame.sprite.Sprite.__init__(self)        self.images = images  # 角色精灵图        self.x = 150# 初始x坐标        self.y = 400# 初始y坐标        self.w = self.images.get_width()/12# 单帧宽度        self.h = self.images.get_height()/2# 单帧高度        self.frame = 0# 动画帧索引        self.state = 0# 0:站立 1:一段跳 2:二段跳        self.speed = -30# 跳跃初速度        self.vy = 0# 竖直方向速度        self.rect = pygame.Rect(self.x, self.y, self.w, self.h)  # 碰撞检测矩形defupdate(self):# 站立动画帧切换if self.state == 0:            self.frame += 1if self.frame > 11:                self.frame = 0# 跳跃物理效果(重力模拟)if self.state != 0:            self.y += self.vy            self.vy += 2# 重力加速度if self.y >= 400:  # 落地重置                self.y = 400                self.state = 0        self.rect = pygame.Rect(self.x, self.y, self.w, self.h)

(2)障碍物类(Obstacle)

实现障碍物的随机生成、移动(向左滚动)和自动销毁(超出屏幕后):

classObstacle(pygame.sprite.Sprite):def__init__(self, image):        pygame.sprite.Sprite.__init__(self)        self.image = image        self.w = self.image.get_width()//7        self.h = 100        self.frame = random.randint(0,5)  # 随机选择障碍物样式        self.l = self.frame * self.w        self.t = 0        self.image = self.image.subsurface(self.l, self.t, self.w, self.h)  # 裁剪精灵图        self.rect = self.image.get_rect()        self.rect.x = width  # 从屏幕右侧生成        self.rect.y = random.randint(300, height - 100)  # 随机y坐标defupdate(self):        self.rect.x -= 8# 障碍物左移速度if self.rect.right < 0:  # 超出屏幕左侧则销毁            self.kill()

(3)金币类(Coin)

逻辑与障碍物类似,专门用于分数收集:

classCoin(pygame.sprite.Sprite):def__init__(self, image):        pygame.sprite.Sprite.__init__(self)        self.image = image        self.w = self.image.get_width()//7        self.h = 100        self.frame = 6# 金币对应的精灵图帧        self.l = self.frame * self.w        self.t = 0        self.image = self.image.subsurface(self.l, self.t, self.w, self.h)        self.rect = self.image.get_rect()        self.rect.x = width        self.rect.y = random.randint(300, height - 100)defupdate(self):        self.rect.x -= 8if self.rect.right < 0:            self.kill()

3. 游戏主循环

处理事件监听(空格键控制)、碰撞检测、元素渲染、分数/生命更新等核心逻辑:

# 初始化游戏pygame.init()width = 1200height = 508screen = pygame.display.set_mode((width, height))pygame.display.set_caption("天天酷跑")clock = pygame.time.Clock()# 加载资源bgimage = pygame.image.load(r".\image\bg.bmp").convert()userimage = pygame.image.load(r".\image\role.png").convert_alpha()obstacle_img = pygame.image.load(r".\image\object.png").convert_alpha()# 初始化游戏元素user1 = User(userimage)obstacles = pygame.sprite.Group()coins = pygame.sprite.Group()life = 3run = Falsescore = 0highscore = 0# 字体初始化font_big = pygame.font.Font(r".\Font\freesansbold.ttf", 50)font_score = pygame.font.Font(r".\Font\freesansbold.ttf", 40)font_life = pygame.font.Font(r".\Font\freesansbold.ttf", 40)# 主循环whileTrue:# 事件监听for event in pygame.event.get():if event.type == pygame.QUIT:            pygame.quit()            sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:if run == False:                    run = True                    life = 3                    score = 0if user1.state == 0:                    user1.state = 1                    user1.vy = user1.speedelif user1.state == 1:                    user1.state = 2                    user1.vy = user1.speed# 游戏未开始界面if run == False:        screen.blit(bgimage, (0, 0))        start = font_big.render("space to start", True, (0,0,0))        highscore_msg = font_big.render("Highscore: " + str(highscore), True, (0,0,0))        screen.blit(start, (400, 200))        screen.blit(highscore_msg, (400, 100))# 游戏运行中else:        screen.blit(bgimage, (0, 0))# 绘制角色        screen.blit(user1.images, (user1.x, user1.y), (user1.l, user1.t, user1.w, user1.h))# 更新元素状态        user1.update()        obstacles.update()        coins.update()# 随机生成障碍物        n = random.randint(0, 250)if n < 2:            obstacle1 = Obstacle(obstacle_img)            obstacles.add(obstacle1)# 碰撞检测(障碍物)        collision = pygame.sprite.spritecollide(user1, obstacles, True)if collision:            life -= 1if life == 0:            run = False# 随机生成金币        c = random.randint(0, 250)if c < 3:            coin1 = Coin(obstacle_img)            coins.add(coin1)# 金币收集检测        collected = pygame.sprite.spritecollide(user1, coins, True)if collected:            score += 10# 绘制UI        life_msg = font_life.render("Life: " + str(life), True, (0, 0, 0))        screen.blit(life_msg, (250, 20))        obstacles.draw(screen)        coins.draw(screen)        score_msg = font_score.render("Score: " + str(score), True, (0,0,0))        screen.blit(score_msg, (20, 20))if score > highscore:            highscore = score# 刷新屏幕    pygame.display.update()    clock.tick(60)  # 60帧/秒

📁 资源准备

游戏运行需要准备以下资源文件,放在对应路径下:

  1. image/bg.bmp:游戏背景图
  2. image/role.png:玩家角色精灵图(包含多帧动画)
  3. image/object.png:障碍物+金币精灵图
  4. Font/freesansbold.ttf:字体文件(也可替换为其他ttf字体)

🚀 游戏扩展思路

  1. 音效系统:添加跳跃音效、金币收集音效、碰撞音效,提升沉浸感
  2. 角色皮肤:支持切换不同角色外观
  3. 道具系统:增加护盾、双倍积分、加速等道具
  4. 排行榜:将最高分保存到本地文件,实现持久化
  5. 难度升级:随着分数增加,障碍物移动速度加快、生成频率提高

💡 新手友好提示

  1. 若运行时提示“找不到图片/字体文件”,检查文件路径是否正确(建议用绝对路径测试)
  2. Pygame精灵图裁剪时,注意精灵图的行列数与代码中get_width()/12等数值匹配
  3. 重力模拟的vy += 2可调整数值,改变跳跃的“轻重感”
  4. 障碍物生成的random.randint(0, 250)数值越小,障碍物生成越频繁

🎯 总结

通过这个小项目,不仅能重温经典游戏的乐趣,还能掌握Pygame的核心用法:精灵类、碰撞检测、事件处理、图形渲染等。代码结构清晰,适合Python初学者作为练手项目,也可以基于此无限扩展,做出属于自己的专属版《天天酷跑》~

快动手试试吧!如果遇到问题,欢迎在评论区交流,一起解锁更多游戏开发小技巧~


✨ 关注我,获取更多Python趣味实战项目,从入门到进阶,编程路上不孤单~

素材+源代码如下:

关注我不迷路!!!

加我拉你进少儿编程交流群!!!群里面自取素材和源代码。

最新文章

随机文章