关于制作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,一经查实,立即删除!

相关文章

zsh: command not found: mongo(mac版已解决)

配置背景 基础信息&#xff1a;Macbook pro (m1 pro) 配置方式&#xff1a;采用 Homebrew 进行配置 解决流程 具体流程&#xff1a; 1-打开终端 2-查看 mongodb formulae brew list我的是 mongodb-community5.0 3-查看并复制mongodb安装目录 nathanchenNathansMacBook…

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

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

智慧城市/雪亮工程中网页低延迟多屏播放海康威视大华华为等监控视频解决方案

在传统安防项目中&#xff0c;一般视频监控系统采用的是C/S结构实现在电脑端或者手机端实时预览视频监控画面&#xff0c;但是随着智慧城市、雪亮工程、平安社区等项目在全国各地展开&#xff0c;视频监控系统更多应用在B/S结构项目上。但是普遍存在摄像头视频在网页中播放目前…

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

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

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

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

笔记:Linux下的Oracle日常简单检查

日常检查 01 00 * * * /root/lcl/daycheck.sh >> /root/lcl/daycheck.sh.log 2>&1daycheck.sh #!/bin/sh current_datetime$(date "%Y%m%d_%H%M%S") file_name"wmsdb_daycheck_$current_datetime.log" file"/root/lcl/log/${file_…

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

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

嵌入式学习 Day 27

1.信号&#xff1a; 1.pause int pause(void); 功能: 让进程睡眠,直到接收到信号(捕捉)才能继续向下执行 2.alarm unsigned int alarm(unsigned int seconds); 功能: 定时seconds秒后给调用进程发送SIGALRM信号 参数: seconds:定时的…

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

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

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

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

java算法第十三天 | ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结

239. 滑动窗口最大值 leetcode链接 之前讲的都是栈的应用&#xff0c;这次该是队列的应用了。 本题算比较有难度的&#xff0c;需要自己去构造单调队列&#xff0c;建议先看视频来理解。 思路&#xff1a; 自定义一个单调队列维护当前滑动窗口的最大值。 代码随想录解题思路 …

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

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

游戏引擎渲染流程

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

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

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

【深度学习】目标检测神经网络1/2

目标检测神经网络 概念 模型分类有三种&#xff1a;图像分类即输出图像类别和概率&#xff1b;单目标检测&#xff0c;输出目标的概率和位置&#xff1b;多目标检测&#xff0c;同时输出多个目标的分类、位置、概率。 位置检测分为两种形式&#xff1a;一种是矩形框&#xf…

如何分辨Mac设备X86或ARM

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

Vue响应式内容丢失处理

对数组和对象进行不当的修改会使Vue的对象丢失响应式&#xff0c;这时可以直接console.log丢失的对象&#xff0c;看是否有getter和setter 对于数组和对象&#xff0c;只有使用 Vue 提供的一些方法&#xff08;如 push()、pop()、splice()、set() 等&#xff09;进行修改才会触…

linux循环之for循环

1.循环介绍 循环就是迭代(重复)一些命令的代码块&#xff0c;如果循环控制条件不满足的话&#xff0c;就结束循环 2.for循环语法 for 循环控制条件 do commands done #当“循环控制条件”不满足条件&#xff0c;结束for循环 3.for循环样例 [rootkibana ~]# cat for-1.…

css深度选择器 /deep/ 在89版本后就失效了

css深度选择器 /deep/ 在89版本后就失效了 前言&#xff1a;在高版本中&#xff08;89版本以后&#xff09;css使用/deep/样式就失效了 原因&#xff1a;css深度选择器 /deep/ 在89版本后就不支持了 解决办法&#xff1a;使用scss预编译 <style lang"scss" sc…

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

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