关于制作Python游戏全过程(汇总1)

news2024/11/25 2:45:43

目录

前言:

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.coloradmin.cn/o/1493502.html

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

相关文章

TypeScript 哈希表

文章目录 概念哈希化冲突链地址法开放地址法 装填因子&#xff08;loadFactor&#xff09;效率对比哈希函数字符串转数字算法 —— 幂的连乘压缩数字范围 —— 取余优秀哈希算法的优点快速计算&#xff1a;霍纳法则均匀分布 —— 质数Java 中的 HashMapN次幂的底数 实现哈希函数…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

NineData云原生智能数据管理平台新功能发布|2024年2月版

SQL开发&#xff1a;全功能支持百度云 GaiaDB 介绍&#xff1a;支持通过 SQL 开发所有能力管理 GaiaDB 实例。更多信息&#xff0c;请参见&#xff1a;真香&#xff01;NineData SQL 开发全面适配 GaiaDB 场景&#xff1a;企业使用 GaiaDB 管理企业数据&#xff0c;需要一个一…

【EI会议征稿通知】第三届信息经济、数据建模与云计算国际学术会议 (ICIDC 2024)

第三届信息经济、数据建模与云计算国际学术会议 2024 3rd International Conference on Information Economy, Data Modeling and Cloud Computing&#xff08;ICIDC 2024&#xff09; 第三届信息经济、数据建模与云计算国际学术会议(ICIDC 2024)定于2024年6月21-23日在中国…

javaWebssh药品进销存信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh药品进销存信息管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOM…

YOLOv8-Openvino-ByteTrack【CPU】

纯检测如下&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv8和YOLOv9代码内容基本一致&#xff01; 全部代码Github&…

[数据集][图像分类]芒果叶病害分类数据集4000张5类别

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;4000 分类类别数&#xff1a;8 类别名称:["anthracnose","bacterial_canker","cutting_weevil","die_back",&…

EasyRecovery易恢复14最新版Win电脑安装包下载

EasyRecovery易恢复是一款数据恢复软件。它专门用于恢复因各种情况&#xff08;如误删除、格式化、病毒攻击、分区丢失等&#xff09;而丢失的数据。这款软件支持恢复多种类型的文件&#xff0c;包括文档、图片、视频、音频等&#xff0c;并且可以从各种存储设备&#xff08;如…

【YOLO v5 v7 v8 v9小目标改进】HTA:自注意力 + 通道注意力 + 重叠交叉注意力,提高细节识别、颜色表达、边缘清晰度

HTA&#xff1a;自注意力 通道注意力 重叠交叉注意力&#xff0c;提高细节识别、颜色表达、边缘清晰度 提出背景框架浅层特征提取深层特征提取图像重建混合注意力块&#xff08;HAB&#xff09;重叠交叉注意力块&#xff08;OCAB&#xff09;同任务预训练效果 小目标涨点YOLO…

06 - 镜像管理

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

sql多表运用 12.3

肖SIR__数据库之多表运用__12.3 数据库之多表运用 CREATE table dept(dept1 VARCHAR(6),dept_name VARCHAR(20)) default charsetutf8; INSERT into dept VALUES (101,财务); INSERT into dept VALUES (102,销售); INSERT into dept VALUES (103,IT技术); INSERT into dep…

【已解决】conda环境下ROS2 colcon build编译选择特定python解释器

目录 1 问题背景2 问题探索3 问题解决4 告别Bug 1 问题背景 环境&#xff1a; ROS2 HumbleUbuntu22.04 现象&#xff1a;运行colcon build后由cpp编译生成的python导出库(如自定义消息、服务等)&#xff0c;其版本与由python setup.py安装的python库版本不一致&#xff0c;导致…

App自动化测试笔记(四):UIAutomatorViewer与元素定位API

UIAutomatorViewer 1、应用场景 定位元素的时候必须根据元素的相关特征来进行定位&#xff0c;而 UIAutomatorViewer 就是用来获取元素特征的。 如何使用UIAutomatorViewer 1、保证想要查看的元素在当前的频幕上 2、打开UIAutomatorViewer工具 3、点击左上角左数第二个按钮…

IDEA切换JDK版本超详细步骤

&#x1f600; IDEA切换JDK版本详细教程&#xff0c;全网步骤最详细&#xff0c;实测可用。 文章目录 第一步、选择SDKs切换SDK版本&#xff1a;第二步、选择Modules切换Sources和Dependencies版本&#xff1a;第三步、选择Project切换SDK和Language Level版本&#xff1a;第四…

VR科学知识互动展示介绍|游戏体验馆加盟|VR展示厅

VR科学知识互动展示是一种利用虚拟现实技术来呈现科学知识并与观众进行互动的展示方式。通过VR设备&#xff0c;参观者可以沉浸在各种科学主题的虚拟环境中&#xff0c;以全新的视角和体验来探索科学领域的知识。 这样的展示通常结合了视觉、听觉和触觉等感官体验&#xff0c;使…

网络信息安全:11个常见漏洞类型汇总

一、SQL注入漏洞 SQL注入攻击&#xff08;SQL Injection&#xff09;&#xff0c;简称注入攻击、SQL注入&#xff0c;被广泛用于非法获取网站控制权&#xff0c;是发生在应用程序的数据库层上的安全漏洞。 在设计程序&#xff0c;忽略了对输入字符串中夹带的SQL指令的检查&…

恒峰便携式森林消防灭火泵:轻巧易携,灭火无忧

在自然环境中&#xff0c;森林火灾是一种常见的自然灾害。为了保护森林资源和人民生命财产安全&#xff0c;我们需要一款轻便、高效的消防灭火设备。本田发动机单缸四冲手拉式启动的便携式森林消防灭火泵应运而生&#xff0c;它以其出色的性能和便捷的使用方式&#xff0c;成为…

工作中常用的6种设计模式

背景 谈起设计模式&#xff0c;你一定会问&#xff1f;这玩意到底有啥用&#xff1f;我好像没用过也不影响做一个码农。也可能项目中实际用了&#xff0c;但是你不自知。虽然Java设计模式有23种&#xff0c;但是工作中常用的可能并没有那麽多。就像新华字典有多少字&#xff0c…

SpringBoot使用MongoTemplate详解

1.pom.xml引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.MongoDbHelper封装 /*** MongoDB Operation class* author HyoJung* date …

群晖 NAS 安装 Ghost Blog

通过群晖的 docker 容器下载 ghost 映像&#xff0c;并配置后启动。 一、下载映像文件 由于网络环境&#xff0c;无法直接连接 docker 的映像服务器&#xff0c;因此使用境内代理&#xff0c;通过 url 方式下载。 打开 docker 控制台&#xff0c;点击左边导航栏的 “映像”&…