# 单机版坦克大战设计 **Repository Path**: lime2019/tkdz ## Basic Information - **Project Name**: 单机版坦克大战设计 - **Description**: 本次大作业要求完成一个单机版人机交互坦克大战游戏. - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-04-15 - **Last Updated**: 2022-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 坦克大战设计 --- 我们没有完成 :tw-1f62d: 因为对C++不太熟悉,暂时不会再弄了... --- ### 1. 介绍 坦克大战是一款经典的小游戏,也是C++编程应用中适合新手开发的程序。 本次大作业要求完成一个单机版人机交互坦克大战游戏,要求必须使用面对对象的思想进行设计,具体要达到的基本要求如下: ### 2. 基本要求 #### 2.1 界面要求 使用控制台版本的人机交互界面,包括: - 游戏主界面:选择游戏模式、声音设置及进行游戏; - 说明性副界面:介绍游戏规则; #### 2.2 设计思想 必须使用面向对象的思想进行设计,使用C++编程; #### 2.3 实现功能 - 至少一张游戏地图; - 游戏胜利与失败的判断,及对应的界面的更新; - 坦克复活; - 己方坦克的控制; - 敌方坦克的自由移动; - 子弹的射击与显示; - 地图中不同物体的响应(草丛、水流、钢块、砖块) - 地图的更新(实时响应地图变化) ### 3. 使用的库 使用针对C++的图形库:[EasyX](https://easyx.cn/) ### 4. 游戏设计 #### 4.1 游戏胜负规则 - 游戏失败: - 玩家基地被敌方坦克摧毁; - 单玩家时:玩家拥有坦克数(基地中坦克数与游戏中坦克数之和)为0时,玩家失败; - 双玩家时:两玩家拥有坦克数为0时,玩家失败; - 游戏胜利: - 双人对战时,摧毁对方基地; - 与电脑对战时,消灭电脑所有坦克; #### 4.2 坦克类型 - 电脑(拥有四种形态的坦克): - 普通坦克(TANK): - 移动速度:1单元格/s; - 装弹速度:1发/s; - 护甲:无; - 快速坦克(MOBILETANK): - 移动速度:2单元格/s; - 装弹速度:1发/s; - 护甲:无; - 双层装甲坦克(DOUBLEARMOREDTANK): - 移动速度:1单元格/s; - 装弹速度:1发/s; - 护甲:可抵御两发炮弹; - 超级装甲坦克(SUPERARMOREDTANK): - 移动速度:0.5单元格/s; - 装弹速度:2发/s; - 护甲:可抵御三发炮弹; - 玩家(三种形态坦克): - 普通坦克(TANK): - 移动速度:1单元格/s; - 装弹速度:1发/s; - 护甲:无; - 机动装甲坦克(MOBILEARMOREDTANK): - 移动速度:2单元格/s; - 装弹速度:1发/s; - 护甲:可抵御一发炮弹; - 重火力坦克(METROCONFLICTTANK): - 移动速度:1单元格/s; - 装弹速度:2发/s; - 护甲:可抵御两发炮弹; #### 4.3 地图类型 - 砖块: - 地形效果:坦克无法通过,炮弹不能击穿; - 地形可被炮弹清理,一发炮弹清理1×2个单元格; - 钢块: - 地形效果:坦克无法通过,炮弹不能击穿; - 地形无法被清除; - 水流: - 地形效果:坦克无法通过,炮弹可以通过; - 地形无法清除; - 草丛: - 地形效果:无法看见坦克,炮弹可以通过; - 地形无法清除; - 冰面: - 地形效果:坦克移动速度增加100%,炮弹可以通过; - 地形无法清除; #### 4.4 游戏模式 - 单玩家 - 电脑生成敌方坦克; - 玩家需要保护基地; - 敌方坦克在最上方随机生成; - 玩家坦克在基地左侧复活; - 双玩家 - 电脑生成敌方坦克; - 玩家需要保护基地; - 敌方坦克在最上方随机生成; - 玩家一在基地左侧复活,玩家二在基地右侧复活; - 双人对战 - 无敌方坦克; - 玩家需要保护基地; - 双方均在基地左侧复活; #### 4.4 游戏控制 - 界面选择: - 上:W或者↑ - 下:S或者↓ - 选定:J或者0 - 暂停:P - 重新开始:ESC - 关闭音乐:M - 坦克控制 - 单人游戏: - 上:W - 下:S - 左:A - 右:D - 攻击:J - 双人游戏: - 上:↑ - 下:↓ - 左:← - 右:→ - 攻击:0 #### 4.5 坦克 - 坦克生成时有3s无敌时间; - 玩家坦克生成时为:普通坦克,拾取到道具或者击毁5辆敌军坦克即可升级; #### 4.6 道具设计 - 坦克升级包:使玩家坦克升一级; - 基地加固包:将玩家基地外墙变成钢块30s; - 坦克恢复包:玩家坦克数+1; ### 5. 参与贡献与Git管理要求 develop-xjh分支:[Lime2019](https://gitee.com/lime2019) develop-zkw分支:[zkw](https://gitee.com/zhao_kewen) 思路图:https://www.processon.com/view/link/5eda0ccdf346fb1712e2d7fd UML类图:https://www.processon.com/view/link/5ecd26a51e08530a9b213ae6 **主分支(master)不允许直接提交,必须从其他分支发起合并请求!** **完成自己部分任务后,提交到自己的分支上,然后请求将自己的分支合并到主分支上** **开展同一部分任务时,注意确保先拉取主分支上代码,然后再修改代码!** - 克隆仓库: ```shell git clone https://gitee.com/lime2019/tkdz.git ``` - 更新分支代码并提交: ```shell git add . git commit -m "修改内容说明" gti push ``` 注: 1.第一行表示将修改的文件添加至暂存区; 2.第二行表示将修改的文件添加至本地仓库; 3.第三行表示将本地仓库的文件推送到远程仓库 4.第二行可省略`-m "注释" `其相当于本次提交,你所修改的文件,将会注释你在双引号中注释的内容; - 更新分支 ```shell git checkout master git pull git checkout 分支名 git merge master ``` 注: 1.第一行表示切换本地仓库到master分支 2.从远程仓库拉取主分支 3.切换到自己的分支 4.将自己的分支与主分支同步 - 查看当前所处分支: ```shell git branch ``` - 查看本地git仓库状态: ```shell git status ``` - 新建分支 ```shell git checkout 分支名 ``` - 切换分支: ```shell git checkout 分支名 ``` - 创建远端分支: ```shell git push origin 本地分支名:远程分支名 ```