/****************************************
* File Name : game.c
* Creat Data : 2015.1.30
* Author : ZY
*****************************************/
/*智力游戏*/
/*黑白子交换*/
/*七个格子,左三是白字=子,右三是黑子
要求交换黑子白子位置*/
#include <stdio.h>
int number = 0;
void Swap(int *a,int*b)//交换两个整数
{
*a = *a+*b;
*b = *a-*b;
*a = *a-*b;
}
void print(int a[])//打印棋盘的状态
{
int i;
printf("No.%2d:…………………………………………………………\n",number++);
for(i = 0;i < 7;i++)
{
printf(" ");
printf("|%c",a[i] == 1?'*':(a[i] == 2?'@':' '));
}
printf("\n………………………………………………………………\n");
}
int main(void)
{
int t[7] = {1,1,1,0,2,2,2};//初始化数组,0:空格,1:白子,2:黑子
int i,flag;
print(t);
while(t[0]+t[1]+t[2] != 6 || t[4]+t[5]+t[6] != 3)//判断游戏是否结束
{
flag = 1;//flag为棋子移动一步的标记 1:尚未移动 0:已经移动
for(i = 0;flag&&i < 5;i++)//若白子可以向右跳过黑子,则白字向右跳
{
if(t[i] == 1&&t[i+1] == 2&&t[i+2] == 0)
{
Swap(&t[i+2],&t[i]);
print(t);
flag = 0;
}
}
for(i = 0;flag&&i < 5;i++)//若黑子可以向左跳过白子,则黑子向左跳
{
if(t[i] == 0&&t[i+1] == 1&&t[i+2] == 2)
{
Swap(&t[i],&t[i+2]);
print(t);
flag = 0;
}
}
for(i = 0;flag&&i < 6;i++)//若向右移动白子不会产生阻塞,则白子右移
{
if(t[i] == 1&&t[i+1] == 0&&(i == 0||t[i-1] != t[i+2]))
{
Swap(&t[i],&t[i+1]);
print(t);
flag = 0;
}
}
for(i = 0;flag&&i < 6;i++)//若向左移动黑子不会产生阻塞,则黑子左移
{
if(t[i] == 0&&t[i+1] == 2&&(i == 5||t[i-1] != t[i+2]))
{
Swap(&t[i],&t[i+1]);
print(t);
flag = 0;
}
}
}
return 0;
}
智力游戏(黑白子交换)
最新推荐文章于 2021-05-25 05:17:17 发布