三子棋实现的步骤如下:
(1)初始化棋盘;
(2)玩家走;
(3)电脑走;
(4)判断输赢;
(5)判断棋盘是否已满。
具体代码如下:
(1)将棋盘初始化为" ";
void init_board(char board[ROW][COL],int row,int col)
{
// int i=0;
// int j=0;
// for(i=0;i<row;i++)
// {
// for(j=0;j<col;j++)
// {
// board[i][j]=' ';
// }
// }
memset(board,' ',row*col*sizeof(board[0][0]));
}
(2)显示棋盘
void display_board(char board[ROW][COL],int row,int col)
{
int i=0;
for (i=0;i<row;i++)
{
printf(" — — —\n");
printf("|%c |%c |%c |\n", board[i][0],board[i][1],board[i][2]);
}
printf(" — — —\n");
}
(3)电脑走
computerMove(char board[ROW][COL])
{
int x=0;
int y=0;
while(1)
{
x=rand()%3;
y=rand()%3;
if(board[x][y]==' ')
{
board[x][y]='*';
break;//while中的break是用于永久终止循环
}
}
}
(4)玩家走
playMove(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
while(1)
{
printf("请输入坐标:>");
scanf("%d%d",&x,&y);
x--;
y--;
if(((x>=0)&&(x<=2))&&((y>=0)&&(y<=2)))
{
if(board[x][y]==' ')
{
board[x][y]='o';
break;
//return;
}
}
printf("输入坐标错误");
}
}
(5)判断输赢
Iswin(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
if((board[i][0]==board[i][1])&&board[i][1]==board[i][2]!=' ')
return board[i][1];
}
for(i=0;i<row;i++)
{
if((board[i][0]==board[i][1])&&board[i][1]==board[i][2]!=' ')
return board[i][1];
}
if((board[0][0]==board[1][1])&&board[1][1]==board[2][2]!=' ')
return board[1][1];
if((board[0][2]==board[1][1])&&board[1][1]==board[2][0]!=' ')
return board[1][i];
if(IsFull(board,ROW,COL))
{
return 'q';
}
return ' ';
}
(6)判断棋盘是否已满
IsFull(char board[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(board[i][j]==' ')
return 0;
}
}
return 1;
}
(7)测试代码
#define _CRT_SECURE_NO_WARNINGS 1
#include"sanziqi.h"
menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("****************\n");
}
game()
{
char board[ROW][COL];
char ret;
init_board(board,ROW,COL);
display_board(board,ROW,COL);
do
{
printf("电脑走>..........\n");
computerMove(board);
display_board(board,ROW,COL);
printf("玩家走>..........\n");
playMove(board,ROW,COL);
display_board(board,ROW,COL);
ret=Iswin(board,ROW,COL);
if(ret!=' ')
{
break;
}
}while(ret==' ');
if(ret=='*')
printf("电脑赢\n");
else if(ret=='o')
printf("玩家赢\n");
else if(ret=='q')
printf("平局\n");
}
test()
{
int input=0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新输入\n");
break;
}
}
while(input);
}
int main()
{
test();
return 0;
}