问题标题: 游戏更新了!PS:帮忙起个名字

2
0
已解决
王梓澳
王梓澳
中级光能
中级光能

作者前面求解决bug

自己最后解决了,那么代码就分享给大家

#include <bits/stdc++.h>
#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
	int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
	int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
	int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f1,f2;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
	for (int i=0;i<a.size();i++) {
		cout<<a[i];
		Sleep(50);
	}
}
void color(int a) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
	COORD pos={i, j};
	SetPos(pos);
}
void init() {//地图初始化函数 
	memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
	color(7);
	f1=true;
	system("cls"); 
	out("本游戏控制主要分为两块\n");
	cout<<"   ";
	out("1、玩家人物控制\n");
	cout<<"      ";
	out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
	cout<<"   ";
	out("2、发射子弹控制\n");
	cout<<"      ";
	out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
	out("按s召唤商店来购买东西");
	out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
	out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void in_cont() {
	color(7);
	f1=true;
	system("cls");
	out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
	out("开始后你可能会看见:\n");
	init();
	Map[9][9]='1';
	for (int i=1;i<=8;i++) Map[i][9]='0';
	for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
	cout<<"________________________________________\n";//输出游戏边界
	for (int i=1;i<=20;i++) {
		cout<<"|";//输出边界 
		for (int j=1;j<20;j++) {
			if (Map[i][j]=='U') color(64);//将敌人设成红色 
			if (Map[i][j]=='1') color(2);//将本人设置绿色 
			if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
			cout<<Map[i][j];
			color(7);//恢复 
		}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
		cout<<"|";//输出边界 
		if (i==1) cout<<"剩余生命:"<<soldier.life<<"      |"<<endl;
		else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 |"<<endl;
		else if (i==3) cout<<setw(3)<<clip<<"/无穷大       |"<<endl;
		else if (i==4&&fclip) cout<<"    换弹中...    |"<<endl;
		else if (i==5&&fclip) cout<<"剩余:0."<<10-ChangeSleep<<"秒      |"<<endl;
		else 	  cout<<"                 |"<<endl;
	}
	cout<<"----------------------------------------\n";//输出游戏边界
	out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
	out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
	out("你的目标就是控制1打u获得得分\n");
	out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void careful() {
	out("游戏中现在存在少量bug,发现请与作者联系\n");
	out("祝您玩的愉快\n");
	out("按下k继续");
	while (!KEY_DOWN('K'));
}
void introduce() {
	color(7);
	Sleep(500);
	bool f=0;
	f2=true;
	int i=1;
	while (true) {
		system("cls");
		cout<<"______________\n";
		cout<<"|";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) in_con();
		}cout<<"  控制介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) in_cont();
		}cout<<"  内容介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  跳出介绍  ";color(7);
		cout<<"|\n";
		cout<<"--------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(130);
//			out("您对游戏的那些部分需要查看介绍:\n");
//			out("1、控制介绍(按下u)\n");
//			out("2、内容介绍(按下i)\n");
//			out("按下Z开始游戏"); 
	}
}
void Opening() {
	int i=1;
	while (true) {
		system("cls");
		cout<<"游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n";
		cout<<"作者:Jack Sparrow(QQ:2256449902)\n";
		cout<<"游戏版本:1.1(第二个版本,修复了几个致命性bug)\n";
		cout<<"界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n";
		cout<<"______________\n";
		cout<<"|";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  开始游戏  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) introduce();
		}cout<<"  查看介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) careful();
		}cout<<"  注意事项  ";color(7);
		cout<<"|\n";
		cout<<"--------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(130);
	}
}
void control() {//控制函数 
	if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
	if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
	if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
	if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
	int buco=0; 
	if (KEY_DOWN('K')) {
		while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=1;
		clip--;
	}
	if (KEY_DOWN('J')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=2;
		clip--;
	}
	if (KEY_DOWN('L')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=3;
		clip--;
	}
	if (KEY_DOWN('I')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=4;
		clip--;
	}
	fbullet[buco].x=soldier.x;
	fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
	if (enSleep==2) {//控制敌人移动速度 
		for (int i=1;i<=29;i++) {
			if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
				fen[i].x++;
			if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
				soldier.life--;
				if (soldier.life==0) {
					system("cls");
					out("Game Over!");
					Sleep(1000);
					system("cls");
					out("你目前的得分为:");
					cout<<cnt;
					out("分");
					system("cls");
					out("是否重新开始游戏?\nYes(y)No(n)");
					while (true) {
						if (KEY_DOWN('N'))	exit(0);
						if (KEY_DOWN('Y')) {
							cnt=0;
							soldier.x=9,soldier.y=9;//玩家初始坐标 
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
								fen[i].x=0;
								fen[i].y=rand()%19;
							}
							bucount=0;
							break;
						}
					}
				}
			}
			if (fen[i].x==21) {//如果到界限,那么重新生成 
				fen[i].x=0;
				fen[i].y=rand()%19;
			}
		}
		enSleep=0;
	}
}
void hit(int x,int y,int k) {
	if (Map[x][y]=='U') {//如果当前子弹击中敌人 
		cnt++;//得分累加 
		for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
			if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
				fen[j].x=0;
				fen[j].y=rand()%19;
				break;
			}
		}
		fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
		fbullet[k].y=0;
		fbullet[k].di=0;//以后方便重复利用数组 
	}
}
void bullet_move() {//子弹移动函数 
	for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
		hit(fbullet[i].x,fbullet[i].y,i);
		if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
		if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
		if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
		if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
		if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
			fbullet[i].di=0;
		hit(fbullet[i].x,fbullet[i].y,i);
	}
}
void shop() {
	int i=1;
	while (true) {
		system("cls");
		cout<<"欢迎来到商店,您可以买如下物品:\n";
		cout<<"__________________________\n|";
		if (i==1) {
			if (KEY_DOWN('Z')) {
				if (cnt<100) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=100) {
					system("cls");
					cnt-=100;
					soldier.life++;
					soldier.life%=10;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.life<<"条生命\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"   一条命(售价100分)  ";color(7);
		cout<<"|\n|";
		if (i==2) {
			if (KEY_DOWN('Z')) {
				if (cnt<10) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=10) {
					system("cls");
					cnt-=10;
					soldier.rem+=700;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.rem<<"发子弹\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"  700发子弹(售价10分) ";color(7);
		cout<<"|\n|";
		if (i==3) {
			if (KEY_DOWN('Z')) return ;
			color(14);
		}cout<<"        退出商店        ";color(7);
		cout<<"|\n";
		cout<<"--------------------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
	}	 
}
int main () {
	soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
	clip=100; 
	ChangeSleep=10;
	for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
		fen[i].x=0;
		fen[i].y=rand()%19;
	}
	Opening();
	color(7);
	while (true) {
		enSleep++;//控制时间 
		if (KEY_DOWN('X')) {
			SetPos(26,6);
			cout<<"暂停中!";
			Sleep(1000);
			while (!KEY_DOWN('X'));
		}
		system("cls");//清屏使其动态
		if (KEY_DOWN('P')) shop();
		init(); 
		control();
		if (KEY_DOWN('R')) {
			if (soldier.rem>=100-clip) {
				soldier.rem-=(100-clip);
				clip=100;
			}
			else {
				clip+=soldier.rem;
				soldier.rem=0;
			}
			fclip=1;
			ChangeSleep=0;
		}
		if (ChangeSleep==10) {
			if (fc==0) {
				clip=100;
				if (soldier.rem>=100) soldier.rem-=100;
				else clip=soldier.rem,soldier.rem=0;
				fc=1;
			}
			fclip=0;
			fire();
		}
		if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
		if (fclip) ChangeSleep++;
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		en_move();
		for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
			Map[fen[i].x][fen[i].y]='U';
		bullet_move();
		for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
			Map[fbullet[i].x][fbullet[i].y]='0';
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		cout<<"________________________________________\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"|";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"|";//输出边界 
			if (i==1) cout<<"剩余生命:"<<setw(2)<<soldier.life<<"     |"<<endl;
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 |"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   |"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    |"<<endl;
			else if (i==5&&fclip&&soldier.rem!=0) cout<<"剩余:0."<<10-ChangeSleep<<"秒      |"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    |"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!|"<<endl;
			else 	  cout<<"                 |"<<endl;
		} 
		cout<<"----------------------------------------\n";//输出游戏边界
		Sleep(100);//防止游戏太卡顿或者高内存,延时0.1秒 
	}
	return 0;
}

介绍什么的都写了,自己看看吧

作者毕竟写了这么久,留个评论给个支持,作者以后会更新

希望大家能够喜欢

其中应该会有一些bug,大家发现可以和作者联系,帮助修复

王梓澳在2021-05-13 20:58:02追加了内容

这里作者大大qq:2256449902

调试员大大qq:2245893413

王梓澳在2021-05-13 21:30:59追加了内容

作者发现了一个小bug

#include <bits/stdc++.h>
#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
	int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
	int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
	int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f1,f2;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
	for (int i=0;i<a.size();i++) {
		cout<<a[i];
		Sleep(50);
	}
}
void color(int a) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
	COORD pos={i, j};
	SetPos(pos);
}
void init() {//地图初始化函数 
	memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
	color(7);
	f1=true;
	system("cls"); 
	out("本游戏控制主要分为两块\n");
	cout<<"   ";
	out("1、玩家人物控制\n");
	cout<<"      ";
	out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
	cout<<"   ";
	out("2、发射子弹控制\n");
	cout<<"      ";
	out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
	out("按s召唤商店来购买东西");
	out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
	out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void in_cont() {
	color(7);
	f1=true;
	system("cls");
	out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
	out("开始后你可能会看见:\n");
	init();
	Map[9][9]='1';
	for (int i=1;i<=8;i++) Map[i][9]='0';
	for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
	cout<<"________________________________________\n";//输出游戏边界
	for (int i=1;i<=20;i++) {
		cout<<"|";//输出边界 
		for (int j=1;j<20;j++) {
			if (Map[i][j]=='U') color(64);//将敌人设成红色 
			if (Map[i][j]=='1') color(2);//将本人设置绿色 
			if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
			cout<<Map[i][j];
			color(7);//恢复 
		}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
		cout<<"|";//输出边界 
		if (i==1) cout<<"剩余生命:"<<soldier.life<<"      |"<<endl;
		else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 |"<<endl;
		else if (i==3) cout<<setw(3)<<clip<<"/无穷大       |"<<endl;
		else if (i==4&&fclip) cout<<"    换弹中...    |"<<endl;
		else if (i==5&&fclip) cout<<"剩余:0."<<10-ChangeSleep<<"秒      |"<<endl;
		else 	  cout<<"                 |"<<endl;
	}
	cout<<"----------------------------------------\n";//输出游戏边界
	out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
	out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
	out("你的目标就是控制1打u获得得分\n");
	out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void careful() {
	system("cls");
	out("游戏中现在存在少量bug,发现请与作者联系\n");
	out("祝您玩的愉快\n");
	out("按下k继续");
	while (!KEY_DOWN('K'));
}
void introduce() {
	color(7);
	Sleep(500);
	bool f=0;
	f2=true;
	int i=1;
	while (true) {
		system("cls");
		cout<<"______________\n";
		cout<<"|";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) in_con();
		}cout<<"  控制介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) in_cont();
		}cout<<"  内容介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  跳出介绍  ";color(7);
		cout<<"|\n";
		cout<<"--------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(130);
//			out("您对游戏的那些部分需要查看介绍:\n");
//			out("1、控制介绍(按下u)\n");
//			out("2、内容介绍(按下i)\n");
//			out("按下Z开始游戏"); 
	}
}
void Opening() {
	int i=1;
	while (true) {
		system("cls");
		cout<<"游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n";
		cout<<"作者:Jack Sparrow(QQ:2256449902)\n";
		cout<<"游戏版本:1.1(第二个版本,修复了几个致命性bug)\n";
		cout<<"界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n";
		cout<<"______________\n";
		cout<<"|";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  开始游戏  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) introduce();
		}cout<<"  查看介绍  ";color(7);
		cout<<"|\n";
		cout<<"|";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) careful();
		}cout<<"  注意事项  ";color(7);
		cout<<"|\n";
		cout<<"--------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(130);
	}
}
void control() {//控制函数 
	if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
	if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
	if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
	if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
	int buco=0; 
	if (KEY_DOWN('K')) {
		while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=1;
		clip--;
	}
	if (KEY_DOWN('J')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=2;
		clip--;
	}
	if (KEY_DOWN('L')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=3;
		clip--;
	}
	if (KEY_DOWN('I')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=4;
		clip--;
	}
	fbullet[buco].x=soldier.x;
	fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
	if (enSleep==5) {//控制敌人移动速度 
		for (int i=1;i<=29;i++) {
			if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
				fen[i].x++;
			if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
				soldier.life--;
				if (soldier.life==0) {
					system("cls");
					out("Game Over!");
					Sleep(1000);
					system("cls");
					out("你目前的得分为:");
					cout<<cnt;
					out("分");
					system("cls");
					out("是否重新开始游戏?\nYes(y)No(n)");
					while (true) {
						if (KEY_DOWN('N'))	exit(0);
						if (KEY_DOWN('Y')) {
							cnt=0;
							soldier.x=9,soldier.y=9;//玩家初始坐标 
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
								fen[i].x=0;
								fen[i].y=rand()%19;
							}
							bucount=0;
							break;
						}
					}
				}
			}
			if (fen[i].x==21) {//如果到界限,那么重新生成 
				fen[i].x=0;
				fen[i].y=rand()%19;
			}
		}
		enSleep=0;
	}
}
void hit(int x,int y,int k) {
	if (Map[x][y]=='U') {//如果当前子弹击中敌人 
		cnt++;//得分累加 
		for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
			if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
				fen[j].x=0;
				fen[j].y=rand()%19;
				break;
			}
		}
		fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
		fbullet[k].y=0;
		fbullet[k].di=0;//以后方便重复利用数组 
	}
}
void bullet_move() {//子弹移动函数 
	for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
		hit(fbullet[i].x,fbullet[i].y,i);
		if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
		if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
		if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
		if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
		if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
			fbullet[i].di=0;
		hit(fbullet[i].x,fbullet[i].y,i);
	}
}
void shop() {
	int i=1;
	while (true) {
		system("cls");
		cout<<"欢迎来到商店,您可以买如下物品:\n";
		cout<<"__________________________\n|";
		if (i==1) {
			if (KEY_DOWN('Z')) {
				if (cnt<100) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=100) {
					system("cls");
					cnt-=100;
					soldier.life++;
					soldier.life%=10;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.life<<"条生命\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"   一条命(售价100分)  ";color(7);
		cout<<"|\n|";
		if (i==2) {
			if (KEY_DOWN('Z')) {
				if (cnt<10) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=10) {
					system("cls");
					cnt-=10;
					soldier.rem+=700;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.rem<<"发子弹\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"  700发子弹(售价10分) ";color(7);
		cout<<"|\n|";
		if (i==3) {
			if (KEY_DOWN('Z')) return ;
			color(14);
		}cout<<"        退出商店        ";color(7);
		cout<<"|\n";
		cout<<"--------------------------\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
	}	 
}
int main () {
	soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
	clip=100; 
	ChangeSleep=10;
	for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
		fen[i].x=0;
		fen[i].y=rand()%19;
	}
	Opening();
	color(7);
	while (true) {
		enSleep++;//控制时间 
		if (KEY_DOWN('X')) {
			SetPos(26,6);
			cout<<"暂停中!";
			Sleep(1000);
			while (!KEY_DOWN('X'));
		}
		system("cls");//清屏使其动态
		if (KEY_DOWN('P')) shop();
		init(); 
		control();
		if (KEY_DOWN('R')) {
			if (soldier.rem>=100-clip) {
				soldier.rem-=(100-clip);
				clip=100;
			}
			else {
				clip+=soldier.rem;
				soldier.rem=0;
			}
			fclip=1;
			ChangeSleep=0;
		}
		if (ChangeSleep==10) {
			if (fc==0) {
				clip=100;
				if (soldier.rem>=100) soldier.rem-=100;
				else clip=soldier.rem,soldier.rem=0;
				fc=1;
			}
			fclip=0;
			fire();
		}
		if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
		if (fclip) ChangeSleep++;
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		en_move();
		for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
			Map[fen[i].x][fen[i].y]='U';
		bullet_move();
		for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
			Map[fbullet[i].x][fbullet[i].y]='0';
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		cout<<"________________________________________\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"|";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"|";//输出边界 
			if (i==1) cout<<"剩余生命:"<<setw(2)<<soldier.life<<"     |"<<endl;
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 |"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   |"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    |"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    |"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!|"<<endl;
			else 	  cout<<"                 |"<<endl;
		} 
		cout<<"----------------------------------------\n";//输出游戏边界
		Sleep(8);//防止游戏太卡顿或者高内存,延时0.1秒 
	}
	return 0;
}

 

王梓澳在2021-05-15 21:05:57追加了内容

作者更新了!

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
	int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
	int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
	int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f=false;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
	for (int i=0;i<a.size();i++) {
		cout<<a[i];
		Sleep(50);
	}
}
void color(int a) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
	COORD pos={i, j};
	SetPos(pos);
}
void init() {//地图初始化函数 
	memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
	color(7);
	system("cls"); 
	out("本游戏控制主要分为两块\n");
	cout<<"   ";
	out("1、玩家人物控制\n");
	cout<<"      ";
	out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
	cout<<"   ";
	out("2、发射子弹控制\n");
	cout<<"      ";
	out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
	out("按s召唤商店来购买东西");
	out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
	out("如果你没有看介绍或者对介绍不熟悉,请按下Esc退出到主界面\n");
	out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void in_cont() {
	color(7);
	system("cls");
	out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
	out("开始后你可能会看见:\n");
	init();
	Map[9][9]='1';
	for (int i=1;i<=8;i++) Map[i][9]='0';
	for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
	cout<<"╭═══════════════════╮\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"║";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"║";//输出边界 
			if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
			else 	  cout<<"                 ║"<<endl;
		} 
		cout<<"╰═══════════════════╯\n";//输出游戏边界
	out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
	out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
	out("你的目标就是控制1打u获得得分\n");
	out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void update() {
	system("cls");
	cout<<"1.0~1.1 更新了游戏介绍,但是非常简洁,比较普通\n";
	cout<<"1.1~1.2 更新游戏介绍内容和界面(当前版本未发布)\n";
	color(14);cout<<"1.2~1.3 更新了游戏界面太卡顿以至于看不清的情况,和弹夹内子弹为负数的情况bug(本次更新)\n";color(7);
	cout<<"按下k继续";
	while (!KEY_DOWN('K'));
}
void careful() {
	system("cls");
	out("游戏中现在存在少量bug,发现请与作者联系\n");
	out("祝您玩的愉快\n");
	out("按下k继续");
	while (!KEY_DOWN('K'));
}
void introduce() {
	color(7);
	Sleep(500);
	bool f=0;
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.3(第三个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		cout<<"╭══════╮\n";
		cout<<"║";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) in_con();
		}cout<<"  控制介绍  ";color(7);
		cout<<"║\n";
		cout<<"║";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) in_cont();
		}cout<<"  内容介绍  ";color(7);
		cout<<"║\n║";
		if (i==4) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  跳出介绍  ";color(7);
		cout<<"║\n";
		cout<<"╰══════╯\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
