//三子棋
//1.打印棋盘
//2.电脑落子,判断是否结束
//3.玩家落子,判断游戏是否结束
//4.重复以上
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <time.h> //
#define ROW 3
#define COL 3
char g_board[ROW][COL];
int row, col;
//对二维数组进行初始化,使每一个元素为 ''
void Init(){
srand((unsigned int)time(0)); //放在代码最开始
for (row = 0; row < ROW; ++row){
for (col = 0; col < COL; ++col)
g_board[row][col] = ' ';
}
}
void Print(){
printf(" --- --- ---\n");
for (row = 0; row < ROW; ++row){
printf("| %c | %c | %c |\n", g_board[row][0], g_board[row][1]
, g_board[row][2]);
printf(" --- --- ---\n");
}
}
void PlayerMove(){
printf("请输入一个座标,并用空格隔开\n");
while (1){
scanf("%d %d", &row, &col);
row--; col--;
if (row<0 || row>=ROW || col<0 || col>=COL){
printf("您输入的座标非法,请重新输入:\n");
continue;
}
if (g_board[row][col] != ' '){
printf("您输入的座标已经有其他子了,请重新输入:\n");
continue;
}
g_board[row][col] = 'x';
break;
}
}
void ComputerMove(){
printf("请电脑落子:\n");
while(1){
int row = rand() % ROW;
int col = rand() % COL;
if (g_board[row][col] != ' '){
continue;
}
g_board[row][col] = 'o';
break;
}
}
char CheckWinner(){
//检查行
for (row = 0; row < ROW; ++row){
if (g_board[row][0] == g_board[row][1] &&
g_board[row][0] == g_board[row][2] &&
g_board[row][0] != ' ')
return g_board[row][0];
}
//检查列
for (col = 0; col < COL; ++col){
if (g_board[0][col] == g_board[1][col] &&
g_board[0][col] == g_board[2][col] &&
g_board[0][col] != ' ')
return g_board[0][col];
}
//检查对角线
if (g_board[0][0] == g_board[2][2] &&
g_board[0][0] == g_board[1][1] &&
g_board[0][0] != ' ')
return g_board[0][0];
if (g_board[0][2] == g_board[1][1] &&
g_board[0][2] == g_board[2][0] &&
g_board[0][2] != ' ')
return g_board[0][2];
for (row = 0; row < ROW; ++row){
for (col = 0; col < COL; ++col){
if (g_board[row][col] == ' ')
return ' ';
}
}
return 'q';
}
int main()
{
char winner;
Init();
while (1){
////1.打印棋盘
Print();
////2.玩家落子,判断游戏是否结束
PlayerMove();
winner = CheckWinner();
if (winner != ' ')
break;
////3.电脑落子,判断游戏是否结束
ComputerMove();
winner = CheckWinner();
if (winner != ' ')
break;
}
Print();
if (winner == 'x')
printf("玩家胜\n");
if (winner == 'o')
printf("电脑胜\n");
if (winner == 'q')
printf("和棋\n");
////4.重复进行
system("pause");
return 0;
}
三子棋C语言实现
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.