实现三子棋程序.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3
int Isfull(char chessboard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL;col++) {
if (chessboard[row][col] == ' ')
return 0;
}
}
return 1;
}
void Init(char chessboard[MAX_ROW][MAX_COL]) {
for (int row = 0;row < MAX_COL;row++) {
for (int col = 0; col < MAX_COL;col++) {
chessboard[row][col] = ' ';
}
}
srand((unsigned int)time(0));
}
void Print(char chessboard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
printf("+---+---+---+\n");
printf("| %c | %c | %c |\n", chessboard[row][0],
chessboard[row][1], chessboard[row][2]);
}
printf("+---+---+---+\n");
}
void Playermove(char chessboard[MAX_ROW][MAX_COL]) {
int row = 0, col = 0;
while (1) {
printf("请玩家输入坐标");
scanf_s("%d %d", &row, &col);
if (row < 0 || row >= MAX_ROW && col >= MAX_COL || col < 0) {
printf("你的输入有误\n");
continue;
}
if (chessboard[row][col] != ' ') {
printf("该位置已经有子了\n");
continue;
}
chessboard[row][col] = 'X';
break;
}
}
char Check(char chessboard[MAX_ROW][MAX_COL]) {
for (int row = 0;row < MAX_ROW; row++) {
if (chessboard[row][0] != ' ' &&
chessboard[row][0] == chessboard[row][1]
&& chessboard[row][0] == chessboard[row][2])
return chessboard[row][0];
}
for (int col = 0;col < MAX_COL;col++) {
if (chessboard[0][col] != ' ' &&
chessboard[0][col] == chessboard[1][col]
&& chessboard[0][col] == chessboard[2][col])
return chessboard[0][col];
}
if (chessboard[0][0] != ' ' &&
chessboard[0][0] == chessboard[1][1] &&
chessboard[0][0] == chessboard[2][2])
return chessboard[0][0];
if (chessboard[0][2] != ' ' &&
chessboard[0][2] == chessboard[1][1] &&
chessboard[0][2] == chessboard[2][0])
return chessboard[0][2];
if (Isfull(chessboard)) {
return 'Q';
}
return ' ';
}
void Computermove(char chessboard[MAX_ROW][MAX_COL]) {
printf("轮到电脑落子\n");
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (chessboard[row][col] != ' ') {
continue;
}
chessboard[row][col] = 'O';
break;
}
}
int Menu() {
printf("--------------------\n");
printf("-------1.play-------\n");
printf("-------0.play-------\n");
printf("--------------------\n");
printf("请输入你的选择:\n");
int choice = 0;
scanf("%d", &choice);
return choice;
}
void Game() {
//1.先创建一个棋盘并且初始化
char chessboard[MAX_ROW][MAX_COL] = { 0 };
Init(chessboard);
char winner = ' ';
while (1) {
//2.打印一个棋盘
Print(chessboard);
//3.输入玩家下的坐标
Playermove(chessboard);
//4.检查是否结束游戏
winner = Check(chessboard);
if (winner != ' ') {
break;
}
//5.电脑随机落子
Computermove(chessboard);
//6.检查是否结束游戏
winner = Check(chessboard);
if (winner != ' ') {
break;
}
}
Print(chessboard);
if (winner == 'X') {
printf("\n恭喜你获胜");
}
if (winner == 'O') {
printf("\n你真菜,电脑都玩不过");
}
}
int main() {
while (1) {
int choice = Menu();
if (choice == 1) {
Game();
}
else if (choice == 0) {
printf("goodbye!\n");
break;
}
else {
printf("您是输入有误!\n");
}
}
system("pause");
return 0;
}