• c++飞机大战架构


    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #pragma comment(lib,"winmm.lib")
    11. using namespace std;
    12. // 创建随机数引擎
    13. random_device rd;
    14. mt19937 gen(rd());
    15. // 创建随机数分布
    16. uniform_int_distribution<int> dis(1, 100);
    17. // 生成随机数
    18. int randomNumber = dis(gen);
    19. constexpr auto cwidth = 600;
    20. constexpr auto cheight = 1100;
    21. // -----------------数据设计------------------
    22. /*
    23. // 位置结构体
    24. /* 使用矩形来判定飞机、子弹、道具的位置 */
    25. /* RECT
    26. 解释:在C++中,RECT是一个结构体,用于表示一个矩形的坐标和尺寸。它通常用于Windows编程中,
    27. 特别是在使用WinAPI函数进行图形界面开发时。
    28. 成员有:
    29. left:矩形左边界的x坐标。
    30. top:矩形上边界的y坐标。
    31. right:矩形右边界的x坐标。
    32. bottom:矩形下边界的y坐标。
    33. */
    34. //登录玩家
    35. struct WJ
    36. {
    37. string name;
    38. int score;
    39. int time;
    40. };
    41. vector simple;//简单难度积分数组
    42. vector hard;//困难难度积分数组
    43. vector hell;//地狱难度积分数组
    44. IMAGE itimg1, itimg2, itimg3;
    45. IMAGE* itimgArray[3] = { &itimg1, &itimg2, &itimg3 };//不同道具图片
    46. IMAGE enimg1, enimg2, enimg3;
    47. IMAGE* enimgArray[3] = { &enimg1, &enimg2, &enimg3 };//不同等级敌机图片
    48. //游戏背景类
    49. class BK
    50. {
    51. IMAGE& img;
    52. int y;
    53. public:
    54. //BK(IMAGE& img){}//初始化背景图片
    55. void show() {}//加载图片
    56. };
    57. // 子弹:类包含位置坐标、发射方向以及发射速度。
    58. class Bullet//战机子弹
    59. {
    60. RECT pos;
    61. int harm;//根据敌机等级判断对玩家造成的伤害或者根据玩家确定对敌机伤害
    62. int speed;
    63. int dir;//方向
    64. IMAGE& img;
    65. public:
    66. //Bullet(IMAGE& img, RECT fj, int harm){}// 传入子弹伤害以及敌机或者战机的中点坐标,根据图片宽度和高度确定pos
    67. void show();// 加载图片
    68. void Delete();// 战机子弹碰到敌机、敌机子弹碰到战机、子弹碰到地图底线会被销毁,根据敌机和战机的碰撞检测返回值判断,减少数组中的数量
    69. };
    70. class E_Bullet : Bullet {};//敌机子弹
    71. // 玩家战机:类包含战机的具体位置坐标。
    72. class Player
    73. {
    74. RECT pos;
    75. int hp;// 生命值
    76. int harm;//伤害
    77. int speed;// 速度,有固定初始值,获得道具可以修改
    78. IMAGE& img;
    79. public:
    80. //Player(IMAGE &img, int hp, int harm, int speed, int x){};// 构造函数,初始化pos结构体,生命值,速度,伤害
    81. RECT P_Getlocation();//获取位置,返回RECT结构体
    82. void show();//加载图片
    83. void P_Move();// 根据玩家按键移动
    84. void Fire(int harm, int num, int isAc);// 自动开火,获得道具可以改变子弹速度、伤害,num为道具类型,isAc表示是否获取道具
    85. void It(int num, int isAc);//num为道具类型,isAc表示是否获取道具,除了对子弹的影响
    86. int P_Hurt(E_Bullet& bt);//碰撞检测 0代表未被击中,1代表被击中,2代表获取道具
    87. void P_hp(int flag);//根据碰撞检测的返回值扣除hp
    88. };
    89. // 敌机:结构体包含位置坐标。
    90. class Enemy
    91. {
    92. int level;//等级,根据选择的游戏难度初始化
    93. RECT pos;
    94. int hp;
    95. int speed;
    96. int harm;
    97. IMAGE& img;
    98. public:
    99. //Enemy(int x, IMAGE& img, int hp, int harm, int speed, int level) {}//传入左上随机生成的x坐标,根据图片宽度和高度确定pos,使用loadimage函数加载图片;初始化等级,根据等级确定生命值、速度、伤害
    100. void E_Move();// 固定速度和方向前进
    101. void Fire();//自动开火
    102. void show();//加载图片
    103. int E_Hurt(Bullet& bt);//碰撞检测 0代表未被击中,3代表被击中, 4代表与随机生成的道具重合
    104. //void Evolve(int E_time);//每隔一段时间,敌机进化一次,拓展
    105. void Destroy();// 生命值降到0或者到达地图底线销毁敌机
    106. RECT E_Getlocation();//获取位置,返回RECT结构体
    107. void E_hp(int flag);//根据碰撞检测的返回值扣除hp
    108. };
    109. // 道具:结构体包含具体位置坐标,以及对应效果。
    110. class Items
    111. {
    112. int dir;//方向
    113. RECT pos;
    114. int num;//功能序号
    115. int speed;
    116. IMAGE& img;
    117. public:
    118. //Items(int x, int num, IMAGE& img) {}//传入功能序号,随机生成的中点坐标或者被击毁敌机的坐标,根据图片宽度和高度确定pos
    119. void I_Move();//移动方式
    120. void Destroy();//被获取或者触碰底线销毁道具
    121. void Strengthen(int num){}// 增益效果根据功能序号确定
    122. };
    123. //关卡boss
    124. class Boss: public Enemy{};
    125. vector es;//敌机数组
    126. vector it;//道具数组
    127. // -----------------数据设计------------------
    128. // ---------------view-------------------
    129. /* 负责人:
    130. 功能 :
    131. 1. 展示登录界面
    132. 2. 接收玩家输入
    133. 移动鼠标点击执行对应选项
    134. 请输入游戏昵称:创建用户,存入文件中
    135. 进入游戏:进入游戏菜单,调用游戏菜单界面menuView();
    136. 退出游戏:结束程序
    137. 参数 : void
    138. 返回值 : void
    139. */
    140. void logView();
    141. /* 负责人:
    142. 功能:
    143. 1. 展示游戏菜单界面
    144. 2. 接收玩家输入
    145. 移动鼠标点击执行对应选项
    146. 开始游戏:开始游戏,调用游戏界面gameView();
    147. 游戏难度:选择游戏难度,调用游戏难度界面
    148. 排行榜:查看排行榜,调用排行榜界面
    149. 游戏设置:进去设置界面,调用游戏设置界面
    150. 退出账号:注销账号,调用登录界面logView();
    151. 参数 : void
    152. 返回值 : void
    153. */
    154. void menuView();
    155. /* 负责人:
    156. 功能:
    157. 1. 展示游戏难度界面
    158. 2. 接收玩家输入
    159. 移动鼠标点击执行对应选项
    160. 简单:更改敌机对应属性,调用modDiff();
    161. 困难:更改敌机对应属性,调用modDiff();
    162. 地狱:更改敌机对应属性,调用modDiff();
    163. 返回:返回,调用游戏菜单界面menuView();
    164. 参数 : void
    165. 返回值 : void
    166. */
    167. void diffView();
    168. /* 负责人:
    169. 功能:
    170. 1. 展示各游戏难度下的排行榜选择
    171. 2. 接收玩家输入
    172. 移动鼠标点击执行对应选项
    173. 简单:展示简单难度排行版,调用simpleView();
    174. 困难:展示困难难度排行版,调用hardView();
    175. 地狱:展示地狱难度排行版,调用hellView();
    176. 返回:返回,调用游戏菜单界面menuView();
    177. 参数 : void
    178. 返回值 : void
    179. */
    180. void rankView();
    181. /* 负责人:
    182. 功能:
    183. 1. 展示简单难度下的排行榜,读取文件中的数据并打印
    184. 参数 : void
    185. 返回值 : void
    186. */
    187. void simpleView();
    188. /* 负责人:
    189. 功能:
    190. 1. 展示困难难度下的排行榜,读取文件中的数据并打印
    191. 参数 : void
    192. 返回值 : void
    193. */
    194. void hardView();
    195. /* 负责人:
    196. 功能:
    197. 1. 展示地狱难度下的排行榜,读取文件中的数据并打印
    198. 参数 : void
    199. 返回值 : void
    200. */
    201. void hellView();
    202. /* 负责人:
    203. 功能:
    204. 1. 展示游戏设置界面
    205. 2. 接收玩家输入
    206. 移动鼠标点击执行对应选项
    207. 游戏音效:调用Sound(bool isOn);
    208. 游戏玩法:展示游戏玩法,调用gameplayView();
    209. 制作组信息:展示制作组信息,调用developersView();
    210. 返回:返回,调用游戏菜单界面menuView();
    211. 参数 : void
    212. 返回值 : void
    213. */
    214. void setView();
    215. /* 负责人:
    216. 功能:
    217. 1. 展示游戏玩法
    218. 参数 : void
    219. 返回值 : void
    220. */
    221. void gameplayView();
    222. /* 负责人:
    223. 功能:
    224. 1. 展示制作组信息
    225. 参数 : void
    226. 返回值 : void
    227. */
    228. void developersView();
    229. /* 负责人:
    230. 功能:
    231. 1. 展示游戏画面,积分以及血量
    232. 2. 接收玩家输入
    233. 点击暂停按钮,调用pauseView();
    234. 参数 : void
    235. 返回值 : void
    236. */
    237. void gameView();
    238. /* 负责人:
    239. 功能:
    240. 1. 展示暂停界面
    241. 2. 接收玩家输入
    242. 移动鼠标点击执行对应选项
    243. 继续游戏:调用Pause(bool isPaused);
    244. 音效设置:调用Sound(bool isOn);
    245. 返回游戏菜单:调用Pause(bool isPaused),先调用savelevel(int level, WJ wj)保存进文件,再调用游戏菜单界面menuView();
    246. 参数 : void
    247. 返回值 : void
    248. */
    249. void pauseView();
    250. // ---------------view-------------------
    251. // ---------------service-------------------
    252. /* 负责人:
    253. 功能:
    254. 1. 修改对应的游戏难度
    255. 参数 : int level
    256. 返回值 : int
    257. */
    258. int modDiff(int level);//1代表简单,2代表困难,3代表地狱
    259. /* 负责人:
    260. 功能:
    261. 1. 控制游戏音效的开关
    262. 参数 : bool isOn
    263. 返回值 : void
    264. */
    265. void Sound(bool isOn);
    266. /* 负责人:
    267. 功能:
    268. 1. 控制游戏暂停或继续的开关
    269. 参数 : bool isPaused
    270. 返回值 : void
    271. */
    272. void Pause(bool isPaused);
    273. /* 负责人:
    274. 功能:
    275. 1. 负责敌机的随机生成
    276. 参数 : vector& es, int amount, IMAGE& enemyimg, int hp, int harm, int speed, int level//敌机数组和敌机数量以及图片
    277. 返回值 : void
    278. */
    279. void creEnemy(vector& es, int amount, IMAGE* enimgArray[], int hp, int harm, int speed, int level){};//生成敌机时还要保证不与已有敌机重合
    280. /* 负责人:
    281. 功能:
    282. 1. 负责道具的随机生成
    283. 参数 : vector& it, int amount, IMAGE imgArray[], int num, RECT pos//道具数组和道具数量以及道具图片数组以及道具类型和敌机销毁位置
    284. 返回值 : void
    285. */
    286. void creItems(vector& it, int amount, IMAGE* imgArray[], int num, RECT pos) {};//生成道具时还要保证不与已有敌机和道具重合,击毁敌机有概率生成道具(用随机数)
    287. /* 负责人:
    288. 功能:
    289. 1. 负责玩家积分的保存
    290. 根据modDiff(int level)的返回值决定存入哪个数组并存入哪个文件
    291. 参数 : int level, WJ wj
    292. 返回值 : void
    293. */
    294. void savelevel(int level, WJ wj);
    295. // ---------------service-------------------
    296. int main()
    297. {
    298. ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    299. initgraph(cwidth, cheight, EX_NOMINIMIZE | EX_SHOWCONSOLE);
    300. getchar();
    301. bool is_play = true;
    302. while (is_play)
    303. {
    304. //logView();//退出游戏
    305. is_play = false;
    306. }
    307. return 0;
    308. }

  • 相关阅读:
    manjaro gnome 记录 3 配置国内镜像源
    httpClient同步、异步性能对比
    二十分钟掌握yaml编写方式
    JAVA数据类型及自动类型转换、强制类型转换
    持续集成(CICD)- Jenkins+Git+gogs综合实战(笔记一)
    [论文阅读]3DSSD——基于Point的三维单阶段目标检测器
    城市机会清单中处处是机遇——实现pdf转excel
    JAVAWeb Session 会话概述与基本用法
    在vue项目中引入eslint和stylelint,以及常用配置介绍
    猿创征文 | 使用Jquery封装的AJAX请求数据
  • 原文地址:https://blog.csdn.net/qq_73185160/article/details/133178756