Python 的 Pygame 库,编写简单的 Flappy Bird 游戏

Pygame 是一个用 Python 编写的开源游戏开发框架,专门用于编写 2D 游戏。它提供了丰富的工具和功能,使得开发者能够快速实现游戏中的图形渲染、声音播放、输入处理和动画效果等功能。Pygame 非常适合初学者和想要快速创建游戏原型的开发者。

Pygame 的主要特点

  1. 跨平台:Pygame 可以在 Windows、Mac 和 Linux 上运行,使得开发的游戏能够在多个平台上发布。
  2. 简单易学:Python 的简洁语法加上 Pygame 提供的友好接口,使得 Pygame 非常适合编程初学者入门游戏开发。
  3. 丰富的功能模块
    • 图形处理:支持加载和绘制图像、图形元素、精灵动画等,方便构建游戏画面。
    • 声音和音乐:支持播放音效和背景音乐,为游戏添加声音效果。
    • 事件处理:可以处理键盘、鼠标、手柄等多种输入,响应玩家的操作。
    • 游戏时钟:提供了时间管理和帧率控制,确保游戏运行流畅。
  4. 良好的文档和社区:Pygame 有详细的文档和活跃的开发者社区,方便查阅资料和获取帮助。

Pygame 的基本架构

Pygame 的游戏一般由以下几个核心部分组成:

  • 初始化:导入并初始化 Pygame,设置窗口大小、标题等。
  • 主循环:包括事件处理、游戏逻辑更新、绘图和屏幕刷新。
  • 事件处理:通过捕获用户的输入事件(如键盘和鼠标)来控制游戏行为。
  • 游戏逻辑更新:更新游戏状态,例如角色位置、得分等。
  • 渲染和刷新:将画面绘制在屏幕上,并刷新显示。

示例

以下是一个简单的 Pygame 程序框架:

import pygame
import sys# 初始化 Pygame
pygame.init()# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Pygame 简单示例")# 游戏循环
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 填充背景色screen.fill((0, 0, 0))# 更新显示pygame.display.flip()# 退出 Pygame
pygame.quit()
sys.exit()

Pygame 的应用场景

Pygame 适用于开发各种 2D 游戏和简单的交互式应用,如:

  • 跑酷游戏
  • 益智小游戏
  • 复古风格的像素游戏
  • 学习编程和游戏开发的教学助手

《Flappy Bird》是一个由越南开发者阮哈东(Dong Nguyen)设计的移动游戏,于2013年5月首次发布。游戏在2014年突然流行开来,因其简单而极具挑战性的玩法迅速吸引了大量玩家。

在《Flappy Bird》中,玩家通过点击屏幕使小鸟向上飞行,松开则下落,目标是操控小鸟飞过一系列管道而不碰到障碍物。游戏看似简单,但由于操作难度较高,很多人很难持续通过管道而不会失败。正因为其高难度和简单玩法,这款游戏迅速成为热门。

有趣的是,由于游戏过于流行,导致开发者觉得给人们带来了“太多压力”,在2014年初他决定从应用商店下架游戏。这种下架行为反而让《Flappy Bird》更加知名,并引发了一股怀旧情绪。


下面是一个完整的《Flappy Bird》简化版代码,实现了小鸟的跳跃、重力效果、障碍物生成、碰撞检测和得分系统。

在运行代码之前,请确保安装了Pygame库。你可以使用以下命令安装:

pip install pygame

完整代码