//			out("您对游戏的那些部分需要查看介绍:\n");
//			out("1、控制介绍(按下u)\n");
//			out("2、内容介绍(按下i)\n");
//			out("按下Z开始游戏"); 
	}
}
void Opening() {
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.3(第三个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		printf("╭══════╮\n");
		printf("║");
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')&&!f) return ;
			if (KEY_DOWN('Z')&&f) {
				color(7);
				int j=0;
				while (true) {
					system("cls");
					printf("╭═════╮\n");
					if (!j) {
						color(14);
						if (KEY_DOWN('Z')) return ; 
					}printf(" 继续上次游戏 ");color(7);
					printf("║\n║");
					if (j==1) {
						color(14);
						if (KEY_DOWN('Z')) {
							soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
							clip=100; 
							ChangeSleep=10;
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
									fen[i].x=0;
								fen[i].y=rand()%19;
							}
							cnt=0;
							init();
							return ;
						}
					}printf("    新游戏    ");color(7);
					printf("║\n║");
					if (j==2){
						color(14);
						if (KEY_DOWN('Z')) break;
					}
					printf("     退出     ");color(7);
					printf("║\n");
					printf("╰═════╯\n║");
					if (KEY_DOWN('W')&&j-1>=0) j--;
					if (KEY_DOWN('S')&&j+1<=2) j++;
					Sleep(100);
				}
			}
		}printf("  开始游戏  ");color(7);
		printf("║\n");
		printf("║");
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) introduce();
		}printf("  查看介绍  ");color(7);
		printf("║\n");
		printf("║");
		if (i==3) {
			if (KEY_DOWN('Z')) update();
			color(14);
		}printf("  更新内容  ");color(7);
		printf("║\n║");
		if (i==4) {
			if (KEY_DOWN('Z')) careful();
			color(14);
		}printf("  注意事项  ");color(7);
		printf("║\n");
		printf("╰══════╯");
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=4) i++;
		Sleep(100);
	}
}
void control() {//控制函数 
	if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
	if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
	if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
	if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
	int buco=0; 
	if (KEY_DOWN('K')) {
		while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=1;
		clip--;
	}
	if (KEY_DOWN('J')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=2;
		clip--;
	}
	if (KEY_DOWN('L')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=3;
		clip--;
	}
	if (KEY_DOWN('I')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=4;
		clip--;
	}
	fbullet[buco].x=soldier.x;
	fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
	if (enSleep==2) {//控制敌人移动速度 
		for (int i=1;i<=29;i++) {
			if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
				fen[i].x++;
			if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
				soldier.life--;
				if (soldier.life==0) {
					system("cls");
					out("Game Over!");
					Sleep(1000);
					system("cls");
					out("你目前的得分为:");
					cout<<cnt;
					out("分");
					system("cls");
					out("是否重新开始游戏?\nYes(y)No(n)");
					while (true) {
						if (KEY_DOWN('N'))	exit(0);
						if (KEY_DOWN('Y')) {
							cnt=0;
							soldier.x=9,soldier.y=9;//玩家初始坐标 
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
								fen[i].x=0;
								fen[i].y=rand()%19;
							}
							bucount=0;
							break;
						}
					}
				}
			}
			if (fen[i].x==21) {//如果到界限,那么重新生成 
				fen[i].x=0;
				fen[i].y=rand()%19;
			}
		}
		enSleep=0;
	}
}
void hit(int x,int y,int k) {
	if (Map[x][y]=='U') {//如果当前子弹击中敌人 
		cnt++;//得分累加 
		for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
			if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
				fen[j].x=0;
				fen[j].y=rand()%19;
				break;
			}
		}
		fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
		fbullet[k].y=0;
		fbullet[k].di=0;//以后方便重复利用数组 
	}
}
void bullet_move() {//子弹移动函数 
	for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
		hit(fbullet[i].x,fbullet[i].y,i);
		if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
		if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
		if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
		if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
		if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
			fbullet[i].di=0;
		hit(fbullet[i].x,fbullet[i].y,i);
	}
}
void shop() {
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.3(第三个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		color(14);
		cout<<"================================================\n";
		color(7);
		cout<<"欢迎来到商店,您可以买如下物品:\n";
		cout<<"╭════════════╮\n║";
		if (i==1) {
			if (KEY_DOWN('Z')) {
				if (cnt<100) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=100) {
					system("cls");
					cnt-=100;
					soldier.life++;
					soldier.life%=10;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.life<<"条生命\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"   一条命(售价100分)  ";color(7);
		cout<<"║\n║";
		if (i==2) {
			if (KEY_DOWN('Z')) {
				if (cnt<10) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=10) {
					system("cls");
					cnt-=10;
					soldier.rem+=700;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.rem<<"发子弹\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"  700发子弹(售价10分) ";color(7);
		cout<<"║\n║";
		if (i==3) {
			if (KEY_DOWN('Z')) return ;
			color(14);
		}cout<<"        退出商店        ";color(7);
		cout<<"║\n";
		cout<<"╰════════════╯\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
	}	 
}
int main () {
	soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
	clip=100; 
	ChangeSleep=10;
	for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
		fen[i].x=0;
		fen[i].y=rand()%19;
	}
	Opening();
	color(7);
	while (true) {
		f=true;
		if (KEY_DOWN(VK_ESCAPE))
			Opening();
		enSleep++;//控制时间 
		if (KEY_DOWN('X')) {
			SetPos(26,6);
			cout<<"暂停中!";
			Sleep(1000);
			while (!KEY_DOWN('X'));
			Sleep(100);
		}
		system("cls");//清屏使其动态
		if (KEY_DOWN('P')) shop();
		init(); 
		control();
		if (KEY_DOWN('R')) {
			if (soldier.rem>=100-clip) {
				soldier.rem-=(100-clip);
				clip=100;
			}
			else {
				clip+=soldier.rem;
				soldier.rem=0;
			}
			fclip=1;
			ChangeSleep=0;
		}
		if (ChangeSleep==10) {
			if (fc==0) {
				clip=100;
				if (soldier.rem>=100) soldier.rem-=100;
				else clip=soldier.rem,soldier.rem=0;
				fc=1;
			}
			fclip=0;
			if (clip!=0) fire();
		}
		if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
		if (fclip) ChangeSleep++;
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		en_move();
		for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
			Map[fen[i].x][fen[i].y]='U';
		bullet_move();
		for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
			Map[fbullet[i].x][fbullet[i].y]='0';
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		cout<<"╭═══════════════════╮\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"║";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"║";//输出边界 
			if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
			else 	  cout<<"                 ║"<<endl;
		} 
		cout<<"╰═══════════════════╯\n";//输出游戏边界
		Sleep(100);//防止游戏太卡顿或者高内存,延时0.1秒 
	}
	return 0;
}

至于代码里面为什么会一会cout一会printf

因为作者指导printf的输出速度大于cout,于是就试着用一下printf输出后发现没啥作用,所以只改了一部分

color(7);
				int j=0;
				while (true) {
					system("cls");
					printf("╭═════╮\n");
					if (!j) {
						color(14);
						if (KEY_DOWN('Z')) return ; 
					}printf(" 继续上次游戏 ");color(7);
					printf("║\n║");
					if (j==1) {
						color(14);
						if (KEY_DOWN('Z')) {
							soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
							clip=100; 
							ChangeSleep=10;
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
									fen[i].x=0;
								fen[i].y=rand()%19;
							}
							cnt=0;
							init();
							return ;
						}
					}printf("    新游戏    ");color(7);
					printf("║\n║");
					if (j==2){
						color(14);
						if (KEY_DOWN('Z')) break;
					}
					printf("     退出     ");color(7);
					printf("║\n");
					printf("╰═════╯\n║");
					if (KEY_DOWN('W')&&j-1>=0) j--;
					if (KEY_DOWN('S')&&j+1<=2) j++;
					Sleep(100);
				}

这一段代码不太稳定,有时候会执行,有时候不会,如果不放心的可以删除

以后更新会解决这个问题

王梓澳在2021-05-15 21:32:07追加了内容

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
    int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
    int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
    int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f=false;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
    for (int i=0;i<a.size();i++) {
        cout<<a[i];
        Sleep(50);
    }
}
void color(int a) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
    COORD pos={i, j};
    SetPos(pos);
}
void init() {//地图初始化函数 
    memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
    color(7);
    system("cls"); 
    out("本游戏控制主要分为两块\n");
    cout<<"   ";
    out("1、玩家人物控制\n");
    cout<<"      ";
    out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
    cout<<"   ";
    out("2、发射子弹控制\n");
    cout<<"      ";
    out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
    out("按s召唤商店来购买东西");
    out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
    out("如果你没有看介绍或者对介绍不熟悉,请按下Esc退出到主界面\n");
    out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
    out("按下k跳出本轮介绍");
    while (!KEY_DOWN('K'));
}
void in_cont() {
    color(7);
    system("cls");
    out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
    out("开始后你可能会看见:\n");
    init();
    Map[9][9]='1';
    for (int i=1;i<=8;i++) Map[i][9]='0';
    for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
    cout<<"╭═══════════════════╮\n";//输出游戏边界
        for (int i=1;i<=20;i++) {
            cout<<"║";//输出边界 
            for (int j=1;j<20;j++) {
                if (Map[i][j]=='U') color(64);//将敌人设成红色 
                if (Map[i][j]=='1') color(2);//将本人设置绿色 
                if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
                cout<<Map[i][j];
                color(7);//恢复 
            }//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
            cout<<"║";//输出边界 
            if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
            else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
            else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
            else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
            else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
            else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
            else       cout<<"                 ║"<<endl;
        } 
        cout<<"╰═══════════════════╯\n";//输出游戏边界
    out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
    out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
    out("你的目标就是控制1打u获得得分\n");
    out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
    out("按下k跳出本轮介绍");
    while (!KEY_DOWN('K'));
}
void update() {
    system("cls");
    cout<<"1.0~1.1 更新了游戏介绍,但是非常简洁,比较普通\n";
    cout<<"1.1~1.2 更新游戏介绍内容和界面(当前版本未发布)\n";
    cout<<"1.2~1.3 更新了游戏界面太卡顿以至于看不清的情况,和弹夹内子弹为负数的情况bug\n";
    color(14);cout<<"1.3~1.4 作者发布以后立即发现了几个bug,不稳定程序问题解决,修复部分bug(本次更新)\n";color(7);
    cout<<"按下k继续";
    while (!KEY_DOWN('K'));
}
void careful() {
    system("cls");
    out("游戏中现在存在少量bug,发现请与作者联系\n");
    out("祝您玩的愉快\n");
    out("按下k继续");
    while (!KEY_DOWN('K'));
}
void introduce() {
    color(7);
    Sleep(500);
    bool f=0;
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.4(第四个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        cout<<"╭══════╮\n";
        cout<<"║";
        if (i==1) {
            color(14);
            if (KEY_DOWN('Z')) in_con();
        }cout<<"  控制介绍  ";color(7);
        cout<<"║\n";
        cout<<"║";
        if (i==2) {
            color(14);
            if (KEY_DOWN('Z')) in_cont();
        }cout<<"  内容介绍  ";color(7);
        cout<<"║\n║";
        if (i==3) {
            color(14);
            if (KEY_DOWN('Z')) return ;
        }cout<<"  跳出介绍  ";color(7);
        cout<<"║\n";
        cout<<"╰══════╯\n";
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=3) i++;
        Sleep(100);
//            out("您对游戏的那些部分需要查看介绍:\n");
//            out("1、控制介绍(按下u)\n");
//            out("2、内容介绍(按下i)\n");
//            out("按下Z开始游戏"); 
    }
}
void Opening() {
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.4(第四个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        printf("╭══════╮\n");
        printf("║");
        if (i==1) {
            color(14);
            if (KEY_DOWN('Z')&&!f) {
                    if (KEY_DOWN('Z')) {
                    for (int i=3;i>=1;i--) {
                        system("cls");
                        color(rand()%14);
                        cout<<i;
                        Sleep(1000);
                    }
                    color(rand()%14);
                    system("cls");
                    cout<<"开始!";
                    Sleep(1000);
                    return ; 
                }
            }
            if (KEY_DOWN('Z')&&f) {
                color(7);
                int j=0;
                system("cls");
                Sleep(500);
                while (true) {
                    system("cls");
                    printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
                    printf("作者:Jack Sparrow(QQ:2256449902)\n");
                    printf("游戏版本:1.4(第四个版本)\n");
                    printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
                    printf("╭═══════╮\n");
                    printf("║");
                    if (!j) {
                        color(14);
                        if (KEY_DOWN('Z')) {
                            for (int i=3;i>=1;i--) {
                                system("cls");
                                color(rand()%14);
                                cout<<i;
                                Sleep(1000);
                            }
                            color(rand()%14);
                            system("cls");
                            cout<<"开始!";
                            Sleep(1000);
                            return ; 
                        }
                    }printf(" 继续上次游戏 ");color(7);
                    printf("║\n║");
                    if (j==1) {
                        color(14);
                        if (KEY_DOWN('Z')) {
                            soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
                            clip=100; 
                            ChangeSleep=10;
                            for (int i=1;i<=bucount;i++)
                                fbullet[i].x=0,fbullet[i].y=0,fbullet[i].di=0;
                            bucount=1;
                            for (int i=1;i<=29;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
                                    fen[i].x=0;
                                fen[i].y=rand()%19;
                            }
                            cnt=0;
                            init();
                            for (int i=3;i>=1;i--) {
                                system("cls");
                                color(rand()%14);
                                cout<<i;
                                Sleep(1000);
                            }
                            color(rand()%14);
                            system("cls");
                            cout<<"开始!";
                            Sleep(1000);
                            return ;
                        }
                    }printf("    新游戏    ");color(7);
                    printf("║\n║");
                    if (j==2){
                        color(14);
                        if (KEY_DOWN('Z')) break;
                    }
                    printf("     退出     ");color(7);
                    printf("║\n");
                    printf("╰═══════╯\n");
                    if (KEY_DOWN('W')&&j-1>=0) j--;
                    if (KEY_DOWN('S')&&j+1<=2) j++;
                    Sleep(100);
                }
            }
        }printf("  开始游戏  ");color(7);
        printf("║\n");
        printf("║");
        if (i==2) {
            color(14);
            if (KEY_DOWN('Z')) introduce();
        }printf("  查看介绍  ");color(7);
        printf("║\n");
        printf("║");
        if (i==3) {
            if (KEY_DOWN('Z')) update();
            color(14);
        }printf("  更新内容  ");color(7);
        printf("║\n║");
        if (i==4) {
            if (KEY_DOWN('Z')) careful();
            color(14);
        }printf("  注意事项  ");color(7);
        printf("║\n");
        printf("╰══════╯");
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=4) i++;
        Sleep(100);
    }
}
void control() {//控制函数 
    if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
    if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
    if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
    if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
    int buco=0; 
    if (KEY_DOWN('K')) {
        while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
        if (buco>=bucount)    bucount++;
        fbullet[buco].di=1;
        clip--;
    }
    if (KEY_DOWN('J')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[bucount].di=2;
        clip--;
    }
    if (KEY_DOWN('L')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[bucount].di=3;
        clip--;
    }
    if (KEY_DOWN('I')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[buco].di=4;
        clip--;
    }
    fbullet[buco].x=soldier.x;
    fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
    if (enSleep==2) {//控制敌人移动速度 
        for (int i=1;i<=29;i++) {
            if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
                fen[i].x++;
            if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
                soldier.life--;
                if (soldier.life==0) {
                    system("cls");
                    out("Game Over!");
                    Sleep(1000);
                    system("cls");
                    out("你目前的得分为:");
                    cout<<cnt;
                    out("分");
                    system("cls");
                    out("是否重新开始游戏?\nYes(y)No(n)");
                    while (true) {
                        if (KEY_DOWN('N'))    exit(0);
                        if (KEY_DOWN('Y')) {
                            cnt=0;
                            soldier.x=9,soldier.y=9;//玩家初始坐标 
                            for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
                                fen[i].x=0;
                                fen[i].y=rand()%19;
                            }
                            bucount=0;
                            break;
                        }
                    }
                }
            }
            if (fen[i].x==21) {//如果到界限,那么重新生成 
                fen[i].x=0;
                fen[i].y=rand()%19;
            }
        }
        enSleep=0;
    }
}
void hit(int x,int y,int k) {
    if (Map[x][y]=='U') {//如果当前子弹击中敌人 
        cnt++;//得分累加 
        for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
            if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
                fen[j].x=0;
                fen[j].y=rand()%19;
                break;
            }
        }
        fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
        fbullet[k].y=0;
        fbullet[k].di=0;//以后方便重复利用数组 
    }
}
void bullet_move() {//子弹移动函数 
    for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
        hit(fbullet[i].x,fbullet[i].y,i);
        if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
        if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
        if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
        if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
        if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
            fbullet[i].di=0;
        hit(fbullet[i].x,fbullet[i].y,i);
    }
}
void shop() {
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.4(第四个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        color(14);
        cout<<"================================================\n";
        color(7);
        cout<<"欢迎来到商店,您可以买如下物品:\n";
        cout<<"╭════════════╮\n║";
        if (i==1) {
            if (KEY_DOWN('Z')) {
                if (cnt<100) {
                    system("cls");
                    cout<<"积分不够!\n";
                }
                if (cnt>=100) {
                    system("cls");
                    cnt-=100;
                    soldier.life++;
                    soldier.life%=10;
                    cout<<"购买成功!\n";
                    cout<<"您现在有"<<soldier.life<<"条生命\n";
                    cout<<"您还有"<<cnt<<"分\n";
                }
                out("按下k继续");
                while (!KEY_DOWN('K'));
                system("cls");
            }
            color(14);
        }cout<<"   一条命(售价100分)  ";color(7);
        cout<<"║\n║";
        if (i==2) {
            if (KEY_DOWN('Z')) {
                if (cnt<10) {
                    system("cls");
                    cout<<"积分不够!\n";
                }
                if (cnt>=10) {
                    system("cls");
                    cnt-=10;
                    soldier.rem+=700;
                    cout<<"购买成功!\n";
                    cout<<"您现在有"<<soldier.rem<<"发子弹\n";
                    cout<<"您还有"<<cnt<<"分\n";
                }
                out("按下k继续");
                while (!KEY_DOWN('K'));
                system("cls");
            }
            color(14);
        }cout<<"  700发子弹(售价10分) ";color(7);
        cout<<"║\n║";
        if (i==3) {
            if (KEY_DOWN('Z')) return ;
            color(14);
        }cout<<"        退出商店        ";color(7);
        cout<<"║\n";
        cout<<"╰════════════╯\n";
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=3) i++;
        Sleep(100);
    }     
}
int main () {
    soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
    clip=100; 
    ChangeSleep=10;
    for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
        fen[i].x=0;
        fen[i].y=rand()%19;
    }
    Opening();
    color(7);
    while (true) {
        f=true;
        if (KEY_DOWN(VK_ESCAPE))
            Opening();
        enSleep++;//控制时间 
        if (KEY_DOWN('X')) {
            SetPos(26,6);
            cout<<"暂停中!";
            Sleep(1000);
            while (!KEY_DOWN('X'));
            Sleep(100);
        }
        system("cls");//清屏使其动态
        if (KEY_DOWN('P')) shop();
        init(); 
        control();
        if (KEY_DOWN('R')) {
            if (soldier.rem>=100-clip) {
                soldier.rem-=(100-clip);
                clip=100;
            }
            else {
                clip+=soldier.rem;
                soldier.rem=0;
            }
            fclip=1;
            ChangeSleep=0;
        }
        if (ChangeSleep==10) {
            if (fc==0) {
                clip=100;
                if (soldier.rem>=100) soldier.rem-=100;
                else clip=soldier.rem,soldier.rem=0;
                fc=1;
            }
            fclip=0;
            if (clip!=0) fire();
        }
        if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
        if (fclip) ChangeSleep++;
        Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
        en_move();
        for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
            Map[fen[i].x][fen[i].y]='U';
        bullet_move();
        for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
            Map[fbullet[i].x][fbullet[i].y]='0';
        Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
        cout<<"╭═══════════════════╮\n";//输出游戏边界
        for (int i=1;i<=20;i++) {
            cout<<"║";//输出边界 
            for (int j=1;j<20;j++) {
                if (Map[i][j]=='U') color(64);//将敌人设成红色 
                if (Map[i][j]=='1') color(2);//将本人设置绿色 
                if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
                cout<<Map[i][j];
                color(7);//恢复 
            }//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
            cout<<"║";//输出边界 
            if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
            else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
            else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
            else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
            else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
            else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
            else       cout<<"                 ║"<<endl;
        } 
        cout<<"╰═══════════════════╯\n";//输出游戏边界
        Sleep(100);//防止游戏太卡顿或者高内存,延时0.1秒 
    }
    return 0;
}

