您的位置:首页 > 编程语言 > C语言/C++

C语言控制台小游戏

2013-12-09 08:51 477 查看
游戏规则:在一个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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  控制台 游戏