开始一局游戏的基本步骤
1.创建棋盘并初始化
2.打印棋盘
3.玩家通过输入坐标来落子
4.判断胜负关系
5.电脑随机落子
6.判断胜负关系
7.从步骤2继续开始循环
框架在game函数里实现。
接着创建一个游戏菜单和一个main函数实现一局游戏的开始。框架构造完,开始写各个步骤的主代码。
init函数代码段实现每个元素都是空格
printBoard函数段代码实现棋盘的打印
playerMove函数代码段实现玩家通过行列坐标实现落子
computerMove函数代码段实现电脑随机产生坐标落子
isFull函数代码段是用来判断空格满没满
isWin函数代码段实现判断游戏结果(通过判定所有行所有列对角线)
至此三子棋代码的设计就完成了。可以看出复杂程度很高,对于我这种新手来说难度很大,但我不会气馁,只有不断的尝试才能获得成功。
#define_CRT_SECURE_NO_WARNINGS
#include"stdio.h"
#include"windows.h"
#include"time.h"
#defineMAX_ROW3
#defineMAX_COL3
voidinit(charBoard[MAX_ROW][MAX_COL])
{
for(introw =0; row < MAX_ROW; row++)
{
for(intcol =0; col < MAX_COL; col++)
{
Board[row][col] ='';
}
}
}
voidprintBoard(charBoard[MAX_ROW][MAX_COL])
{
printf("+---+---+---+\n");
for(introw =0; row < MAX_ROW; row++)
{
printf("|%c|%c|%c|\n", Board[row][0], Board[row][1],
Board[row][2]);
printf("+---+---+---+\n");
}
}
voidplayerMove(charBoard[MAX_ROW][MAX_COL])
{
while(1)
{
printf("请玩家输入坐标(row col):");
introw, col =0;
scanf("%d%d", &row, &col);
if(row <0|| row >= MAX_ROW || col <0|| col >= MAX_COL)
{
printf("您输入的坐标不在合法范围内[0,2]\n");
continue;
}
if(Board[row][col] !='')
{
printf("此处已落子!\n");
continue;
}
Board[row][col] ='x';
break;
}
}
voidcomputerMove(charBoard[MAX_ROW][MAX_COL])
{
while(1)
{
introw =rand() % MAX_ROW;
intcol =rand() % MAX_COL;
if(Board[row][col] !='')
{
continue;
}
Board[row][col] ='o';
break;
}
}
intisFull(charBoard[MAX_ROW][MAX_COL])
{
for(introw =0; row < MAX_ROW;row++)
{
for(intcol =0; col < MAX_COL; col++)
{
if(Board[row][col] =='')
{
return0;
}
}
}
return1;
}
charisWin(charBoard[MAX_ROW][MAX_COL])
{
for(introw =0; row < MAX_ROW; row++)
{
if(Board[row][0] !=''
&& Board[row][0] == Board[row][1]
&& Board[row][0] == Board[row][2])
{
returnBoard[row][0];
}
}
for(intcol =0; col < MAX_COL; col++)
{
if(Board[0][col] !=''
&& Board[0][col] == Board[1][col]
&& Board[0][col] == Board[2][col])
{
returnBoard[0][col];
}
}
if(Board[0][0] !=''
&& Board[0][0] == Board[1][1]
&& Board[0][0] == Board[2][2])
{
returnBoard[0][0];
}
if(Board[2][0] !=''
&& Board[2][0] == Board[1][1]
&& Board[2][0] == Board[0][2])
{
returnBoard[2][0];
}
if(isFull(Board))
{
return'q';
}
return'';
}
voidgame()
{
charBoard[MAX_ROW][MAX_COL] = {0};
init(Board);
charwinner ='';
while(1)
{
printBoard(Board);
playerMove(Board);
winner =isWin(Board);
if(winner !='')
{
break;
}
computerMove(Board);
winner =isWin(Board);
if(winner !='')
{
break;
}
}
printBoard(Board);
if(winner =='x')
{
printf("恭喜您,您赢了!\n");
}
elseif(winner =='o')
{
printf("很遗憾,电脑赢了!\n");
}
else
{
printf("您和电脑五五开!\n");
}
}
intmenu()
{
printf("============\n");
printf("1.开始游戏\n");
printf("2.结束游戏\n");
printf("============\n");
printf("请输入您的选择:");
intchoice =0;
scanf("%d", &choice);
returnchoice;
}
intmain()
{
srand((unsignedint)time(0));
while(1)
{
intchoice =menu();
if(choice ==1)
{
game();
}
elseif(choice ==0)
{
printf("goodbye!\n");
break;
}
}
system("pause");
return0;
}