王梓澳在2021-05-15 21:32:34追加了内容
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
	int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
	int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
	int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f=false;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
	for (int i=0;i<a.size();i++) {
		cout<<a[i];
		Sleep(50);
	}
}
void color(int a) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
	COORD pos={i, j};
	SetPos(pos);
}
void init() {//地图初始化函数 
	memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
	color(7);
	system("cls"); 
	out("本游戏控制主要分为两块\n");
	cout<<"   ";
	out("1、玩家人物控制\n");
	cout<<"      ";
	out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
	cout<<"   ";
	out("2、发射子弹控制\n");
	cout<<"      ";
	out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
	out("按s召唤商店来购买东西");
	out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
	out("如果你没有看介绍或者对介绍不熟悉,请按下Esc退出到主界面\n");
	out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void in_cont() {
	color(7);
	system("cls");
	out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
	out("开始后你可能会看见:\n");
	init();
	Map[9][9]='1';
	for (int i=1;i<=8;i++) Map[i][9]='0';
	for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
	cout<<"╭═══════════════════╮\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"║";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"║";//输出边界 
			if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
			else 	  cout<<"                 ║"<<endl;
		} 
		cout<<"╰═══════════════════╯\n";//输出游戏边界
	out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
	out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
	out("你的目标就是控制1打u获得得分\n");
	out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
	out("按下k跳出本轮介绍");
	while (!KEY_DOWN('K'));
}
void update() {
	system("cls");
	cout<<"1.0~1.1 更新了游戏介绍,但是非常简洁,比较普通\n";
	cout<<"1.1~1.2 更新游戏介绍内容和界面(当前版本未发布)\n";
	cout<<"1.2~1.3 更新了游戏界面太卡顿以至于看不清的情况,和弹夹内子弹为负数的情况bug\n";
	color(14);cout<<"1.3~1.4 作者发布以后立即发现了几个bug,不稳定程序问题解决,修复部分bug(本次更新)\n";color(7);
	cout<<"按下k继续";
	while (!KEY_DOWN('K'));
}
void careful() {
	system("cls");
	out("游戏中现在存在少量bug,发现请与作者联系\n");
	out("祝您玩的愉快\n");
	out("按下k继续");
	while (!KEY_DOWN('K'));
}
void introduce() {
	color(7);
	Sleep(500);
	bool f=0;
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.4(第四个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		cout<<"╭══════╮\n";
		cout<<"║";
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')) in_con();
		}cout<<"  控制介绍  ";color(7);
		cout<<"║\n";
		cout<<"║";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) in_cont();
		}cout<<"  内容介绍  ";color(7);
		cout<<"║\n║";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) return ;
		}cout<<"  跳出介绍  ";color(7);
		cout<<"║\n";
		cout<<"╰══════╯\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
