游戏规则:在一个5行5列的数组中,每个元素都有两种状态,输入一个坐标点(x,y)ps:x,y取值为1~5,这个点和其上下左右的四个点都会变为其相反的状态,
如果所有的元素都变成了空心的圆,则过关,进入下一关....
void initArray();//初始化数组
void refresh();//刷新数组
void trigger(int x,int y);//控制
void reversal(int x,int y);//逆转
void playerCood();//玩家坐标
int verdict();//裁定
void levels();//关卡
void engine();//进程
char arr[5][5];
int answer[40] = {0};//保存随机数
int k = 0;
int level = 1;
char pos = '1';//positive
char neg = '0';//negative
void initArray()//初始化数组
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
*(*(arr+i)+j) = pos;
}
}
}
void refresh()//刷新数组
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
if(*(*(arr+i)+j) == pos)
printf("⧬ ");
else
printf("⧭ ");
}
printf("\n");
}
}
void reversal(int x,int y)//逆转
{
if(*(*(arr+x)+y) == pos)
{
*(*(arr+x)+y) = neg;
}
else
{
*(*(arr+x)+y) = pos;
}
}
void trigger(int x,int y)//控制
{
reversal(x, y);
if(x - 1 >= 0)
{
reversal(x - 1, y);//上
}
if(x + 1 <= 4)
{
reversal(x + 1, y);//下
}
if(y - 1 >= 0)
{
reversal(x, y - 1);//左
}
if(y + 1 <= 4)
{
reversal(x, y + 1);//右
}
}
void playerCood()//玩家坐标
{
int x = 0, y = 0;
printf("Coordinate(x,y):");
scanf("%d %d",&x,&y);
if((x >0 && x <= 5) && (y > 0 && y <=5))
{
x = x - 1;//转换
y = y - 1;
trigger(x, y);
}
else //输入错误提示并重新输入
{
printf("Input error ‼︎\n");
playerCood();
}
}
int verdict()//裁定
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
if(*(*(arr+i)+j) == pos)
{
continue;
}
else //说明不全为‘⧬’,游戏还没有结束,返回
{
return 0;
}
}
}
return 1;//game over
}
void levels()//关卡
{
k = 0;
for(int i = 0; i < level; i++)
{
int x = arc4random()%5;
int y = arc4random()%5;
answer[k] = x+1;
k++;
answer[k] = y+1;
k++;
trigger(x, y);
}
}
void engine()//进程
{
char yesno[20] = {'n'};
initArray();//数组初始化
if(1 == level)
{
printf("THE 1 LEVEL\n");
}
levels();//载入关卡
printf("Note:");
for(int i = 0; i < k; i++)//答案
{
printf("(%d ",answer[i++]);
printf("%d)",answer[i]);
}
printf("\n");
refresh();//刷新
while(YES)
{
playerCood();//玩家坐标
refresh();//刷新
if(verdict() == 1) //判断是否结束
{
printf("Congratulations, You passed the %d level !\n",level);
printf("Continue or exit (y/n)? ");
// getchar();//获得
scanf("%s",yesno);
if('N' == yesno[0] || 'n' == yesno[0])
{
printf("\nExit Success!");
exit(1); //退出
}
else
{
level++; //进入下一关
printf("THE %d LEVEL\n",level);
engine();
}
}
}
}
int main(int argc, const char * argv[])
{
engine();
return 0;
}
THE 1 LEVEL
Note:(2 4)
⧬ ⧬ ⧬ ⧭ ⧬
⧬ ⧬ ⧭ ⧭ ⧭
⧬ ⧬ ⧬ ⧭ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):2 4
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Congratulations, You passed the 1 level !
Continue or exit (y/n)? y
THE 2 LEVEL
Note:(3 5)(4 1)
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧭
⧭ ⧬ ⧬ ⧭ ⧭
⧭ ⧭ ⧬ ⧬ ⧭
⧭ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):3 5
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
⧭ ⧭ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):4 1
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Congratulations, You passed the 2 level !
Continue or exit (y/n)? sadf
THE 3 LEVEL
Note:(1 4)(1 1)(3 1)
⧭ ⧭ ⧭ ⧭ ⧭
⧬ ⧬ ⧬ ⧭ ⧬
⧭ ⧭ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):1 4
⧭ ⧭ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧭ ⧭ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):1 1
⧬ ⧬ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
⧭ ⧭ ⧬ ⧬ ⧬
⧭ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Coordinate(x,y):3 1
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
⧬ ⧬ ⧬ ⧬ ⧬
Congratulations, You passed the 3 level !
Continue or exit (y/n)? n
Exit Success!