【Python游戏开发实战】自制“天天酷跑”游戏,源码全公开!
引言:
大家好!今天给大家带来一个超酷的Python项目——自制“天天酷跑”游戏!🏃♂️💨 不仅能让你体验编程的乐趣,还能让你重温童年的经典游戏。跟着我一起,用Python和Pygame库,打造属于你自己的跑酷世界!
正文:
1. Python游戏开发的魅力
Python以其简洁的语法和强大的库支持,成为了游戏开发的热门选择。Pygame库更是让游戏开发变得简单有趣。今天,我们就用Python来实现一个经典的跑酷游戏——“天天酷跑”。
2. 环境准备
在开始之前,请确保你已经安装了Python和Pygame库。如果还没有安装Pygame,可以通过以下命令安装:
pip install pygame
3. 游戏制作概览
制作一个完整的“天天酷跑”游戏,涉及到图形渲染、物理引擎、用户输入处理和游戏逻辑等多个方面。我们的游戏将包含基本的跑、跳动作,以及障碍物和得分系统。
4. 游戏代码解析
4.1 导入库和设置窗口
首先,我们需要导入Pygame库,并设置游戏窗口的宽度和高度:
import pygame, sys, random
width = 1200
height = 508
size = (width, height)
4.2 定义游戏角色
接下来,定义游戏中的角色类:
class Role:
def __init__(self, surface=None, y=None):
self.surface = surface
self.y = y
self.w = (surface.get_width()) / 12
self.h = surface.get_height() / 2
self.currentFrame = -1
self.state = 0 # 0代表跑步状态,1代表跳跃状态,2代表连续跳跃
self.g = 1 # 重力加速度
self.vy = 0 # y轴速度
self.vy_start = -20 # 起跳开始速度
def getRect(self):
return (0, self.y + 12, self.w, self.h)
4.3 定义障碍物
定义障碍物类:
class Object:
def __init__(self, surface, x=0, y=0):
self.surface = surface
self.x = x
self.y = y
self.w = surface.get_width()
self.h = surface.get_height()
self.currentFrame = random.randint(0, 6)
self.w = 100
self.h = 100
def getRect(self):
return (self.x, self.y, self.w, self.h)
def collision(self, rect1, rect2):
# 碰撞检测
if (rect2[0] >= rect1[2] - 20) or (rect1[0] + 40 >= rect2[2]) or (rect1[1] + rect1[3] < rect2[1] + 20) or (rect2[1] + rect2[3] < rect1[1] + 20):
return False
return True
4.4 定义背景
定义背景类:
class Bg:
def __init__(self, surface):
self.surface = surface
self.dx = -10
self.w = surface.get_width()
self.rect = surface.get_rect()
4.5 初始化游戏
初始化游戏状态和对象:
def initGame():
global bg, role, clock, gameState, surObject, surGameOver, score, myFont, myFont1, objectList
score = 0
objectList = []
myFont = pygame.font.Font("./freesansbold.ttf", 32)
myFont1 = pygame.font.Font("./freesansbold.ttf", 64)
clock = pygame.time.Clock()
gameState = 0
surBg = pygame.image.load("image/bg.bmp").convert_alpha()
bg = Bg(surBg)
surGameOver = pygame.image.load("image/gameover.bmp").convert_alpha()
surRole = pygame.image.load("image/role.png").convert_alpha()
role = Role(surRole, 508 - 85)
surObject = pygame.image.load("image/object.png").convert_alpha()
4.6 添加障碍物
添加障碍物的生成逻辑:
def addObject():
global surObject, object, objectList
rate = 4
if not random.randint(0, 300) < rate:
return
y = random.choice([height - 100, height - 200, height - 300, height - 400])
object = Object(surObject, width + 40, y)
objectList.append(object)
4.7 更新游戏逻辑
更新游戏逻辑,包括键盘事件处理、背景和角色移动、障碍物移动和碰撞检测:
def updateLogic():
global gameState, score
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if gameState == 0:
if event.key == pygame.K_SPACE:
if role.state == 0:
role.state = 1
role.vy = role.vy_start
elif role.state == 1:
role.state = 2
role.vy = role.vy_start
elif gameState == 1:
if event.key == pygame.K_SPACE:
initGame()
if gameState == 0:
bg.dx += 10
if bg.dx == 1200:
bg.dx = 0
if role.state == 0:
role.currentFrame += 1
if role.currentFrame == 12:
role.currentFrame = 0
else:
role.y += role.vy
role.vy += role.g
if role.y >= 508 - 85:
role.y = 508 - 85
role.state = 0
addObject()
for object in objectList:
object.x -= 10
if object.x + object.w <= 0:
objectList.remove(object)
score += 10
if object.currentFrame == 6:
score += 100
else:
gameState = 1
5. 游戏运行与优化
运行游戏后,你可能需要不断地优化和调试代码,以确保游戏的流畅性和稳定性。这不仅是一个技术挑战,也是提升编程技能的好机会。
6. 扩展与完善
这个示例只是一个起点,你可以根据需要进行扩展和完善。比如添加多个障碍物类型、不同的游戏关卡、音效等,让游戏更加丰富和有趣。
结语:
通过这篇文章,你不仅学会了如何用Python制作一个简单的“天天酷跑”游戏,还了解了如何扩展和完善你的项目。希望这篇文章能激发你对Python游戏开发的热情,让我们一起在编程的世界里奔跑吧!