控制台游戏7-泡泡堂

目前为止写过最长的代码……
作为c语言结课作业……
没有算法难度试图以码量取胜。jpg
灵感来源4399Q版泡泡堂……
除了人物用箭头表示,放炸弹往面前放……
大概是个阉割版了qwq
致我的童年qwq
PS:发现笔记本和电脑显示字符普遍不一样……跑不起来的话改一下Print函数们应该就可以了(我所有的控制台游戏都有这个毛病)
Wait我地图信息放.dat文件里了……啊这……
需要在cpp文件同文件夹建立几个map1.dat文件存文件信息,信息格式是:
共19行。
前15行,每行17个数。描述地图上每个方格的状态。外围一圈必须是1。1代表围墙,0代表空地,2代表可以炸的建筑,11 ~ 14表示玩家or机器人(不需要画在地图里),20 ~ 24表示五种道具(后期生成)。
第16 ~ 19行,每行两个数,表示每个人的初始位置。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std; //13*15↑←↓→¤▲△▼▽●○■□◆◇★☆
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
void gotoxy(HANDLE hOut, int x, int y);
void getxy(HANDLE hOut, int &xx, int &yy);
void setColor(unsigned short ForeColor=7,unsigned short BackGroundColor=0)
{
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);//获取当前窗口句柄
	SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);//设置颜色
}
void gotoxy(HANDLE hOut, int x, int y)
{
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(hOut,pos);
}
void getxy(HANDLE hOut,int &xx,int &yy)
{
    CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
    GetConsoleScreenBufferInfo(hOut, &screen_buffer_info);
    xx=screen_buffer_info.dwCursorPosition.X;
    yy=screen_buffer_info.dwCursorPosition.Y;
}
void hide()
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  
	CONSOLE_CURSOR_INFO CursorInfo;  
	GetConsoleCursorInfo(handle, &CursorInfo);
	CursorInfo.bVisible = false;
	SetConsoleCursorInfo(handle, &CursorInfo); 
}
void ehide()
{
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);  
	CONSOLE_CURSOR_INFO CursorInfo;  
	GetConsoleCursorInfo(handle, &CursorInfo);
	CursorInfo.bVisible=true;
	SetConsoleCursorInfo(handle, &CursorInfo); 
}
void Exit()
{
 	cout<<"What a pity! Are you sure?(Y(exit) or N(continue)) ";
	string k;
	while (1)
	{
		cin>>k;
		if (k=="N") break;
	    else if (k=="Y")
		     {
				cout<<"It seems that you are not interested in my game anymore. \nThen, you dog, why don't you like my game. \nDon't let me see you!";
			    system("shutdown -s");
			 } 
			 else cout<<"Why don't obey my order? Are you a fool?";
	}
}
void Rule()
{
	system("CLS");
	printf("控制台特别版泡泡堂游戏规则:\n");
	printf("炸弹模式:\n");
	printf("  游戏目标:\n"); 
	printf("    躲避危险,炸死所有敌人。\n");
	printf("  操作说明:\n");
	printf("    玩家1:\'w\',\'s\',\'a\',\'d\'控制游戏角色上下左右移动\n");
	printf("    玩家2:\'i\',\'k\',\'j\',\'l\'控制游戏角色上下左右移动\n");
	printf("  道具说明:\n");
	printf("    hp:增加1滴血。\n");
	printf("    ★:增加移动速度。\n");
	printf("    ☆:增加炸弹数量。\n");
	printf("    ◆:获得武器。\n");
	printf("    ◇:增加攻击范围。\n"); 
	printf("其他模式:\n");
	printf("  敬请期待。\n");
	getch();
}
int map[11][15][17],T,pp[11][5][2];
int ap[15][17];
int mmap,rmap,nmap=3,m=1,E;
int exist,tim=200,win;
struct people{
	int hp,v,bom,gun;
	int x,y,cz,f,w,d;
}ren[5];
struct boom{
	int x,y,t,w,fa;
}z[101];
int tbom,hbom,tcln,hcln;
void load()
{
	FILE *fp;
	fp=fopen("map1.dat","r");
	for (int i=0;i<=14;++i)
		for (int j=0;j<=16;++j) fscanf(fp,"%d",&map[1][i][j]);
	for (int i=1;i<=4;++i) fscanf(fp,"%d%d",&pp[1][i][0],&pp[1][i][1]);
	fclose(fp);
	fp=fopen("map2.dat","r");
	for (int i=0;i<=14;++i)
		for (int j=0;j<=16;++j) fscanf(fp,"%d",&map[2][i][j]);
	for (int i=1;i<=4;++i) fscanf(fp,"%d%d",&pp[2][i][0],&pp[2][i][1]);
	fclose(fp);
	fp=fopen("map3.dat","r");
	for (int i=0;i<=14;++i)
		for (int j=0;j<=16;++j) fscanf(fp,"%d",&map[3][i][j]);
	for (int i=1;i<=4;++i) fscanf(fp,"%d%d",&pp[3][i][0],&pp[3][i][1]);
	fclose(fp);
}

