#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3
//满了 1 没满 0
int IsFull(char board[MAX_ROW][MAX_COL]){
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; row < MAX_COL; col++){
if (board[row][col] == ' '){
return 0;
}
}
}
return 1;
}
void Init(char board[MAX_ROW][MAX_COL]){
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
board[row][col] = ' ';
}
}
srand(time(0));
}
void Print(char board[MAX_ROW][MAX_COL]){
system("cls");
printf("----|---|---\n");
for (int row = 0; row < MAX_ROW; row++){
printf("| %c | %c | %c |\n", board[row][0], board[row][1], board[row][2]);
printf("----|---|---\n");
}
}
void PlayerMove(char board[MAX_ROW][MAX_COL]){
while (1){
printf("请输入坐标(row col):\n");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL){
printf("你的输入有误!\n");
continue;
}
if (board[row][col] != ' '){
printf("你的落子的位置已经有子了!\n");
continue;
}
board[row][col] = 'x';
break;
}
}
void ComputerMove(char board[MAX_ROW][MAX_COL]){
//随机落子方式
while (1){
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (board[row][col] != ' '){
continue;
}
board[row][col] = 'o';
break;
}
}
//这个函数返回值类型 char
//1.玩家胜利 x
//2.电脑胜利 o
//3.和棋 =
//4.未分胜负 ' '
char IsWin(char board[MAX_ROW][MAX_COL]){
//一行一列对角线
//1.判定行
for (int row = 0; row < MAX_ROW; row++){
if (board[row][0]==board[row][1]&&board[row][0]==board[row][2]
&&board[row][0]!=' '){
return board[row][0];
}
}
//2.判定列
for (int col = 0; col < MAX_COL; col++){
if (board[0][col] == board[1][col]
&& board[0][col] == board[2][col]
&& board[0][col] != ' '){
return board[0][col];
}
}
//3.判定对角线
if (board[0][0] == board[1][1] && board[0][0] == board[2][2]&&board[0][0]!=' '){
return board[0][0];
}
if (board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[0][2] != ' '){
return board[0][2];
}
//是否和棋
if (IsFull(board)){
return '=';
}
return ' ';
}
int main(){
char chess_board[MAX_ROW][MAX_COL];
//初始化
Init(chess_board);
//进行打印
char result = ' ';
while (1){
Print(chess_board);
//玩家落子
PlayerMove(chess_board);
//判定游戏是否结束
result = IsWin(chess_board);
if (result != ' '){
break;
}
//电脑落子
ComputerMove(chess_board);
//判定游戏是否结束
int result = IsWin(chess_board);
if (result != ' '){
break;
}
}
Print(chess_board);
if (result == 'x'){
printf("你赢了\n");
}
else if (result == 'o'){
printf("你输了\n");
}
else{
printf("和棋!");
}
system("pause");
return 0;
}
三子棋
最新推荐文章于 2024-08-17 12:45:41 发布