import pygame
import random
import sys# 初始化 Pygame
pygame.init()# 屏幕大小和颜色
WIDTH, HEIGHT = 400, 600
WHITE = (255, 255, 255)
BLUE = (135, 206, 250)
YELLOW = (255, 255, 0)
GREEN = (0, 255, 0)screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Flappy Bird 简化版")
clock = pygame.time.Clock()# 小鸟参数
bird_x = 50                  # 小鸟的水平位置(x坐标)
bird_y = HEIGHT // 2         # 小鸟的垂直位置(y坐标),初始为屏幕高度的一半
bird_radius = 20             # 小鸟的半径,用于绘制小鸟的大小
gravity = 0.5                # 重力值,控制小鸟下落的速度
bird_speed = 0               # 小鸟的初始垂直速度
jump_speed = -8              # 小鸟跳跃时的速度(负值使小鸟向上飞)# 管道参数
pipe_width = 70              # 管道的宽度
pipe_gap = 200               # 上下管道之间的距离(空隙)
pipe_speed = 3               # 管道移动的速度
pipe_frequency = 2500        # 管道生成的频率,以毫秒为单位(1500毫秒,即每1.5秒生成一个新管道)# 分数
score = 0
font = pygame.font.Font(None, 36)# 管道列表
pipes = []
ADD_PIPE = pygame.USEREVENT
pygame.time.set_timer(ADD_PIPE, pipe_frequency)def create_pipe():"""创建新的管道,返回上管道和下管道的矩形对象"""height = random.randint(100, 400)top_pipe = pygame.Rect(WIDTH, 0, pipe_width, height)bottom_pipe = pygame.Rect(WIDTH, height + pipe_gap, pipe_width, HEIGHT - height - pipe_gap)return top_pipe, bottom_pipedef move_pipes(pipes):"""移动管道"""for pipe in pipes:pipe.x -= pipe_speedreturn [pipe for pipe in pipes if pipe.x + pipe_width > 0]def check_collision(bird, pipes):"""检查小鸟是否与管道或边界碰撞"""if bird.y - bird_radius <= 0 or bird.y + bird_radius >= HEIGHT:return Truefor pipe in pipes:if bird.colliderect(pipe):return Truereturn False# 游戏循环
running = True
while running:screen.fill(BLUE)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:bird_speed = jump_speed  # 点击空格时小鸟向上跳跃if event.type == ADD_PIPE:pipes.extend(create_pipe())  # 添加新管道# 小鸟运动bird_speed += gravitybird_y += bird_speedbird = pygame.Rect(bird_x, bird_y, bird_radius * 2, bird_radius * 2)pygame.draw.circle(screen, YELLOW, (bird_x, int(bird_y)), bird_radius)# 管道运动pipes = move_pipes(pipes)for pipe in pipes:pygame.draw.rect(screen, GREEN, pipe)# 检查碰撞if check_collision(bird, pipes):print(f"游戏结束!最终得分: {score}")pygame.quit()sys.exit()# 更新得分for pipe in pipes:if pipe.right == bird_x:score += 0.5  # 每通过一个管道对得分加1(两个管道成对出现)# 显示得分score_text = font.render(f"Score: {int(score)}", True, WHITE)screen.blit(score_text, (10, 10))pygame.display.flip()clock.tick(30)  # 控制帧率

在这里插入图片描述

代码说明

  • 小鸟的运动:小鸟受到重力影响,按空格键可以向上跳跃。
  • 管道生成和移动:每隔一段时间生成一对上下管道,管道会从右向左移动。
  • 碰撞检测:检测小鸟是否碰到管道或屏幕边界,一旦碰到,游戏结束。
  • 得分系统:每通过一对管道得1分。

运行效果

  • 游戏中小鸟会自动下落,按空格键控制其上升。
  • 小鸟需要通过上下管道之间的空隙,碰到管道或边界即游戏结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-222.完全二叉树的节点个数

. - 力扣&#xff08;LeetCode&#xff09; 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用&#xff08;一&#xff09;索引的创建及数据组织&#xff08;二&#xff09;不同类型的索引&#xff08;三&#xff09;索引的额外属性 三、索引的优化与查询计划分析&#xff08;一&#xff09;通过prof…

企业如何实现无缝数据中心进行大数据迁移呢?

数据中心迁移是企业面临的一个复杂而关键的挑战&#xff0c;涉及到大量的数据移动和系统的重新部署。随着业务的扩展和技术的进步&#xff0c;企业可能需要将数据中心迁移到新的位置或升级到更先进的设备。在进行数据迁移时&#xff0c;必须精心规划和执行&#xff0c;以确保数…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中&#xff0c;我们了解了基础的网络知识&#xff0c;网络的出…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

最全最简单理解迭代器

1. 迭代器的基础概念(iterator) 1.1 本质 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 1.2 作用: 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。容器提供迭代…

MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3

一、基本信息 中文名称&#xff1a;[2-(三甲基铵)乙基]甲硫基磺酸溴&#xff1b;MTSET巯基反应染料 英文名称&#xff1a;MTSET&#xff1b;[2-(Trimethylammonium)ethyl]methanethiosulfonate Bromide CAS号&#xff1a;91774-25-3 分子式&#xff1a;C6H16BrNO2S2 分子量…

