天天看点

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

本次坦克大战项目已实现的功能

背景音效,动画界面,各级菜单选项,暂停游戏,重新开始,储存与读取游戏进度。

单人,双人(闯关模式) (自定义游戏),双人联机模式

每辆坦克独立的HP,MP,移动速度,攻击CD,自动回HP,MP,3种不同的炮弹攻击

针对BOSS的自动寻找玩家并攻击。使用A星算法。

各种类型食物:无敌,攻击翻倍,全屏秒杀,无限子弹,全场冰冻。

各种类型敌人:4种按等级区分的普通敌人,1种终极BOSS敌人

各种类型障碍物:钢墙,土墙,草丛,河流

自定义编辑地图,保存地图,打开地图继续编辑,使用自定义地图开始游戏。

源码分享:https://github.com/Mr-Hock/MyTank

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

坐标点类:POINTDATA

除了坦克。

各种障碍物,加成道具(食物),炮弹。

都是由每个独立的坐标点组成的

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

动态数组:vector

游戏的每个图案都是由坐标点构成

所以需要用动态数组储存每个类的坐标点数组

本次设计所使用的动态数组均为全局范围

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

游戏主要类

坦克类

食物类

子弹类

障碍物类

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

游戏扩展类

PC坦克控制类

自定义地图类

TCP通信类

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

接收按键消息

使用GetAsyncKeyState函数

取异步按键状态

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

菜单操作使用鼠标消息

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

闯关模式

循环读取关卡地图

调用StartGame函数开始游戏

过关后跳出函数读取下一个地图

继续下一关。。。

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

自定义游戏

弹出Windows文件框

GetSaveFileNameA

GetOpenFileNameA

自动识别地图为单人还是双人

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

联机游戏模式

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

联机模式构架

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

玩家A实现

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

玩家B实现

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

坦克类

该类定义了坦克的所有属性

编写了坦克的所有操作

定义一个坦克类对象就有一部坦克

定义N个就有N部

每部坦克都是一个独立的对象

电脑的坦克只需要用vector储存

然后通过遍历数组,调用不同的操作

即可让每部坦克拥有不同的行为

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

自动控制PC坦克类

通过对Vector的遍历

分别对每部坦克进行操作

生成坦克:

New Tank(x,y,dir,hp,mp…)

Vector.push_back(New Tank)

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

自动控制PC坦克类

判断坦克数量是否上限,不满足则生成新坦克

指定一段时间后自动生成指定类型的坦克

遍历所有在活动的坦克,指定随机行为

(改变方向,移动,发不同的炮弹)

判断坦克是否碰到玩家子弹

(减坦克HP,删除死亡坦克,

炮弹反击,触发自动寻路等)

刷新所有PC坦克

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

各种食物类型

加攻击,坦克类函数内有自身的攻击力变量

无限子弹,在发炮时判断状态,减MP

无敌,碰到电脑子弹判断状态是否减HP

冰冻敌人,控制PC坦克类不调用移动行为即可

全屏秒杀,将PC坦克清除并加分

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

炮弹类型

判断炮弹前面是什么障碍物

如果是土墙,则擦除这块土墙。

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

炮弹移动规则

判断炮弹当前位置是什么障碍物

执行对应的操作

炮弹对着发射会抵消

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

无敌实现方法:

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

储存存档。

首先储存数据的数量,再储存具体的数据

最后写出文件。使用GetSaveFileNameA函数

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

读取存档

初始化所有动态数组

将存档按指定的顺序读入

加入到动态数组内

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

首先读出数组的数量,再接着往后读取数组的数据

读取后存入申请的临时空间,并将m_data重新赋值

因为读出来的是上一次字符串地址,并不是图案

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

新建自定义地图

主要使用检测鼠标函数完成绘画

检测鼠标点击的位置,将设计画面分为3个框架

绘图区,工具界面区,保存与退出区

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

再次编辑自定义地图

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

储存自定义地图

首先将Map类所有画出的坐标与图案进行判断归类

分别压入不同类型的动态数组内

然后再按动态数组类型进行保存

先储存数组元素的数量,再储存数组内的数据

最后以二进制的形式写到文件

C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图
C/C++坦克大战项目坦克类自动控制PC坦克类自动控制PC坦克类各种食物类型炮弹类型炮弹移动规则储存存档。读取存档新建自定义地图再次编辑自定义地图储存自定义地图

继续阅读