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

中B:Gunship

[复制链接]

42

主题

132

回帖

4259

积分

超级版主

积分
4259
发表于 6-28-2026 22:05:49 | 显示全部楼层 |阅读模式
直10出击


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




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




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

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

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6-28-2026 22:07:50 | 显示全部楼层


请先下载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

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

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6-29-2026 17:02:35 | 显示全部楼层
V1.0的目的是:碰撞检测,计分,让游戏基本能玩


在framework类定义里增加status属性

在framework.play代码的第一句增加判断:


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


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


思考:飞机落地该不该坠毁?

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6-29-2026 20:12:58 | 显示全部楼层
V1.1



还有个细节:坠机后,再复活,gunship的y坐标要恢复到合适位置,见上面的L110

最后,还有个重要建议:
咱们是在做游戏,那么游戏最重要的是“好玩”。
动作游戏,就要求有“手感”。
所以飞机下落是否坠机,应该和具体微操有关:
直接掉下来,带加速度,就会坠毁;
下降的时候微操控制速度,就可以平稳着陆。
具体玩起来感觉如何,自己边改代码边测试手感,指导做出自己满意的功能。

这才叫工程,Engineering

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6-29-2026 20:17:14 | 显示全部楼层
V1.2





framework中,增加属性:face, hiscore



写一个计分函数def update_score,负责从score更新hiscore然后在stone_do中被调用



gunship.move中增加对update_score函数的调用,这样可以看到最后一刻的score



更新framework.draw_field,显示好增加的信息



BGM随意



本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6 天前 | 显示全部楼层
V1.3




首先是增加GUNSHIP_HP_MAX常量,和gunship增加hp属性



在gunship.move和gunship.draw中的相关处理


framework.stone_do中的相关处理



framework.keydown中,Enter键复活,还有让gunship的hp恢复满格


好了这样能玩了!


这里再贴V1.3完整版本,希望同学们做好版本管理







本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 6 天前 | 显示全部楼层

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 5 天前 | 显示全部楼层
我做了一个V1.4,是能存盘的HiScore
下面就直接V1.5吧,Top 5 HiScore



首先在framework的属性里增加hiScoreList,预制了5个分数
而且要做异常处理:score.txt文件是否存在?内容是否正常?



update_score函数,其实就是“插入排序”



点叉叉关闭游戏的时候,自动存盘。

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 5 天前 | 显示全部楼层





这是bullet的类定义



gunship管理自己的bullet



按空格键shoot,bullet_do的函数



在play中调用bullet_do


现在,可以shoot了!不过,shoot了没有任何效果呢,只是子弹会飞

本帖子中包含更多资源

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

×

42

主题

132

回帖

4259

积分

超级版主

积分
4259
 楼主| 发表于 5 天前 | 显示全部楼层



V2.1比较复杂,给个完整版本吧











图片和声音文件打包
同学们玩的开心!

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 7-7-2026 07:14 , Processed in 0.066755 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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