拉灯游戏

#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<windows.h>
#include<conio.h>
#include<algorithm>
using namespace std;
bool f[10][10];
int sum,num;
int dir[5][2]={
	0,1,
	1,0,
	-1,0,
	0,-1,
	0,0
};
const int n=5;

void game();

void gotoxy(int x,int y)
{
	int xx=0x0b;
	HANDLE h0utput;
	COORD loc;
	loc.X=x,loc.Y=y;
	h0utput=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(h0utput,loc);
}

void change(int x,int y)
{
	for(int i=0;i<n;i++)
	{
		int xx=x+dir[i][0];
		int yy=y+dir[i][1];
		f[xx][yy]^=1;
	}
}

void print()
{
	system("cls");
	gotoxy(30,5);
	printf("x |");
	gotoxy(32,6);
	printf("|");
	for(int i=1;i<=n;i++)
	{
		gotoxy(30,i*2+5);
		printf("%d | ",i);
		for(int j=1;j<=5;j++)
			if(f[i][j]==1)
				printf("X ");
			else
				printf("O ");
		gotoxy(32,i*2+6);
		printf("|");
	}
	gotoxy(32,17);
	printf("|");
	gotoxy(30,16);
	for(int i=1;i<=n*2+3;i++)
	{
		if(i==3)
			gotoxy(34,16);
		printf("-"); 
	} 
	gotoxy(33,17);
	printf(" ");
	for(int i=1;i<=n;i++)
		printf("%d ",i);
	printf("y");
}

void gamemade()
{
	srand(time(0));
	system("cls");
	sum=num=0;
	memset(f,0,sizeof(f)); 
	int p=rand()%30+1;
	num=p;
	for(int i=1;i<=p;i++)
	{
		int x=rand()%5+1;
		int y=rand()%5+1;
		change(x,y);
	}
	print();
}

void gamestart()
{
	gotoxy(30,10);
	printf("拉灯游戏");
	gotoxy(26,12);
	printf("按任意键开始游戏");
	getch();
	gamemade();
}

bool chick()
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(f[i][j]==1)
				return 0;
	return 1;
}

void win()
{
	system("cls");
	gotoxy(30,10);
	printf("You Win");
	gotoxy(28,12);
	printf("是否继续游戏");
	gotoxy(29,13);
	printf("是\\y,否\\n");
	gotoxy(30,15);
	char c[10];
	scanf("%s",c);
	if(c[0]=='n')
		exit(0);
	else
		gamemade(),game();

} 

void game()
{
	while(!chick())
	{
		gotoxy(10,10);
		printf("预期需要步数 : %d",num);
		gotoxy(10,12);
		printf("您已走步数 : %d",sum);
		gotoxy(25,20);
		printf("选择你想拉的灯:");
		int x,y;
		scanf("%d",&x);
		if(x==12345678)
			win();
		else
			scanf("%d",&y);
		if(x<1||x>5||y<1||y>5)
		{
			system("cls");
			system("color AC");
			gotoxy(30,10);
			printf("变态\n");
			exit(0); 
		}
		change(x,y);
		print();
		sum++;
	}
	win();
}

int main()
{
	gamestart();
	game();
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值