game.h
#pragma once
#define ROW 3
#define COL 3
void menu();
void game();
void printboard(char board[ROW][COL], int row, int col);
void boardinit(char board[ROW][COL], int row, int col);//棋盘初始化
int judge_winner(char board[ROW][COL]);
void computermove(char board[ROW][COL]);//电脑落子
void playermove(char board[ROW][COL]);//玩家落子
int blance_judge(char board[ROW][COL]);//平局判定
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
#include<stdlib.h>
void menu()
{
printf("********** 1.play 0.exit *********\n");
}
void printboard(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
printf(" %c ", board[i][j]);
if(j<col-1)
printf("|");
}
printf("\n");
if (i < row - 1)
{
for (j = 0;j < col;j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
}
void boardinit(char board[ROW][COL], int row, int col)//棋盘初始化
{
int i = 0;
int j = 0;
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
board[i][j] = ' ';
}
}
}
int judge_winner(char board[ROW][COL])
{
int i = 0;
for (i = 0;i < ROW; i++)
{
if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*')
return 0;
else if (board[0][i] == '*' && board[1][i] == '*' && board[2][i] == '*')
return 0;
}
if(board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*')
return 0;
else if (board[2][0] == '*' && board[1][1] == '*' && board[0][2] == '*')
return 0;
for (i = 0;i < ROW; i++)
{
if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#')
return 1;
else if (board[0][i] == '#' && board[1][i] == '#' && board[2][i] == '#')
return 1;
}
if (board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#')
return 1;
else if (board[2][0] == '#' && board[1][1] == '#' && board[0][2] == '#')
return 1;
return -1;
}
void computermove(char board[ROW][COL])//电脑落子
{
int x = 0;
int y = 0;
do
{
x = rand() % ROW;
y = rand() % COL;
if (board[x][y] == ' ')
{
board[x][y] = '*';
break;
}
} while (1);
}
void playermove(char board[ROW][COL])//玩家落子
{
int x = 0;
int y = 0;
do
{
printf("请输入落子位置->");
scanf("%d %d",&x,&y);
if (board[(x-1)][(y-1)] == ' ')
{
board[(x-1)][(y-1)] = '#';
break;
}
printf("位置错误,重新输入\n");
} while (1);
}
int blance_judge(char board[ROW][COL])//平局判定
{
int count = 0;
int i = 0;
int j = 0;
for (i = 0;i < ROW;i++)
{
for (j = 0;j < COL;j++)
{
if (board[i][j] == ' ')
count++;
}
}
return count;
}
void game()
{
int winner = 0;
char chessboard[ROW][COL] = { ' ' };
boardinit(chessboard, ROW, COL);
printboard(chessboard, ROW, COL);
do
{
computermove(chessboard);
printboard(chessboard, ROW, COL);
winner = judge_winner(chessboard);
if (winner == 0)
{
printf("电脑胜利\n");
break;
}
if (blance_judge(chessboard) == 0)
{
printf("平局\n");
break;
}
playermove(chessboard);
winner = judge_winner(chessboard);
if (winner == 1)
{
printboard(chessboard, ROW, COL);
printf("玩家胜利\n");
break;
}
if (blance_judge(chessboard) == 0)
{
printf("平局\n");
break;
}
} while (1);
}
main.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
#include<stdlib.h>
#include<time.h>
int main()
{
int input=0;
srand((unsigned int)time(NULL));
menu();
scanf("%d", &input);
switch (input)
{
case 0:
return 0;
break;
case 1:
game();
break;
default:
printf("输入错误,请重新输入");
break;
}
return 0;
}