一个很好玩的小游戏!Wall-war 墙战(汉化)

X在左上角,O在右下角。它们要把对手推到墙里卡死!

X是玩家1,用WASD移动,按XCZ释放技能。O是玩家2,用8456(建议用小键盘)移动,按012释放技能。

每个人有四个技能,每局可以选三个。

技能X(0),在自己前面放一个墙,可以把对手击退。CD 0.75秒。

这个是必须选的。

技能一,清除自己周围一圈的墙,可以把对手扔出去。CD 2秒。

技能二,往前冲5格,遇到墙或者对手停下来。CD 5秒。

技能三,清除前两格的墙,遇到对手把对手击退五格。CD 4秒。


直接上代码:

#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();      
	}      
	
}     




  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值