关于制作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__'的调用部分则会在明天继续更新也欢迎大家对我的内容进行指点这些都是个人关于学习面向对象的总结难免有所疏漏,请大家多多包涵,也欢迎大家对我的文章进行指点和斧正

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

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

相关文章

目标检测5:采用yolov8, RK3568上推理实时视频流

上一个效果图&#xff0c;海康球机对着电脑屏幕拍&#xff0c;清晰度不好。 RK3568接取RTSP视频流&#xff0c;通过解码&#xff0c;推理&#xff0c;编码&#xff0c;最终并把结果推出RTSP视频流。 数据集采用coco的80个种类集&#xff0c;通过从yovo8.pt&#xff0c;转换成R…

flutter开发文档,靠着这份面试题跟答案

1、知道它是什么、有什么用 相信很多人在学习的时候&#xff0c;一开始都会在网上找一整套资料或者买一本书来学习&#xff0c;结果就是内容太多&#xff0c;学了记不住或者学到一半感觉很难&#xff0c;便放弃了&#xff0c;更别提写代码了&#xff0c;根本无从入手。 而更好…

Python+Vue全栈开发BI数据可视化项目

如何得到这样一个大屏可视化展示 数据清洗&#xff0c;运算&#xff0c;建模&#xff0c;分析&#xff0c;可视化

java核心技术第十一章学习笔记

swing常用用户界面组件 Swing和模型-视图-控制器设计模式 模型&#xff1a;存储内容&#xff0c;必须实现改变内容和查找内容的方法&#xff0c;不可见 视图&#xff1a;显示内容 控制器&#xff1a;处理用户输入 一个模型可以有多个视图&#xff0c;每个视图可以显示全部…

微信小程序开发系列(十九)·wxml语法·setData()修改数据

目录 步骤一&#xff1a;创建一个data对象 步骤二&#xff1a;双大括号写法的使用 步骤三&#xff1a;创建一个更新事件按钮 步骤四&#xff1a;定义事件处理函数获取数据 步骤五&#xff1a;定义事件处理函数修改数据 方法一&#xff1a;通过赋值的方式直接修改数据 方…

android音视频编解码,你有过迷茫吗

3-5年的Android工程师最容易遇到的4个瓶颈是什么&#xff1f; 1.原理认知浅 工作内容多是简单UI界面开发和第三方SDK整合&#xff0c;对原理层和底层开发了解不深 2.技术视野窄 长期在小型软件公司&#xff0c;外包公司工作&#xff0c;技术视野被限制的太厉害 3.薪资提升…

React富文本编辑器开发(五)

到目前为止我们所有的功能操作都是直接写在 onKeydown 事件里了&#xff0c;但如果我想复用相同的功能怎么办呢&#xff0c;最好的办法就是拨离了&#xff0c;下面我就形如进行这样的操作&#xff0c;把相关的可复用的命令操作抽取出来。 新建文件 _helper.jsx,创建一个协助器…

游戏引擎渲染流程

一、渲染概述 我们首先看到渲染技术的发展 游戏渲染面临的挑战&#xff1a; 一个容器中同一时刻有大量的游戏对象需要进行渲染&#xff0c;并且不同对象渲染的形式、算法还有所差异&#xff0c;这些使得游戏的绘制系统变得非常复杂&#xff1b;其次&#xff0c;游戏引擎的渲染…

空间直角坐标系、大地坐标系、平面坐标系介绍

空间直角坐标系、大地坐标系、平面坐标系 2017-04-11 13:53 ( 一)空间直角坐标系 空间直角坐标系的坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道面上切按右手系于X轴呈90度夹角,某点中的坐标可用该点在此坐标系的各…

如何分辨Mac设备X86或ARM

在终端中输入如下命令可以获取到当前 Mac 设备是 X86 还是 ARM 类型 uname -a 以上便是此次分享的全部内容&#xff0c;希望能对大家有所帮助!

DxO PureRAW:赋予RAW图像生命,打造非凡视觉体验 mac/win版

DxO PureRAW 是一款专为RAW图像处理而设计的软件&#xff0c;旨在帮助摄影师充分利用RAW格式的优势&#xff0c;实现更加纯净、细腻的图像效果。该软件凭借其强大的功能和易于使用的界面&#xff0c;成为了RAW图像处理领域的佼佼者。 DxO PureRAW 软件获取 首先&#xff0c;Dx…

几种电脑提示mfc140.dll丢失的解决方法,以及如何预防mfc140.dll丢失

mfc140.dll真是一个超级关键的动态链接库文件&#xff01;一旦这个文件不翼而飞&#xff0c;可能会导致一些程序无法顺利运行&#xff0c;甚至给系统带来麻烦。但别担心&#xff01;遇到mfc140.dll文件丢失的情况&#xff0c;我们有一堆应对措施可以立马施行&#xff0c;确保问…

计算机网络-物理层

物理层 基本概念传输媒体信道复用频分复用&#xff08;FDM&#xff09;时分复用&#xff08;TDM&#xff09;波分复用&#xff08;WDM&#xff09;码分复用&#xff08;CDM&#xff09; 宽带接入技术ADSL技术光纤同轴混合网(HFC网)FTTx技术 数据通信常识 上次我们已经大致学习了…

06 - 镜像管理

1 了解镜像 Docker镜像是一个特殊的文件系统&#xff0c;除了提供容器运行时所需的程序、库、资源、配置等文件外&#xff0c;还包含了一些为运行时准备的一些配置参数&#xff08;如匿名卷、环境变量、用户等&#xff09;。 但注意&#xff0c; 镜像不包含任何动态数据&#…

【探索AI】二十五 深度学习之第8周:深度学习项目实战

项目名称&#xff1a;基于深度学习的图像分类系统 一、项目背景 随着大数据和人工智能技术的快速发展&#xff0c;图像分类技术在各个领域得到了广泛应用&#xff0c;如安防监控、医疗诊断、自动驾驶等。本项目旨在利用深度学习技术构建一个高效的图像分类系统&#xff0c;实…

Mysql数据迁移3个快速方法与数据库恢复

目录 Mysql数据迁移3个快速方法与数据库恢复 方法1 选中表复制粘贴 方法2 克隆 方法3 DTS迁移【推荐】 数据库误删恢复方法 Mysql数据迁移3个快速方法与数据库恢复 前言&#xff1a;日常开发中&#xff0c;项目测试发布到生产或者复制多一套程序出来&#xff0c;经常免不…

EPSON RA8000CE (RTC模块)压电侠

RA8000CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块。它包括各种功能&#xff0c;如具有闰年校正的秒到年时钟/日历&#xff0c;时间警报&#xff0c;唤醒计时器&#xff0c;时间更新中断&#xff0c;时钟输出和时间戳功能&#xff0c;可以在外部或内部事件…

C++--调整数组顺序使奇数位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 方法一&#xff1a; …

2024年最新苹果cms MXoneV10 10.8版本模板独家

2024年最新苹果cms MXoneV10 10.8版本模板独家 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88891237 更多资源下载&#xff1a;关注我。

python+django_vue旅游酒店预订出行订票系统pycharm项目lw

a.由于对管理信息方面的内容了解尚浅且没有足够的经验&#xff0c;因而很难对数据庞大的线上旅行信息管理系统建立完善的数据库。 b.线上旅行信息管理系统拥有很大的信息量&#xff0c;其中包括数据库的前期开发和后期更新&#xff0c;因此对数据库的安全性&#xff0c;一致性和…