头文件
#pragma once
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
#define ROW 3
#define LIN 3
void menu();
char initboard(char arr[][LIN], int row);
char checkerboard(char arr[][LIN], int row);
char manplay(char arr[][LIN], int row);
char complay(char arr[][LIN], int row);
int is_full(char arr[][LIN], int row);
char is_win(char arr[][LIN], int row, int lin);
main函数
#include "game.h"
int main()
{
int input=0;
do{
menu();
printf("请选择: \n");
scanf_s("%d", &input);
switch (input){
case 1:game(); break;
case 2:exit(0); break;
default:printf("请重新输入\n"); break;
}
} while (1);
}
game函数
#include "game.h"
void menu()
{
printf("#######################\n");
printf("#######1.play #######\n");
printf("#######0.exit #######\n");
printf("#######################\n");
}
char initboard(char arr[ROW][LIN], int row,int lin)//初始化棋盘
{
memset(arr, ' ', sizeof(arr[0][0])*lin*row);
}
void checkerboard(char arr[][LIN], int row)//打印棋盘
{
int i = 0;
for (; i < ROW; i++){
printf("%c|%c|%c\n", arr[i][0], arr[i][1], arr[i][2]);
if (i < ROW-1){
printf("———\n");
}
}
printf("\n");
}
char manplay(char arr[][LIN], int row)//玩家走
{
int i, j;
while(1){
printf("请落子: \n");
scanf_s("%d%d", &i, &j);
if (i >=1 && i <= ROW&&j >=1 && j <= LIN){
if (arr[i - 1][j - 1] ==' '){
arr[i - 1][j - 1] = 'x';
break;
}
else {
printf("有子\n");
}
}
else {
printf("违法落子,请重新落子\n");
}
}
}
char complay(char arr[][LIN], int row)//电脑走
{
int i, j;
do{
i = rand() % ROW;
j = rand() % LIN;
if (arr[i][j] == ' '){
arr[i][j] = 'o';
break;
}
} while (1);
system("cls");
}
int is_full(char arr[][LIN], int row)//判断棋盘是否为满
{
int i=0, j=0;
for (; i < ROW; i++){
for (; j < LIN; j++){
if (arr[i][j] == ' ')
return 0;
else{
return 1;
}
}
}
}
char is_win(char arr[][LIN], int row)//判断输赢
{
int i = 0, j = 0;
for (; i < ROW; i++){
if ((arr[i][0] == arr[i][1])&&( arr[i][1] == arr[i][2] )&& arr[i][1] != ' ')
{
return arr[i][1];
}
}
for (j = 0; j < LIN; j++) //判断列
{
if ((arr[0][j] == arr[1][j] )&&( arr[1][j] == arr[2][j]) && arr[1][j] != ' ')
{
return arr[1][j];
}
}
if ((arr[0][0] == arr[1][1] )&& (arr[1][1] == arr[2][2]) && arr[1][1] != ' ') //判断斜列
{
return arr[1][1];
}
else if( (arr[0][2] == arr[1][1])&&( arr[1][1] == arr[2][0]) && arr[1][1] != ' ')
{
return arr[1][1];
}
else if (is_full(arr,row)== 1){
return 'm';
}
else return ' ';
}
void game()
{
char ret;
char arr[ROW][LIN] ;
initboard(arr, ROW,LIN);
checkerboard(arr, ROW);
srand((unsigned int)time(NULL));
do{
//system("cls");
manplay(arr, ROW);
checkerboard(arr, ROW);
ret = is_win(arr, ROW);//
if (ret != ' '){
break;
}
complay(arr, ROW);
checkerboard(arr, ROW);
ret = is_win(arr, ROW);
if (ret != ' '){
break;
}
} while (1);
if (ret == 'x'){
printf("winner\n");
}
else if (ret == 'o'){
printf("loser\n");
}
else if (ret == 'm')
{
printf("draw\n");
}
}