test.C文件
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
int main()
{
int i = 1;
while (1) {
printf("-----------------------\n");
printf("--------1. play--------\n");
printf("--------0. exit--------\n");
printf("-----------------------\n");
scanf("%d", &i);
if (i == 1) {
game();
}
else if (i == 0) {
printf("退出成功\n");
break;
}
else {
printf("输入错误请重新输入\n");
}
}
}
game.h文件
#pragma once
#define line 3
#define COL 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//游戏调用函数
void game();
//设置数组的值
void setArr(char arr[line][COL], int row, int col);
//展示棋盘
void displayBoard(char arr[line][COL], int row, int col);
//玩家下棋
void playerChess(char arr[line][COL], int row, int col);
//电脑下棋
void computerChess(char arr[line][COL], int row, int col);
//判断输赢
char isWin(char arr[line][COL], int row, int col);
//判断棋盘是否满了
int isFull(char arr[line][COL], int row, int col);
game.C文件
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void game() {
char arr[line][COL] = { ' ' };
char temp = ' ';
setArr(arr, line, COL);
displayBoard(arr, line, COL);
while (1) {
playerChess(arr, line, COL);
temp = isWin(arr, line, COL);
if (temp != 'c')
break;
displayBoard(arr, line, COL);
computerChess(arr, line, COL);
temp = isWin(arr, line, COL);
if (temp != 'c')
break;
displayBoard(arr, line, COL);
}
if (temp == '*')
printf("玩家获胜\n");
else if (temp == '#')
printf("电脑获胜\n");
else {
printf("平局\n");
}
displayBoard(arr, line, COL);
}
void setArr(char arr[line][COL],int row,int col)
{
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr[i][j] = ' ';
}
}
}
void displayBoard(char arr[line][COL], int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf(" %c ",arr[i][j]);
if (j + 1 < col)
printf("|");
}
printf("\n");
if (i + 1 < row)
printf("- - - - - -\n");
}
}
void playerChess(char arr[line][COL], int row, int col) {
int x = 0, y = 0;
printf("玩家输入->\n");
while (1) {
printf("请输入位置>\n");
scanf("%d %d", &x, &y);
if ((x > row || x <= 0) || (y > col || y <= 0))
printf("输入错误请重新输入\n");
else {
x--; y--;
if (arr[x][y] != ' ')
printf("输入错误请重新输入\n");
else {
arr[x][y] = '*';
break;
}
}
}
}
void computerChess(char arr[line][COL], int row, int col) {
printf("电脑输入->\n");
while (1) {
srand((unsigned)time(NULL) + (unsigned)rand());
int a = rand() % 3;
srand((unsigned)time(NULL));
int b = rand() % 3;
if (arr[a][b] == ' ') {
arr[a][b] = '#';
break;
}
}
}
int isFull(char arr[line][COL], int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
char isWin(char arr[line][COL], int row, int col) {
for (int i = 0; i < row; i++) {
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
return arr[i][1];
}
for (int i = 0; i < col; i++) {
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')
return arr[0][i];
}
if (arr[0][0] == arr[1][1] & arr[1][1] == arr[2][2] && arr[1][1] != ' ')
return arr[0][0];
if (arr[1][1] == arr[0][2] && arr[2][0] == arr[1][1] && arr[1][1] != ' ')
return arr[1][1];
if (isFull(arr,row,col))
return 'f';
return 'c';
}