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 ' ';
}