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功能之前必须做的。

  1. 游戏窗口创建:

• 使用pygame.display.set_mode(cfg.SCREENSIZE)根据配置文件cfg中指定的尺寸创建一个窗口,所有游戏图形都将在这个窗口中绘制。

  1. 游戏窗口标题设置:

• 使用pygame.display.set_caption()设置游戏窗口的标题,该标题显示在窗口顶部。

  1. 音效加载:

• 遍历cfg.AUDIO_PATHS字典,该字典包含游戏中使用的音效文件的名称和文件路径。

• 使用pygame.mixer.Sound加载音效文件到sounds字典中,以便在游戏过程中轻松访问和播放音效。

二、游戏元素定义与实现

  1. 游戏元素类定义:

• 定义小恐龙、路面、云、飞龙、仙人掌等游戏元素类,每个类都继承自pygame.sprite.Sprite。

• 在每个类中定义__init__方法用于初始化游戏元素,包括加载图片、设置初始位置等。

• 定义update方法用于更新游戏元素的状态,如位置变化等。

• 定义draw方法用于将游戏元素绘制到屏幕上。

  1. 障碍物移动与生成:

• 使用计时器控制障碍物的生成频率和移动速度。

• 在游戏循环中不断更新障碍物的位置,当障碍物到达屏幕左端时,将其位置重置到右端以循环出现。

  1. 小恐龙跳跃与碰撞检测:

• 监听键盘事件,当按下空格键时触发小恐龙跳跃动作。

• 通过数学计算判断小恐龙的跳跃轨迹,包括起跳、上升、下降和落地等阶段。

• 使用pygame.sprite.spritecollide或rect.collidepoint()等方法进行碰撞检测,判断小恐龙是否与障碍物发生碰撞。

三、游戏逻辑与循环

  1. 游戏主循环:

• 游戏主循环是游戏运行的核心,它不断监听并响应键盘和鼠标事件,更新游戏元素的状态,并绘制游戏画面。

• 在每一轮游戏循环中,首先更新所有游戏元素的状态(如障碍物移动、小恐龙跳跃等),然后进行碰撞检测,并根据检测结果更新游戏得分或结束游戏。

  1. 得分机制:

• 定义一个得分变量用于记录游戏过程中的得分。

• 当小恐龙成功躲避障碍物时,增加得分。

• 在游戏结束界面显示最终得分。

  1. 游戏结束与重新开始:

• 当小恐龙与障碍物发生碰撞时,游戏结束。

• 在游戏结束界面显示"Game Over"等提示信息,并提供重新开始或退出游戏的选项。

四、游戏优化与美化

  1. 帧率控制:

• 使用pygame.time.Clock()创建一个时钟对象,用于限制游戏的帧率,确保游戏的运行速度保持在一定的范围内。

  1. 游戏画面美化:

• 使用pygame.font模块加载字体并绘制文本信息,如游戏标题、得分等。

• 使用pygame.draw模块绘制简单的图形元素,如背景、边框等。

• 加载并使用游戏元素图片,使游戏画面更加生动和美观。

  1. 音效与背景音乐:

• 在游戏过程中播放背景音乐和音效,增强游戏的沉浸感和趣味性。

相关推荐
凡人的AI工具箱6 分钟前
每天40分玩转Django:Django管理界面
开发语言·数据库·后端·python·django
utmhikari11 分钟前
【Python随笔】如何用pyside6开发并部署简单的postman工具
python·postman·pyqt·pyside6·桌面工具
碧水澜庭11 分钟前
django中cookie与session的使用
python·django
每天写点bug20 分钟前
【go每日一题】:并发任务调度器
开发语言·后端·golang
一个不秃头的 程序员22 分钟前
代码加入SFTP Go ---(小白篇5)
开发语言·后端·golang
鬼义II虎神25 分钟前
将Minio设置为Django的默认Storage(django-storages)
python·django·minio·django-storages
数据小爬虫@31 分钟前
Python爬虫抓取数据,有哪些常见的问题?
开发语言·爬虫·python
Byron Loong44 分钟前
Python+OpenCV系列:【打卡系统-工具模块设计】工具模块深度揭秘,考勤智能化的核心秘籍!
python·opencv·webpack
逊嘘1 小时前
【Java数据结构】ArrayList相关的算法
java·开发语言
朽木成才1 小时前
小程序快速实现大模型聊天机器人
小程序·机器人