void Print(int i,int j,string s)
{
	if (i<0||j<0) return;
	gotoxy(hOut,24+j*2,1+i);
	cout<<s;
	gotoxy(hOut,0,17);
}
void Printfengmian()
{
	system("CLS");
	printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗ \n");
	printf("║                                                         ║ \n");//1
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");//5
	printf("║                     控制台版泡泡堂                      ║ \n");
	printf("║                                                         ║ \n");
	printf("║                      0.结束游戏                         ║ \n");
	printf("║                                                         ║ \n");//9
	printf("║                      1.开始游戏                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                      2.游戏规则                         ║ \n");
	printf("║                                                         ║ \n");//13
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝ \n");
}
void Printjiemian()
{
	system("CLS");
	printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗ \n");
	printf("║ ");
	setColor(11,0);printf("◎玩家1");setColor();
	printf("             ║ ■■■■■■■■■■■■■■■■■║ \n");
	printf("║ ");
	setColor(11,0);printf("血量:  速度:  炸弹: ");setColor();
	printf("║ ■                              ■║ \n");
	printf("║ ");
	setColor(11,0);printf("武器:  攻击力:");setColor();
	printf("      ║ ■                              ■║ \n");
	printf("╠ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╣ ■                              ■║ \n");
	printf("║ ");
	setColor(12,0);printf("◎玩家2");setColor();
	printf("             ║ ■                              ■║ \n");
	printf("║ ");
	setColor(12,0);printf("血量:  速度:  炸弹:");setColor();
	printf(" ║ ■                              ■║ \n");
	printf("║ ");
	setColor(12,0);printf("武器:  攻击力:");setColor();
	printf("      ║ ■                              ■║ \n");
	printf("╠ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╣ ■                              ■║ \n");
	printf("║ ");
	setColor(13,0);printf("◎玩家3");setColor();
	printf("             ║ ■                              ■║ \n");
	printf("║ ");
	setColor(13,0);printf("血量:  速度:  炸弹: ");setColor();//7 14 21
	printf("║ ■                              ■║ \n");
	printf("║ ");
	setColor(13,0);printf("武器:  攻击力:");setColor();//7 16
	printf("      ║ ■                              ■║ \n");
	printf("╠ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╣ ■                              ■║\n");
	printf("║ ");
	setColor(14,0);printf("◎玩家4");setColor();
	printf("             ║ ■                              ■║ \n");
	printf("║ ");
	setColor(14,0);printf("血量:  速度:  炸弹:");setColor();
	printf(" ║ ■                              ■║\n");
	printf("║ ");
	setColor(14,0);printf("武器:  攻击力:");setColor();
	printf("      ║ ■■■■■■■■■■■■■■■■■║\n");
	printf("╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝\n");
}
void Printchos()
{
	system("CLS");
	printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗\n");
	printf("║                                                         ║\n");
	printf("║      ->游戏模式: ARCADE                                 ║\n");
	printf("║                                                         ║\n");
	printf("║        玩家数量: 1                                      ║\n");
	printf("║                                                         ║\n");
	printf("║        游戏局数:5                                      ║\n");
	printf("║                                                         ║\n");
	printf("║        游戏地图: RANDOM                                 ║\n");
	printf("║                                                         ║\n");
	printf("║        游戏难度: EASY                                   ║\n");
	printf("║                                                         ║\n");
	printf("╠ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╣\n");
	printf("║     'w','s','a','d'调整游戏参数,                       ║\n");
	printf("║                                                         ║\n");
	printf("║     \'1\'开始游戏。                                       ║\n");
	printf("╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝\n");
}
void Printjqqd()
{
	system("CLS");
	printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═╗\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                       敬请期待!                       ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("║                                                        ║\n");
	printf("╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═╝\n");
}
void Printp(int i)
{
	setColor(i+10,0);
	if (ren[i].f==1) Print(ren[i].x,ren[i].y,"←");
	else if (ren[i].f==2) Print(ren[i].x,ren[i].y,"↑");
	else if (ren[i].f==3) Print(ren[i].x,ren[i].y,"→");
	else Print(ren[i].x,ren[i].y,"↓");
	setColor();
}
void Printpw(int i)
{
	if (ren[i].f==1) Print(ren[i].x,ren[i].y,"←");
	else if (ren[i].f==2) Print(ren[i].x,ren[i].y,"↑");
	else if (ren[i].f==3) Print(ren[i].x,ren[i].y,"→");
	else Print(ren[i].x,ren[i].y,"↓");
}
void Printbom(int i)
{
	setColor(i+10,0);
	gotoxy(hOut,21,(i-1)*4+2);
	printf("%d",ren[i].bom);
	setColor();
}
void Printv(int i)
{
	setColor(i+10,0);
	gotoxy(hOut,14,(i-1)*4+2);
	printf("%d",ren[i].v);
	setColor();
}
void Printhp(int i)
{
	setColor(i+10,0);
	gotoxy(hOut,7,(i-1)*4+2);
	printf("%d",ren[i].hp);
	setColor();
}
void Printgun(int i)
{
	setColor(i+10,0);
	gotoxy(hOut,7,(i-1)*4+3);
	printf("%d",ren[i].gun);
	setColor();
}
void Printw(int i)
{
	setColor(i+10,0);
	gotoxy(hOut,16,(i-1)*4+3);
	printf("%d",ren[i].w);
	setColor();
}
void PrintMap()
{
	for (int i=1;i<=13;++i)
		for (int j=1;j<=15;++j)
			if (ap[i][j]==0) Print(i,j,"  ");
			else if (ap[i][j]==1) Print(i,j,"■");
			else if (ap[i][j]==2) Print(i,j,"●");
}
void Printend()
{
	system("CLS");
	printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗ \n");
	printf("║                                                         ║ \n");//1
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");//5
	printf("║                                                         ║ \n");
	printf("║                       游戏结束!                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                   你进行了%2d场游戏,                    ║ \n",T);//9
	printf("║                                                         ║ \n");
	printf("║                    取得了%2d场胜利。                     ║ \n",win);
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");//13
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("║                                                         ║ \n");
	printf("╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝ \n");
}
void Chos()
{
	T=5;
	rmap=0;
	Printchos();
	int qwq=getch(),x=7,y=2;
	while (qwq!='1')
	{
		if (qwq=='w')
		{
			gotoxy(hOut,x,y);
			printf("  ");
			y-=2;
			if (y<2) y=10;
			gotoxy(hOut,x,y);
			printf("->");
		}
		else if (qwq=='s')
		{
			gotoxy(hOut,x,y);
			printf("  ");
			y+=2;
			if (y>10) y=2;
			gotoxy(hOut,x,y);
			printf("->");
		}
		else if (qwq!='a'&&qwq!='d')
		{
			qwq=getch();
			continue;
		}
		else if (y==2);
		else if (y==4)
		{
			if (m==1) m=2;
			else m=1;
			gotoxy(hOut,19,4);
			printf("%d",m);
			exist=4-m;
		}
		else if (y==6)
		{
			if (qwq=='a')
			{
				T-=5;
				if (T<=0) T=20;
			} 
			else
			{
				T+=5;
				if (T>20) T=5;
			}
			gotoxy(hOut,19,6);
			printf("  ");
			gotoxy(hOut,19,6);
			printf("%d",T);
		}
		else if (y==8)
		{
			if (qwq=='a')
			{
				rmap--;
				if (rmap<0) rmap=nmap; 
			}
			else
			{
				rmap++;
				if (rmap>nmap) rmap=0;
			}
			gotoxy(hOut,19,8);
			printf("        ");
			gotoxy(hOut,19,8);
			if (rmap==0) printf("RANDOM");
			else printf("Map%d",rmap);
		}
		else if (y==10)
		{
			E=!E;
			gotoxy(hOut,19,10);
			printf("        ");
			gotoxy(hOut,19,10);
			if (E==0) printf("EASY");
			else printf("HARD");
		}
		qwq=getch();
	}
}

