1、首先写一个头文件 sanziqi.h
#ifndef _SANZIQI_H__
#define _SANZIQI_H__
#define ROW 3
#define COL 3
// 初始化棋盘;
void InitBoard(char arr[ROW][COL], int row, int col);
//显示棋盘
void DisplayBoard(char arr[ROW][COL], int row, int col);
//电脑走
void ComputerMove(char arr[ROW][COL], int row, int col);
//人走
void PlayerMove(char arr[ROW][COL], int row, int col);
//判断输赢
char IsWin(char arr[ROW][COL], int row, int col);
#endif
2、接着写一个主函数 main.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子琪.h"
int menu(void) //设置开始菜单
{
printf("---****************---\n");
printf("---****1、Play*****---\n");
printf("---****0、Exit*****---\n");
printf("---****************---\n");
printf("choose>");
int choose;
scanf("%d", &choose); //选择1:开始游戏;0::退出游戏
return choose;
}
void game(void) //设置游戏页面以及内容
{
char board[ROW][COL];
char ret;
InitBoard(board, ROW, COL); //初始化棋盘
printf("开始游戏咯!\n");
//用do....while语句循环执行游戏
do
{
ComputerMove(board, ROW, COL); //电脑移动
DisplayBoard(board, ROW, COL); //显示
ret = IsWin(board, ROW, COL); //判断输赢
if (ret != ' ') //判断棋盘是否下满
{
break;
}
PlayerMove(board, ROW, COL); //人走
DisplayBoard(board, ROW, COL); //显示
ret = IsWin(board, ROW, COL); //判断输赢
if (ret != ' ') //判断棋盘是否下满
{
break;
}
} while (1);
//判断谁赢
if (ret == 'X')
{
printf("啧啧,你输啦\n");
}
else if (ret == 'O')
{
printf("你居然可以赢?还不错撒!\n");
}
else if (ret == 'P')
{
printf("侥幸平局!\n");
}
}
//主函数
int main()
{
int choose = 0;
do
{
choose = menu();
switch(choose)
{
case 1:
printf("玩一玩吧!\n");
game();
break;
case 0:
printf("不赏脸啊!你会后悔的!\n");
break;
default:
printf("你的手指不小心点错了地方!请重新选择\n");
break;
}
} while (choose);
system("pause");
return 0;
}
3、最后创建一个文件编写所需函数sanziqi.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子琪.h"
// 初始化棋盘;
void InitBoard(char arr[ROW][COL], int row, int col)
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
//显示棋盘
void DisplayBoard(char arr[ROW][COL], int row, int col)
{
int i;
int j;
printf("------------------\n");
for (i = 0; i < row; i++)
{
printf("|");
for (j = 0; j < col; j++)
{
printf("%2c |", arr[i][j]);
}
printf("\n------------------\n");
}
}
//电脑走
void ComputerMove(char arr[ROW][COL], int row, int col)
{
printf("电脑下棋:\n");
do{
int y = rand() % 3;
int x = rand() % 3;
srand((unsigned int)time(NULL)); //设置电脑下棋的位置为随机值
if (arr[y][x] == ' ')
{
arr[y][x] = 'X';
break;
}
} while (1);
}
//人走
void PlayerMove(char arr[ROW][COL], int row, int col)
{
printf("轮到你啦:\n");
int y;
int x;
do
{
scanf("%d%d", &y, &x);
x -= 1;
y -= 1;
if ((0 <= x&&x < 3) && (0 <= y&&y < 3)){
if (arr[y][x] == ' '){
arr[y][x] = 'O';
break;
}
else if (arr[y][x] == 'X')
{
printf("别人已经下过了\n");
}
}
else
{
printf("亲,你下到外面去了!\n");
}
} while (1);
}
//判断棋盘是否下满
static int IsFull(char arr[ROW][COL], int row, int col)
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
//判断输赢
char IsWin(char arr[ROW][COL], int row, int col)
{
int i;
for (i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])
return arr[i][1];
}
for (i = 0; i < col; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])
return arr[1][i];
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
return arr[1][1];
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
return arr[1][1];
if (IsFull(arr, row, col))
{
return 'P';
}
return ' ';
}