当前位置: 首页 > news >正文

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. 音效与背景音乐:

 

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

相关文章:

Python小游戏24——小恐龙躲避游戏

首先&#xff0c;你需要安装Pygame库。如果你还没有安装&#xff0c;可以通过以下命令安装&#xff1a; 【bash】 pip install pygame 【python】代码 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 600 screen …...

Python 的多态笔记

Python的多态实际是通过instance 实现的 class Person:def __init__(self, name,age):self.name nameself.age agedef feed_pet(self,pet):#isinastance(obj,类)-->判断obj,是不是这个类的对象&#xff0c;或者判断obj是不是该类的子类的对象if isinstance(pet, Pet):sel…...

go module使用

go module介绍 go module是go官⽅⾃带的go依赖管理库,在1.13版本正式推荐使⽤ go module可以将某个项⽬(⽂件夹)下的所有依赖整理成⼀个 go.mod ⽂件,⾥⾯写⼊了依赖的版本等 使⽤ go module之后我们可不⽤将代码放置在src下了 使⽤ go module 管理依赖后会在项⽬根⽬录下⽣成…...

c ++零基础可视化——数组

c 零基础可视化 数组 一些知识&#xff1a; 关于给数组赋值&#xff0c;一个函数为memset&#xff0c;其在cplusplus.com中的描述如下&#xff1a; void * memset ( void * ptr, int value, size_t num );Sets the first num bytes of the block of memory pointed by ptr to…...

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞&#xff0c;实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…...

计算机组成原理笔记----基础篇

计算机系统硬件软件 软件 ├── 系统软件 │ ├── 操作系统 │ └── 工具软件 └── 应用软件├── 办公软件├── 媒体软件└── 浏览器软件硬件 ├── 计算机硬件 │ ├── 中央处理器&#xff08;CPU&#xff09; │ ├── 存储设备 │ │ ├── …...

TheadLocal出现的内存泄漏具体泄漏的是什么?弱引用在里面有什么作用?什么情景什么问题?

首先ThreadLocal是什么就不介绍了&#xff01;这篇是讲讲里面的东西。 再简单说一下强引用和弱引用&#xff0c;举个例子&#xff0c;我们平常new出来的对象就是强引用的&#xff0c;在栈中有强引用&#xff0c;所以在gc的时候&#xff0c;堆中的实例对象不会被清除掉。 弱引…...

AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型

1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展&#xff0c;越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中&#xff0c;从而显著提升运营效率和用户满意度。在这篇文章…...

CTF-RE 从0到N:RC4

RC4加密算法简介 RC4是由Ron Rivest于1987年设计的一种流加密算法。它通过伪随机数生成器生成密钥流&#xff0c;并将该密钥流与明文进行异或运算来完成加密和解密。 RC4的加密流程 RC4主要包含两个阶段&#xff1a; 密钥调度算法 (Key Scheduling Algorithm, KSA)&#xff…...

HbuilderX 插件开发-模板创建

实现思路 使用HbuilderX 打开某个文档时右键点击的时候获取当前打开的文档内容使用 API 替换为自己的模板 示例 package.json {"id": "SL-HbuilderX-Tool","name": "SL-HbuilderX-Tool","description": "快速创建h…...

打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...

YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection

摘要 车辆牌照检测在智能交通系统中发挥着关键作用。检测汽车、卡车和面包车等的牌照对于执法、监控和收费站操作非常有用。如何快速准确地检测牌照对牌照识别至关重要。然而&#xff0c;在现实世界复杂捕捉场景中&#xff0c;光照条件不均匀或牌照拍摄角度的倾斜会发生剧烈变…...

ArcGIS的汉字(亚洲文本)垂直标注

01 需求说明 实现ArcGIS的汉字&#xff08;亚洲文本的垂直标注&#xff09;。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…...

【面试题】

1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途&#xff1a;用于异步串行通信。信号线&#xff1a;通常需要两根线&#xff08;TX 和 RX&#xff09;&#xff0c;有时还需一根地线。通信方式&#xff1a;点对点。数据传输&#xff1a;单向或…...

Leetcode 寻找峰值

为了实现时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)&#xff0c;可以使用二分查找法&#xff1a; 解题思路&#xff1a; 峰值的特性是&#xff1a;当前元素大于左右相邻元素。使用二分法&#xff1a; 如果 nums[mid] > nums[mid 1]&#xff0c;说明峰值在左侧或当前…...

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所&#xff08;NIMH&#xff09;的数据&#xff0c;到 2021 年&#xff0c;22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内&#xff0c;精神疾病占非致命性疾病负担的 30%&#xff0c;并被世界…...

Infisical开源密钥管理平台实战指南

1. 引言 在现代软件开发中,安全地管理环境变量和敏感信息已成为一个关键挑战。Infisical作为一个开源的密钥管理平台,为这一问题提供了强大而灵活的解决方案。本指南将深入探讨Infisical的功能,并通过实际操作步骤,帮助读者全面了解和使用这个工具。 2. Infisical概述 I…...

AI大模型:重塑软件开发流程与模式

人工智能技术的飞速发展&#xff0c;尤其是AI大模型的兴起&#xff0c;正以前所未有的速度和深度影响着各行各业&#xff0c;其中软件开发领域尤为显著。AI大模型&#xff0c;如GPT系列、BERT、Claude等通过其强大的自然语言处理能力、代码理解和生成能力&#xff0c;正在从根本…...

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢&#xff1f; 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时&#xff0c;选择合适的配置Flash是我们进行硬件设计必须考虑的&#xff0c;那么配置Flash大小的选择由什…...

基于Java Springboot图书借阅系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...