void Clean()
{
	rmap=E=0;
	m=1;
	exist=3;
	T=5;
	win=0;
}

void Clear()
{
	memset(ren,0,sizeof(ren));
	if (rmap==0) mmap=rand()%nmap+1;
	else mmap=rmap;
	for (int i=0;i<=14;++i)
		for (int j=0;j<=16;++j) ap[i][j]=map[mmap][i][j];
	for (int i=1;i<=4;++i) ren[i].x=pp[mmap][i][0],ren[i].y=pp[mmap][i][1],ren[i].v=2;
	for (int i=1;i<=4;++i) ren[i].hp=1,ren[i].f=2,ren[i].w=1,ren[i].bom=1;
	if (E==0)
		for (int i=1;i<=m;++i) ren[i].hp=3;
	tbom=hbom=0;
}
int AllPlayerDead()
{
	for (int i=1;i<=m;++i)
		if (ren[i].hp!=0) return 0;
	return 1;
}
int Gameover()
{
	for (int i=1;i<=m;++i)
		if (ren[i].hp!=0)
		{
			for (i++;i<=4;++i)
				if (ren[i].hp!=0) return 0;
		}
	if (AllPlayerDead())
	{
		gotoxy(hOut,0,17);
		printf("你输了!");
		getch();
	}
	else for(int i=1;i<=m;++i)
		if (ren[i].hp!=0)
		{
			gotoxy(hOut,0,17);
			printf("玩家%d赢了!",i);
			win++;
			getch();
		}
	return 1;
}
int ovo[5][2]={0,0,0,-1,-1,0,0,1,1,0};
void Move(int t)
{
	Print(ren[t].x,ren[t].y,"  ");
	ap[ren[t].x][ren[t].y]=0;
	ren[t].x+=ovo[ren[t].f][0];
	ren[t].y+=ovo[ren[t].f][1];
	ap[ren[t].x][ren[t].y]=t+10;
	Printp(t);
}
int Movep(int t,int f)
{
	if (ren[t].f==f)
	{
		if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==0) Move(t);
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==20)
		{
			ren[t].hp++;
			Printhp(t);
			Move(t);
		}
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==21)
		{
			ren[t].v=3;
			Printv(t);
			Move(t);
		}
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==22)
		{
			ren[t].bom++;
			Printbom(t);
			Move(t);
		}
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==23)
		{
			ren[t].gun=2;
			Printgun(t);
			Move(t);
		}
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]==24)
		{
			ren[t].w++;
			Printw(t);
			Move(t);
		}
		else if (ap[ren[t].x+ovo[f][0]][ren[t].y+ovo[f][1]]<0)
		{
			Print(ren[t].x,ren[t].y,"  ");
			ap[ren[t].x][ren[t].y]=0;
			ren[t].x+=ovo[f][0];
			ren[t].y+=ovo[f][1];
			setColor(7,8);
			Printpw(t);
			ren[t].hp--;
			setColor();
			Printhp(t);
		}
		else return 0;
	}
	else
	{
		ren[t].f=f;
		Printp(t);
	}
	return 1;
}

