1.游戏主界面
int main()
{
int select = 1;
while (select)
{
printf("********************\n");
printf("* 简易三子棋 *\n");
printf("********************\n");
printf(" [1]Play [0]Quit \n");
printf("********************\n");
printf("请选择:");
scanf("%d", &select);
if (select == 0)
{
break;
}
if (select != 1)
{
printf("输入的命令有误,请重新输入\n");
continue;
}
//开始游戏
StartGame();
}
printf("Game Over!!!\n");
return 0;
}
2.游戏开始
void StartGame()
{
//1.初始化游戏
InitGame();
char winner;
//2.进入游戏
//3显示棋盘
while (1)
{
ShowChessBoard();
//4.玩家下棋
PlayerMove();
//4.判断结果
winner = CheckResult();
if (winner != 'c')
break;
//5.电脑下棋
ComputerMove();
//6.判断结果
winner = CheckResult();
if (winner != 'c')
break;
}
//7.宣布结果
if (winner = 'x')
printf("玩家胜利!\n");
else if (winner = 'o')
printf("电脑胜利!\n");
else
{
printf("和棋,是否继续[y/n]:>");
char select='0';
scanf("%s", &select);
if (select == 'y')
{
StartGame();
}
else
printf("Game over!");
}
}
3.打印棋盘
#define ROW 3
#define COL 3
static char board[ROW][COL];
void InitGame()
{
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
board[i][j] = ' ';
}
}
}
void ShowChessBoard()
{
for (int i = 0; i < ROW; ++i)
{
printf("| %c | %c | %c |\n", board[i][0],
board[i][1],
board[i][2]);
if (i != ROW - 1)
{
printf(" --- --- --- \n");
}
}
}
4.玩家落子
void PlayerMove()
{
printf("请玩家落子:\n");
int row, col;
while (1)
{
printf("请输入棋子的坐标(row,col):");
scanf("%d %d", &row, &col);
if (board[row - 1][col - 1] != ' ')
{
printf("输入的位置已被占用,请重新输入\n");
continue;
}
board[row - 1][col - 1] = 'x';
break;
}
}
5.电脑落子
void ComputerMove()
{
srand(time(0));
int row,col;
while (1)
{
//随机产生
row = rand() % ROW;
col = rand() % COL;
if (board[row][col] == ' ')
{
board[row][col] = 'o';
break;
}
}
}
6.判断棋盘是否下满
bool IsFull()
{
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
if (board[i][j] ==' ');
{
return false;
}
}
}
return true;
}
7.判断结果
//x:玩家赢
//o:电脑赢
//h:和棋
//c:继续
char CheckResult()
{
//检查行
for (int i = 0; i < ROW; ++i)
{
if (board[i][0]!=' '&&board[i][0] == board[i][1] && board[i][0] == board[i][2])
return board[i][0];
}
//检查列
for (int j = 0; j < COL; ++j)
{
if (board[0][j]!=' '&&board[0][j] == board[1][j] && board[0][j] == board[2][j])
return board[j][0];
}
//检查斜线
if (board[1][1]!=' '&&((board[0][0] == board[1][1] && board[0][0] == board[2][2])||
(board[0][2] == board[1][1] && board[0][2] == board[2][0])))
return board[1][1];
//判断是否和棋
if (IsFull())
return'h';
//继续下棋
return'c';
}