????????三子棋,我相信许多人都有玩过,曾经晚自习无聊时就拿张稿子,画个井字就可以和同桌愉快的博弈了。但是一张稿纸只能玩几次就被画满了,十分的浪费纸张,而用C语言只需要利用一个循坏就可以玩到你不想玩。
????????首先,我们先写一个main()函数,用来控制这整个程序,你是否想玩利用mune()函数进行控制,而游戏的过程由game()函数负责实施。
????????如图,当mune()的返回值为2时,结束程序,否则就是不断的循环进行游戏,每次游戏结束进行一次清屏,保证屏幕的干净整洁。
????????mune()函数进行菜单的打印,以及接受玩家的选择并作出相应的处理,如果输入1||2以外的数字,就会陷入循环,知道输入1||2为止。
? ? ? ? game()函数就开始对游戏过程的具体实施,其中qipan()函数进行对棋盘的打印,panding函数进行对胜负的判定,以及对现在轮到谁下进行提醒,因为三子棋最多只能走9步,所以在k=10(第10步)退出循环,如果在循环中为判定出胜负,则为平局,应为最快也要先手走3步,后手走两步才能分出胜负,所以可以在第5步及以后的每一步进行胜负的判定。?
????????
? ? ? ? 棋盘的效果如图。?
????????三子棋的胜负就这8种情况,虽然str数组开始被我全部赋值为' '(空格),但是这里绝对要对该三连珠进行判定,保证其不为空格,如果没有这个判定,则在实际游戏过程中,当你实际连成的三连珠的判定在一个空的三连珠的判定后面时,程序无法判定胜负。
?????????这是一次游戏的截图。
????????以下为源码:
#include <stdio.h>
int mune()
{
printf("------------------------\n");
printf(" 欢迎来到三子棋 \n");
printf(" 1.开始游戏 \n");
printf(" 2.退出游戏 \n");
printf("------------------------\n");
choice:
while(1)
{
int control;
scanf("%d",&control);
switch(control)
{
case 1:return 1;
case 2:return 2;
default:printf("输出错误,请重新输入\n");
}
}
}
void game()
{
char str[3][3]={0};
int p=' ';
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
str[i][j]=' ';
for(k=1;k<=9;k++)
{
system("cls");
printf("轮到");
if(k%2==1)
printf("先手下\n");
else
printf("后手下\n");
qipan(str);
chongxia:
printf("请输入要下的位置;");
scanf("%d%d",&i,&j);
if(str[i-1][j-1]!=' ')
{
printf("该位置已有棋子,请重下\n");goto chongxia;
}
if(k%2==1)
str[i-1][j-1]='O';
else
str[i-1][j-1]='X';
if(k>=5)
{
p=panding(str);
if(p=='O')
{
system("cls");qipan(str);printf("先手胜,按回车键继续\n");getchar();getchar();return;
}
if(p=='X')
{
system("cls");qipan(str);printf("后手胜,按回车键继续\n");getchar();getchar();return;
}
}
}
printf("平局,按回车键继续\n");
getchar();
getchar();
}
void qipan(char str[3][3])
{
printf(" -------------\n");
printf("3 | %c | %c | %c |\n",str[2][0],str[2][1],str[2][2]);
printf(" -------------\n");
printf("2 | %c | %c | %c |\n",str[1][0],str[1][1],str[1][2]);
printf(" -------------\n");
printf("1 | %c | %c | %c |\n",str[0][0],str[0][1],str[0][2]);
printf(" -------------\n");
printf(" 1 2 3 \n");
}
int panding(char str[3][3])
{
if(str[0][0]==str[1][1]&&str[1][1]==str[2][2]&&str[1][1]!=' ')
return str[1][1];
if(str[0][2]==str[1][1]&&str[1][1]==str[2][0]&&str[1][1]!=' ')
return str[1][1];
if(str[0][1]==str[1][1]&&str[1][1]==str[2][1]&&str[1][1]!=' ')
return str[1][1];
if(str[1][0]==str[1][1]&&str[1][1]==str[2][1]&&str[1][1]!=' ')
return str[1][1];
if(str[0][0]==str[0][1]&&str[0][1]==str[0][2]&&str[0][0]!=' ')
return str[0][1];
if(str[0][0]==str[1][0]&&str[1][0]==str[2][0]&&str[0][0]!=' ')
return str[1][0];
if(str[2][2]==str[2][1]&&str[2][1]==str[2][0]&&str[2][2]!=' ')
return str[2][1];
if(str[2][2]==str[1][2]&&str[1][2]==str[0][2]&&str[2][2]!=' ')
return str[1][2];
return ' ';
}
int main()
{
int control=0;
while(1)
{
system("cls");
control=mune();
switch(control)
{
case 1:
{
game();
break;
}
case 2:return 0;
}
}
}
|