news 2026/6/24 5:31:26

基于C#的飞机大战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于C#的飞机大战

本周主要学习了基于C# WinForms开发的一款名为“雷霆战机”的射击类小游戏的完整实现,采用面向对象的设计思想,将游戏元素抽象为各类对象,核心实现了敌机生成、子弹发射、碰撞检测、生命值管理、游戏结束等核心逻辑。以下是对各部分的详细解析:

一、核心抽象类:FlyingObject

作为所有飞行类游戏元素的基类(抽象类),定义了飞行对象的通用属性和行为,是整个游戏的核心抽象层:

  • 核心属性X/Y(坐标)、Width/Height(宽高)、flag(是否被销毁)、HurtCount(受击次数,用于BOSS/大飞机的多血条逻辑);
  • 构造函数:支持两种初始化方式(随机生成坐标的敌机/固定坐标的英雄机/子弹等);
  • 抽象方法GetImage()(获取对象显示图片)、DestoryImage()(获取销毁动画图片)、Step()(对象移动逻辑),强制子类实现个性化行为;
  • 通用方法
    • PaintObject():绘制对象到画布;
    • Destory():绘制销毁动画;
    • hit():碰撞检测逻辑(判断当前对象与另一飞行对象是否重叠)。

二、游戏元素子类(继承自FlyingObject

所有游戏可见元素均继承自FlyingObject,实现各自的个性化逻辑:

游戏子类功能说明
Hero玩家操控的英雄机:
1. 加载英雄机切换动画图片;
2.GetBul()生成子弹;
3.moveTo()跟随鼠标移动;
AirPlane小敌机:
1. 加载普通/销毁动画图片;
2. 移动逻辑(垂直向下,速度4);
3. 单次击中即销毁。
BigPlane大敌机:
1. 加载普通/销毁动画图片;
2. 移动速度2(比小敌机慢);
3. 需要2次击中才销毁(HurtCount%2)。
Bee蜜蜂(特殊敌机):
1. 加载普通/销毁动画图片;
2. 移动逻辑(垂直向下+水平左右反弹);
3. 单次击中销毁。
BossBOSS机:
1. 加载普通/销毁动画图片;
2. 移动速度1(最慢);
3. 需要4次击中才销毁(HurtCount%4)。
Bullet子弹:
1. 加载子弹图片;
2. 移动逻辑(垂直向上,速度3)。
Life生命值图标:
加载生命值图片。
GameOver游戏结束界面:
1. 加载“游戏结束”图片,游戏结束时显示。
Sky游戏背景:
1. 加载背景图片。

三、辅助工具类

1.FlyGather

自定义的飞行对象集合类,封装数组操作,解决WinForms中动态管理大量敌机/子弹的问题:

  • 核心属性:_fly(存储飞行对象的数组)、_size(当前元素数量)、_empty(数组容量);

  • 核心方法:

    • AddFly():添加对象(数组满时自动扩容,容量翻倍);
    • RemoveAt():删除指定下标对象(数组拷贝实现,避免空指针);
    • 索引器:通过下标快速获取对象;
    • Count:返回当前元素数量。

    按顺序执行核心游戏循环:

    • ShootAction():每30帧(300ms)随机生成敌机(小敌机/大敌机/蜜蜂/BOSS);
    • BulletAction():每30帧生成一颗子弹;
    • StepAction():调用所有敌机/子弹的Step()方法,实现移动;
    • RemoveAction():移除越界对象(敌机出屏幕下方、子弹出屏幕上方);
    • HitAction():碰撞检测(子弹击中敌机、敌机撞击英雄机);
    • OverAction():判断游戏结束(生命值为0时停止定时器,显示游戏结束);
    • Invalidate():触发重绘,更新界面。
  1. 交互逻辑

    • Form1_MouseMove:英雄机跟随鼠标坐标移动;
    • Form1_Load:开启双缓冲,解决界面闪烁问题。
  2. 游戏规则

    • 玩家初始3条命,被敌机撞击则减命,命为0游戏结束;
    • 不同敌机需不同击中次数(小敌机/蜜蜂1次、大敌机2次、BOSS 4次);
    • 子弹越界销毁,敌机越界自动移除。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 5:24:32

模块化驱动架构,升级不再怕冲突

告别“升级即停机”:ROCm 7.x 模块化驱动架构实战 在大模型推理服务的运维一线,最让人头疼的往往不是模型本身的调优,而是底层环境的“牵一发而动全身”。过去在 AMD Instinct GPU 上部署 ROCm 栈时,我们常陷入一种两难境地&#…

作者头像 李华
网站建设 2026/6/24 5:23:40

反射的定义、使用方式、优缺点和具体使用场景

目录 1.反射的定义 2.反射的使用方式 3.反射的使用场景 3.1 主流开源框架底层(反射最核心应用场景) 1. Spring 全家桶 2. ORM 持久层框架(MyBatis/Hibernate) 3. JSON 序列化工具(Jackson/FastJSON/Gson&#x…

作者头像 李华
网站建设 2026/6/24 5:16:39

YOLO目标检测入门讲义——RoboMaster视觉篇

引言在RoboMaster的赛场上,机器人需要在一秒之内完成“看到敌人—识别装甲板—计算提前量—控制云台瞄准—发射弹丸”这一整套动作。这个链条的第一步,也是最关键的一步,就是视觉目标检测。传统方法依靠装甲板灯条发光的特性,通过…

作者头像 李华
网站建设 2026/6/24 5:16:11

教育视频摘要技术TR-EduVSum的创新与应用

1. 教育视频摘要的技术挑战与TR-EduVSum的创新价值在当今数字化教育时代,YouTube等平台上的教学视频数量呈爆炸式增长。以"数据结构与算法"这类计算机核心课程为例,单是土耳其语相关视频就超过数千小时。但学生面临一个普遍困境:完…

作者头像 李华
网站建设 2026/6/24 5:16:01

基于LLM多智能体框架的翼型设计风险感知与自动化实践

1. 项目概述:当大模型智能体遇上传统翼型设计最近和几个在航空航天院所搞气动设计的老朋友聊天,他们都在为一个事儿头疼:新项目周期压得越来越紧,但传统的翼型设计流程,从初步构型、CFD(计算流体力学&#…

作者头像 李华
网站建设 2026/6/24 5:14:05

归一化流自适应Hermite基:用可逆神经网络提升谱方法求解奇异PDE

1. 项目概述:当谱方法遇上“智能”基函数在科学计算和工程仿真领域,求解偏微分方程是家常便饭。谱方法,作为一种高精度数值方法,因其“谱精度”(即误差随节点数指数衰减)的诱人特性,在流体力学、…

作者头像 李华