Python小游戏27——飞翔的小鸟

首先,你需要确保已经安装了Pygame库。如果还没有安装,可以通过以下命令进行安装:

【bash】

pip install pygame

游戏的代码:

【python】

import pygame

import random

初始化Pygame

pygame.init()

设置屏幕大小和标题

screen_width = 288

screen_height = 512

screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("飞翔的小鸟")

定义颜色

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

加载图像

bird_img = pygame.image.load('bird.png') # 你需要有一张名为bird.png的小鸟图像

pipe_top_img = pygame.image.load('pipe_top.png') # 管道上半部分图像

pipe_bottom_img = pygame.image.load('pipe_bottom.png') # 管道下半部分图像

定义小鸟类

class Bird:

def init(self):

self.x = screen_width // 2

self.y = screen_height // 2

self.gravity = 0.5

self.jump = -10

self.img = bird_img

self.rect = self.img.get_rect()

self.rect.centerx = self.x

self.rect.bottom = self.y

def update(self):

self.gravity += 0.1

self.y += self.jump + self.gravity

self.jump = 0

self.rect.centerx = self.x

self.rect.bottom = self.y

碰到地面则重置位置

if self.rect.bottom >= screen_height:

self.y = screen_height // 2

self.gravity = 0.5

self.jump = 0

def draw(self, screen):

screen.blit(self.img, self.rect)

def jump_action(self):

self.jump = -10

定义管道类

class Pipe:

def init(self):

self.x = screen_width + random.randint(0, 100)

self.y = random.randint(100, 300)

self.gap = random.randint(100, 200)

self.top = pygame.transform.scale(pipe_top_img, (screen_width // 10, self.y))

self.bottom = pygame.transform.scale(pipe_bottom_img, (screen_width // 10, screen_height - self.y - self.gap))

def update(self):

self.x -= 5

def draw(self, screen):

screen.blit(self.top, (self.x, 0))

screen.blit(self.bottom, (self.x, self.y + self.gap))

def check_collision(self, bird):

bird_rect = pygame.Rect(bird.rect.x - bird.rect.width // 4, bird.rect.y, bird.rect.width // 2, bird.rect.height)

if (bird_rect.colliderect(pygame.Rect(self.x, 0, self.top.get_width(), self.top.get_height())) or

bird_rect.colliderect(pygame.Rect(self.x, self.y + self.gap, self.bottom.get_width(), self.bottom.get_height()))):

return True

return False

创建小鸟和管道对象

bird = Bird()

pipes = [Pipe() for _ in range(5)] # 初始生成5个管道

游戏主循环

running = True

clock = pygame.time.Clock()

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] and bird.y == screen_height // 2: # 只有当小鸟在地面上时才能跳跃

bird.jump_action()

更新小鸟和管道位置

bird.update()

for pipe in pipes:

pipe.update()

检查碰撞

if any(pipe.check_collision(bird) for pipe in pipes):

running = False # 碰到管道则游戏结束

移除屏幕外的管道

pipes = [pipe for pipe in pipes if pipe.x > -screen_width // 10]

if not pipes:

pipes.append(Pipe()) # 当所有管道都移出屏幕时,生成新的管道

绘制背景(这里简单用白色填充)

screen.fill(WHITE)

绘制小鸟和管道

bird.draw(screen)

for pipe in pipes:

pipe.draw(screen)

更新屏幕显示

pygame.display.flip()

控制帧率

clock.tick(30)

游戏结束处理

pygame.quit()

注意事项:

  1. 你需要准备三张图像文件:bird.png(小鸟图像)、pipe_top.png(管道上半部分图像)和pipe_bottom.png(管道下半部分图像)。这些图像应该放在与你的Python脚本相同的目录中。

  2. 游戏逻辑相对简单,只实现了基本的跳跃和碰撞检测功能。你可以根据需要进一步扩展和优化游戏功能,比如添加分数系统、增加更多的管道和障碍物等。

  3. 游戏的帧率和管道生成速度等参数可以根据你的需要进行调整。

涉及代码知识总结:

  1. 导入库和模块:

• import pgzrun:导入pgzrun库,用于简化Pygame游戏的编写和运行。

• import random:导入随机库,用于生成随机数和随机位置。

• import pygame及其子模块:用于游戏开发,包括图形显示、声音处理等。

  1. 游戏设置和初始化:

• 设置窗口的宽度和高度。

• 加载和显示背景、小鸟、障碍物等图片。

• 初始化游戏变量,如得分、速度等。

  1. 游戏循环:

• draw()函数:负责绘制游戏的每一帧,包括背景、障碍物和小鸟。

• update()函数:更新游戏状态,包括小鸟的下落与上升、障碍物的移动等。

• 游戏循环中不断调用draw()和update()函数,形成游戏的动态效果。

  1. 事件处理:

• 检测鼠标点击事件,控制小鸟的上升。

• 检测游戏结束条件,如小鸟碰到障碍物或超出屏幕边界。

  1. 碰撞检测:

• 使用Pygame的碰撞检测功能,判断小鸟是否与障碍物发生碰撞。

  1. 得分系统:

• 通过穿越障碍物间的空隙来增加得分。

• 可以设置得分增加的条件和规则。

  1. 游戏重置:

• 当游戏失败时,重置游戏状态,包括得分、速度、小鸟和障碍物的位置等。

  1. 变量和数据类型:

• 使用整型、浮点型等数据类型存储游戏变量。

• 使用列表、字典等数据结构存储和管理游戏元素。

  1. 控制结构:

• 使用if语句进行条件判断,如检测游戏结束条件。

• 使用while循环实现游戏的主循环。

  1. 函数和模块:

• 定义函数来封装游戏逻辑和绘制代码,提高代码的可读性和可维护性。

• 可以将游戏的不同部分拆分成多个模块,如背景模块、小鸟模块、障碍物模块等。

  1. 物理效果(可选):

• 对于进阶玩家,可以尝试将小鸟设定为受重力作用下落,实现更自然的游戏效果。这需要使用物理公式和计算来模拟小鸟的下落和上升过程。

  1. 图形和音效(可选):

• 使用Pygame的图形和音效功能,为游戏添加更丰富的视觉效果和听觉体验。

相关推荐
lucky_lyovo2 分钟前
卷积神经网络--网络性能提升
人工智能·神经网络·cnn
liliangcsdn7 分钟前
smolagents - 如何在mac用agents做简单算术题
人工智能·macos·prompt
nju_spy11 分钟前
周志华《机器学习导论》第8章 集成学习 Ensemble Learning
人工智能·随机森林·机器学习·集成学习·boosting·bagging·南京大学
心情好的小球藻31 分钟前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
静心问道34 分钟前
TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型
人工智能·深度学习·transformer·多模态
说私域36 分钟前
基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究
人工智能·开源
亲持红叶37 分钟前
GLU 变种:ReGLU 、 GEGLU 、 SwiGLU
人工智能·深度学习·神经网络·激活函数
说私域37 分钟前
线上协同办公时代:以开源AI大模型等工具培养网感,拥抱职业变革
人工智能·开源
群联云防护小杜39 分钟前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
惜.己42 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json