目录
一、引言
二、项目简介
三、完整代码
四、参考资料
五、总结
一、引言
经过了一个学期对C++的学习,也算是对C++有了些基本的了解。学期期末时老师给大家布置了个小组合作项目大作业,题材不限,自由发挥。集结小组成员一起讨论过后,最终决定制作一个游戏盒。
二、项目简介
- 项目名称:2172游戏盒(数字含义是21级7班第2小组制作的游戏盒)
- 项目版本:8.9.11(版本信息由开发中的修改次数定义:功能增加.界面优化.Debug)
- 项目结构:盒子为框架,游戏为内容
- 开发周期:一个星期
- 包含功能:账号登录注册程序;账号相互独立且可修改密码;6个风格不同的小游戏
- 开发人数:7人
- 项目分工:盒子架构(作者);游戏(六个组员每人开发一个游戏,目前共有六个游戏)
- 开发环境:VS2019
- 操作方法:在不关闭程序的前提下,初次进入应先注册账号,进到游戏盒界面后即可开始游玩,每个游戏都有一定的奖励机制,硬币的主要功能是“我是赌神”游戏内部的消费。
三、完整代码
注:前三个游戏参考了其他博主的代码并加以修改,后三个游戏是原创。
#include <iostream>
#include <string.h>
#include <iomanip>
#include <windows.h> //sleep()的调用
#include <stdio.h>
#include<conio.h> //带有getch()函数和system("cls")清屏功能的头文件
#include<time.h> //用于处理日期和时间的类型和函数
#include<string>
#include <cstdlib> //可以提供一些函数与符号常量,例如随机数的生成
#pragma warning(disable:4996) //解决Visual Studio中strcpy不安全报错问题
using namespace std;
int x = 0;
int* X = &x; //指针计数器
char Void[10000] = "\0"; //空数组,清空账号密码信息
int Key = 0; //进入主程序的钥匙(关锁状态)
int KeyOut = 0; //退出登录的钥匙(关锁状态)
int User; //记录用户下标(注册与登录)
int User2; //记录用户下标(找回密码)
int* Q1; //指针记录游戏一雷霆战机中的得分
int* Q2; //指针记录游戏二吃豆人中的被吃次数
int* Q3; //指针记录游戏三贪吃蛇中的得分
//--------------------------------------------------------------------------------------------------------------
// 雷霆战机游戏中的全局变量
int score; //游戏得分
//--------------------------------------------------------------------------------------------------------------
// 吃豆人游戏的全局变量
const int nn = 809;
struct Point { int x, y; };
int dali;
int fx[4] = { -1,27,1,-27 };
int fxfx[4][2] = { {0,-1},{1,0},{0,1},{-1,0} };
int dis[1000][1000]; //0:墙 1:有分的路 2:没分的路 3:怪物的家
int changdi[30][27] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0},{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0},{0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0},{0,0,0,0,0,0,1,0,0,0,0,0,2,0,2,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,0,2,0,2,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,2,2,2,2,2,2,2,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,0,0,0,3,0,0,0,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,0,3,3,3,3,3,0,2,0,0,1,0,0,0,0,0,0},{2,2,2,2,2,2,1,2,2,2,0,3,3,3,3,3,0,2,2,2,1,2,2,2,2,2,2},{0,0,0,0,0,0,1,0,0,2,0,3,3,3,3,3,0,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,2,2,2,2,2,2,2,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},{0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0},{0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0},{0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0},{0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0},{0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0},{0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0},{0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0},{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
int xx, xx1, xx2, xx3, xx4, yy, yy5, yy2, yy3, yy4;
int now, now1, now2, now3, now4;
int gg1, gg2, gg3, gg4;
int fangx, nextfx, last1, last2, last3, last4;
int fenshu, guozi, guaitimer;
int T1, T2, t1, t2, stopped; //T:计时 t1:玩家速度 t2:怪物速度
int ff = 0; //f:{0:继续 1:被吃 2:赢了 3:输了}
int beichi;
//--------------------------------------------------------------------------------------------------------------
// 贪吃蛇游戏的全局变量
#define high 20 //定义地图的高度
#define width 30 //定义地图的宽度
#define snake_maxlength 200 //蛇长最大值
int snake_x[snake_maxlength], snake_y[snake_maxlength]; //蛇的坐标
int snake_length; //蛇现在的长度
int map[high][width] = { 0 }; //初始化地图,0表示空格,1表示蛇身,2表示食物,3表示墙,4表示蛇头,现在地图中什么也没有
int food_x, food_y; //食物的坐标
int SCORE; //本局分数
char input; //读取用户键入的字符
char primeinput = '.'; //primeinput在input脱离wasd时,用来存储input
int op = 100; //速度控制全局变量
int Death = 0;
//--------------------------------------------------------------------------------------------------------------
// 猜数字游戏中的全局变量
int Guesstimes; //猜测次数
//--------------------------------------------------------------------------------------------------------------
// 账户结构体
struct account
{char user[1000]; //用户名char password[1000]; //密码int coin = 0; //硬币int number; //编号int award = 0; //奖励次数,主要用于恋爱测试器奖励次数的限定
};
//--------------------------------------------------------------------------------------------------------------
//定义结构体数组:
struct account peo[100]; //初设100人,可更改
//--------------------------------------------------------------------------------------------------------------
//隐藏光标
void HideCursor()
{CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//--------------------------------------------------------------------------------------------------------------
//判断用户的输入是否合法,增强程序的健壮性:
float Check(int a)
{if (a == 0) //针对字符和字符串{float m;if (cin >> m){return m;}else{cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();while (!(cin >> m)){cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();}return m;}}else if (a == 1) //针对字符和字符串以及特定的数字(1、2、0){float m;float c;if (cin >> m){while (1){if (m == 1 || m == 2 || m == 0){return m;break;}else{cout << "输入错误,请重新输入:";c = Check(1); //递归调用,重新检测输入return c;break;}}}else{cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();while (!(cin >> m)){cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();}while (1){if (m == 1 || m == 2 || m == 0){return m;break;}else{cout << "输入错误,请重新输入:";c = Check(1);return c;break;}}}}else if (a == 2) //针对字符和字符串以及特定的数字(1、2){float m;float c;if (cin >> m){while (1){if (m == 1 || m == 2){return m;break;}else{cout << "输入错误,请重新输入:";c = Check(2);return c;break;}}}else{cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync();//清理缓冲区内容cin.get();while (!(cin >> m)){cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();}while (1){if (m == 1 || m == 2){return m;break;}else{cout << "输入错误,请重新输入:";a = Check(2);return a;break;}}}}else if (a == 3) //针对字符和字符串以及特定的数字(1、2、3){float m;float c;if (cin >> m){while (1){if (m == 1 || m == 2 || m == 3){return m;break;}else{cout << "输入错误,请重新输入:";c = Check(3);return c;break;}}}else{cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();while (!(cin >> m)){cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();}while (1){if (m == 1 || m == 2 || m == 3){return m;break;}else{cout << "输入错误,请重新输入:";a = Check(3);return a;break;}}}}else if (a == 4) //针对字符和字符串以及特定的数字(1、0){float m;float c;if (cin >> m){while (1){if (m == 1 || m == 0){return m;break;}else{cout << "输入错误,请重新输入:";c = Check(4);return c;break;}}}else{cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();while (!(cin >> m)){cout << "输入错误,请重新输入:";cin.clear(); //清除这个错误状态cin.sync(); //清理缓冲区内容cin.get();}while (1){if (m == 1 || m == 0){return m;break;}else{cout << "输入错误,请重新输入:";a = Check(4);return a;break;}}}}
}
//--------------------------------------------------------------------------------------------------------------
//进度条
void Progress()
{int c = 1, d = 0;for (int i = 0; i < 50; i++){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t+-------------------------------------------------+" << endl;cout << "\t\t\t\t|";for (int a = 0; a < i; a++) //打印▋{cout << "▋";}for (int b = 49 - i; b > 0; b--) //打印空格{cout << " ";}d += 2; //进度数cout << "| " << d << "%" << endl;cout << "\t\t\t\t+-------------------------------------------------+" << endl;cout << "\t\t\t\t 正在加载中,请稍后.";for (int j = 0; j < c % 6; j++){cout << ".";}c++;cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;Sleep(150); //进度条读取速度if (i != 49){system("cls"); //清屏}}Sleep(3000);system("cls");
}
//--------------------------------------------------------------------------------------------------------------
// 用户名规范系统
int NormalizeName(char name[1000], int n)
{int a = 0; //计数器if (n <= 15){for (int i = 0; i < n; i++){if (name[i] <= 32 || name[i] == 127) //为空格或其他特殊情况{break;}else{a++;}}if (a == n){return 1;}else{return 0;}}else{return 0;}
}
//--------------------------------------------------------------------------------------------------------------
// 用户名查重系统
int CheckName(char name[1000])
{int a = 0; //计数器if (x == 0) //第一个注册的人无重复{return 1;}else{for (int i = 0; i < x; i++){if (strcmp(name, peo[i].user) == 0){break;}else{a++;}}if (a == x) //用户名无重复{return 1;}else{return 0;}}
}
//--------------------------------------------------------------------------------------------------------------
// 密码规范系统
int NormalizePassword(char password[1000], int n)
{int a = 0; //计数器if (n >= 6 && n <= 15){for (int i = 0; i < n; i++){if ((password[i] >= 48 && password[i] <= 57) || (password[i] >= 65 && password[i] <= 90) || (password[i] >= 97 && password[i] <= 122)) //为字母或数字{a++;}else{break;}}if (a == n){return 1;}else{return 0;}}else{return 0;}
}
//--------------------------------------------------------------------------------------------------------------
// 密码找回系统
int RefoundPassword()
{while (1){char Name2[1000];int Key1 = 0;cout << "请输入用户名:";cin >> Name2;for (int i = 0; i < *X; i++) //逐个人员遍历{if (strcmp(Name2, peo[i].user) == 0) //判断输入的用户名有无注册或是否正确{Key1 = 1;User2 = i;}}system("cls"); //清屏if (Key1 == 0) //钥匙解锁失败{cout << "您的用户名未注册或输入错误!!!" << endl << endl;cout << "1.继续找回密码" << endl;cout << "2.退出系统" << endl;cout << "请输入数字实现对应功能:";int m2 = Check(2); //只返回1、2cout << endl;if (m2 == 1){system("cls"); //清屏continue;}else if (m2 == 2){system("cls"); //清屏return 0;}}else if (Key1 == 1) //钥匙解锁成功{cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您的密码为:" << peo[User2].password << endl;Sleep(2000);system("pause");system("cls"); //清屏return 1;}}
}
//--------------------------------------------------------------------------------------------------------------
// 账号注册系统:
int Register()
{int key1 = 0; //注册成功的钥匙int key2 = 0; //用户名设置成功的钥匙int key3 = 0; //密码设置成功钥匙int key4 = 0; //退出程序的钥匙int h = 0; //轮转片char recheck[100];peo[x].number = x + 1; //标号while (1) //创建用户名{cout << "请设置用户名(不超过15个字符,空格与汉字为非法字符):";cin.get(); //cin.getline前要吸收回车键cin.getline(peo[x].user, 1000);int n1 = strlen(peo[x].user);int p1 = NormalizeName(peo[x].user, n1); //返回1用户名通过,返回0则不通过int p2 = CheckName(peo[x].user); //返回1用户名通过,返回0则不通过if (p1 == 1 && p2 == 1){key2 = 1; //钥匙开锁,用户名设置成功break;}else{cout << endl << endl;cout << "用户名重复或非法!!!" << endl;cout << "1.重新设置用户名" << endl;cout << "2.退出注册" << endl;cout << "请输入数字实现对应功能:";int q = Check(2); //只返回1、2cout << endl;if (q == 1) //重新设置用户名{strcpy(peo[x].user, Void); //清空输入的用户名system("cls"); //清屏continue;}else if (q == 2) //退出注册{system("cls"); //清屏break;}}}cout << endl << endl;if (key2 == 1){while (1) //设置密码{system("cls"); //清屏cout << "请设置密码(只能为字母和数字,长度不小于6,不超过15):";if (h != 0){cin.get(); //cin.getline前要吸收回车键}cin.getline(peo[x].password, 1000);//cout << peo[x].password << endl;int n2 = strlen(peo[x].password);int p3 = NormalizePassword(peo[x].password, n2); //返回1密码通过,返回0则不通过if (p3 == 1){key3 = 1; //钥匙开锁,密码设置成功}else{cout << endl << endl;cout << "密码非法!!!" << endl;cout << "1.重新设置密码" << endl;cout << "2.退出注册" << endl;cout << "请输入数字实现对应功能:";int q = Check(2); //只返回1、2cout << endl;if (q == 1) //重新设置密码{strcpy(peo[x].password, Void); //清空输入的密码cout << endl << endl;h++;continue;}else if (q == 2) //退出注册{system("cls"); //清屏break;}}if (key3 == 1){system("cls"); //清屏while (1){cout << "请再次输入密码:";cin >> recheck;//cout << recheck << endl;if (strcmp(recheck, peo[x].password) == 0){cout << endl;cout << "注册成功!!!" << endl << endl;(*X)++;key1 = 1; //钥匙开锁,注册成功key4 = 1; //钥匙开锁,退出设置用户名和密码的程序break;}else{cout << endl;cout << "两次密码不一致!!!" << endl;cout << "1.重新设置密码" << endl;cout << "2.退出注册" << endl;cout << "请输入数字实现对应功能:";int z = Check(2); //只返回1、2cout << endl;if (z == 1){strcpy(recheck, Void); //清空输入的密码strcpy(peo[x].password, Void); //清空输入的密码key3 = 0; //关锁h++;break;}else if (z == 2){system("cls"); //清屏key4 = 1; //钥匙开锁,退出设置用户名和密码的程序break;}}}}if (key4 == 1){break;}}}if (key1 == 1){cout << "是否直接进入程序?" << endl;cout << "1.是" << endl;cout << "2.否" << endl;cout << "请输入数字实现对应功能:";int m = Check(2); //只返回1、2cout << endl;if (m == 1){User = x - 1;return m;}else if (m == 2){return m;}}
}
//--------------------------------------------------------------------------------------------------------------
// 账号登录系统
int SignIn()
{char Name[1000], Password[1000];int Key1 = 0; //判断用户名正误的钥匙int Key2 = 0; //判断密码正误的钥匙while (1){cout << "请输入用户名:"; //有BUGcin >> Name;for (int i = 0; i < *X; i++) //逐个人员遍历{if (strcmp(Name, peo[i].user) == 0) //判断输入的用户名有无注册或是否正确{Key1 = 1;User = i;}}if (Key1 == 0) //钥匙解锁失败{cout << "您的用户名未注册或输入错误!!!" << endl << endl;cout << "1.继续登录" << endl;cout << "2.退出登录" << endl;cout << "请输入数字实现对应功能:";int m1 = Check(2); //只返回1、2cout << endl;if (m1 == 1){system("cls"); //清屏continue;}else if (m1 == 2){system("cls"); //清屏return 0;}}else if (Key1 == 1) //钥匙解锁成功{cout << "请输入密码:";cin >> Password;if (strcmp(Password, peo[User].password) == 0) //判断输入的密码是否正确{Key2 = 1; //钥匙开锁,成功登陆}if (Key2 == 0) //密码错误{cout << endl << "您输入的密码有误" << endl;cout << "1.重新登录" << endl;cout << "2.找回密码" << endl;cout << "3.退出登录" << endl;cout << "请输入数字实现对应功能:";int m2 = Check(3); //只返回1、2、3cout << endl;if (m2 == 1){Key1 = 0; //重新登陆关锁system("cls"); //清屏continue;}else if (m2 == 2){Key1 = 0; //重新登陆关锁system("cls"); //清屏int r = RefoundPassword();if (r == 1){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 密码找回成功!!!" << endl;Sleep(2000);system("cls"); //清屏continue;}else if (r == 0){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 密码找回失败!!!" << endl;Sleep(2000);system("cls"); //清屏continue;}}else if (m2 == 3){system("cls"); //清屏return 0;}}else if (Key2 == 1) //密码正确{system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 登录成功!!!" << endl;Sleep(2000); //延时2秒return 1;}}}
}
//--------------------------------------------------------------------------------------------------------------
// 游戏部分
//1.雷霆战机
/*=============== all the structures ===============*/typedef struct Frame
{COORD position[2];int flag;
}Frame;/*=============== all the functions ===============*/void SetPos(COORD a)// set cursor
{HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(out, a);
}void SetPos(int i, int j)// set cursor
{COORD pos = { i, j };SetPos(pos);
}//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{SetPos(x1, y);for (int i = 0; i <= (x2 - x1); i++)cout << ch;
}//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{if (a.Y == b.Y)drawRow(a.Y, a.X, b.X, ch);else{SetPos(0, 25);cout << "error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";system("pause");}
}//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{int y = y1;while (y != y2 + 1){SetPos(x, y);cout << ch;y++;}
}//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{if (a.X == b.X)drawCol(a.X, a.Y, b.Y, ch);else{SetPos(0, 25);cout << "error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";system("pause");}
}//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD b, char row, char col)
{drawRow(a.Y, a.X + 1, b.X - 1, row);drawRow(b.Y, a.X + 1, b.X - 1, row);drawCol(a.X, a.Y + 1, b.Y - 1, col);drawCol(b.X, a.Y + 1, b.Y - 1, col);
}void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{COORD a = { x1, y1 };COORD b = { x2, y2 };drawFrame(a, b, row, col);
}void drawFrame(Frame frame, char row, char col)
{COORD a = frame.position[0];COORD b = frame.position[1];drawFrame(a, b, row, col);
}void drawPlaying()
{drawFrame(0, 0, 48, 24, '=', '|');// draw map frame;drawFrame(49, 0, 79, 4, '-', '|');// draw output framedrawFrame(49, 4, 79, 9, '-', '|');// draw score framedrawFrame(49, 9, 79, 20, '-', '|');// draw operate framedrawFrame(49, 20, 79, 24, '-', '|');// draw other message frameSetPos(52, 6);cout << "得分:";SetPos(52, 7);cout << "称号:";SetPos(52, 10);cout << "操作方式:";SetPos(52, 12);cout << " a,s,d,w 控制移动,j开炮";SetPos(52, 14);cout << " p 暂停游戏";SetPos(52, 16);cout << " e 退出游戏";
}//在[a, b)之间产生一个随机整数
int random(int a, int b)
{int c = (rand() % (a - b)) + a;return c;
}//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{int x = random(a.X, b.X);int y = random(a.Y, b.Y);COORD c = { x, y };return c;
}bool judgeCoordInFrame(Frame frame, COORD spot)
{if (spot.X >= frame.position[0].X)if (spot.X <= frame.position[1].X)if (spot.Y >= frame.position[0].Y)if (spot.Y <= frame.position[0].Y)return true;return false;
}void printCoord(COORD a)
{cout << "( " << a.X << " , " << a.Y << " )";
}void printFrameCoord(Frame a)
{printCoord(a.position[0]);cout << " - ";printCoord(a.position[1]);
}int drawMenu()
{SetPos(30, 1);cout << "P l a n e W a r";drawRow(3, 0, 79, '-');drawRow(5, 0, 79, '-');SetPos(28, 4);cout << "w 和 s 选择, j 确定";SetPos(15, 11);cout << "1. 简单的敌人";SetPos(15, 13);cout << "2. 冷酷的敌人";drawRow(20, 0, 79, '-');drawRow(22, 0, 79, '-');SetPos(47, 11);cout << "简单的敌人:";SetPos(51, 13);cout << "简单敌人有着较慢的移动速度。";SetPos(24, 21);cout << "说明:得分超过200即为胜利";int j = 11;SetPos(12, j);cout << ">>";while (1){if (_kbhit()){char x = _getch();switch (x){case 'w':{if (j == 13){SetPos(12, j);cout << " ";j = 11;SetPos(12, j);cout << ">>";SetPos(51, 13);cout << " ";SetPos(47, 11);cout << "简单的敌人:";SetPos(51, 13);cout << "简单敌人有较慢的移动速度,比较容易对付";}break;}case 's':{if (j == 11){SetPos(12, j);cout << " ";j = 13;SetPos(12, j);cout << ">>";SetPos(51, 13);cout << " ";SetPos(47, 11);cout << "冷酷的敌人:";SetPos(51, 13);cout << "冷酷的敌人移动速度较快,不是很好对付哟。";}break;}case 'j':{if (j == 8) return 1;else return 2;}}}}
}
/*================== the Game Class ==================*/class Game
{
public:COORD position[10];COORD bullet[10];Frame enemy[8];int rank;int rankf;string title;int flag_rank;Game();//初始化所有void initPlane();void initBullet();void initEnemy();//初始化其中一个//void initThisBullet( COORD );//void initThisEnemy( Frame );void planeMove(char);void bulletMove();void enemyMove();//填充所有void drawPlane();void drawPlaneToNull();void drawBullet();void drawBulletToNull();void drawEnemy();void drawEnemyToNull();//填充其中一个void drawThisBulletToNull(COORD);void drawThisEnemyToNull(Frame);void Pause();void Playing();int judgePlane();void judgeEnemy();void Shoot();void GameOver();void printScore();
};Game::Game()
{initPlane();initBullet();initEnemy();score = 0;rank = 25;rankf = 0;flag_rank = 0;
}void Game::initPlane()
{COORD centren = { 39, 22 };position[0].X = position[5].X = position[7].X = position[9].X = centren.X;position[1].X = centren.X - 2;position[2].X = position[6].X = centren.X - 1;position[3].X = position[8].X = centren.X + 1;position[4].X = centren.X + 2;for (int i = 0; i <= 4; i++)position[i].Y = centren.Y;for (int i = 6; i <= 8; i++)position[i].Y = centren.Y + 1;position[5].Y = centren.Y - 1;position[9].Y = centren.Y - 2;
}void Game::drawPlane()
{for (int i = 0; i < 9; i++){SetPos(position[i]);if (i != 5)cout << "O";else if (i == 5)cout << "|";}
}void Game::drawPlaneToNull()
{for (int i = 0; i < 9; i++){SetPos(position[i]);cout << " ";}
}void Game::initBullet()
{for (int i = 0; i < 10; i++)bullet[i].Y = 30;
}void Game::drawBullet()
{for (int i = 0; i < 10; i++){if (bullet[i].Y != 30){SetPos(bullet[i]);cout << "^";}}
}void Game::drawBulletToNull()
{for (int i = 0; i < 10; i++)if (bullet[i].Y != 30){COORD pos = { bullet[i].X, bullet[i].Y + 1 };SetPos(pos);cout << " ";}
}void Game::initEnemy()
{COORD a = { 1, 1 };COORD b = { 45, 15 };for (int i = 0; i < 8; i++){enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;}
}void Game::drawEnemy()
{for (int i = 0; i < 8; i++)drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}void Game::drawEnemyToNull()
{for (int i = 0; i < 8; i++){drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');}
}void Game::Pause()
{SetPos(61, 2);cout << " ";SetPos(61, 2);cout << "暂停中...";char c = _getch();while (c != 'p')c = _getch();SetPos(61, 2);cout << " ";
}void Game::planeMove(char x)
{if (x == 'a')if (position[1].X != 1)for (int i = 0; i <= 9; i++)position[i].X -= 2;if (x == 's')if (position[7].Y != 23)for (int i = 0; i <= 9; i++)position[i].Y += 1;if (x == 'd')if (position[4].X != 47)for (int i = 0; i <= 9; i++)position[i].X += 2;if (x == 'w')if (position[5].Y != 3)for (int i = 0; i <= 9; i++)position[i].Y -= 1;
}void Game::bulletMove()
{for (int i = 0; i < 10; i++){if (bullet[i].Y != 30){bullet[i].Y -= 1;if (bullet[i].Y == 1){COORD pos = { bullet[i].X, bullet[i].Y + 1 };drawThisBulletToNull(pos);bullet[i].Y = 30;}}}
}void Game::enemyMove()
{for (int i = 0; i < 8; i++){for (int j = 0; j < 2; j++)enemy[i].position[j].Y++;if (24 == enemy[i].position[1].Y){COORD a = { 1, 1 };COORD b = { 45, 3 };enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;}}
}int Game::judgePlane()
{for (int i = 0; i < 8; i++){for (int j = 0; j < 9; j++){if (judgeCoordInFrame(enemy[i], position[j])){SetPos(62, 1);cout << "坠毁";drawFrame(enemy[i], '+', '+');Sleep(1000);GameOver();return 1;}}}
}void Game::drawThisBulletToNull(COORD c)
{SetPos(c);cout << " ";
}void Game::drawThisEnemyToNull(Frame f)
{drawFrame(f, ' ', ' ');
}void Game::judgeEnemy()
{for (int i = 0; i < 8; i++)for (int j = 0; j < 10; j++)if (judgeCoordInFrame(enemy[i], bullet[j])){score += 5;drawThisEnemyToNull(enemy[i]);COORD a = { 1, 1 };COORD b = { 45, 3 };enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;drawThisBulletToNull(bullet[j]);bullet[j].Y = 30;}
}void Game::Shoot()
{for (int i = 0; i < 10; i++)if (bullet[i].Y == 30){bullet[i].X = position[5].X;bullet[i].Y = position[5].Y - 1;break;}
}void Game::printScore()
{if (score == 30 && flag_rank == 0){rank -= 3;flag_rank = 1;}else if (score == 70 && flag_rank == 1){rank -= 5;flag_rank = 2;}else if (score == 110 && flag_rank == 2){rank -= 5;flag_rank = 3;}int x = rank / 5;SetPos(60, 6);cout << score;if (rank != rankf){SetPos(60, 7);if (x == 5)title = "初级飞行员";else if (x == 4)title = "中级飞行员";else if (x == 3)title = "高级飞行员";else if (x == 2)title = "王牌飞行员";cout << title;}rankf = rank;
}void Game::Playing()
{//HANDLE MFUN;//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); drawEnemy();drawPlane();int flag_bullet = 0;int flag_enemy = 0;while (1){Sleep(8);if (_kbhit()){char x = _getch();if ('a' == x || 's' == x || 'd' == x || 'w' == x){drawPlaneToNull();planeMove(x);drawPlane();int ggg = judgePlane();if (ggg == 1){return;}}else if ('p' == x) //暂停Pause();else if ('j' == x) //开炮Shoot();else if ('e' == x){//CloseHandle(MFUN);break;}}/* 处理子弹 */if (0 == flag_bullet){bulletMove();drawBulletToNull();drawBullet();judgeEnemy();}flag_bullet++;if (5 == flag_bullet)flag_bullet = 0;/* 处理敌人 */if (0 == flag_enemy){drawEnemyToNull();enemyMove();drawEnemy();int gggg = judgePlane();if (gggg == 1){return;}}flag_enemy++;if (flag_enemy >= rank)flag_enemy = 0;/* 输出得分 */printScore();}return;
}void Game::GameOver()
{system("cls");COORD p1 = { 28,9 };COORD p2 = { 53,15 };drawFrame(p1, p2, '=', '|');SetPos(36, 12);string str = "Game Over!";for (int i = 0; i < str.size(); i++){Sleep(80);cout << str[i];}Sleep(1000);system("cls");drawFrame(p1, p2, '=', '|');SetPos(31, 11);cout << "击落敌机:" << score / 5 << " 架";SetPos(31, 12);cout << "得 分:" << score;SetPos(31, 13);cout << "获得称号:" << title;Sleep(3000);return;
}/*================== the main function ==================*/
void PlaneWar()
{//游戏介绍cout << "*********************************************** 雷 霆 战 机 *************************************************" << endl;cout << " 游戏说明:" << endl;cout << " ① 玩家通过按键w、s、a、d进行战机的移动,a为向左移动,s为向下移动,d为向右移动,w为向上移动,通过按键j进行开炮操作;" << endl;cout << " ② 玩家需要躲避敌方战机,若有碰撞,则您的战机坠毁,游戏结束;" << endl;cout << " ③ 玩家通过开炮可击落敌方战机,每击落一架战机,可获得5分;" << endl;cout << " ④ 游戏得分超过200分即为游戏胜利,将获得30枚硬币的奖励,否则即为失败。" << endl << endl << endl;Sleep(3000);system("pause");system("cls");//游戏准备srand((int)time(0)); //随机种子Game game;int a = drawMenu();if (a == 2)game.rank = 20;system("cls");drawPlaying();game.Playing(); //开始游戏Q1 = &score;return;
}
//--------------------------------------------------------------------------------------------------------------
//2.吃豆人
void color(int a)//颜色函数
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);
}
void gotoxy(int x, int y)//位置函数(行为x 列为y)
{COORD pos;pos.X = 2 * y;pos.Y = x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}void begin() {system("cls");color(11); cout << " ★";color(10); cout << "吃豆人";color(11); cout << "★\n\n";color(7);cout << " 请将窗口开至";color(11); cout << "全屏" << endl;color(7); cout << " 正在初始化,请耐心等待";for (int i = 0; i <= nn; i++)for (int j = 1; j <= nn; j++)dis[i][j] = 900;//待定for (int i = 0; i <= nn; i++) {for (int j = 0; j <= 3; j++) {if (i + fx[j] >= 0 && i + fx[j] <= nn) {int k = i + fx[j], xx = k / 27, yy = k % 27, kk;if (changdi[i / 27][i % 27] && changdi[xx][yy]) dis[i][k] = kk = 1;}}}//看不懂的部分for (int k = 0; k <= nn; k++)if (changdi[k]) {for (int i = 0; i <= nn; i++)if (changdi[i])for (int j = 0; j <= nn; j++)if (changdi[j])if (dis[i][j] > dis[i][k] + dis[k][j])dis[i][j] = dis[i][k] + dis[k][j];if (k % 80 == 0) { color(13); gotoxy(3, 12); cout << "│"; }if (k % 80 == 20) { color(13); gotoxy(3, 12); cout << "╱"; }if (k % 80 == 40) { color(13); gotoxy(3, 12); cout << "─"; }if (k % 80 == 60) { color(13); gotoxy(3, 12); cout << "╲"; }if (k % 60 == 0) { color(11); gotoxy(5, k / 60); cout << "●"; }}cout << "游戏操作如下:";
}void shuru() {char ch;cout << "请在输入完成后点击回车";cin >> ch;if ((ch == '1') | (ch == 'j'))if ((changdi[xx + fxfx[0][0]][yy + fxfx[0][1]] == 1) | (changdi[xx + fxfx[0][0]][yy + fxfx[0][1]] == 2)) fangx = nextfx = 0;else nextfx = 0;else if ((ch == '2') | (ch == 'k'))if ((changdi[xx + fxfx[1][0]][yy + fxfx[1][1]] == 1) | (changdi[xx + fxfx[1][0]][yy + fxfx[1][1]] == 2)) fangx = nextfx = 1;else nextfx = 1;else if ((ch == '3') | (ch == 'l'))if ((changdi[xx + fxfx[2][0]][yy + fxfx[2][1]] == 1) | (changdi[xx + fxfx[2][0]][yy + fxfx[2][1]] == 2)) fangx = nextfx = 2;else nextfx = 2;else if ((ch == '5') | (ch == 'i'))if ((changdi[xx + fxfx[3][0]][yy + fxfx[3][1]] == 1) | (changdi[xx + fxfx[3][0]][yy + fxfx[3][1]] == 2)) fangx = nextfx = 3;else nextfx = 3;else if ((ch == '0') | (ch == 's')) stopped = (stopped + 1) % 2;else if ((ch == '4') | (ch == 'a')) t1++;else if ((ch == '7') | (ch == 'q')) t2++;else if (((ch == '6') | (ch == 'd')) && t1 - 1 > 0) t1--;else if (((ch == '9') | (ch == 'e')) && t2 - 1 > 0) t2--;else if (ch == 'g') dali = (dali + 1) % 2;
}void reset() {system("cls"); color(7);gotoxy(2, 30); cout << "控制方向:I/J/K/L";gotoxy(4, 30); cout << "你的速度:4/6";gotoxy(6, 30); cout << "怪物速度:7/9";xx = 22; yy = 13;xx1 = xx2 = xx3 = xx4 = 14;yy5 = 11; yy2 = 12; yy3 = 14; yy4 = 15;now = 607; now1 = 389; now2 = 390; now3 = 392; now4 = 393;for (int k = 0; k <= nn; k++) {int i = k / 27, j = k % 27;gotoxy(i, j);if (changdi[i][j] == 1) { color(7); cout << "·"; }else if (!changdi[i][j]) { color(1); cout << "■"; }if (j == 26) { gotoxy(i, 27); color(7); cout << i; }}gotoxy(0, 0);gotoxy(xx, yy); color(14); cout << "●";gotoxy(xx1, yy5); color(4); cout << "◆";gotoxy(xx2, yy2); color(5); cout << "◆";gotoxy(xx3, yy3); color(3); cout << "◆";gotoxy(xx4, yy4); color(2); cout << "◆";fangx = 0; T1 = T2 = guaitimer = 0; t1 = 75; t2 = 100;stopped = 0; fenshu = 0; guozi = 237;gg1 = gg2 = gg3 = gg4 = 0; dali = 0;gotoxy(14, 30);cout << " ";
}void move1() {int xxx, yyy;xxx = xx + fxfx[nextfx][0]; yyy = yy + fxfx[nextfx][1];if (changdi[xxx][yyy]) {if (changdi[xxx][yyy] == 1) { fenshu += 1; changdi[xxx][yyy] = 2; }color(14);gotoxy(xx, yy); printf(" ");gotoxy(xxx, yyy); if (!dali) printf("◎"); else printf("☆");now = xx * 27 + yy; xx = xxx; yy = yyy;fangx = nextfx;}else {if (xx == 13 && yy == 0 && fangx == 0) { xxx = xx; yyy = 26; }else if (xx == 13 && yy == 26 && fangx == 2) { xxx = xx; yyy = 0; }else { xxx = xx + fxfx[fangx][0]; yyy = yy + fxfx[fangx][1]; }if (changdi[xxx][yyy]) {if (changdi[xxx][yyy] == 1) { fenshu += 1; changdi[xxx][yyy] = 2; }color(14);gotoxy(xx, yy); cout << " ";gotoxy(xxx, yyy);if (!dali) cout << "◎";else cout << "☆";now = xx * 27 + yy; xx = xxx; yy = yyy;}}color(7);//gotoxy(15,28); printf("(%d,%d) ",x,y); gotoxy(16,28); printf("now:%d ",now); gotoxy(17,28); printf("%d (%d,%d) ",fangx,fxfx[fangx][0],fxfx[fangx][1]); gotoxy(18,28); printf("(%d,%d) changdi:%d ",xx,yy,changdi[xx][yy]);
}void move2() {int haha, minhaha, xxx, yyy, chi = 0;if (gg1) {minhaha = 2147483647;if ((now1 % 27 == 0) | (now1 % 27 == 26)) haha = last1;else if (!dali) {for (int i = 0; i <= 3; i++)if (changdi[(now1 + fx[i]) / 27][(now1 + fx[i]) % 27] && i != last1 && minhaha > dis[now1 + fx[i]][now]){minhaha = dis[now1 + fx[i]][now]; haha = i;}}else {minhaha = -minhaha;for (int i = 0; i <= 3; i++)if (changdi[(now1 + fx[i]) / 27][(now1 + fx[i]) % 27] && i != last1 && minhaha < dis[now1 + fx[i]][now]){minhaha = dis[now1 + fx[i]][now]; haha = i;}}xxx = now1 / 27; yyy = now1 % 27; gotoxy(xxx, yyy);if (changdi[xxx][yyy] == 1) cout << "·";else cout << " ";now1 += fx[haha]; last1 = (haha + 2) % 4;xxx = now1 / 27; yyy = now1 % 27; gotoxy(xxx, yyy);color(4); cout << "◆";color(7);if (xxx == xx && yyy == yy) {if (!dali) chi += 1;else {guozi += 50;fenshu += 50;last1 = 0;gotoxy(now1 / 27, now1 % 27);if (changdi[now1 / 27][now1 % 27] == 1) printf("·"); else printf(" ");now1 = 389;}}}if (gg2) {int k;minhaha = 2147483647;if ((fangx == 0) | (fangx == 2)) {k = yy + (fxfx[fangx][1]) * 3;while ((k > 25) | !changdi[xx][k]) k--;while ((k < 1) | !changdi[xx][k]) k++;}else {k = xx + (fxfx[fangx][0]) * 3;while ((k > 28) | !changdi[k][yy]) k--;while ((k < 1) | !changdi[k][yy]) k++;}if ((fangx == 0) | (fangx == 2)) k = xx * 27 + k; else k = k * 27 + yy;if ((now2 % 27 == 0) | (now2 % 27 == 26)) haha = last2;else if (!dali)for (int i = 0; i <= 3; i++) {if (changdi[(now2 + fx[i]) / 27][(now2 + fx[i]) % 27] && i != last2 && minhaha > dis[now2 + fx[i]][k]){minhaha = dis[now2 + fx[i]][k]; haha = i;}}else {minhaha = -minhaha;for (int i = 0; i <= 3; i++) {if (changdi[(now2 + fx[i]) / 27][(now2 + fx[i]) % 27] && i != last2 && minhaha < dis[now2 + fx[i]][k]){minhaha = dis[now2 + fx[i]][k]; haha = i;}}}xxx = now2 / 27; yyy = now2 % 27; gotoxy(xxx, yyy);if (changdi[xxx][yyy] == 1) cout << "·";else cout << " ";now2 += fx[haha]; last2 = (haha + 2) % 4; gotoxy(18, 30);xxx = now2 / 27; yyy = now2 % 27; gotoxy(xxx, yyy); color(5); cout << "◆";color(7);if (xxx == xx && yyy == yy) {if (!dali) chi += 1;else {guozi += 50;fenshu += 50;last2 = 0;gotoxy(now2 / 27, now2 % 27);if (changdi[now2 / 27][now2 % 27] == 1) cout << "·"; else cout << " ";now2 = 390;}}}if (gg3) {int k;minhaha = 2147483647;if ((fangx == 0) | (fangx == 2)) {k = yy + (fxfx[(fangx + 1) % 4][1]) * 3;while ((k > 25) | !changdi[xx][k]) k--;while ((k < 1) | !changdi[xx][k]) k++;}else {k = xx + (fxfx[(fangx + 1) % 4][0]) * 3;while ((k > 28) | !changdi[k][yy]) k--;while ((k < 1) | !changdi[k][yy]) k++;}if ((fangx == 0) | (fangx == 2)) k = xx * 27 + k; else k = k * 27 + yy;if ((now3 % 27 == 0) | (now3 % 27 == 26)) haha = last3;else if (!dali)for (int i = 0; i <= 3; i++) {if (changdi[(now3 + fx[i]) / 27][(now3 + fx[i]) % 27] && i != last3 && minhaha > dis[now3 + fx[i]][k]){minhaha = dis[now3 + fx[i]][k]; haha = i;}}else {minhaha = -minhaha;for (int i = 0; i <= 3; i++) {if (changdi[(now3 + fx[i]) / 27][(now3 + fx[i]) % 27] && i != last3 && minhaha < dis[now3 + fx[i]][k]){minhaha = dis[now3 + fx[i]][k]; haha = i;}}}xxx = now3 / 27; yyy = now3 % 27; gotoxy(xxx, yyy);if (changdi[xxx][yyy] == 1) cout << "·"; else cout << " ";now3 += fx[haha]; last3 = (haha + 2) % 4; gotoxy(18, 30);xxx = now3 / 27; yyy = now3 % 27;gotoxy(xxx, yyy); color(3); cout << "◆";color(7);if (xxx == xx && yyy == yy) {if (!dali) chi += 1;else {guozi += 50;fenshu += 50;last3 = 0;gotoxy(now3 / 27, now3 % 27);if (changdi[now3 / 27][now3 % 27] == 1) printf("·"); else printf(" ");now3 = 341;}}}if (chi) beichi++;
}
void ChiDouRen()
{Q2 = &beichi;system("color 07"); //设置背景色为黑色,字体颜色为黑色cout << "*********************************************** 吃 豆 人 **************************************************" << endl;cout << " 游戏说明:" << endl;cout << " ① 玩家通过按键I、J、K、L配合回车键进行移动,J为向左移动,K为向下移动,L为向右移动,I为向上移动;" << endl;cout << " ② 游戏胜利条件为不被怪物吃掉并且吃满35个豆子;" << endl;cout << " ③ 被怪物吃掉后游戏不会终止,但是将失去游戏奖励,判定为游戏失败。" << endl << endl << endl;Sleep(3000);system("pause");system("cls");begin();int jixu = 1;reset();string bb[4] = { "●","①","②","③" }; color(7);gotoxy(12, 12); cout << "进入倒计时开始!";color(12);for (int i = 3; i >= 0; i--) { if (i == 0) color(11); gotoxy(13, 13); cout << bb[i]; Sleep(1000); }gotoxy(12, 12); cout << " ";gotoxy(13, 13); cout << " ";color(7);while (!ff) {Sleep(1);gotoxy(10, 30); cout << "你最后的得分是:" << fenshu;//gotoxy(行,列)坐标gotoxy(8, 30); cout << "怪物速度: " << 300 - t2;gotoxy(9, 30); cout << "你的速度: " << 300 - t1;gotoxy(15, 30); cout << "被吃次数:" << beichi;if (_kbhit()) shuru();//这个这个if (stopped) continue;T1 = (T1 + 1) % t1; T2 = (T2 + 1) % t2;if ((T1 % t1 == 0 && now + fx[fangx] > 0) && (now + fx[fangx] < nn)) move1();if (T2 % t2 == 0) {if (guaitimer <= 8) {if (guaitimer == 0) gg1 = 1;if (guaitimer == 8) gg2 = 1;guaitimer++;}if (!gg3 && fenshu >= 30) gg3 = 1;move2();}if (fenshu == guozi || fenshu == 35)ff = 2;}if (ff == 2) {Sleep(2000);system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 恭喜您吃完了35个豆子!!!" << endl;Sleep(2000);cout << "\t\t\t\t\t\t 您一共被怪物吃掉了" << beichi << " 次";Sleep(2000);}
}
//--------------------------------------------------------------------------------------------------------------
//3.贪吃蛇
void setdata() //数据的初始化函数
{snake_x[0] = high / 2; snake_y[0] = width / 3; //初始化蛇头,在地图内的位置随意 snake_x[1] = high / 2; snake_y[1] = width / 3 + 1; //初始化蛇身 snake_length = 2; //蛇的原始尺寸(一格头一格身子) food_x = high / 3, food_y = width / 3; //初始化食物的位置,在地图内位置随意 SCORE = 0;int i, j;map[snake_x[0]][snake_y[0]] = 4; //蛇头 map[snake_x[1]][snake_y[1]] = 1; //蛇身 map[food_x][food_y] = 2; //食物 for (i = 0; i < high; i++) //墙 for (j = 0; j < width; j++)if (i == 0 || j == 0 || i == high - 1 || j == width - 1)map[i][j] = 3;
}
void Gotoxy(int x, int y) //画面打印
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle, pos);
}
void show()
{Gotoxy(0, 0);int i, j;for (i = 0; i < high; i++){for (j = 0; j < width; j++){if (map[i][j] == 0)cout << " ";else if (map[i][j] == 1)cout << "+";else if (map[i][j] == 2)cout << "@";else if (map[i][j] == 3)cout << "*";else if (map[i][j] == 4)cout << "0";}printf("\n");}printf("得分:%d", SCORE);
}int updatewithoutinput() //与输入无关的更新
{int i;if (snake_x[0] == food_x && snake_y[0] == food_y){SCORE++;srand((unsigned)time(NULL)); //srand和rand函数连用产生随机数,一般以时间作为产生随机数的种子 food_x = rand() % (high - 3) + 1;food_y = rand() % (width - 3) + 1;map[food_x][food_y] = 2;snake_length++;}if (snake_x[0] == 0 || snake_x[0] == high - 1 || snake_y[0] == 0 || snake_y[0] == width - 1) //碰墙了 {cout << "游戏结束!" << endl;Sleep(2000);return 1;}for (i = 1; i < snake_length; i++) //碰到自己了 ,遍历蛇身找是否和蛇头重复 if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]){cout << "游戏结束" << endl;Sleep(2000);return 1;}
}
int updatewithinput()
{int i = 1;if (kbhit())input = getch();if (input != '\0') //input!='\0'(空)表示当有输入的时候开始更新画面,这是游戏开始的条件 {if (input == 'w' || input == 'a' || input == 's' || input == 'd'){if (primeinput == 'w' && input == 's' || primeinput == 's' && input == 'w' || primeinput == 'a' && input == 'd' || primeinput == 'd' && input == 'a'){system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 世上没有回头路!!!" << endl;Sleep(2000);Death++;return 1;}elseprimeinput = input;}else if (primeinput == '.')primeinput = 'w';else if (input == 'p'){while (1){char op;op = getch();if (op == 'p'){input = '.';break;}}}else if (input == '+'){if (op >= 50) //表示最快速度为25 ms刷新一次 op = op / 2;}else if (input == '-'){if (op <= 1000) //表示最慢速度为 2000 ms刷新一次 op = op * 2;}map[snake_x[snake_length - 1]][snake_y[snake_length - 1]] = 0;//蛇走过一格,蛇尾处变为空格 for (i = snake_length - 1; i > 0; i--){snake_x[i] = snake_x[i - 1]; //走过一格后蛇身的坐标覆盖前面的坐标 (从后往前覆盖,蛇头也会被蛇身覆盖) snake_y[i] = snake_y[i - 1];map[snake_x[i]][snake_y[i]] = 1;}}if (primeinput == 'w')snake_x[0]--;else if (primeinput == 's')snake_x[0]++;else if (primeinput == 'a')snake_y[0]--;else if (primeinput == 'd')snake_y[0]++;map[snake_x[0]][snake_y[0]] = 4; //蛇头的坐标覆盖前面的坐标
}
void tanchishe() //起始函数
{cout << "************************************************ 贪 吃 蛇 **************************************************" << endl;cout << " 游戏说明:" << endl;cout << " ① 玩家通过按键w、a、s、d控制蛇的移动,w为向上移动,s为向下移动,a为向左移动,d为向右移动;" << endl;cout << " ② 每吃到一次果实,蛇身长度+1,得分+1;" << endl;cout << " ③ 撞到墙壁,即蛇死亡,来到结算界面;" << endl;cout << " ④ 单局得分超过15分,则为游戏胜利,可获得20枚硬币奖励!" << endl;cout << " 警告:请勿自噬(蛇头反向蛇身移动,撞向蛇身不算),自噬则蛇永久死亡,无法再次游玩游戏!!!" << endl << endl << endl;Sleep(3000);system("pause");system("cls");setdata();//数据初始化Q3 = &SCORE;while (1){show(); //画面打印 Sleep(op);int a = updatewithoutinput(); //与输入无关的更新 int b = updatewithinput(); //与输入有关的更新 if (a == 1 || b == 1){break;}}return;
}
//--------------------------------------------------------------------------------------------------------------
//4.猜数字
void caishuzi()
{cout << "*********************************************** 猜 数 字 *************************************************" << endl;cout << " 游戏说明:" << endl;cout << " ① 游戏会出现一个1~100的随机隐藏整数,玩家需要根据技巧猜测数字;" << endl;cout << " ② 游戏很简单,但是如果加上猜测的次数限定呢?" << endl;cout << " ③ 若猜测次数不超过8次,则游戏胜利,玩家可获得20硬币的奖励,否则即为失败;" << endl;cout << " ④ 若玩家运气好到爆炸,一次就猜中,则视为中了彩票,将获得200硬币的奖励!!!" << endl;cout << " 注:若一直猜不正确,可按888退出游戏" << endl << endl << endl;Sleep(3000);system("pause");system("cls"); //清屏 Guesstimes = 0; //记录猜测次数,方便程序判定游戏是否胜利srand((unsigned)time(NULL)); //依据时间的变化产生不同的随机数种子int NUM = rand() % 100 + 1; //随机数发生器,随机生成1~100的整型数字while (1) //永真循环 {cout << "*********************************************** 猜 数 字 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t请输入您猜测的数字(整数):";int Value = Check(0); //规范用户的输入,保证输入的为数字if (Value == 888){system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您已强制退出!!!" << endl;Sleep(1000);system("cls");Guesstimes = 999;break;}if (Value > NUM){system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 猜测过大!!!" << endl;Sleep(1000);system("cls");Guesstimes++;continue;}else if (Value < NUM){system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 猜测过小!!!" << endl;Sleep(1000);system("cls");Guesstimes++;continue;}else if (Value == NUM){system("cls");cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 恭喜您,猜对啦!!!" << endl;Sleep(2000);system("cls");Guesstimes++;cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您猜测的次数为:" << Guesstimes << endl;Sleep(2000);system("cls");break;}}return;
}
//--------------------------------------------------------------------------------------------------------------
//5.恋爱指数测试器
int LianAiCeShi()
{int N, SUMS = 0;cout << "***************************************** 恋 爱 指 数 测 试 器 *****************************************" << endl;cout << " 测试说明:" << endl;cout << " ① 您需要对接下来的问题进行如实回答,你的心越纯,测试的结果越正确;" << endl;cout << " ② 下列问题如果是则输入2,如果不是则输入1,一点也没感觉则输入0;" << endl;cout << " ③ 加油,面对你自己!*-o-*" << endl;cout << " 注:测试共包括10道题,一旦进入测试不可退出" << endl << endl << endl;Sleep(3000);system("pause");system("cls");cout << "进入测试请按3,退出测试请按4。" << endl;
Enter:cout << "请给出你的选择:";int choose = Check(0);if (choose == 3) {system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 开始测试!!!" << endl;Sleep(2000);system("cls");}else if (choose == 4) {system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您已退出测试!!!" << endl;Sleep(2000);system("cls");return 0;}else {system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t无效输入,请重新选择!!!" << endl;Sleep(2000);system("cls");goto Enter;}cout << "question one:" << "你是否面对异性时会心跳加速?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question two:" << "你是否看到异性被欺负时会很愤怒?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question three:" << "你是否惧怕见到异性的家长?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question four:" << "你是否经常刷一位异性的社交平台?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question five:" << "想不想和Ta用情侣头像?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question six:" << "和Ta邂逅过吗?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question seven:" << "吃过同一个饭碗里的东西吗?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question eight:" << "有过在梦里与Ta相遇吗?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question nine:" << "有为了等Ta一个人站在风雨中吗?" << endl;N = Check(1);SUMS += N;cout << endl;cout << "question ten:" << "想摸Ta的头发,牵TA的手吗?" << endl;N = Check(1);SUMS += N;system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 正在测评中,请稍等......" << endl;Sleep(3000);system("cls");if (SUMS >= 16 && SUMS <= 20){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t你的恋爱指数为:A。你是一个深深爱着Ta的人,你往往会守着这份爱走下去^-^。" << endl;Sleep(5000);system("cls");}if (SUMS <= 15 && SUMS >= 12){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t你的恋爱指数为:B。你是一个矛盾却又不失爱意的人,你的爱往往一波三折!-!。" << endl;Sleep(5000);system("cls");}if (SUMS <= 11 && SUMS >= 7){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t 你的恋爱指数为:C。你是一个有点心思的人,你想表白,却又惧怕现实,你仍须努力o-o。" << endl;Sleep(5000);system("cls");}if (SUMS <= 6 && SUMS >= 0){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t你的恋爱指数为:D。你是一个无暇无垢,不食人间烟火的人,想一路踏歌,但道路上仍需佳人陪伴+-+。" << endl;Sleep(5000);system("cls");}cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t 人生在世,恍如昨世,孤独的身影终难走远,你的那个Ta就在不远方,就如漫天繁星,总有一颗属于你!" << endl;Sleep(2000);cout << "\t\t\t\t\t 快抓紧你身边的那个Ta ^-^oooooo" << endl << endl << endl;Sleep(3000);system("pause");peo[User].award++;return 1;
}
//--------------------------------------------------------------------------------------------------------------
//6.我是赌神(硬币下注游戏)
void Gambler()
{int GameCount = 0;//游戏次数 int dice1, dice2, dice3, sum;int key1 = 0; //进入赌局的钥匙srand((unsigned int)time(NULL)); //依据时间生成随机数的种子cout << "*********************************************** 我 是 赌 神 *************************************************" << endl;cout << " 赌场规则:" << endl;cout << " ① 玩家必须缴纳5枚硬币来获取赌场通行证,并确保自己仍有剩余的硬币参与下注;" << endl;cout << " ② 进入赌场后,玩家用硬币下注,随后会掷出三枚骰子,玩家需猜测三枚骰子之和为单数还是双数;" << endl;cout << " ③ 猜中即可获得双倍奖励,否则将扣除双倍的硬币;" << endl;cout << " ④ 若三枚骰子大小相同,则为大满贯,即无论您下的注是否猜中,您都将获得三倍奖励。" << endl;cout << " 警告:进入赌场的玩家至少需进行5轮赌注,若强制退出,则视为违约,将扣除您硬币总数的一半" << endl << endl << endl;Sleep(3000);system("pause");//暂停游戏并熄屏 system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t +--------------------------+" << endl;cout << "\t\t\t\t\t | 是否进入赌场? |" << endl;cout << "\t\t\t\t\t | 1.进入(需缴纳5枚硬币) | " << endl;cout << "\t\t\t\t\t | 2.退出赌场 |" << endl;cout << "\t\t\t\t\t +--------------------------+" << endl;cout << "请输入数字实现对应的功能:";int k = Check(2); //只返回1、2(是否进入赌场) system("cls"); //清屏if (k == 1 && peo[User].coin > 5){peo[User].coin -= 5; //扣除5枚硬币作为入场券的费用key1 = 1; //赌场开门}else if (k == 2){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 退出成功!!!" << endl;Sleep(3000); //延时3秒return;}else if (peo[User].coin <= 5){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t您的硬币不足,已强制退出" << endl;Sleep(3000); //延时3秒return;}if (key1 == 1){while (1){if (peo[User].coin <= 0) //判断硬币数量是否还能继续游戏{system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您倾家荡产,已强制退出" << endl;Sleep(3000); //延时3秒return;}int judge = 0;cout << "*********************************************** 我 是 赌 神 *************************************************" << endl << endl;cout << "\t\t您的硬币数量:" << peo[User].coin << "\t\t\t\t\t\t 当前下注次数:" << GameCount << endl << endl;cout << "1.开始" << endl;cout << "2.退出(下注未满5次会扣除您硬币总数的一半)" << endl;cout << "请选择:";int Choice = Check(2); //只返回1、2(是否开始游戏) if (Choice == 1){as: cout << "请输入您要压入硬币的数量(整数):";int cn = Check(0); //规范输入 防止系统崩溃 cout << endl;if (cn > peo[User].coin) //下注数大于硬币所有数{cout << "您的硬币不足!!!" << endl;goto as;}cout << endl;cout << "1.单数" << endl;cout << "0.双数" << endl;cout << "请下注:";int Bat = Check(4); //只返回1、0(选择压单或双数)system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 赌局开始!!!" << endl;Sleep(2000);system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 第" << ++GameCount << "轮骰子开始掷!" << endl;Sleep(2000);system("cls");dice1 = 1 + rand() % 6;dice2 = 1 + rand() % 6;dice3 = 1 + rand() % 6; //随机扔三个骰子sum = dice1 + dice2 + dice3;cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t " << dice1;Sleep(1000);system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t " << dice1 << " " << dice2;Sleep(1000);system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t " << dice1 << " " << dice2 << " " << dice3;Sleep(2000);system("cls");cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 骰子大小之和为: " << sum << endl;Sleep(2000);system("cls");if (dice1 == dice2 && dice2 == dice3) //判断是否三个骰子数都相同 (即大满贯) {cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t大满贯,获得3倍奖励!!!" << endl;peo[User].coin += 3 * cn;judge = 1;Sleep(3000);system("cls");continue;}if (sum % 2 == Bat){cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 猜测正确,双倍奖励!!!" << endl;peo[User].coin += 2 * cn;Sleep(3000);system("cls");continue;}else if (sum % 2 != Bat){cout << "*********************************************** 我 是 赌 神 *************************************************";cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 猜测错误,硬币扣除" << endl;peo[User].coin -= 2 * cn;Sleep(3000);system("cls"); //清屏continue;}} //押单则bat=1,押双数则bat=0else if (Choice == 2) //选择退出游戏 {if (GameCount < 5){system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t 警告:您游戏未满5次,已扣除硬币总数的一半!!!" << endl;Sleep(3000); //延时3秒peo[User].coin /= 2; //硬币扣除硬币总数一半 return;}else{system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您全身而退!!!" << endl;Sleep(3000); //延时3秒return;}}}}
}
//--------------------------------------------------------------------------------------------------------------
//主体部分
int main()
{//--------------------------------------------------------------------------------------------------------------//初始化界面system("color F0"); //设置背景色为白色,字体颜色为黑色HideCursor(); //影藏光标cout << "+------------------+" << endl;cout << "| 第二小组 |" << endl;cout << "| 组长:豆漿油條 |" << endl;cout << "| 组员:小哲 |" << endl;cout << "| 小栩 |" << endl;cout << "| 小欣 |" << endl;cout << "| 小蕊 |" << endl;cout << "| 小蓁 |" << endl;cout << "| 小函 |" << endl;cout << "+------------------+" << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 欢迎游玩2172游戏盒!!!" << endl;Sleep(3000); //延时3秒system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t 抵 制 不 良 游 戏 , 拒 绝 盗 版 游 戏 。" << endl;cout << "\t\t\t\t\t 注 意 自 我 保 护 , 谨 防 受 骗 上 当 。" << endl;cout << "\t\t\t\t\t 适 度 游 戏 益 脑 , 沉 迷 游 戏 伤 身 。" << endl;cout << "\t\t\t\t\t 合 理 安 排 时 间 , 享 受 健 康 生 活 。" << endl;Sleep(6000); //延时6秒system("cls"); //清屏//--------------------------------------------------------------------------------------------------------------//程序内部while (1){//--------------------------------------------------------------------------------------------------------------// 登录界面while (1){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t +--------------------+" << endl;cout << "\t\t\t\t\t\t | 是否已有账号? |" << endl;cout << "\t\t\t\t\t\t | 1.有,直接登录 | " << endl;cout << "\t\t\t\t\t\t | 2.没有,申请注册 |" << endl;cout << "\t\t\t\t\t\t | 0.退出程序 |" << endl;cout << "\t\t\t\t\t\t +--------------------+" << endl;cout << "请输入数字实现对应的功能:";float k = Check(1); //只返回1、2、0if (k == 1) //登录{system("cls"); //清屏int a = SignIn();if (a == 1) //选择直接进入程序{Key = 1; //钥匙开锁,可进入主程序system("cls"); //清屏break;}else{continue;}}else if (k == 2) //注册{system("cls"); //清屏int b = Register();if (b == 1) //选择直接进入程序{Key = 1; //钥匙开锁,可进入主程序system("cls"); //清屏break;}else if (b == 2) //选择不直接进入程序{system("cls"); //清屏continue;}}else if (k == 0) //退出程序{cout << "\n你真的要退出了吗?" << endl;cout << "1.强忍离去" << endl;cout << "2.继续使用" << endl;float a = Check(2);cout << endl << endl;if (a == 1){break;}else if (a == 2){system("cls"); //清屏continue;}}}//--------------------------------------------------------------------------------------------------------------//菜单界面if (Key == 1){//--------------------------------------------------------------------------------------------------------------//载入动画Progress(); //进度条cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 你好," << peo[User].user << endl;cout << "\t\t\t\t\t\t 欢迎进入游戏世界!!!" << endl;Sleep(3000); //延时3秒system("cls"); //清屏//--------------------------------------------------------------------------------------------------------------while (1){//--------------------------------------------------------------------------------------------------------------//菜单选项:system("color F0"); //设置背景色为白色,字体颜色为黑色cout << "***************************************************** 2172游戏盒 *****************************************************" << endl;cout << "\t\t\t\t\t\t Version 8.9.11" << endl;cout << " 玩家:" << peo[User].user << setw(15) << "硬币:" << peo[User].coin << endl;cout << "+------------------+" << endl;cout << "| 1.雷霆战机 |" << endl;cout << "| 2.吃豆人 |" << endl;cout << "| 3.贪吃蛇 |" << endl;cout << "| 4.猜数字 |" << endl;cout << "| 5.恋爱测试 |" << endl;cout << "| 6.我是赌神 |" << endl;cout << "| |" << endl;cout << "| |" << endl;cout << "| 9.退出登录 |" << endl;cout << "| 0.退出程序 |" << endl;cout << "+------------------+" << endl;cout << "请输入您要游玩的游戏编号:";//--------------------------------------------------------------------------------------------------------------//利用Check函数判断用户的输入是否正确(字符和字符串):double n = Check(0);cout << endl << endl;//--------------------------------------------------------------------------------------------------------------//按钮对应功能的实现:if (n == 1){system("cls"); //清屏PlaneWar();system("cls"); //清屏if (*Q1 > 200){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏胜利,硬币+30" << endl;Sleep(3000);system("cls"); //清屏peo[User].coin += 30;continue;}else{cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏失败,继续加油" << endl;Sleep(3000);system("cls"); //清屏continue;}}else if (n == 2){system("cls"); //清屏ChiDouRen();system("cls"); //清屏if (*Q2 == 0){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏胜利,硬币+10" << endl;Sleep(3000);system("cls"); //清屏peo[User].coin += 10;continue;}else{cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏失败,继续加油" << endl;Sleep(3000);system("cls"); //清屏continue;}}else if (n == 3){system("cls"); //清屏if (Death == 1){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 蛇已死,自噬无法复活!!!" << endl;Sleep(3000);system("cls"); //清屏}else if (Death == 0){tanchishe();system("cls"); //清屏if (*Q3 > 15){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏胜利,硬币+20" << endl;Sleep(3000);system("cls"); //清屏peo[User].coin += 10;continue;}else{cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏失败,继续加油" << endl;Sleep(3000);system("cls"); //清屏continue;}}}else if (n == 4){system("cls"); //清屏caishuzi();system("cls"); //清屏if (Guesstimes == 1){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 您运气爆棚,硬币+200" << endl;Sleep(3000);system("cls"); //清屏peo[User].coin += 200;continue;}else if (Guesstimes <= 8){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏胜利,硬币+20" << endl;Sleep(3000);system("cls"); //清屏peo[User].coin += 20;continue;}else{cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 游戏失败,继续加油" << endl;Sleep(3000);system("cls"); //清屏continue;}}else if (n == 5){system("cls"); //清屏int GETG = LianAiCeShi();system("cls"); //清屏if (GETG == 1 && peo[User].award == 1){cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 恋爱测试结束!!!" << endl;Sleep(2000);system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t 赠送您50硬币,祝您早日找到那个TA!!!" << endl;Sleep(2000);peo[User].coin += 50;system("cls"); //清屏}continue;}else if (n == 6){system("cls"); //清屏Gambler();if (peo[User].coin < 0){peo[User].coin = 0; //硬币下限为0}system("cls"); //清屏continue;}else if (n == 9){system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 存档中......" << endl;Sleep(2000); //延时2秒system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 账号已退出!!!" << endl;Sleep(2000); //延时2秒system("cls"); //清屏Key = 0; //程序关锁KeyOut = 1; //钥匙开锁,退出登录break;}else if (n == 0){cout << "你真的要退出了吗?" << endl;cout << "1.强忍离去" << endl;cout << "2.继续使用" << endl;float a = Check(2);cout << endl << endl;if (a == 1){break;}else if (a == 2){system("cls"); //清屏continue;}}//--------------------------------------------------------------------------------------------------------------// 开发人员后台指令else if (n == 12321) //查看所有玩家的信息{system("cls"); //清屏cout << setw(10) << "序号" << setw(16) << "用户名" << setw(16) << "密码" << setw(10) << "硬币" << endl;for (int i = 0; i < x; i++){cout << setw(10) << peo[i].number << setw(16) << peo[i].user << setw(16) << peo[i].password << setw(10) << peo[i].coin << endl;}system("pause");system("cls"); //清屏}else if (n == 12345){system("cls"); //清屏cout << setw(10) << "编号" << setw(16) << "用户名" << setw(16) << "密码" << setw(10) << "硬币" << endl;for (int i = 0; i < x; i++){cout << setw(10) << peo[i].number << setw(16) << peo[i].user << setw(16) << peo[i].password << setw(10) << peo[i].coin << endl;}cout << endl << endl << "请输入要修改信息的玩家编号:";int fo = Check(0) - 1;cout << endl;cout << "请输入要修改的信息:" << endl;cout << "1.用户名" << endl;cout << "2.密码" << endl;cout << "3.硬币" << endl;int ko = Check(3);if (ko == 1){cout << endl << "用户名修改为:";char us1[1000];cin.get();cin.getline(us1, 1000);strcpy(peo[fo].user, us1);system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 正在处理,请稍等......" << endl;Sleep(2000); //等待2秒system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 修改成功!!!" << endl;}else if (ko == 2){cout << endl << "密码修改为:";char us2[1000];cin.get();cin.getline(us2, 1000);strcpy(peo[fo].password, us2);system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 正在处理,请稍等......" << endl;Sleep(2000); //等待2秒system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 修改成功!!!" << endl;}else if (ko == 3){cout << endl << "硬币数量修改为:";long long us3 = Check(0);peo[fo].coin = us3;system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 正在处理,请稍等......" << endl;Sleep(2000); //等待2秒system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t\t 修改成功!!!" << endl;}Sleep(2000);system("cls"); //清屏}//--------------------------------------------------------------------------------------------------------------//判断用户的输入是否正确(非餐单中的整型数字):else{system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;cout << "\t\t\t\t\t 您输入的数字不在菜单中,请重新输入!!!" << endl;Sleep(2000);system("cls"); //清屏}//--------------------------------------------------------------------------------------------------------------}}if (KeyOut == 1){KeyOut = 0; //钥匙使用过后关锁,以便后续使用continue;}else if (KeyOut == 0){system("cls"); //清屏cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << "\t\t\t\t\t\t 期待您的下次游玩!" << endl;Sleep(3000); //延时3秒break;}}return 0;
}
四、参考资料
https://blog.csdn.net/zhaoyipengmzyc/article/details/104265564
https://blog.csdn.net/onlyonename/article/details/8316533
https://blog.csdn.net/jackypigpig/article/details/53368531
https://blog.csdn.net/u013745804/article/details/82379266
https://blog.csdn.net/joseph_happy/article/details/5143718
五、总结
我们小组开发的这个项目,重点不在于开发某一个游戏,而在于整个完整的体系,如何实现游戏与系统之间个性化的连接是这个项目主要考虑的问题。当然,庞大的项目难免会遇上很多问题,我们在开发的过程中也遇到并解决了很多BUG,但是依然有不足之处,比如:①程序结束即失忆,账号密码没有永久保存的能力。由于开发周期较短,所以没有实现用户数据的存储与读取的功能;②代码不够精简,算法没有优化。运用了多重循环,各种嵌套,较为繁琐;③程序还有部分BUG没有被修复,如:贪吃蛇游戏如果食物出现在蛇身处就不会显示出来;雷霆战机游戏子弹击中敌人后不消失以及战机坠毁有时会判定失灵……毕竟是刚接触C++不久,本次项目用的基本都是C++的基础语法,往后的学习道路还长,相信随着更深入的学习,编程水平能更上一层楼。