关于制作Python游戏全过程(汇总1)
目录
前言:
1.plane_sprites模块:
1.1导入模块:
1.1.1pygame:一个用于创建游戏的Python库。
1.1.2random:Python标准库中的一个模块,用于生成随机数。
1.2定义事件代号:
1.2.1ENEMY_EVENT:自定义的敌机出场事件代号,使用pygame.USEREVENT作为基础值。
1.2.2FIRE:自定义的子弹发射事件代号,设置为敌机出场事件代号加1。
1.3基类:GameSprites:
1.3.1GameSprites:所有游戏精灵的基类。
1.3.2__init__:初始化方法,接收图像名称和速度作为参数,并加载图像。
1.3.3update:更新精灵的位置,使其沿y轴向下移动。
1.4背景类:Background:
1.4.1Background:继承自GameSprites的背景类。
1.4.2__init__:除了加载背景图像外,还可以选择是否从屏幕上方开始显示背景。
1.4.3update:除了基本的向下移动外,还负责在背景完全移出屏幕时将其重置到屏幕上方
1.5敌机类:Enemy:
1.5.1Enemy:继承自GameSprites的敌机类。
1.5.2__init__:初始化时设置随机速度和随机水平位置。
1.5.3update:当敌机飞出屏幕时,调用kill方法将其从精灵组中删除
1.6英雄飞机类:Hero:
1.6.1Hero:继承自GameSprites的英雄飞机类。
1.6.2__init__:初始化飞机的位置和子弹精灵组。
1.6.3update:更新飞机的位置,并确保它不会离开屏幕边界。
1.6.4fire:发射子弹的方法,创建子弹并将其添加到子弹精灵组中。
1.7子弹类:Bullet:
1.7.1Bullet:继承自GameSprites的子弹类。
1.7.2__init__:初始化子弹并设置其向上移动的速度。
1.7.3update:当子弹飞出屏幕时,调用kill方法将其从精灵组中删除。
1.7.4__del__:当子弹对象被销毁时调用的方法,打印一条消息。
结语:
前言:
经过了前面几个章节关于Python面向对象的学习,相信大家关于如何写一个面向对象的小游戏的基本内容也已经知道了,而这一篇我也会结合之前文章提到的内容正式开始写关于面向对象的小游戏了,这篇我会结合代码一点一点解释关于面向对象的游戏,当然在我的资源里我也上传了压缩包,感兴趣的小伙伴可以自己下载,或者结合我这几篇的教程和所学的内容也可以自己尝试在pycharm中写一个面向对象的飞机大战的小游戏.接下来就正式开始了:
1.plane_sprites模块:
1.1导入模块:
import pygame
import random
这是对代码的解释:
1.1.1pygame:一个用于创建游戏的Python库。
1.1.2random:Python标准库中的一个模块,用于生成随机数。
1.2定义事件代号:
ENEMY_EVENT = pygame.USEREVENT
FIRE = pygame.USEREVENT + 1
这是对代码的解释:
1.2.1ENEMY_EVENT:自定义的敌机出场事件代号,使用pygame.USEREVENT作为基础值。
1.2.2FIRE:自定义的子弹发射事件代号,设置为敌机出场事件代号加1。
1.3基类:GameSprites:
class GameSprites(pygame.sprite.Sprite): def __init__(self, images_name, speed=5): super().__init__() self.image = pygame.image.load(images_name) self.rect = self.image.get_rect() self.speed = speed def update(self): self.rect.y += self.speed
这是对代码的解释:
1.3.1GameSprites:所有游戏精灵的基类。
1.3.2__init__:初始化方法,接收图像名称和速度作为参数,并加载图像。
1.3.3update:更新精灵的位置,使其沿y轴向下移动。
1.4背景类:Background:
class Background(GameSprites): def __init__(self, is_alt=False): super().__init__('images/background.png') if is_alt: self.rect.y = -self.rect.height def update(self): super().update() if self.rect.y >= 700: self.rect.y = -self.rect.height
这是对代码的解释:
1.4.1Background:继承自GameSprites的背景类。
1.4.2__init__:除了加载背景图像外,还可以选择是否从屏幕上方开始显示背景。
1.4.3update:除了基本的向下移动外,还负责在背景完全移出屏幕时将其重置到屏幕上方
1.5敌机类:Enemy:
class Enemy(GameSprites): def __init__(self): super().__init__('images/enemy1.png') self.speed = random.randint(1, 8) self.rect.x = random.randint(0, 480 - self.rect.width) def update(self): super().update() if self.rect.y >= 700: print('飞出屏幕需要删除...') self.kill()
这是对代码的解释:
1.5.1Enemy:继承自GameSprites的敌机类。
1.5.2__init__:初始化时设置随机速度和随机水平位置。
1.5.3update:当敌机飞出屏幕时,调用kill方法将其从精灵组中删除
1.6英雄飞机类:Hero:
class Hero(GameSprites): def __init__(self): super().__init__('images/me1.png', 1) self.rect.x = 240 - self.rect.width / 2 self.rect.y = 700 - self.rect.height - 30 self.upanddown = 0 self.bullet_group = pygame.sprite.Group() def update(self): self.rect.x += self.speed self.rect.y += self.upanddown # 控制飞机不能离开屏幕的代码... def fire(self): print('发射子弹') for i in range(4): bullet = Bullet() bullet.rect.centerx = self.rect.centerx bullet.rect.y = self.rect.y - (i + 1) * 20 self.bullet_group.add(bullet)
这是对代码的解释:
1.6.1Hero:继承自GameSprites的英雄飞机类。
1.6.2__init__:初始化飞机的位置和子弹精灵组。
1.6.3update:更新飞机的位置,并确保它不会离开屏幕边界。
1.6.4fire:发射子弹的方法,创建子弹并将其添加到子弹精灵组中。
1.7子弹类:Bullet:
class Bullet(GameSprites): def __init__(self): super().__init__('images/bullet1.png', -2) def update(self): super().update() if self.rect.y < 0 - self.rect.height: self.kill() def __del__(self): print('子弹被销毁')
这是对代码的解释:
1.7.1Bullet:继承自GameSprites的子弹类。
1.7.2__init__:初始化子弹并设置其向上移动的速度。
1.7.3update:当子弹飞出屏幕时,调用kill方法将其从精灵组中删除。
1.7.4__del__:当子弹对象被销毁时调用的方法,打印一条消息。
结语:
关于这个面向对象的小游戏主要是分为了两个模块:
基于pygame的飞机射击游戏的基础类。这些类包括背景、敌机、英雄飞机和子弹。每个类都从GameSprites基类继承,它提供了基本的精灵功能和更新方法
这里有两段代码分开调用是为了保持代码的模块化和可读性。Planegame 类封装了游戏的主要逻辑和功能,而 if __name__ == '__main__': 部分则是游戏的入口点。这种结构使得代码更易于理解和维护。
关系上,Planegame 类定义了游戏的所有核心组件和功能,包括初始化窗口、创建精灵和精灵组、事件处理、碰撞检测以及更新和绘制精灵组等。而 if __name__ == '__main__': 部分则是实际运行游戏的代码,它创建了 Planegame 类的一个实例,并调用了该实例的 start_game 方法来启动游戏循环。
不过,由于时间的关系今天我们就先到这里,还有 关于if __name__ == '__main__'的调用部分,则会在明天继续更新,也欢迎大家对我的内容进行指点,这些都是个人关于学习面向对象的总结,难免有所疏漏,请大家多多包涵,也欢迎大家对我的文章进行指点和斧正。

