找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 1800|回复: 24

中B:Gunship项目

[复制链接]

27

主题

73

回帖

418

积分

超级版主

积分
418
发表于 3-5-2025 10:55:35 | 显示全部楼层 |阅读模式

直10出击
武直-10是中国人民解放军第一种专业武装直升机和亚洲各国第一种自研专业武装直升机。结束了中国人民解放军陆军航空兵长期依赖法国海豚直升机的改型兼当武装直升机的历史,大大提高了中国人民解放军陆军航空兵的航空突击与反装甲能力。





还有我们功勋试飞员的故事



我们要做什么呢?一款横版空战游戏!

游戏分类:横版过关类 (请同学们先了解在游戏分类中什么叫横版过关)
飞机运动:上键控制飞机飞起,松开就下落(类似Flappy Bird)
          左右键加速减速,实际表示为:
          障碍向左运动的速度,就是飞机向右飞行的速度。
计分规则:越过障碍加分
碰撞规则:飞机视为矩形,实际两个矩形碰撞(参考ppball逻辑)
未来考虑实现更多功能,比如shoot!!!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-6-2025 08:48:12 | 显示全部楼层
本帖最后由 liuyi 于 3-8-2025 18:21 编辑


请先下载gunship.zip并解压缩到本地硬盘。



这是Gunship V0.9的代码,请先输入并运行调试。
注意L59的self.font = pygame.font.Font('simkai.ttf', 32)  ,zip里没有打包这个font文件,你可以自己找一个font文件来使用,比如以前项目里用过的,当然更欢迎自己找喜欢的。Windows电脑的font文件夹位置:c:\windows\fonts\

Gunship项目从编程角度,引入了新概念:Framework,也就是程序框架。
大家可以看到,有一个framework类定义:
L51:class CLS_framework(object): # 框架类定义
Framework用来实现对整个程序的资源统一管理,可以看到:
__init__()      # 初始化
play()           # game运行中的业务逻辑入口
draw_fileld() # 绘制背景
stone_do()   # 障碍物相关判断
keydown()    # 键盘按下的统一处理
keyup()        # 键盘松开的统一处理
然后,在主程序中,L101: fwork = CLS_framework()  生成框架对象实例instance,完成了程序初始化,也就是说程序正式启动!
后面while True: 里的内容基本不用修改,最后一句fwork调用框架里的代码。

V0.9运行后的到的版本,可以用类似flappy bird的方式控制飞机上下:按上键飞机飞起,松开就下坠。
V0.9还没有进行碰撞检测,因此是“无敌”且“无计分”版本,所以也就还没有到V1.0

作业:输入、调试、运行成功后,尝试增加碰撞检测,判断飞机是否碰到障碍。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-14-2025 08:39:01 | 显示全部楼层
V0.9是个“不死版”,也没有计分
所以V1.0要成为基础版,至少能玩了!

其实要改的地方很少,如上图,4处。下面贴更具体的局部代码


在framework类定义里增加status属性,在framework.play代码的第一句增加判断:



在framework.stone_do的stone循环里增加判断:


在gunship.draw里添加代码,处理crashed status


现在,可以玩啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-19-2025 21:53:44 | 显示全部楼层
V1.1 : 飞机落地算坠毁


所谓“落地算坠毁”,实质还是对z10.y的判断。在程序哪里加判断呢?
我们有了framework,首先就是要实现“代码该写在哪里,有明确的设计”。

先来看fwork.play
那么明显应该加在z10.move,因为move就是计算坐标的函数

这是gunship.move
显然L31的代码应该修改。
原来的意思是:如果self.y向下出界,就停在出界边缘。
应改为:如果self.y向下出界,则fwork.status = 1
然后运行程序,看看OK了吗?
如果还有小bug,想想该怎么改?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-19-2025 22:28:28 | 显示全部楼层
本帖最后由 liuyi 于 3-20-2025 11:05 编辑



下面是细节

framework里增加face和hiScore属性


framework.draw_field和framework.stone_do里修改和增加内容,并增加fwork.update_score函数


Gunship.move最后判断飞机坠毁时,增加调用fwork.update_score


BGM
当然,选择哪首曲子,看你喜好
set_volume里是BGM的音量,也看你喜好

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-20-2025 09:15:04 | 显示全部楼层
本帖最后由 liuyi 于 3-23-2025 10:44 编辑



一个正经空战游戏,没有血槽是不行的,所以飞机一定要有hp


增加全局变量GUNSHIP_HP_MAX= 50,最高血量暂定50
Gunship里增加hp属性
Gunship.draw中增加hp的绘制


framework.stone_do中增加相关判断和处理
framework.keydown中按回车键重玩,增加hp恢复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-20-2025 11:37:55 | 显示全部楼层
本帖最后由 liuyi 于 3-29-2025 20:07 编辑


接下来是V1.5
能否Hi-Score有Top3的排行榜?

还可以考虑:程序开始运行的时候输入user name,这样排行榜和save的文件里还可以有名字

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-29-2025 16:42:02 | 显示全部楼层

现在要有一个大改进:Bullet
Gunship V2.0


V2.0只是能shoot出子弹,但是子弹能击中什么,有什么效果,V2.1再做。


首先是Bullet的类定义,可以看到,都是套路。甚至你把snow直接搬来也可以


bullet是Gunship射击出的,那就属于Gunship管,类定义里加属性2条


fwork里增加bullet的处理函数bullet_do,就像stone_do
注意暂时只有”飞行效果”,不会有“命中”处理。

keydown里增加“空格键开火”,注意开火流程是:制造一个bullet,起始坐标是飞机的机头处,spdX = 0
然后把新生产的子弹装入“弹夹”,并发出声音。


最后,fwork.play中增加对bullet_do的调用。

OK!现在运行游戏,Press SPACE to shoot!!!
下一步,就是命中判断啦,是shoot stones,还是增加敌机?
当然,还可以让子弹带抛物线扔出。
试试吧!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

27

主题

73

回帖

418

积分

超级版主

积分
418
 楼主| 发表于 3-29-2025 20:32:28 | 显示全部楼层


一些图片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

0

主题

3

回帖

12

积分

注册会员

积分
12
发表于 3-30-2025 10:47:26 | 显示全部楼层
加点技能 ———— 吃💩加子弹和能量条,能量条积满开大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 4-12-2025 07:10 , Processed in 0.065762 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表