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

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值