墙战(WALL WAR)

来源https://blog.csdn.net/c20182030/article/details/70742638#comments

 挺好玩的哈哈哈

代码:

#include<cstdio>
#include<cstring>
#include<ctime>
#include<conio.h>
#include<cstdlib>
#include<windows.h>
char side_updown[50];
char side_leftright[50];
char map[50][50],c;
int Fight=0;
double cd[50][3];
double allcd[50]= {0,0.75,2.5,5,4};
int size,wall;
int Skill[3][3];
struct Player
{
	int x,y;
	int face;
	char o;
} p[3];
void please()
{
	puts("按任意键启动.");
	char c=getch();
	Fight=(c=='9');
	puts("\n墙战规则:");
	puts("如果你想赢,那么把敌人怼进墙里.");
	puts("");
	Sleep(500);
	puts("Player 1: 用 WASD 移动 , X C Z 使技能.");
	puts("Player 2: 用 8456 移动 , 0 1 2 使技能.");
	puts("");
	Sleep(500);
	puts("技能X(0)意味着在你面前放置一堵墙,如果你的敌人在那里,他将被击退。它的间隔是0.75秒.");
	puts("技能1意味着清理你周围的所有墙壁,而不是边界。你也可以击退你的敌人。其间隔为2.5s.");
	puts("技能2意味着冲5个单位长度,直到你不能继续前进。它的间隔是5s.");
	puts("技能3意味着清理你面前的两堵墙,不管是什么样的墙,而不是边界,如果它是你的敌人,你也可以击退它。它的间隔是4s。.");
	puts("");
	Sleep(1000);
	puts("");
	int a;
	puts("Player One : 请选择你的技能: ");
	Sleep(500);
	puts("\n技能一,用C选择 :");
	scanf("%d",&a);
	Skill[1][1]=a;
	puts("\n技巧二,用Z选择 :");
	scanf("%d",&a);
	Skill[1][2]=a;
	puts("\nPlayer Two : 请选择你的技能: ");
	Sleep(500);
	puts("\n技能一,用1选择 :");
	scanf("%d",&a);
	Skill[2][1]=a;
	puts("\n技巧二,用2选择 :");
	scanf("%d",&a);
	Skill[2][2]=a;
}
void init_wall()
{
	wall=rand()%14+2;
	if(Fight) wall=20;
	for(int i=0; i<=wall; i++) side_updown[i]='#';
	for(int i=0; i<=wall; i++)
	{
		if(i==0 or i==wall) side_leftright[i]='#';
		else side_leftright[i]=' ';
	}
}
void Set(int t,int x,int y)
{
	map[p[t].x][p[t].y]=' ';
	p[t].x=x;
	p[t].y=y;
	map[x][y]=p[t].o;
}
void init_map()
{
	for(int i=1; i<=size; i++)
	{
		if(i==1 or i==size) strcpy(map[i],side_updown);
		else strcpy(map[i],side_leftright);
	}
	p[1].x=p[1].y=p[2].x=p[2].y=0;
	p[1].o='X';
	p[2].o='O';
	Set(1,2,1);
	Set(2,size-1,wall-1);
}
int choose()
{
	if(map[p[1].x][p[1].y]=='#' or map[p[1].x][p[1].y]=='*') return 1;
	if(map[p[2].x][p[2].y]=='#' or map[p[2].x][p[2].y]=='*') return 2;
	return 0;
}
void GameEnd(int t)
{
	puts("GAME OVER");
	Sleep(500);
	printf("Player %d is out of the wall. You lose!!!!!\n",t);
	printf("Player %d wins !!!!!!!!!!!\n",t==1 ? 2 : 1);
	Sleep(1500);
}
void put_map()
{
	system("cls");
	int k=choose();
	for(int i=1; i<=size; i++)
		puts(map[i]);
	puts("");
	printf("Player One: (%d,%d)\n",p[1].x,p[1].y);
	printf("Player Two: (%d,%d)\n",p[2].x,p[2].y);
	if(k==1) GameEnd(1);
	else if(k==2) GameEnd(2);
}
bool check(int x,int y)
{
	return map[x][y]!='#' and map[x][y]!='X' and map[x][y]!='O' and map[x][y]!='*';
}
void set_wall()
{
	int k=rand()%(wall*size*3/7);
	if(Fight) k=0;
	while(k)
		while(1)
		{
			int x=rand()%(size-1)+1;
			int y=rand()%(wall-2)+1;
			if(check(x,y))
			{
				map[x][y]='#',k--;
				break;
			}
		}
}
int dx[10]= {0,-1,0,1,0,1,1,-1,-1};
int dy[10]= {0,0,-1,0,1,1,-1,1,-1};
void move(int t,int go)
{
	int px=p[t].x+dx[go],py=p[t].y+dy[go];
	p[t].face=go;
	if(check(px,py)) Set(t,px,py);
}
bool D(int t,int n)
{
	if(cd[t][n]==0)
	{
	    cd[t][n]=clock();
		return true;
    }  
	if((clock()-cd[t][n])/1000>=allcd[n])
	{
		cd[t][n]=0;
		return true;
	}
	return false;
}
void A(int t)
{
	int go=p[t].face;
	int px=p[t].x+dx[go],py=p[t].y+dy[go];
	if(p[t].face and map[px][py]!='#' and map[px][py]!='*')
	{
		if(map[px][py]=='X') move(1,p[t].face);
		if(map[px][py]=='O') move(2,p[t].face);
		map[px][py]='*';
		put_map();
	}
}
void B(int t)
{
	for(int i=1; i<=8; i++)
	{
		int px=p[t].x+dx[i],py=p[t].y+dy[i];
		if(map[px][py]=='X') move(1,(p[1].face+2)%4+1);
		if(map[px][py]=='O') move(2,(p[2].face+2)%4+1);
		if(map[px][py]=='*' and px!=1 and px!=size and py!=0 and py!=wall)
			map[px][py]=' ';
		put_map();
	}
}
void C(int t)
{
	int go=p[t].face;
	for(int i=1; i<=5; i++)
	{
		move(t,go);
		put_map();
	}
}
void E(int t)
{
	int go=p[t].face;
	int px=p[t].x+dx[go],py=p[t].y+dy[go];
	if(px!=1 and px!=size and py!=0 and py!=wall)
	{
		int f=0;
		if(map[px][py]=='X')	p[1].face=go,move(1,go),f=1;
		if(map[px][py]=='O')	p[2].face=go,move(2,go),f=2;
		if(map[px][py]!='X' and map[px][py]!='O') map[px][py]='@';
		if(f) C(f);
		put_map();
		put_map();
		put_map();
		put_map();
		put_map();
		if(map[px][py]=='@') map[px][py]=' ';
		put_map();
	}
	int tx=px+dx[go],ty=py+dy[go];
	if(tx!=1 and tx!=size and ty!=0 and ty!=wall)
	{
		int f=0;
		if(map[tx][ty]=='X')	p[1].face=go,move(1,go),f=1;
		if(map[tx][ty]=='O')	p[2].face=go,move(2,go),f=2;
		if(map[tx][ty]!='X' and map[tx][ty]!='O') map[tx][ty]='@';
		if(f) C(f);
		put_map();
		put_map();
		put_map();
		put_map();
		put_map();
		if(map[tx][ty]=='@') map[tx][ty]=' ';
		put_map();
	}
}
void S(int t,int a)
{
	int k=Skill[t][a];
	if(D(t,k))
	{
		if(k==1) B(t);
		if(k==2) C(t);
		if(k==3) E(t);
	}
}
int main()
{
	srand((unsigned)time(NULL));
	please();
	init_wall();
	size=(rand()%10+3)+2;
	if(Fight) size=3;
	memset(map,0,sizeof map);
	init_map();
	set_wall();
	put_map();
	while(c=getch())
	{
		if(choose()) return 0;
		if(c=='W' or c=='w') move(1,1);
		if(c=='A' or c=='a') move(1,2);
		if(c=='S' or c=='s') move(1,3);
		if(c=='D' or c=='d') move(1,4);
		if(c=='X' or c=='x') if(D(1,1)) A(1);
		if(c=='C' or c=='c') S(1,1);
		if(c=='Z' or c=='z') S(1,2);
		if(c=='8') move(2,1);
		if(c=='4') move(2,2);
		if(c=='5') move(2,3);
		if(c=='6') move(2,4);
		if(c=='0') if(D(2,1)) A(2);
		if(c=='1') S(2,1);
		if(c=='2') S(2,2);
		put_map();
	}
}

猜你喜欢

转载自blog.csdn.net/ljqmiao_/article/details/81114412
war
今日推荐