因为代码有些多,所以使用了头文件来方便理解。
void initial(char arr[ROW][COL],int row,int col) //初始化棋盘函数
{
for(row=0;row<ROW;row++)
{
for(col=0;col<COL;col++)
{
arr[row][col] = ' ';
printf("%c",arr[row][col]);
if(col<COL -1)
printf(" | ");
}
printf("\n");
if(row<ROW -1)
printf("————————\n");
}
}
void player(char arr[ROW][COL],int row,int col) //用户下棋函数
{
printf("请输入棋子坐标>:");
scanf("%d %d",&row,&col);
while(1)
{
if((row>=1 && row<=ROW+1) && (col>=1 && col <=COL+1))
{
if(arr[row-1][col-1] ==' ')
{
arr[row-1][col-1] = '*';
break;
}
else if(arr[row-1][col-1] =='#')
{
printf("该位置已被对方占用,请重新选择!\n");
printf("请输入棋子坐标>:");
scanf("%d %d",&row,&col);
}
else if(arr[row-1][col-1] =='*')
printf("这个地方那你已经下过了,换个地方吧!\n");
else
printf("你是怎么做到显示这个行代码的??");
}
else
printf("坐标输入错误,请重新选择!\n");
printf("请输入棋子坐标>:");
scanf("%d %d",&row,&col);
}
}
void printing(char arr[ROW][COL],int row,int col) //打印棋盘的函数。 { for(row=0;row<ROW;row++) { for(col=0;col<COL;col++) { printf("%c",arr[row][col]); if(col<COL -1) printf(" | "); } printf("\n"); if(row<ROW -1) printf("————————\n"); } }
void computer (char arr[ROW][COL],int row,int col) //电脑下棋函数。 { while(1) { row = rand()%3; col = rand()%3; if(arr[row][col] == ' ') { arr[row][col] = '#'; break; } } }
int windefeat(char arr[ROW][COL],int row,int col) //判断输赢函数。 { int count = 0; for(row=0;row<ROW;row++) { if(arr[row][0] == arr[row][1] && arr[row][1]== arr[row][2]) { if(arr[row][0] =='*') return 1; else if(arr[row][0] == '#') return 0; } } for(col=0;col<COL;col++) { if(arr[0][col] == arr[1][col] && arr[1][col] ==arr[2][col]) { if(arr[0][col] == '*') return 1; else if(arr[0][col] == '#') return 0; } } if(arr[0][0] == arr[1][1] && arr[1][1]== arr[2][2] ) { if(arr[0][0] == '*') return 1; else if(arr[0][0] == '#') return 0; } if(arr[0][2] == arr[1][1] && arr[1][1]== arr[3][0] ) { if(arr[0][2] == '*') return 1; else if(arr[0][2] == '#') return 0; } for(row=0;row<ROW;row++) { for(col=0;col<COL;col++) { if(arr[row][col] ==' ') count++; } } if(count == 0) { return 2;} return 9; }
//这是源文件,里面存放着三子棋所需要的函数。
//这是源文件,里面存放着三子棋所需要的函数。
//这是源文件,里面存放着三子棋所需要的函数。//函数是在在 int main() 开始
#include"game.h"
#include<stdlib.h>
#include<time.h>
void menu() //menu是菜单函数。{
printf("*******************************\n");
printf("******1:game 0:exit*******\n");
printf("*******************************\n");}
int option(int x) //开局选择是否进入游戏的函数。
{
if(x==1)
return 1;
if(x==0)
return 0;
else
return 2;
}void game() //游戏程序的实现函数。
{
char arr[ROW][COL];
initial(arr,ROW,COL); //棋盘的初始化。
do
{
player(arr,ROW,COL);//玩家下棋函数。
printf("胡图图下棋:\n");
printing(arr,ROW,COL);
if(windefeat(arr,ROW,COL)==0)//判断输赢函数。
{
printf("牛爷爷赢了!\n");
break;
}
if(windefeat(arr,ROW,COL)==1)
{
printf("胡图图赢了!\n");
break;
}
if(windefeat(arr,ROW,COL)==2)
{
printf("平局了\n");
break;
}
printf(" \n");//为了把牛爷爷和胡图图的棋盘分开,使得更明显。
printf(" \n");
printf(" \n");
printf("牛爷爷下棋:\n");
computer(arr,ROW,COL); //电脑下棋函数。
printing(arr,ROW,COL);
if(windefeat(arr,ROW,COL)==0) //判断输赢函数。
{
printf("牛爷爷赢了!\n");
break;
}
if(windefeat(arr,ROW,COL)==1)
{
printf("胡图图赢了!\n");
break;
}
if(windefeat(arr,ROW,COL)==2)
{
printf("平局了\n");
break;
}}
while(1);}
int main()
{
char arr[ROW][COL];
int a;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择>>:");
scanf("%d",&a);
switch(option(a))
{
case 0:
printf("!结束游戏!\n");
break;
case 1:
printf("!开始游戏!\n");
game();
break;
default:
printf("输入错误,请重新输入!\n");
break;}}
while(option(a));return 0;
}