相关文章:
关于制作Python游戏全过程(汇总1)
目录 前言: 1.plane_sprites模块: 1.1导入模块: 1.1.1pygame:一个用于创建游戏的Python库。 1.1.2random:Python标准库中的一个模块,用于生成随机数。 1.2定义事件代号: 1.2.1ENEMY_EVENT:自定义的敌机出场事件代号…...
独立站营销新纪元:AI与大数据塑造个性化体验的未来
随着全球互联网的深入发展和数字化转型的不断推进,作为品牌建设和市场营销的重要载体,独立站将迎来新的发展机遇。新技术的涌现,特别是人工智能和大数据等技术的广泛应用,为独立站带来了前所未有的机遇与挑战。本文Nox聚星将和大家…...
C语言项目实战——贪吃蛇
C语言实现贪吃蛇 前言一、 游戏背景二、游戏效果演示三、课程目标四、项目定位五、技术要点六、Win32 API介绍6.1 Win32 API6.2 控制台程序6.3 控制台屏幕上的坐标COORD6.4 GetStdHandle6.5 GetConsoleCursorInfo6.5.1 CONSOLE_CURSOR_INFO 6.6 SetConsoleCursorInfo6.7 SetCon…...
ArmSoM规划开发基于RK3576的开发套件
ArmSoM正计划推出一款新的产品,这款产品将采用强大的RK3576芯片。 本文将为您介绍我们的新产品搭载的RK3576性能参数,以及它如何为您提供卓越的性能和功能。 RK3576处理器 RK3576处理器是一款强大的处理器,具备出色的性能和多样化的功能&a…...
视频剪辑如何提取伴奏?短视频剪辑有妙方
在多媒体处理中,音频的编辑和处理是不可或缺的一部分。很多时候,我们可能想要从一段视频或音频中提取伴奏,或者实现人声的分离,以便于进一步制作或混音。以下,将为您介绍一种简单而有效的方法来实现这一目标。 一、提取…...
【Web】浅浅地聊SnakeYaml反序列化两条常见利用链
目录 关于Yaml 关于SnakeYaml SnakeYaml反序列化利用 JdbcRowSetImpl链 ScriptEngineManager链 复现 基本原理 继续深入 关于Yaml 学过SpringBoot开发的师傅都知道,YAML和 Properties 文件都是常见的配置文件格式,用于存储键值对数据。 这里举…...
详解openGauss客户端工具gsql的高级用法
前言: gsql是openGauss提供在命令行下运行的数据库连接工具,可以通过此工具连接服务器并对其进行操作和维护,除了具备操作数据库的基本功能,gsql还提供了若干高级特性,便于用户使用。 gsql的基本功能 连接数据库&…...
开源工业软件:SCADA系统开源
PyScada是一个开源的scada系统 源代码地址 http://www.gitpp.com/huangtomy/pyscada-cn SCADA系统是Supervisory Control And Data Acquisition的缩写,即数据采集与监视控制系统。它是以计算机为基础的DCS与电力自动化监控系统,应用领域非常广&#x…...
关于AI彩票预测算法的设想
本文以双色球选择红色6个号码为例 我们先把问题简化,双色球红色号码一共有33个球。摇奖时,每次随机摇出来一个号码,连续6次,就随机出来了6个红色球号码。 而这6个号码就是一注彩票里的前6个红色球号码。这里不讨论一注彩票里后端…...
设计模式之策略模式实践
设计模式之策略模式实践 先了解一下策略模式的定义是什么?解决什么问题 策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装成一个类,并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个&a…...
讨论:解决哈希冲突的几种方法
1. 什么是哈希 哈希是通过对数据进行再压缩,提高效率的一种解决方法。 2. 什么时候会产生哈希冲突 通过哈希函数产生的哈希值是有限的,当数据量比较大时经过哈希函数处理后仍然有不同的数据对应相同的值。这时候就产生了哈希冲突。 3. 常见的哈希函数 1&…...
遥感分析时什么情况下需要做大气校正?
经常会遇到这样的问题:什么情况需要做大气校正产生?这个问题取决于传感器和应用目标,总的来说,如果要做光谱分析,那么大气校正是必须要做的。本文对于在什么情况下选择什么样的大气校正方法,给出了一些依据…...
设计模式学习笔记 - 设计原则 - 7.DRY 原则及提高代码复用性
前言 DRY 原则,英文描述为: Don’t Repeat Yourself。中文直译:不要重复自己。将它应用在编程中,可理解为:不要写重读的代码。 可能你认为,这个原则很简单。只要两段代码长得一样,那就是违反 …...
方法的调用
自定函数(方法) 函数(方法): 给定一个具有独立功能的代码片段进行"命名",并通过该该类名调用"方法" main主函数 在当前类中,可以直接调用方法(因为方法使用了static关键字) package study;import java.time.LocalDate; import java.time.format.Date…...
VGW在 Windows 平台上局域网就绪的旁路由器程序
在查阅本篇文章之前可以查看下,本人前两年写的关于VGW软件路由器的文章 Linux 平台上面单网卡 TUN/TAP实现局域网其它设备上网_linux 物理网卡与tun同网段-CSDN博客 VGW软件路由器是一个工作IEEE以太网(L2)链路层的路由器程序,它…...
能源大数据采集,为您提供专业数据采集服务
随着经济的不断发展,能源产业也逐渐成为国民经济的支柱产业之一。而对于能源行业来说,数据采集是一项至关重要的工作。以往,能源企业采集数据主要依靠人工收集、整理,但是这种方式不仅效率低下,而且容易出现数据不准确…...
01_Maven
文章目录 Maven安装MavenMaven的工作流程配置MavenMaven的使用module和project的关系如何用Maven导包 如何用Maven进行项目构建指令介绍clean指令compile指令package指令install指令 Maven的依赖管理如何导包scope作用域依赖传递依赖冲突 使用Maven开发项目Junit如何使用Junit …...
C语言题目练习
目录 前言 1、转置矩阵 1.1 题目 描述 输入描述: 输出描述: 1.2解题 分析: 程序: 2、KiKi判断上三角矩阵 2.1 题目 描述 输入描述: 输出描述: 2.2 解题 分析: 程序: 3、…...
物联网安全|TrustAsia助力PSWG应对全球物联网产品安全合规挑战
万物互联时代,随着物联网连接数快速增长,物联网设备的潜在网络安全隐患也日益增长,可能导致设备故障、数据被盗、篡改、隐私泄露等问题的发生,甚至成为网络攻击的跳板,对互联网基础设施构成严重威胁。 我们看到&#…...
基于单片机的医院输液系统设计
目 录 摘 要 Ⅰ Abstract Ⅱ 引 言 1 1系统方案设计与论证 3 1.1系统硬件结构总体设计方案 3 1.2点滴速度测量电路方案的选择与论证 3 1.3液面检测电路方案的选择与论证 4 1.4通过电机控制滴速电路的方案与论证 4 1.5显示器接口电路方案选择与论证 5 1.6键盘接口电路方案选择与…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