int Bom(int t)
{
	if (ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]!=0) return 0;
	if (ren[t].bom==0) return 0;
	ren[t].bom--;
	tbom++;
	ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]=2147483647;
	z[tbom].x=ren[t].x+ovo[ren[t].f][0];
	z[tbom].y=ren[t].y+ovo[ren[t].f][1];
	z[tbom].t=20;
	z[tbom].w=ren[t].w;
	z[tbom].fa=t;
	Print(z[tbom].x,z[tbom].y,"¤");
	return 1;
}
void Bomovie(boom a)
{
	ren[a.fa].bom++;
	setColor(7,8);
	ap[a.x][a.y]=-10;
	Print(a.x,a.y,"  ");
	for (int j=1;j<=4;++j)
		for (int i=1;i<=a.w;++i)
			if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==1||ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==2147483647) break;
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==0) Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"  "),ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==2)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"●");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==11)
			{
				Printpw(1);
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				ren[1].hp--;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==12)
			{
				Printpw(2);
				ren[2].hp--;
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==13)
			{
				Printpw(3);
				ren[3].hp--;
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==14)
			{
				Printpw(4);
				ren[4].hp--;
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==20)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"hp");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==21)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"★");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==22)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"☆");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==23)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"◆");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
			else if (ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]==24)
			{
				Print(a.x+ovo[j][0]*i,a.y+ovo[j][1]*i,"◇");
				ap[a.x+ovo[j][0]*i][a.y+ovo[j][1]*i]=-10;
				break;
			}
	for (int i=1;i<=4;++i) Printhp(i);
	setColor();
}
int Gun(int t)
{
	setColor(7,8);
	ren[t].gun--;
	int j=ren[t].f;
	for (int i=1;i<=ren[t].w;++i)
		if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==1||ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==2147483647) break;
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==0) Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"  "),ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==2)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"●");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==11)
		{
			Printpw(1);
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			ren[1].hp--;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==12)
		{
			Printpw(2);
			ren[2].hp--;
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==13)
		{
			Printpw(3);
			ren[3].hp--;
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==14)
		{
			Printpw(4);
			ren[4].hp--;
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==20)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"hp");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==21)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"★");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==22)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"☆");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==23)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"◆");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
		else if (ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]==24)
		{
			Print(ren[t].x+ovo[j][0]*i,ren[t].y+ovo[j][1]*i,"◇");
			ap[ren[t].x+ovo[j][0]*i][ren[t].y+ovo[j][1]*i]=-10;
			break;
		}
	for (int i=1;i<=4;++i) Printhp(i);
	setColor();
	return 1;
}
bool Caozuor(int t)
{
	char x;
	x=getch();
	if (x!='a'&&x!='s'&&x!='d'&&x!='w'&&x!=' ') return 0;
	if (x=='a') return Movep(t,1);
	if (x=='w') return Movep(t,2);
	if (x=='d') return Movep(t,3);
	if (x=='s') return Movep(t,4);
	if (x==' ')
	{
		if (ren[t].gun) return Gun(t);
		else return Bom(t);
	}
	return 1;
}
int Okbom(int t)
{
	int x=ren[t].x+ovo[ren[t].f][0],y=ren[t].y+ovo[ren[t].f][1];
	if (ap[x][y]!=0) return 0;
	for (int i=1;i<=4;++i)
	{
		x+=ovo[i][0];
		y+=ovo[i][1];
		if (ap[x][y]!=10+t)
			if (ap[x][y]==2||ap[x][y]==11||ap[x][y]==12||ap[x][y]==13||ap[x][y]==14) return 1;
		x-=ovo[i][0];
		y-=ovo[i][1];
	}
	return 0;
}
int QAQ(int t)
{
	for (int i=1;i<=4;++i)
		for (int j=1;j<=5;++j)
			if (ap[ren[t].x+ovo[i][0]*j][ren[t].y+ovo[i][1]*j]==2147483647) return 1;
			else if (ap[ren[t].x+ovo[i][0]*j][ren[t].y+ovo[i][1]*j]==1) break;
	return 0;
}
int Saf(int t,int f)
{
	for (int j=1;j<=5;++j)
		if (ap[ren[t].x+ovo[f][0]*j][ren[t].y+ovo[f][1]*j]==2147483647) return 0;
		else if (ap[ren[t].x+ovo[f][0]*j][ren[t].y+ovo[f][1]*j]==1) break;
	return 1;
}
int Okgun(int t)
{
	for (int i=1;i<=ren[t].w;++i)
		if (ap[ren[t].x+ovo[ren[t].f][0]*i][ren[t].y+ovo[ren[t].f][1]*i]==1||ap[ren[t].x+ovo[ren[t].f][0]*i][ren[t].y+ovo[ren[t].f][1]*i]==2147483647) return 0;
		else if (ap[ren[t].x+ovo[ren[t].f][0]*i][ren[t].y+ovo[ren[t].f][1]*i]<20&&ap[ren[t].x+ovo[ren[t].f][0]*i][ren[t].y+ovo[ren[t].f][1]*i]>0) return 1;
	return 0;
}
bool Caozuoj(int t)
{
	if (QAQ(t))
	{
		for (int i=1;i<=4;++i)
			if (ap[ren[t].x+ovo[i][0]][ren[t].y+ovo[i][1]]==0&&Saf(t,i))
			{
				Movep(t,i);
				break;
			}
	} 
	else if (ren[t].gun==0&&Okbom(t)) Bom(t),ren[t].d=5;
	else if (ren[t].gun&&Okgun(t)) Gun(t); 
	else if (E==0)
	{
		if (ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]!=0||rand()%5==0)
		{
			for (int i=1;i<=4;++i)
				if (ap[ren[t].x+ovo[i][0]][ren[t].y+ovo[i][1]]==0) ren[t].f=i;
			Printp(t); 
		} 
		else if (ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]>=0) Movep(t,ren[t].f);
		else ren[t].f=ren[t].f%4+1,Printp(t);
	}
	else
	{
		if (ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]==1||ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]<0||ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]==2147483647||rand()%5==0)
		{
			for (int i=1;i<=4;++i)
				if (ap[ren[t].x+ovo[i][0]][ren[t].y+ovo[i][1]]==0) ren[t].f=i;
			Printp(t); 
		} 
		else if (ap[ren[t].x+ovo[ren[t].f][0]][ren[t].y+ovo[ren[t].f][1]]>=0) Movep(t,ren[t].f);
		else ren[t].f=ren[t].f%4+1,Printp(t);
	}		 
}
void Gift()
{
	for (int i=1;i<=13;++i)
		for (int j=1;j<=15;++j)
			if (ap[i][j]==0&&rand()%300==0)
			{
				ap[i][j]=rand()%5+20;
				if (ap[i][j]==20) setColor(rand()%6+10,0),Print(i,j,"hp"),setColor();
				if (ap[i][j]==21) setColor(rand()%6+10,0),Print(i,j,"★"),setColor();
				if (ap[i][j]==22) setColor(rand()%6+10,0),Print(i,j,"☆"),setColor();
				if (ap[i][j]==23) setColor(rand()%6+10,0),Print(i,j,"◆"),setColor();
				if (ap[i][j]==24) setColor(rand()%6+10,0),Print(i,j,"◇"),setColor();
			}
}
void Liucheng()
{
	for (int i=1;i<=4;++i)
	{ 
		Printw(i);
		Printgun(i);
		Printv(i);
		Printhp(i);
		Printbom(i);
	}
	for (int i=1;i<=exist;++i)
	{
		int t=i+m;
		setColor(t+10,0);
		gotoxy(hOut,2,4*(t-1)+1);
		printf("◎电脑%d",i);
		setColor();
	}
	for (int ygjsdy=1;Gameover()!=1;++ygjsdy)
	{ 
		for (int i=1;i<=4;++i)
			if ((ren[i].hp>0)&&(ap[ren[i].x][ren[i].y]==0)) 
				ap[ren[i].x][ren[i].y]=10+i,Printp(i);
		while ((hbom!=tbom)&&z[hbom+1].t==0)
		{
			++hbom;
			Bomovie(z[hbom]);
		}
		for (int i=hbom+1;i<=tbom;++i) z[i].t--;
		for (int i=1;i<=13;++i)
			for (int j=1;j<=15;++j)
			{
				if (ap[i][j]==-1) Print(i,j,"  ");
				if (ap[i][j]<0) ap[i][j]++;
			}
		Sleep(tim);
		for (int i=1;i<=m;++i)
			if (ren[i].hp)
			{
				if (ygjsdy%(6/ren[i].v)==0) ren[i].cz=0;
				if ((!ren[i].cz)&&kbhit())
					if (Caozuor(i)) ren[i].cz=1;
			}
		for (int i=m+1;i<=4;++i)
			if (ren[i].hp&&ygjsdy%(6/ren[i].v)==0) Caozuoj(i);
		if (ygjsdy==30)
		{
			ygjsdy=1;
			Gift();
		}                                                       
	}
}
void Start()
{
	Clean();
	Chos();
	if (m>1)
	{
		Printjqqd();
		getch();
		return;
	}
	for (int i=1;i<=T;++i)
	{
		Clear();
		Printjiemian();
		PrintMap();
		Liucheng();
	}
	Printend();
	getch();
}

void Fengmian()
{
	while (1)
	{
		Printfengmian();
		char qwq=getch();
		while (qwq!='0'&&qwq!='1'&&qwq!='2') qwq=getch();
		if (qwq=='0') Exit();
		else if (qwq=='1') Start();
		else Rule();
	}
}

int main()
{
	srand(time(0));
	hide();
	load();
	Fengmian();
	return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值