IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【日常篇】005_用Python制作《太空大战》 -> 正文阅读

[游戏开发]【日常篇】005_用Python制作《太空大战》

??继10月份在 《天文软件应用》 《自由上机》课程中完成《俄罗斯方块》后,本人决定进行下一项更为艰巨的挑战:设计一个空战游戏

??在还没有开始接触编程时,就有过想要写出一个飞机射击类游戏的想法,但当时对于不会编程的自己而言,这简直就是天方夜谭。转眼间,从大二接触C语言开始到现在,也已经码了三年的代码了。这一目标对于现在的自己而言,已不再是遥不可及,是时候去实现当年的愿望了

??本次程序依旧使用Python语言进行编写,并依旧以pygame库为主

前言

??本次的战线十分漫长,大概花费了一个多月共五六次的 《天文软件应用》 课程+两三个晚上的时间,由浅至深地实现了十一个小目标(即接下来提到的十一次迭代)。下面将会以时间顺序,从第一次迭代开始,来简要地回顾整个编写历程

第一次迭代

目标

??相应的图像能够显示在屏幕上

??按方向键可以向相应的方向移动,触碰到边界时无法继续移动

实现过程

在这里插入图片描述

??作为最开始的小目标,只需要将玩家的飞机显示在屏幕上,并能够根据按键的响应四处移动即可。由此设计出三个类:玩家(Player)类、游戏场景(Stage)类与图像展示(Display)类。玩家类存储玩家的各种信息,游戏场景类存储游戏的状况,场景中都有哪些事物,而图像展示类则用于将游戏场景类中的情形用图形界面表示出来

??每一帧刷新的时候,就会处理键盘响应与玩家的移动,同时判断玩家的移动是否合法,如果不合法则无法完成本次移动。这样一来,玩家在场景内移动的规则就设定好了。再由图像展示类将玩家的位置在背景上显示出来,就完成了第一次迭代的目标

第二次迭代

目标

??按K键发射子弹,且设置子弹发射的最短时间间隔

实现过程

在这里插入图片描述

??第二次迭代在第一次迭代的基础上引入了子弹发射系统。由此联想到需要新增子弹类(PlayerBullet)以及玩家发射子弹、子弹在场景中更新状态、子弹图像显示的相应方法

??考虑到后期,玩家的子弹和敌人的子弹会有所区别,故在此设计子弹的基类(BaseBullet),后续制作的敌人的子弹也将会继承自这里

??对于玩家发射子弹的操作,如何实现最短发射时间间隔的限制?我的解决方案是:给玩家分配最近一次发射时间(lastTimeFired)这一成员

??因为内容实在是太多了,加上隔了也有一定的时间了,因此后面直接贴出当时的简要记录:

第三次迭代

目标

??设置1血敌人

??敌人被命中后直接消失

??敌人会左右移动,同时不断前进

在这里插入图片描述

第四次迭代

目标

??敌人会发射子弹,且设置发射时间间隔,固定时间发射

??玩家设置血量,命中玩家后扣除相应血量

??玩家血条显示

在这里插入图片描述

第五次迭代

目标

??子弹命中后会有爆炸的动画效果

在这里插入图片描述

第六次迭代

目标

??新增敌人种类

双排战士——DoubleWarrior

??血量中,一次连排发射两个子弹,径直纵向移动,移动速度低,射击速度中等,防御力中

三线射手——TripleShooter

??血量低,一次向三个方向发射子弹,径直纵向移动,移动速度中等,射击速度低

在这里插入图片描述

第七次迭代

目标

??使用外置文件设定敌人的出场模式

??BOSS战,所有敌机不继续刷新

文件格式

??采用json格式:

{
    "enemies" : [
        {
            "className" : "敌人1的类名",
            "appearBy" : "出场依据:timeInterval——根据时间间隔",
            "appearMode" : "出场位置:random——随机位置|fix——固定位置",
            "mu" : "时间间隔的均值,仅在time依据下使用",
            "std" : "时间间隔的标准差,仅在time依据下使用",
            "posX" : "出场位置的X轴,仅在fix位置下使用"
        },
        {
            "className" : "敌人2的类名",
            ......
        }
    ]
}

在这里插入图片描述

第八次迭代

目标

??增加道具掉落

??击败不同类型敌机时,有不同的概率掉落道具

??击败BOSS时,掉落多个道具

回血

??提升50血量

??掉落权重10

增加血量上限

??提升血量上限25

??掉落权重2

火力加强

??提高射速(每秒的次数+1)

??掉落权重5

攻击加强

??攻击力提升2

??掉落权重2

防御加强

??防御力提升1

??掉落权重2

在这里插入图片描述

第九次迭代

目标

??完善BOSS战

??BOSS战期间,BOSS血条显示

??BOSS死亡后,重设时间戳到BOSS出现前,以解决BOSS接连出现的问题

??在等间隔出场的基础上,设置第一次出场时间

在这里插入图片描述

第十次迭代

目标

??设计更多的BOSS,并不局限于一般的移动模式

冲锋者——Sticker

??发射5连并排霰弹,5秒随机横向移动模式+3秒向前突刺模式+2秒复位模式

跟踪者——Tracker

??位置上不断接近玩家,子弹对着玩家射

风车——Windmiller

??在中心矩形路线移动,并旋转着向四个方向发射子弹

钛战机(Vader)——TieVader

??8秒横向移动,2秒追踪玩家

歼星舰——StarDestroyer

??本体只能左右移动,但却可以不断地放出普通钛战机对玩家进行攻击

??本体也能发射爆能束,且攻击力极高

普通钛战机——Tie

??斜着飞行,发射爆能束,攻击力中偏高,血量中,速度快,射速高 (命中低)

??对应地,让玩家也能在后期使用爆能束,增加一项让玩家获得爆能束的道具

死星——DeathStar

??最终BOSS,爆能束的发射位置是随机的,并且可以随时放出各种类型的敌机,一次放出1——3架

??有两种爆能束可以发射,一种是普通的红色,另一种是能够摧毁行星的绿色

在这里插入图片描述

第十一次迭代

目标

提高平衡性

??玩家子弹最多能变为三排并发

??每打完一个BOSS,都会提升敌人的属性:

??攻击+20%

??防御+20%

??血量+20%

??开火间隔时间-15%,下限50

打开碰撞箱快捷键

??按b打开碰撞箱

增加分数系统

??命中敌人时,按敌人扣血量加分,Game Over时游戏继续,但在命令行显示分数

增加暂停系统

??按p键暂停,画面静止

优化界面

??在血条左侧显示玩家飞机图标

血量数值显示

??按h键开启血量数值显示

在这里插入图片描述

最终效果展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

??视频展示:http://home.ustc.edu.cn/~caimx/video/SkyWars_Video.mp4

总结

??本次代码的编写过程整体还算顺利,基本上每一两个小时都能完成一次迭代。但从逻辑与画面的分离这个方面来讲,还是做的很不好。游戏的逻辑部分应该尽量由逻辑模块实现,而不是交给画面显示模块去做。这一点在后续的扫雷中倒是得到了很大程度的改善

代码链接

??https://github.com/VtaSkywalker/20211028_001_SkyWars

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:15:50  更:2022-01-28 12:17:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:32:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码