//			out("您对游戏的那些部分需要查看介绍:\n");
//			out("1、控制介绍(按下u)\n");
//			out("2、内容介绍(按下i)\n");
//			out("按下Z开始游戏"); 
	}
}
void Opening() {
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.4(第四个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		printf("╭══════╮\n");
		printf("║");
		if (i==1) {
			color(14);
			if (KEY_DOWN('Z')&&!f) {
					if (KEY_DOWN('Z')) {
					for (int i=3;i>=1;i--) {
						system("cls");
						color(rand()%14);
						cout<<i;
						Sleep(1000);
					}
					color(rand()%14);
					system("cls");
					cout<<"开始!";
					Sleep(1000);
					return ; 
				}
			}
			if (KEY_DOWN('Z')&&f) {
				color(7);
				int j=0;
				system("cls");
				Sleep(500);
				while (true) {
					system("cls");
					printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
					printf("作者:Jack Sparrow(QQ:2256449902)\n");
					printf("游戏版本:1.4(第四个版本)\n");
					printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
					printf("╭═══════╮\n");
					printf("║");
					if (!j) {
						color(14);
						if (KEY_DOWN('Z')) {
							for (int i=3;i>=1;i--) {
								system("cls");
								color(rand()%14);
								cout<<i;
								Sleep(1000);
							}
							color(rand()%14);
							system("cls");
							cout<<"开始!";
							Sleep(1000);
							return ; 
						}
					}printf(" 继续上次游戏 ");color(7);
					printf("║\n║");
					if (j==1) {
						color(14);
						if (KEY_DOWN('Z')) {
							soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
							clip=100; 
							ChangeSleep=10;
							for (int i=1;i<=bucount;i++)
								fbullet[i].x=0,fbullet[i].y=0,fbullet[i].di=0;
							bucount=1;
							for (int i=1;i<=29;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
									fen[i].x=0;
								fen[i].y=rand()%19;
							}
							cnt=0;
							init();
							for (int i=3;i>=1;i--) {
								system("cls");
								color(rand()%14);
								cout<<i;
								Sleep(1000);
							}
							color(rand()%14);
							system("cls");
							cout<<"开始!";
							Sleep(1000);
							return ;
						}
					}printf("    新游戏    ");color(7);
					printf("║\n║");
					if (j==2){
						color(14);
						if (KEY_DOWN('Z')) break;
					}
					printf("     退出     ");color(7);
					printf("║\n");
					printf("╰═══════╯\n");
					if (KEY_DOWN('W')&&j-1>=0) j--;
					if (KEY_DOWN('S')&&j+1<=2) j++;
					Sleep(100);
				}
			}
		}printf("  开始游戏  ");color(7);
		printf("║\n");
		printf("║");
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) introduce();
		}printf("  查看介绍  ");color(7);
		printf("║\n");
		printf("║");
		if (i==3) {
			if (KEY_DOWN('Z')) update();
			color(14);
		}printf("  更新内容  ");color(7);
		printf("║\n║");
		if (i==4) {
			if (KEY_DOWN('Z')) careful();
			color(14);
		}printf("  注意事项  ");color(7);
		printf("║\n");
		printf("╰══════╯");
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=4) i++;
		Sleep(100);
	}
}
void control() {//控制函数 
	if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
	if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
	if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
	if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
	int buco=0; 
	if (KEY_DOWN('K')) {
		while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=1;
		clip--;
	}
	if (KEY_DOWN('J')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=2;
		clip--;
	}
	if (KEY_DOWN('L')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[bucount].di=3;
		clip--;
	}
	if (KEY_DOWN('I')) {
		while (fbullet[++buco].di!=0);
		if (buco>=bucount)	bucount++;
		fbullet[buco].di=4;
		clip--;
	}
	fbullet[buco].x=soldier.x;
	fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
	if (enSleep==2) {//控制敌人移动速度 
		for (int i=1;i<=29;i++) {
			if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
				fen[i].x++;
			if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
				soldier.life--;
				if (soldier.life==0) {
					system("cls");
					out("Game Over!");
					Sleep(1000);
					system("cls");
					out("你目前的得分为:");
					cout<<cnt;
					out("分");
					system("cls");
					out("是否重新开始游戏?\nYes(y)No(n)");
					while (true) {
						if (KEY_DOWN('N'))	exit(0);
						if (KEY_DOWN('Y')) {
							cnt=0;
							soldier.x=9,soldier.y=9;//玩家初始坐标 
							for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
								fen[i].x=0;
								fen[i].y=rand()%19;
							}
							bucount=0;
							break;
						}
					}
				}
			}
			if (fen[i].x==21) {//如果到界限,那么重新生成 
				fen[i].x=0;
				fen[i].y=rand()%19;
			}
		}
		enSleep=0;
	}
}
void hit(int x,int y,int k) {
	if (Map[x][y]=='U') {//如果当前子弹击中敌人 
		cnt++;//得分累加 
		for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
			if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
				fen[j].x=0;
				fen[j].y=rand()%19;
				break;
			}
		}
		fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
		fbullet[k].y=0;
		fbullet[k].di=0;//以后方便重复利用数组 
	}
}
void bullet_move() {//子弹移动函数 
	for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
		hit(fbullet[i].x,fbullet[i].y,i);
		if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
		if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
		if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
		if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
		if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
			fbullet[i].di=0;
		hit(fbullet[i].x,fbullet[i].y,i);
	}
}
void shop() {
	int i=1;
	while (true) {
		system("cls");
		printf("游戏名字:打击敌人(作者还没想好,暂时就这个难听的吧)\n");
		printf("作者:Jack Sparrow(QQ:2256449902)\n");
		printf("游戏版本:1.4(第四个版本)\n");
		printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
		color(14);
		cout<<"================================================\n";
		color(7);
		cout<<"欢迎来到商店,您可以买如下物品:\n";
		cout<<"╭════════════╮\n║";
		if (i==1) {
			if (KEY_DOWN('Z')) {
				if (cnt<100) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=100) {
					system("cls");
					cnt-=100;
					soldier.life++;
					soldier.life%=10;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.life<<"条生命\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"   一条命(售价100分)  ";color(7);
		cout<<"║\n║";
		if (i==2) {
			if (KEY_DOWN('Z')) {
				if (cnt<10) {
					system("cls");
					cout<<"积分不够!\n";
				}
				if (cnt>=10) {
					system("cls");
					cnt-=10;
					soldier.rem+=700;
					cout<<"购买成功!\n";
					cout<<"您现在有"<<soldier.rem<<"发子弹\n";
					cout<<"您还有"<<cnt<<"分\n";
				}
				out("按下k继续");
				while (!KEY_DOWN('K'));
				system("cls");
			}
			color(14);
		}cout<<"  700发子弹(售价10分) ";color(7);
		cout<<"║\n║";
		if (i==3) {
			if (KEY_DOWN('Z')) return ;
			color(14);
		}cout<<"        退出商店        ";color(7);
		cout<<"║\n";
		cout<<"╰════════════╯\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;
		if (KEY_DOWN('S')&&i+1<=3) i++;
		Sleep(100);
	}	 
}
int main () {
	soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
	clip=100; 
	ChangeSleep=10;
	for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
		fen[i].x=0;
		fen[i].y=rand()%19;
	}
	Opening();
	color(7);
	while (true) {
		f=true;
		if (KEY_DOWN(VK_ESCAPE))
			Opening();
		enSleep++;//控制时间 
		if (KEY_DOWN('X')) {
			SetPos(26,6);
			cout<<"暂停中!";
			Sleep(1000);
			while (!KEY_DOWN('X'));
			Sleep(100);
		}
		system("cls");//清屏使其动态
		if (KEY_DOWN('P')) shop();
		init(); 
		control();
		if (KEY_DOWN('R')) {
			if (soldier.rem>=100-clip) {
				soldier.rem-=(100-clip);
				clip=100;
			}
			else {
				clip+=soldier.rem;
				soldier.rem=0;
			}
			fclip=1;
			ChangeSleep=0;
		}
		if (ChangeSleep==10) {
			if (fc==0) {
				clip=100;
				if (soldier.rem>=100) soldier.rem-=100;
				else clip=soldier.rem,soldier.rem=0;
				fc=1;
			}
			fclip=0;
			if (clip!=0) fire();
		}
		if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
		if (fclip) ChangeSleep++;
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		en_move();
		for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
			Map[fen[i].x][fen[i].y]='U';
		bullet_move();
		for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
			Map[fbullet[i].x][fbullet[i].y]='0';
		Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
		cout<<"╭═══════════════════╮\n";//输出游戏边界
		for (int i=1;i<=20;i++) {
			cout<<"║";//输出边界 
			for (int j=1;j<20;j++) {
				if (Map[i][j]=='U') color(64);//将敌人设成红色 
				if (Map[i][j]=='1') color(2);//将本人设置绿色 
				if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
				cout<<Map[i][j];
				color(7);//恢复 
			}//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
			cout<<"║";//输出边界 
			if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
			else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
			else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
			else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
			else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
			else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
			else 	  cout<<"                 ║"<<endl;
		} 
		cout<<"╰═══════════════════╯\n";//输出游戏边界
		Sleep(100);//防止游戏太卡顿或者高内存,延时0.1秒 
	}
	return 0;
}

 

王梓澳在2021-05-20 16:56:21追加了内容

帮助起个名字谢谢各位!!!!!!!


0
1
包涵宇
包涵宇
中级天翼
中级天翼

system("cls");

这个会很卡

0
0
李星泽
李星泽
初级光能
初级光能

我稍微改造了一下,希望作者见谅

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断键盘是否按下函数定义 
using namespace std;
struct player {//玩家结构体(以后可能会有多个玩家,所以定义成这样) 
    int x,y,life,rem;//每个玩家的坐标,生命,子弹剩余 
}soldier;//玩家 
struct bullet {//子弹结构体 
    int x,y,di;//子弹的当前坐标和子弹方向 
}fbullet[100000];//子弹数组 
int bucount=1;//子弹数量 
int cnt;//得分 
int enSleep;//控制敌人的移动速度 
int ChangeSleep;//控制换弹时间 
int clip;//弹夹中剩余的子弹 
bool fclip;//标记弹夹是否为空(1为空,0为不空) 
bool fc;//判断弹夹是否填充 
struct en {//敌人结构体 
    int x,y;//敌人的坐标 
}fen[40];//一共20*20,设置了30个敌人 
char Map[200][200];//地图
bool f=false;
void out(string a) {//延时输出(暂时没有用到,以后写介绍会有 
    for (int i=0;i<a.size();i++) {
        cout<<a[i];
        Sleep(50);
    }
}
void color(int a) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void SetPos(COORD a)
{
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)
{
    COORD pos={i, j};
    SetPos(pos);
}
void init() {//地图初始化函数 
    memset(Map,' ',sizeof(Map));//将地图初始化为空格更容易看见玩家和敌人 
}
void in_con() {
    color(7);
    system("cls"); 
    out("本游戏控制主要分为两块\n");
    cout<<"   ";
    out("1、玩家人物控制\n");
    cout<<"      ";
    out("玩家在游戏中字符表示为1,通过w(上)s(下)a(左)d(右)控制1上下左右移动\n"); 
    cout<<"   ";
    out("2、发射子弹控制\n");
    cout<<"      ";
    out("本游戏接近于射击游戏,所以你可以在游戏中发射子弹,通过i(上)k(下)l(右)j(左)控制子弹发射方向\n");
    out("按s召唤商店来购买东西");
    out("如果中途你想要暂停游戏,您可以按下x键,此时不可以召唤商店\n");
    out("如果你没有看介绍或者对介绍不熟悉,请按下Esc退出到主界面\n");
    out("一发弹夹为100发子弹,子弹耗尽时会自动换弹,如果中途想要换弹请按r\n");
    out("按下k跳出本轮介绍");
    while (!KEY_DOWN('K'));
}
void in_cont() {
    color(7);
    system("cls");
    out("本游戏为射击游戏,所以游戏主要分为3个部分\n");
    out("开始后你可能会看见:\n");
    init();
    Map[9][9]='1';
    for (int i=1;i<=8;i++) Map[i][9]='0';
    for (int i=1;i<=9;i++) Map[rand()%19][rand()%19]='U';
    cout<<"╭═══════════════════╮\n";//输出游戏边界
        for (int i=1;i<=20;i++) {
            cout<<"║";//输出边界 
            for (int j=1;j<20;j++) {
                if (Map[i][j]=='J') color(64);//将敌人设成红色 
                if (Map[i][j]=='l') color(2);//将本人设置绿色 
                if (Map[i][j]=='z') color(14);//将子弹设置成黄色 
                cout<<Map[i][j];
                color(7);//恢复 
            }//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
            cout<<"║";//输出边界 
            if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
            else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
            else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
            else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
            else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
            else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
            else       cout<<"                 ║"<<endl;
        } 
        cout<<"╰═══════════════════╯\n";//输出游戏边界
    out("左边单独框出来的是游戏地图,地图上有3种符号,1,u,0\n");
    out("其中1代表玩家,0代表子弹,u代表敌人,具体如何操作,请看操作介绍\n");
    out("你的目标就是控制1打u获得得分\n");
    out("游戏中会有子弹限制,初始会给出1000发子弹,游戏中会有商城设置,目前里面可以购买生命和子弹,以积分作为货币,避免子弹不够的情况\n");
    out("按下k跳出本轮介绍");
    while (!KEY_DOWN('K'));
}
void update() {
    system("cls");
    cout<<"1.0~1.1 更新了游戏介绍,但是非常简洁,比较普通\n";
    cout<<"1.1~1.2 更新游戏介绍内容和界面(当前版本未发布)\n";
    cout<<"1.2~1.3 更新了游戏界面太卡顿以至于看不清的情况,和弹夹内子弹为负数的情况bug\n";
    cout<<"1.3~1.4 作者发布以后立即发现了几个bug,不稳定程序问题解决,修复部分bug\n";color(7);
    color(14);cout<<"1.4~1.5换了游戏名";
    cout<<"按下k继续(本次更新)";
    while (!KEY_DOWN('K'));
}
void careful() {
    system("cls");
    out("游戏中现在存在少量bug,发现请与作者联系\n");
    out("祝您玩的愉快\n");
    out("按下k继续");
    while (!KEY_DOWN('K'));
}
void introduce() {
    color(7);
    Sleep(500);
    bool f=0;
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:游击战\n");
        printf("作品起名者:li xingze\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.5(第五个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        cout<<"╭══════╮\n";
        cout<<"║";
        if (i==1) {
            color(14);
            if (KEY_DOWN('Z')) in_con();
        }cout<<"  控制介绍  ";color(7);
        cout<<"║\n";
        cout<<"║";
        if (i==2) {
            color(14);
            if (KEY_DOWN('Z')) in_cont();
        }cout<<"  内容介绍  ";color(7);
        cout<<"║\n║";
        if (i==3) {
            color(14);
            if (KEY_DOWN('Z')) return ;
        }cout<<"  跳出介绍  ";color(7);
        cout<<"║\n";
        cout<<"╰══════╯\n";
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=3) i++;
        Sleep(100);
//            out("您对游戏的那些部分需要查看介绍:\n");
//            out("1、控制介绍(按下u)\n");
//            out("2、内容介绍(按下i)\n");
//            out("按下Z开始游戏"); 
    }
}
void Opening() {
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:游击战\n");
        printf("作品起名者:li xingze\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.5(第五个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        printf("╭══════╮\n");
        printf("║");
        if (i==1) {
            color(14);
            if (KEY_DOWN('Z')&&!f) {
                    if (KEY_DOWN('Z')) {
                    for (int i=3;i>=1;i--) {
                        system("cls");
                        color(rand()%14);
                        cout<<i;
                        Sleep(1000);
                    }
                    color(rand()%14);
                    system("cls");
                    cout<<"开始!";
                    Sleep(1000);
                    return ; 
                }
            }
            if (KEY_DOWN('Z')&&f) {
                color(7);
                int j=0;
                system("cls");
                Sleep(500);
                while (true) {
                    system("cls");
                    printf("游戏名字:游击战\n");
                    printf("作品起名者:li xingze\n");
                    printf("作者:Jack Sparrow(QQ:2256449902)\n");
                    printf("游戏版本:1.5(第五个版本)\n");
                    printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
                    printf("╭═══════╮\n");
                    printf("║");
                    if (!j) {
                        color(14);
                        if (KEY_DOWN('Z')) {
                            for (int i=3;i>=1;i--) {
                                system("cls");
                                color(rand()%14);
                                cout<<i;
                                Sleep(1000);
                            }
                            color(rand()%14);
                            system("cls");
                            cout<<"开始!";
                            Sleep(1000);
                            return ; 
                        }
                    }printf(" 继续上次游戏 ");color(7);
                    printf("║\n║");
                    if (j==1) {
                        color(14);
                        if (KEY_DOWN('Z')) {
                            soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
                            clip=100; 
                            ChangeSleep=10;
                            for (int i=1;i<=bucount;i++)
                                fbullet[i].x=0,fbullet[i].y=0,fbullet[i].di=0;
                            bucount=1;
                            for (int i=1;i<=29;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
                                    fen[i].x=0;
                                fen[i].y=rand()%19;
                            }
                            cnt=0;
                            init();
                            for (int i=3;i>=1;i--) {
                                system("cls");
                                color(rand()%14);
                                cout<<i;
                                Sleep(1000);
                            }
                            color(rand()%14);
                            system("cls");
                            cout<<"开始!";
                            Sleep(1000);
                            return ;
                        }
                    }printf("    新游戏    ");color(7);
                    printf("║\n║");
                    if (j==2){
                        color(14);
                        if (KEY_DOWN('Z')) break;
                    }
                    printf("     退出     ");color(7);
                    printf("║\n");
                    printf("╰═══════╯\n");
                    if (KEY_DOWN('W')&&j-1>=0) j--;
                    if (KEY_DOWN('S')&&j+1<=2) j++;
                    Sleep(100);
                }
            }
        }printf("  开始游戏  ");color(7);
        printf("║\n");
        printf("║");
        if (i==2) {
            color(14);
            if (KEY_DOWN('Z')) introduce();
        }printf("  查看介绍  ");color(7);
        printf("║\n");
        printf("║");
        if (i==3) {
            if (KEY_DOWN('Z')) update();
            color(14);
        }printf("  更新内容  ");color(7);
        printf("║\n║");
        if (i==4) {
            if (KEY_DOWN('Z')) careful();
            color(14);
        }printf("  注意事项  ");color(7);
        printf("║\n");
        printf("╰══════╯");
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=4) i++;
        Sleep(100);
    }
}
void control() {//控制函数 
    if (KEY_DOWN('W')&&soldier.x-1>=1) soldier.x--;
    if (KEY_DOWN('S')&&soldier.x+1<=20) soldier.x++;
    if (KEY_DOWN('A')&&soldier.y-1>=1) soldier.y--;
    if (KEY_DOWN('D')&&soldier.y+1<20) soldier.y++;
}
void fire() {//发射子弹函数
    int buco=0; 
    if (KEY_DOWN('K')) {
        while (fbullet[++buco].di!=0);//重复利用数组,以下同理 
        if (buco>=bucount)    bucount++;
        fbullet[buco].di=1;
        clip--;
    }
    if (KEY_DOWN('J')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[bucount].di=2;
        clip--;
    }
    if (KEY_DOWN('L')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[bucount].di=3;
        clip--;
    }
    if (KEY_DOWN('I')) {
        while (fbullet[++buco].di!=0);
        if (buco>=bucount)    bucount++;
        fbullet[buco].di=4;
        clip--;
    }
    fbullet[buco].x=soldier.x;
    fbullet[buco].y=soldier.y;
}
void en_move() {//敌人移动函数 
    if (enSleep==2) {//控制敌人移动速度 
        for (int i=1;i<=29;i++) {
            if (fen[i].x+1<=21)//如果下一步未出界,那么移动 
                fen[i].x++;
            if (Map[fen[i].x][fen[i].y]=='1') {//如果敌人碰到玩家 
                soldier.life--;
                if (soldier.life==0) {
                    system("cls");
                    out("Game Over!");
                    Sleep(1000);
                    system("cls");
                    out("你目前的得分为:");
                    cout<<cnt;
                    out("分");
                    system("cls");
                    out("是否重新开始游戏?\nYes(y)No(n)");
                    while (true) {
                        if (KEY_DOWN('N'))    exit(0);
                        if (KEY_DOWN('Y')) {
                            cnt=0;
                            soldier.x=9,soldier.y=9;//玩家初始坐标 
                            for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
                                fen[i].x=0;
                                fen[i].y=rand()%19;
                            }
                            bucount=0;
                            break;
                        }
                    }
                }
            }
            if (fen[i].x==21) {//如果到界限,那么重新生成 
                fen[i].x=0;
                fen[i].y=rand()%19;
            }
        }
        enSleep=0;
    }
}
void hit(int x,int y,int k) {
    if (Map[x][y]=='U') {//如果当前子弹击中敌人 
        cnt++;//得分累加 
        for (int j=1;j<=29;j++) {//查出是哪一个敌人被击中 
            if (fen[j].x==x&&fen[j].y==y) {//找到当前敌人并重新生成 
                fen[j].x=0;
                fen[j].y=rand()%19;
                break;
            }
        }
        fbullet[k].x=0;//将子弹放在0,0处(此处不会输出) 
        fbullet[k].y=0;
        fbullet[k].di=0;//以后方便重复利用数组 
    }
}
void bullet_move() {//子弹移动函数 
    for (int i=1;i<=bucount;i++) {//遍历每一个子弹 
        hit(fbullet[i].x,fbullet[i].y,i);
        if (fbullet[i].di==1&&fbullet[i].x+1<=21) fbullet[i].x++;
        if (fbullet[i].di==2&&fbullet[i].y-1>=0) fbullet[i].y--;
        if (fbullet[i].di==3&&fbullet[i].y+1<=21) fbullet[i].y++;
        if (fbullet[i].di==4&&fbullet[i].x-1>=0) fbullet[i].x--;
        if (fbullet[i].x==21||fbullet[i].y==0||fbullet[i].y==21||fbullet[i].x==0)
            fbullet[i].di=0;
        hit(fbullet[i].x,fbullet[i].y,i);
    }
}
void shop() {
    int i=1;
    while (true) {
        system("cls");
        printf("游戏名字:游击战\n");
        printf("作品起名者:li xingze\n");
        printf("作者:Jack Sparrow(QQ:2256449902)\n");
        printf("游戏版本:1.5(第五个版本)\n");
        printf("界面操作:w上调,s下调,黄色代表当前选中,z确定进入\n");
        color(14);
        cout<<"================================================\n";
        color(7);
        cout<<"欢迎来到商店,您可以买如下物品:\n";
        cout<<"╭════════════╮\n║";
        if (i==1) {
            if (KEY_DOWN('Z')) {
                if (cnt<100) {
                    system("cls");
                    cout<<"积分不够!\n";
                }
                if (cnt>=100) {
                    system("cls");
                    cnt-=100;
                    soldier.life++;
                    soldier.life%=10;
                    cout<<"购买成功!\n";
                    cout<<"您现在有"<<soldier.life<<"条生命\n";
                    cout<<"您还有"<<cnt<<"分\n";
                }
                out("按下k继续");
                while (!KEY_DOWN('K'));
                system("cls");
            }
            color(14);
        }cout<<"   一条命(售价100分)  ";color(7);
        cout<<"║\n║";
        if (i==2) {
            if (KEY_DOWN('Z')) {
                if (cnt<10) {
                    system("cls");
                    cout<<"积分不够!\n";
                }
                if (cnt>=10) {
                    system("cls");
                    cnt-=10;
                    soldier.rem+=700;
                    cout<<"购买成功!\n";
                    cout<<"您现在有"<<soldier.rem<<"发子弹\n";
                    cout<<"您还有"<<cnt<<"分\n";
                }
                out("按下k继续");
                while (!KEY_DOWN('K'));
                system("cls");
            }
            color(14);
        }cout<<"  700发子弹(售价10分) ";color(7);
        cout<<"║\n║";
        if (i==3) {
            if (KEY_DOWN('Z')) return ;
            color(14);
        }cout<<"        退出商店        ";color(7);
        cout<<"║\n";
        cout<<"╰════════════╯\n";
        if (KEY_DOWN('W')&&i-1!=0) i--;
        if (KEY_DOWN('S')&&i+1<=3) i++;
        Sleep(100);
    }     
}
int main () {
    soldier.x=9,soldier.y=9,soldier.life=9,soldier.rem=1000;//玩家初始坐标,生命,子弹数量 
    clip=100; 
    ChangeSleep=10;
    for (int i=1;i<=9;i++) {//生成第一波敌人(目前只是会从上面生成,以后会从四面生成 
        fen[i].x=0;
        fen[i].y=rand()%19;
    }
    Opening();
    color(7);
    while (true) {
        f=true;
        if (KEY_DOWN(VK_ESCAPE))
            Opening();
        enSleep++;//控制时间 
        if (KEY_DOWN('X')) {
            SetPos(26,6);
            cout<<"暂停中!";
            Sleep(1000);
            while (!KEY_DOWN('X'));
            Sleep(100);
        }
        system("cls");//清屏使其动态
        if (KEY_DOWN('P')) shop();
        init(); 
        control();
        if (KEY_DOWN('R')) {
            if (soldier.rem>=100-clip) {
                soldier.rem-=(100-clip);
                clip=100;
            }
            else {
                clip+=soldier.rem;
                soldier.rem=0;
            }
            fclip=1;
            ChangeSleep=0;
        }
        if (ChangeSleep==10) {
            if (fc==0) {
                clip=100;
                if (soldier.rem>=100) soldier.rem-=100;
                else clip=soldier.rem,soldier.rem=0;
                fc=1;
            }
            fclip=0;
            if (clip!=0) fire();
        }
        if (clip==0&&fclip==0) ChangeSleep=0,fclip=1,fc=0;
        if (fclip) ChangeSleep++;
        Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
        en_move();
        for (int i=1;i<=29;i++)//将敌人生成在屏幕上(后面子弹判断需要) 
            Map[fen[i].x][fen[i].y]='U';
        bullet_move();
        for (int i=1;i<=bucount;i++)//将子弹生成在屏幕上  
            Map[fbullet[i].x][fbullet[i].y]='0';
        Map[soldier.x][soldier.y]='1';//将玩家生成在屏幕上 
        cout<<"╭═══════════════════╮\n";//输出游戏边界
        for (int i=1;i<=20;i++) {
            cout<<"║";//输出边界 
            for (int j=1;j<20;j++) {
                if (Map[i][j]=='U') color(64);//将敌人设成红色 
                if (Map[i][j]=='1') color(2);//将本人设置绿色 
                if (Map[i][j]=='0') color(14);//将子弹设置成黄色 
                cout<<Map[i][j];
                color(7);//恢复 
            }//输出地图(由于子弹遇到边界目前会卡在边界上,所以少输出头尾
            cout<<"║";//输出边界 
            if (i==1) printf("剩余生命:%-2d     ║\n",soldier.life);
            else if (i==2) cout<<"得分 :"<<setw(8)<<cnt<<"分 ║"<<endl;
            else if (i==3) cout<<setw(3)<<clip<<setw(6)<<"/"<<setw(5)<<soldier.rem<<"   ║"<<endl;
            else if (i==4&&fclip&&soldier.rem!=0) cout<<"    换弹中...    ║"<<endl;
            else if (i==6&&soldier.rem==0) cout<<"    子弹耗尽!    ║"<<endl; 
            else if (i==7&&soldier.rem==0) cout<<"请尽快到商城购买!║"<<endl;
            else       cout<<"                 ║"<<endl;
        } 
        cout<<"╰═══════════════════╯\n";//输出游戏边界
        Sleep(100);//防止游戏太卡顿或者高内存,延时0.1秒 
    }
    return 0;


 

0
0
0
0
李子杰
李子杰
资深光能
资深光能

NB!!!

膜拜大佬!!!

0
被禁言 张一宸
张一宸
新手守护
新手守护

厉害,不过你追加这么多内容让人感觉很难复制。。。

0
李仰坤
李仰坤
新手守护
新手守护

厉害啊👍👍👍👍👍👍

0
0
0
0
我要回答