- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #pragma comment(lib,"winmm.lib")
- using namespace std;
-
- // 创建随机数引擎
- random_device rd;
- mt19937 gen(rd());
-
- // 创建随机数分布
- uniform_int_distribution<int> dis(1, 100);
-
- // 生成随机数
- int randomNumber = dis(gen);
- constexpr auto cwidth = 600;
- constexpr auto cheight = 1100;
-
- // -----------------数据设计------------------
- /*
- // 位置结构体
- /* 使用矩形来判定飞机、子弹、道具的位置 */
- /* RECT
- 解释:在C++中,RECT是一个结构体,用于表示一个矩形的坐标和尺寸。它通常用于Windows编程中,
- 特别是在使用WinAPI函数进行图形界面开发时。
- 成员有:
- left:矩形左边界的x坐标。
- top:矩形上边界的y坐标。
- right:矩形右边界的x坐标。
- bottom:矩形下边界的y坐标。
- */
- //登录玩家
- struct WJ
- {
- string name;
- int score;
- int time;
- };
-
- vector
simple;//简单难度积分数组 - vector
hard;//困难难度积分数组 - vector
hell;//地狱难度积分数组 - IMAGE itimg1, itimg2, itimg3;
- IMAGE* itimgArray[3] = { &itimg1, &itimg2, &itimg3 };//不同道具图片
- IMAGE enimg1, enimg2, enimg3;
- IMAGE* enimgArray[3] = { &enimg1, &enimg2, &enimg3 };//不同等级敌机图片
-
- //游戏背景类
- class BK
- {
- IMAGE& img;
- int y;
- public:
- //BK(IMAGE& img){}//初始化背景图片
- void show() {}//加载图片
- };
-
- // 子弹:类包含位置坐标、发射方向以及发射速度。
- class Bullet//战机子弹
- {
- RECT pos;
- int harm;//根据敌机等级判断对玩家造成的伤害或者根据玩家确定对敌机伤害
- int speed;
- int dir;//方向
- IMAGE& img;
-
- public:
- //Bullet(IMAGE& img, RECT fj, int harm){}// 传入子弹伤害以及敌机或者战机的中点坐标,根据图片宽度和高度确定pos
- void show();// 加载图片
- void Delete();// 战机子弹碰到敌机、敌机子弹碰到战机、子弹碰到地图底线会被销毁,根据敌机和战机的碰撞检测返回值判断,减少数组中的数量
- };
- class E_Bullet : Bullet {};//敌机子弹
-
- // 玩家战机:类包含战机的具体位置坐标。
- class Player
- {
- RECT pos;
- int hp;// 生命值
- int harm;//伤害
- int speed;// 速度,有固定初始值,获得道具可以修改
- IMAGE& img;
-
- public:
- //Player(IMAGE &img, int hp, int harm, int speed, int x){};// 构造函数,初始化pos结构体,生命值,速度,伤害
- RECT P_Getlocation();//获取位置,返回RECT结构体
- void show();//加载图片
- void P_Move();// 根据玩家按键移动
- void Fire(int harm, int num, int isAc);// 自动开火,获得道具可以改变子弹速度、伤害,num为道具类型,isAc表示是否获取道具
- void It(int num, int isAc);//num为道具类型,isAc表示是否获取道具,除了对子弹的影响
- int P_Hurt(E_Bullet& bt);//碰撞检测 0代表未被击中,1代表被击中,2代表获取道具
- void P_hp(int flag);//根据碰撞检测的返回值扣除hp
- };
-
- // 敌机:结构体包含位置坐标。
- class Enemy
- {
- int level;//等级,根据选择的游戏难度初始化
- RECT pos;
- int hp;
- int speed;
- int harm;
- IMAGE& img;
- public:
- //Enemy(int x, IMAGE& img, int hp, int harm, int speed, int level) {}//传入左上随机生成的x坐标,根据图片宽度和高度确定pos,使用loadimage函数加载图片;初始化等级,根据等级确定生命值、速度、伤害
- void E_Move();// 固定速度和方向前进
- void Fire();//自动开火
- void show();//加载图片
- int E_Hurt(Bullet& bt);//碰撞检测 0代表未被击中,3代表被击中, 4代表与随机生成的道具重合
- //void Evolve(int E_time);//每隔一段时间,敌机进化一次,拓展
- void Destroy();// 生命值降到0或者到达地图底线销毁敌机
- RECT E_Getlocation();//获取位置,返回RECT结构体
- void E_hp(int flag);//根据碰撞检测的返回值扣除hp
- };
-
- // 道具:结构体包含具体位置坐标,以及对应效果。
- class Items
- {
- int dir;//方向
- RECT pos;
- int num;//功能序号
- int speed;
- IMAGE& img;
- public:
- //Items(int x, int num, IMAGE& img) {}//传入功能序号,随机生成的中点坐标或者被击毁敌机的坐标,根据图片宽度和高度确定pos
- void I_Move();//移动方式
- void Destroy();//被获取或者触碰底线销毁道具
- void Strengthen(int num){}// 增益效果根据功能序号确定
- };
-
- //关卡boss
- class Boss: public Enemy{};
-
- vector
es;//敌机数组 - vector
it;//道具数组 -
- // -----------------数据设计------------------
-
-
-
- // ---------------view-------------------
- /* 负责人:
- 功能 :
- 1. 展示登录界面
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 请输入游戏昵称:创建用户,存入文件中
- 进入游戏:进入游戏菜单,调用游戏菜单界面menuView();
- 退出游戏:结束程序
- 参数 : void
- 返回值 : void
- */
-
- void logView();
- /* 负责人:
- 功能:
- 1. 展示游戏菜单界面
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 开始游戏:开始游戏,调用游戏界面gameView();
- 游戏难度:选择游戏难度,调用游戏难度界面
- 排行榜:查看排行榜,调用排行榜界面
- 游戏设置:进去设置界面,调用游戏设置界面
- 退出账号:注销账号,调用登录界面logView();
- 参数 : void
- 返回值 : void
- */
- void menuView();
-
- /* 负责人:
- 功能:
- 1. 展示游戏难度界面
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 简单:更改敌机对应属性,调用modDiff();
- 困难:更改敌机对应属性,调用modDiff();
- 地狱:更改敌机对应属性,调用modDiff();
- 返回:返回,调用游戏菜单界面menuView();
- 参数 : void
- 返回值 : void
- */
- void diffView();
-
- /* 负责人:
- 功能:
- 1. 展示各游戏难度下的排行榜选择
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 简单:展示简单难度排行版,调用simpleView();
- 困难:展示困难难度排行版,调用hardView();
- 地狱:展示地狱难度排行版,调用hellView();
- 返回:返回,调用游戏菜单界面menuView();
- 参数 : void
- 返回值 : void
- */
- void rankView();
-
- /* 负责人:
- 功能:
- 1. 展示简单难度下的排行榜,读取文件中的数据并打印
- 参数 : void
- 返回值 : void
- */
- void simpleView();
-
- /* 负责人:
- 功能:
- 1. 展示困难难度下的排行榜,读取文件中的数据并打印
- 参数 : void
- 返回值 : void
- */
- void hardView();
-
- /* 负责人:
- 功能:
- 1. 展示地狱难度下的排行榜,读取文件中的数据并打印
- 参数 : void
- 返回值 : void
- */
- void hellView();
-
- /* 负责人:
- 功能:
- 1. 展示游戏设置界面
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 游戏音效:调用Sound(bool isOn);
- 游戏玩法:展示游戏玩法,调用gameplayView();
- 制作组信息:展示制作组信息,调用developersView();
- 返回:返回,调用游戏菜单界面menuView();
- 参数 : void
- 返回值 : void
- */
- void setView();
-
- /* 负责人:
- 功能:
- 1. 展示游戏玩法
- 参数 : void
- 返回值 : void
- */
- void gameplayView();
-
- /* 负责人:
- 功能:
- 1. 展示制作组信息
- 参数 : void
- 返回值 : void
- */
- void developersView();
-
- /* 负责人:
- 功能:
- 1. 展示游戏画面,积分以及血量
- 2. 接收玩家输入
- 点击暂停按钮,调用pauseView();
- 参数 : void
- 返回值 : void
- */
- void gameView();
-
- /* 负责人:
- 功能:
- 1. 展示暂停界面
- 2. 接收玩家输入
- 移动鼠标点击执行对应选项
- 继续游戏:调用Pause(bool isPaused);
- 音效设置:调用Sound(bool isOn);
- 返回游戏菜单:调用Pause(bool isPaused),先调用savelevel(int level, WJ wj)保存进文件,再调用游戏菜单界面menuView();
- 参数 : void
- 返回值 : void
- */
- void pauseView();
- // ---------------view-------------------
-
-
-
- // ---------------service-------------------
- /* 负责人:
- 功能:
- 1. 修改对应的游戏难度
- 参数 : int level
- 返回值 : int
- */
- int modDiff(int level);//1代表简单,2代表困难,3代表地狱
-
- /* 负责人:
- 功能:
- 1. 控制游戏音效的开关
- 参数 : bool isOn
- 返回值 : void
- */
- void Sound(bool isOn);
-
- /* 负责人:
- 功能:
- 1. 控制游戏暂停或继续的开关
- 参数 : bool isPaused
- 返回值 : void
- */
- void Pause(bool isPaused);
-
- /* 负责人:
- 功能:
- 1. 负责敌机的随机生成
- 参数 : vector
& es, int amount, IMAGE& enemyimg, int hp, int harm, int speed, int level//敌机数组和敌机数量以及图片 - 返回值 : void
- */
- void creEnemy(vector
& es, int amount, IMAGE* enimgArray[], int hp, int harm, int speed, int level) {};//生成敌机时还要保证不与已有敌机重合 -
- /* 负责人:
- 功能:
- 1. 负责道具的随机生成
- 参数 : vector
& it, int amount, IMAGE imgArray[], int num, RECT pos//道具数组和道具数量以及道具图片数组以及道具类型和敌机销毁位置 - 返回值 : void
- */
- void creItems(vector
& it, int amount, IMAGE* imgArray[], int num, RECT pos) {};//生成道具时还要保证不与已有敌机和道具重合,击毁敌机有概率生成道具(用随机数) -
- /* 负责人:
- 功能:
- 1. 负责玩家积分的保存
- 根据modDiff(int level)的返回值决定存入哪个数组并存入哪个文件
- 参数 : int level, WJ wj
- 返回值 : void
- */
- void savelevel(int level, WJ wj);
- // ---------------service-------------------
-
-
- int main()
- {
- ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
- initgraph(cwidth, cheight, EX_NOMINIMIZE | EX_SHOWCONSOLE);
- getchar();
- bool is_play = true;
- while (is_play)
- {
- //logView();//退出游戏
- is_play = false;
- }
- return 0;
- }