CC1链学习记录

&#x1f338; 前言 上篇文章学习记录了URLDNS链&#xff0c;接下来学习一下Common-Colections利用链。 &#x1f338; 相关介绍 Common-Colections是Apache软件基金会的项目&#xff0c;对Java标准的Collections API提供了很好的补充&#xff0c;在其基础上对常用的数据结构…

数据结构PTA

20&#xff1a;C 22&#xff1a;B 27&#xff1a;D 填空 4-2&#xff1a;19 4-4&#xff1a;66 4-5&#xff1a;8 5-x&#xff1a;不加分号 ⬇&#xff1a;top p->next 编程 单链表 每个节点除了存放数据元素外&#xff0c;还要存储指向下一节点的指针…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网&#xff1a;www.iccaid.net 大会时间&#xff1a;2024年12月13-15日 大会地…

【go从零单排】Command-Line Flags、Command-Line Subcommands命令行和子命令

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;命令行标志&#xff08;Command-Line Flags&#xff09…

WEB攻防-通用漏洞SQL读写注入MYSQLMSSQLPostgraSQL

知识点&#xff1a; 1、SQL注入-MYSQL数据库&#xff1b; 2、SQL注入-MSSQL数据库&#xff1b; 3、SQL注入-PostgreSQL数据库&#xff1b; 首先要找到注入点 详细点&#xff1a; Access无高权限注入点-只能猜解&#xff0c;还是暴力猜解 MYSQL&#xff0c;PostgreSQL&am…

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系&#xff1b; 平时在dev环境开发时&#xff0c;会把自己的本地服务也注册上去&#xff0c;但是这样的话&#xff0c;在客户端调用时请求可能会打到自己本地&#xff0c;对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

腾讯云11.11云服务器活动--上云拼团GO

目录 云服务器活动介绍&#xff1a; 轻量服务器 上GO拼团领券 云服务器购买 HAI现金券 学生专享GPU 活动总结 云服务器活动介绍&#xff1a; 双十一临近,这是您一年中最期待的购物狂欢时刻。作为国内领先的云计算服务商,腾讯云诚挚为您呈献前所未有的优惠福利,助您在这…

防脱生发最有效的产品,测评总结早看少踩雷

别人脱单、脱贫你脱发&#xff0c;就问你心酸不心酸&#xff1f;探索防脱之路确实不易&#xff0c;到底怎么才能有效防脱养发呢&#xff0c;很有必要分享一下我多年的防脱心得&#xff0c;这几款一直在用的防脱育发好物&#xff0c;秃头朋友们可以看看~ **露卡菲娅防脱精华液**…

c++:string(一)

文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题&#xff08;1&#xff09;怎么扩容&#xff08;2&#…

【2048】我的创作纪念日

机缘 2048天&#xff0c;不知不觉来csdn博客已经有2048天了&#xff0c;其实用csdn平台很久了&#xff0c;实际上写博客还是从2019年开始。 还记得最初成为创作者初心是什么吗&#xff1f; 最开始&#xff0c;主要是用来做笔记。平时工作中、学习中遇到的技术相关问题都会在cs…

壁仞科技上市前最后一波 校招 社招 内推

随着美国大选结束&#xff0c;国内GPU 产业得到空前的的发展空间&#xff0c;国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技&#xff0c;摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点&#xff0c;抓住机会&#x1f4aa; 壁仞科技正在火热…

sql server 自动kill 查询超过20分钟的语句

起源于同事的烂sql 容易拖垮 数据服务器&#xff0c; 周末没有人监控数据库&#xff0c;好几次导致主从数据库同步失败 &#xff0c;不得不自动kill 烂sql 语句如下 &#xff1a; -- 声明变量来存储超过20分钟的查询的会话ID DECLARE kill_sessions TABLE (session_id INT); …

GMS地下水数值模拟、全流程各工程类型地下水环境影响评价、MODFLOW Flex

GMS地下水数值模拟技术及在地下水环评中的应用 以地下水数值模拟软件GMS10.1操作为主要内容&#xff0c;在教学中强调三维地质结构建模、水文地质模型概化、边界条件设定、参数反演和模型校核等关键环节。不仅使学员掌握地下水数值模拟软件GMS10.1的全过程实际操作技术的基本技…