首先创建头文件对函数进行申明
#pragma once
#ifndef _SANZIQI_H_
#define _SANZIQI_H_
#define ROW 3
#define COL 3
//初始化
void InitBoard(char arr[ROW][COL], int row, int col);
//棋盘
void Display(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);
//判断棋盘是否填满
int Check(char arr[ROW][COL], int row, int col);
//判断输赢
int iswin(char arr[ROW][COL], int row, int col);
#endif
创建主函数编写游戏的玩法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include "三子棋.h"
int menu(void)
{
printf("+----------------------+\n");
printf("| 1 play |\n");
printf("| 0 exit |\n");
printf("+----------------------+\n");
printf("choose>>\n");
return 0;
}
void game()
{
char arr[ROW][COL];
InitBoard(arr, ROW, COL);
while (1)
{
printf("电脑走\n");
ComputerMove(arr, ROW, COL);
Display(arr,ROW, COL);
if (iswin(arr, ROW, COL) != ' ')
{
break;
}
printf("玩家走\n");
PlayerMove(arr,ROW,COL);
Display(arr, ROW, COL);
if (iswin(arr, ROW, COL) != ' ')
{
break;
}
}
if (iswin(arr, ROW, COL) == 'O')
printf("玩家赢了\n");
else if (iswin(arr, ROW, COL) == 'X')
printf("你太菜了电脑都打不过\n");
else if(Check(arr,ROW ,COL==0))
printf("平局\n");
}
int main()
{
int choose;
do {
menu();
scanf("%d",&choose);
switch (choose)
{
case 1:
printf("下棋\n");
game();
case 0:
printf("退出\n");
break;
}
} while (choose);
system("pause");
return 0;
}
对申明的函数进行编写
#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 = 0;
int j = 0;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
arr[i][j] = ' ';
}
void Display(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
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)
{
int i = 0;
int j = 0;
srand((unsigned int)time(NULL));
while (1)
{
i = rand() % 3;//产生随机数
j = rand() % 3;
if (arr[i][j] == ' ')
{
arr[i][j] = 'X';
break;
}
}
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
while (1)
{
printf("输入你的位置\n");
scanf("%d%d", &i, &j);
i--;
j--;
if ((i >= 0 && i <= row - 1) && (j >= 0 && j <= col))
{
if (arr[i][j] == ' ')
{
arr[i][j] = 'O';
break;
}
else
{
printf("这个位置已经有棋子了\n");//判断格数是否被占用
break;
}
}
else
{
printf("输入错误\n");
break;
}
}
}
int Check(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for(i=0;i<ROW;i++)
for (j = 0; j < COL; j++)
{
if (arr[i][j] == ' ')//对所有格子进行检测看是否有空格子
return 1;
}
return 0;
}
int iswin(char arr[ROW][COL], int row, int col)//检测横竖斜
{
int i = 0;
for (i = 0; i < ROW; i++)
{
if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][2] != ' '))
return arr[i][0];
}
for (i = 0; i < ROW; i++)
{
if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[2][i] != ' '))
return arr[0][i];
}
if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[2][2] != ' '))
return arr[0][0];
if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[2][0] != ' '))
return arr[0][2];
return ' ';
}
实现结果: