Python小游戏24——小恐龙躲避游戏
首先,你需要安装Pygame库。如果你还没有安装,可以通过以下命令安装:
【bash】
pip install pygame
- 【python】代码
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("恐龙躲避游戏")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 恐龙类
class Dino:
def __init__(self):
self.image = pygame.image.load("dino.png").convert_alpha() # 加载恐龙图片,请确保图片在同一目录下
self.rect = self.image.get_rect()
self.rect.x = 50
self.rect.y = screen_height - self.rect.height - 50
self.speed = 5
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and self.rect.x > 0:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT] and self.rect.x < screen_width - self.rect.width:
self.rect.x += self.speed
def draw(self, screen):
screen.blit(self.image, self.rect)
# 障碍物类
class Obstacle:
def __init__(self):
self.image = pygame.image.load("obstacle.png").convert_alpha() # 加载障碍物图片,请确保图片在同一目录下
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = -self.rect.height
self.speed = 3
def move(self):
self.rect.y += self.speed
def draw(self, screen):
screen.blit(self.image, self.rect)
# 游戏主循环
def main():
clock = pygame.time.Clock()
dino = Dino()
obstacles = [Obstacle() for _ in range(5)] # 初始化5个障碍物
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 更新恐龙和障碍物位置
dino.move()
for obstacle in obstacles:
obstacle.move()
# 检查碰撞
if dino.rect.colliderect(obstacle.rect):
print("游戏结束!")
running = False
# 如果障碍物移出屏幕,则重新生成
for i, obstacle in enumerate(obstacles):
if obstacle.rect.y > screen_height:
obstacles[i] = Obstacle()
# 绘制背景(这里使用白色作为背景)
screen.fill(WHITE)
# 绘制恐龙和障碍物
dino.draw(screen)
for obstacle in obstacles:
obstacle.draw(screen)
# 更新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(30)
pygame.quit()
if __name__ == "__main__":
main()
- 注意事项:
1. 你需要准备两张图片:dino.png(恐龙图片)和obstacle.png(障碍物图片),并将它们放在与代码相同的目录中。
2. 代码中使用了简单的碰撞检测逻辑。如果恐龙与障碍物碰撞,游戏将结束。
3. 你可以根据需要调整恐龙的速度、障碍物的速度、数量等参数。
- 涉及代码知识点总结
一、游戏初始化与配置
1. Pygame模块初始化:
• 使用pygame.init()初始化所有Pygame模块,这是在使用任何其他Pygame功能之前必须做的。
2. 游戏窗口创建:
• 使用pygame.display.set_mode(cfg.SCREENSIZE)根据配置文件cfg中指定的尺寸创建一个窗口,所有游戏图形都将在这个窗口中绘制。
3. 游戏窗口标题设置:
• 使用pygame.display.set_caption()设置游戏窗口的标题,该标题显示在窗口顶部。
4. 音效加载:
• 遍历cfg.AUDIO_PATHS字典,该字典包含游戏中使用的音效文件的名称和文件路径。
• 使用pygame.mixer.Sound加载音效文件到sounds字典中,以便在游戏过程中轻松访问和播放音效。
二、游戏元素定义与实现
1. 游戏元素类定义:
• 定义小恐龙、路面、云、飞龙、仙人掌等游戏元素类,每个类都继承自pygame.sprite.Sprite。
• 在每个类中定义__init__方法用于初始化游戏元素,包括加载图片、设置初始位置等。
• 定义update方法用于更新游戏元素的状态,如位置变化等。
• 定义draw方法用于将游戏元素绘制到屏幕上。
2. 障碍物移动与生成:
• 使用计时器控制障碍物的生成频率和移动速度。
• 在游戏循环中不断更新障碍物的位置,当障碍物到达屏幕左端时,将其位置重置到右端以循环出现。
3. 小恐龙跳跃与碰撞检测:
• 监听键盘事件,当按下空格键时触发小恐龙跳跃动作。
• 通过数学计算判断小恐龙的跳跃轨迹,包括起跳、上升、下降和落地等阶段。
• 使用pygame.sprite.spritecollide或rect.collidepoint()等方法进行碰撞检测,判断小恐龙是否与障碍物发生碰撞。
三、游戏逻辑与循环
1. 游戏主循环:
• 游戏主循环是游戏运行的核心,它不断监听并响应键盘和鼠标事件,更新游戏元素的状态,并绘制游戏画面。
• 在每一轮游戏循环中,首先更新所有游戏元素的状态(如障碍物移动、小恐龙跳跃等),然后进行碰撞检测,并根据检测结果更新游戏得分或结束游戏。
2. 得分机制:
• 定义一个得分变量用于记录游戏过程中的得分。
• 当小恐龙成功躲避障碍物时,增加得分。
• 在游戏结束界面显示最终得分。
3. 游戏结束与重新开始:
• 当小恐龙与障碍物发生碰撞时,游戏结束。
• 在游戏结束界面显示“Game Over”等提示信息,并提供重新开始或退出游戏的选项。
四、游戏优化与美化
1. 帧率控制:
• 使用pygame.time.Clock()创建一个时钟对象,用于限制游戏的帧率,确保游戏的运行速度保持在一定的范围内。
2. 游戏画面美化:
• 使用pygame.font模块加载字体并绘制文本信息,如游戏标题、得分等。
• 使用pygame.draw模块绘制简单的图形元素,如背景、边框等。
• 加载并使用游戏元素图片,使游戏画面更加生动和美观。
3. 音效与背景音乐:
• 在游戏过程中播放背景音乐和音效,增强游戏的沉浸感和趣味性。