# RED ALERT
<!-- TOC -->
- [RED ALERT](#red-alert)
- [游戏概述与游戏玩法](#游戏概述与游戏玩法)
- [简介](#简介)
- [游戏运行环境要求:](#游戏运行环境要求)
- [游戏支持的操作](#游戏支持的操作)
- [各兵种单位属性](#各兵种单位属性)
- [游戏加载方式](#游戏加载方式)
- [Server端口启动方式](#server端口启动方式)
- [Client端口启动方式](#client端口启动方式)
- [单一平台演示、测试方式](#单一平台演示测试方式)
- [项目安排](#项目安排)
- [项目分工及权值分配](#项目分工及权值分配)
- [项目的开发流程](#项目的开发流程)
- [评分项的完成度](#评分项的完成度)
- [基础功能](#基础功能)
- [基础功能外的可选功能](#基础功能外的可选功能)
- [建造动画](#建造动画)
- [移动动画](#移动动画)
- [寻路算法](#寻路算法)
- [C++规范的使用](#c规范的使用)
- [C++特性的使用](#c特性的使用)
- [C++11新特性的使用](#c11新特性的使用)
- [代码规范](#代码规范)
- [踩坑记录 & 避坑指南](#踩坑记录--避坑指南)
- [cocos2d-x游戏设计模块 & TMX瓦片地图设计 & 精灵帧plist的制作](#cocos2d-x游戏设计模块--tmx瓦片地图设计--精灵帧plist的制作)
- [Google ProtoBuf & Boost::Asio 网络消息模块](#google-protobuf--boostasio-网络消息模块)
- [致谢](#致谢)
<!-- /TOC -->
## 游戏概述与游戏玩法
### 简介
Red Alert是一款即时战略(RTS)游戏,支持最多四人对战,可以实现局域网下的联机对抗,在游戏中玩家需要利用基地和各型建筑持续产生的资源来生产即战单位,在保证己方基地不被摧毁的前提下,摧毁敌方的基地以获得最终的胜利。
![RedAlert](documents/RedAlert.png)
### 游戏运行环境要求:
* 运行平台:Windows
* 游戏最低硬盘空间:70 MB
### 游戏支持的操作
|支持的操作|对应的效果|
|:-:|:-:|
|点击主基地|呼出建造菜单|
|点击兵营|呼出警犬、士兵生产菜单|
|点击战车工厂|呼出坦克、战斗机生产菜单|
|鼠标置于屏幕边缘|当距离边缘10 ~ 40像素时移动地图,0 ~ 10像素时移动速度翻倍|
|点击小地图|地图移动至相应地点|
|点击建造菜单中的各建筑|再点击主基地建造范围内的合理地点可实现建造建筑|
|点击生产菜单中的各单位|实现在相应的建筑中生产单位|
|点击(框选)单位后再点击空地|单位将移动至该地点(若该点位于非可移动区域,将尽可能靠近该点)|
|点击(框选)单位后再点击敌方单位|单位将靠近该地方单位并发起攻击,若不可攻击则只靠近敌方单位|
|点击聊天框的InputBar,输入单行字符,再点击游戏地图上任何空地,敲下Enter键|发送消息,该消息对所有游戏玩家可见|
|按下Blank Space键|回到主基地|
|按下PgUp、PgDn、Left、Right键|将地图分别移动向上、下、左、右|
### 各兵种单位属性
|单位名|特性|攻击力|攻击间隔|血量|移动力|攻击范围|建造时长|建造代价|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|警犬|只对士兵发起攻击,一击致死|5|2|1|5|1|2|1|
|士兵|属性均衡|3|1|3|3|3|3|2|
|坦克|耐久力强,具有强大的火力|5|5|10|4|5|8|5|
|飞机|高机动性,破坏力极强|8|5|7|10|5|10|10|
## 游戏加载方式
### Server端口启动方式
1. 解压压缩包至硬盘
2. 打开`RedAlert.exe`后单击`Start Game`按钮
3. 单击`Create Game`进入Server界面
4. 选择一张地图作为游戏地图(默认选择`LostCity`作为游戏主地图)
5. 单击`Start Server`创建游戏服务端
6. 等待Client端玩家加入直至右端显示的连接人数达到2人及以上
7. 点击`Start Game`进入游戏场景
![ServerStart](documents/server_start.gif)
### Client端口启动方式
1. 执行Server端口启动方式的1、2两步
2. 单击`Join Game`进入房间列表
3. 在输入框中输入服务端的IPv4地址
4. 单击`Start Game`接入服务器
5. 等待Server端的响应,当Server段玩家发出游戏开始指令时进入游戏场景
![ClientStart](documents/client_start.gif)
### 单一平台演示、测试方式
1. Server端口开启方式同上
2. Client端口中IP地址选用默认参数
![Debugging](documents/debugging.gif)
## 项目安排
### 项目分工及权值分配
|成员|分工|得分权值|
|:-:|:-:|:-:|
|宋昭亦|地图设计、场景设计、素材收集、寻路移动|100%|
|白皓月|Google ProtoBuf与Boost::Asio、攻击算法、金钱电力类设计|100%|
|魏楠|单位与建筑类设计、游戏控制算法、游戏主体框架、动画制作|100%|
|方沛|Boost服务器编程、框选点选操作、小地图、键盘事件|100%|
### 项目的开发流程
![开发流程](documents/RedAlert开发流程.png)
![甘特图](documents/甘特图.png)
## 评分项的完成度
### 基础功能
- [x] 地图绘制、建筑物绘制、兵种绘制
- [x] ⿏标和键盘操作交互
- [x] 五种基本建筑物(基地,电⼚,矿场,兵营,战⻋⼯⼚)
- [x] 两种基本步兵(士兵,警犬)
- [x] 一种基本坦克(坦克)
- [x] ⽀持局域⽹联机对战(⾃由对抗模式),且⽀持多⼈在同⼀个地图游戏
- [x] 动画效果(建造动画、警犬移动动画)
### 基础功能外的可选功能
- [x] 多个国家(不同国家的单位、建筑用不同颜色区分)
- [x] 支持飞机(可以跨越障碍物,起飞状态下可以重叠)
- [x] 支持聊天(目前只支持全局聊天)
- [x] 支持两张地图
- [x] 支持小地图(可以实现点击快速移动以及标注单位)
### 建造动画
使用了plist与SpriteFrame展现了建筑建造的动画
![Construction](documents/construction.gif)
### 移动动画
使用plist加载了狗奔跑时的动画,而其它单位则使用cocos2dx动画中的Rotate方法
![Run](documents/dog_run.gif)
### 寻路算法
游戏采用了A*寻路算法(A Star Path Finding Algorithm)</br>
游戏中的寻路算法以欧几里得距离(Euclidian distance)为基础并结合启发函数做深度优先的路径搜索</br>
为减少计算量,本算法采用的启发函数(Heuristic Evaluation)为曼哈顿距离(Manhattan distance),即出租车距离</br>
最后搜索出来的路径往往遵从切比雪夫距离(Chebyshev distance),也称棋盘距离</br>
更多的算法内容请移步CSDN: https://blog.csdn.net/u010946556/article/details/49027301
![distance](documents/distance.jpg)
## C++规范的使用
### C++特性的使用
1. STL容器
`std::vector`贯穿于`GridMap`, `AStarPathFinding`与`Unit`之中
* `typedef std::vector<std::vector<int>> dyadic_array;`
```
dyadic_array是一个二维数组,用于记录格点是否被占用,并且标示占用该格点的单位id
```
* `typedef std::vector<GridPoint> GridPath;`
```
GridPath是个盛放GridPoint的数组,用于标示单位行走的路径,将单位的移动转化成最佳路径问题
```
`std::map`与`std::deque`
```
typedef std::deque<chat_message> chat_message_queue;
std::map<cocos2d::EventKeyboard::KeyCode, bool> keys;
```
2. 迭代器
迭代器在代码中的体现主要是配合STL容器的操作,如在`AStarPathFinding.cpp`中
```
void PathFinding::removeFromOpenList(Grid * grid)
{
auto iter = find(_open_list.begin(), _open_list.end(), grid);
if (iter != _open_list.end())
_open_list.erase(iter);
}
```
3. 类和多态
* 该特性集中体现在`Unit.h`与`AdvancedUnit.h`中
* 所有的建筑的基类都是`Building`类,而`Building`类则继承自`Unit`类
* 所有的可移动单位都直接继承自`Unit`类
* `Fighter`类的`void move()`函数以及`Tank`类的`void attack()`函数则为override函数
4. 函数重载
```
class GridMap{
bool occupyPosition(int id, const coc
没有合适的资源?快使用搜索试试~ 我知道了~
这是由szy,bhy,wn,fp开发的红色警戒游戏_C++_C_下载.zip
共319个文件
png:249个
h:18个
cpp:15个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 103 浏览量
2023-04-05
13:02:58
上传
评论
收藏 34.33MB ZIP 举报
温馨提示
这是由szy,bhy,wn,fp开发的红色警戒游戏_C++_C_下载.zip
资源推荐
资源详情
资源评论
收起资源包目录
这是由szy,bhy,wn,fp开发的红色警戒游戏_C++_C_下载.zip (319个子文件)
GameMessage.pb.cc 54KB
Unit.cpp 23KB
CombatScene.cpp 17KB
StartScene.cpp 16KB
CreateUnitLayer.cpp 14KB
Building.cpp 12KB
PreLoadScene.cpp 10KB
MciPlayer.cpp 7KB
SimpleAudioEngine.cpp 7KB
AudioControlScene.cpp 6KB
GridMap.cpp 6KB
AdvancedUnit.cpp 6KB
AppDelegate.cpp 4KB
chat_server.cpp 4KB
AStarPathFinding.cpp 3KB
StartMenuScene.cpp 3KB
Power.fnt 3KB
Money.fnt 2KB
construction.gif 9.73MB
server_start.gif 4.6MB
client_start.gif 3.74MB
chat.gif 463KB
.gitkeep 0B
GameMessage.pb.h 31KB
Unit.h 8KB
GridMap.h 6KB
CombatScene.h 6KB
chat_server.h 6KB
chat_client.h 6KB
Building.h 3KB
AStarPathFinding.h 3KB
CreateUnitLayer.h 2KB
StartScene.h 2KB
MciPlayer.h 1KB
AdvancedUnit.h 1KB
GameMessageWrap.h 1KB
AppDelegate.h 941B
Const.h 805B
PreLoadScene.h 743B
AudioControlScene.h 376B
StartMenuScene.h 294B
chat_message.hpp 2KB
distance.jpg 20KB
README.md 14KB
SovietMarch.mp3 2.88MB
2018 软件学院C++期末项目说明最终版.pdf 564KB
Base.plist 17KB
PowerPlant.plist 17KB
TankFactory.plist 16KB
Mine.plist 16KB
MilitaryCamp.plist 16KB
preloadResources.plist 1KB
DogMove.plist 0B
RMXP_Grid.png 1.96MB
background3.png 1.01MB
RedAlert.png 810KB
background2.png 742KB
RPG Marker VX Ace.png 534KB
base.png 530KB
PowerPlant.png 488KB
Mine.png 366KB
TankFactory.png 348KB
MilitaryCamp.png 224KB
background5.png 201KB
background.png 178KB
TIM图片20180620195720.png 173KB
pic.png 173KB
minimap2.png 123KB
minimap2_unselected.png 99KB
minimap1.png 85KB
minimap1_unselected.png 68KB
background4.png 67KB
RedAlert开发流程.png 65KB
MoneyDisplay.png 64KB
RMXP_Grid_Earth.png 47KB
powerDisplay.png 46KB
甘特图.png 36KB
PowerPlant_1 (24).png 32KB
TankFactory_1 (24).png 32KB
PowerPlant_1 (25).png 32KB
PowerPlant_1 (23).png 32KB
PowerPlant_1 (22).png 31KB
TankFactory_1 (23).png 31KB
PowerPlant_1 (21).png 31KB
PowerPlant_1 (20).png 31KB
PowerPlant_1 (19).png 31KB
PowerPlant_1 (18).png 31KB
PowerPlant_1 (17).png 31KB
TankFactory_1 (22).png 30KB
PowerPlant_1 (16).png 30KB
PowerPlant_1 (15).png 30KB
SoldierMenu.png 30KB
PowerPlant_1 (14).png 30KB
MineMenu.png 30KB
Base_1 (26).png 29KB
base_1.png 29KB
base_3.png 29KB
TankFactory_1 (21).png 29KB
PowerPlant_1 (13).png 29KB
TankFactory_4.png 29KB
共 319 条
- 1
- 2
- 3
- 4
资源评论
快撑死的鱼
- 粉丝: 1w+
- 资源: 9156
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功