当前位置: 首页 > 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 数据…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...