分别创建test.c game.c 两个源文件,以及game.h头文件
这里的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,先将各自的棋下为一排(横/竖/斜)者获胜,若棋盘占满还为分出胜负,则判为平局。
- game.h中用于函数定义
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef ___TIME_H__
#define ___TIME_H__
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define LINE 3
void SETGRID(char arr[ROW][LINE], int row, int line);//打印棋盘
void INIT(char arr[ROW][LINE], int row, int line);//初始化棋盘
void PLAYER_MOVE(char arr[ROW][LINE], int row, int line);//玩家走
void AI_MOVE(char arr[ROW][LINE], int row, int line);//电脑走
int ISFULL(char arr[ROW][LINE], int row, int line);//判断是否平局
void CHEAK(char arr[ROW][LINE], int row, int line);//判断输赢
#endif
- test.c用于存放主函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
int main()
{
int key;
int choose;
printf("******************************************\n");
printf("***1.开始 0.结束***\n");
printf("******************************************\n");
printf("你的选择是:");
scanf("%d", &key);
char arr[ROW][LINE] = { 0 };
int ret = 0;
switch (key)
{
case 1:
SETGRID(arr, ROW, LINE);
INIT(arr, ROW, LINE);
flag:
while (1)
{
PLAYER_MOVE(arr, ROW, LINE);
SETGRID(arr, ROW, LINE);
AI_MOVE(arr, ROW, LINE);
SETGRID(arr, ROW, LINE);
ret = WIN(arr, ROW, LINE);
if (ret == '1')
{
printf("你赢了");
break;
}
if (ret == '0')
{
printf("电脑赢了");
break;
}
if (ret == 'p')
{
printf("平局");
break;
}
}
printf("是否再来一局Y N");
scanf("%d", &choose);
if (choose == 'Y')
{
goto flag;
}
else
{
;
}
break;
case 0:
break;
default:
break;
}
return 0;
}
3.game.c中实现游戏的函数
//这里就是本游戏最核心的地方
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"game.h"
void SETGRID(char arr[ROW][LINE], int row, int line)//打印棋盘
{
int i = 0;
printf(" 1 2 3 \n");
printf(" ________ \n");
for (i = 1; i <= ROW; i++)
{
printf("%d| %c| %c| %c|\n", i, arr[i - 1][0], arr[i - 1][1], arr[i - 1][2]);
printf(" |__|__|__|\n");
}
}
void INIT(char arr[ROW][LINE], int row, int line)//初始化棋盘
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
for (j = 0; j < LINE; j++)
{
arr[i][j] = ' ';
}
}
void PLAYER_MOVE(char arr[ROW][LINE], int row, int line)//玩家走
{
int x = 0;
int y = 0;
flag:
printf("玩家走\n");
printf("输入你的坐标x,y:\n");
scanf("%d %d", &x, &y);
if (x > ROW || y > LINE)//判断玩家输入是否合理
{
printf("请正确输入\n");
goto flag;
}
else
arr[x - 1][y - 1] = '1';
}
void AI_MOVE(char arr[ROW][LINE], int row, int line)
{
int a = 0;
int b = 0;
printf("电脑走\n");
while (1)
{
a = rand() % 3;//用随机数来控住电脑的下棋的位置
b = rand() % 3;
if (arr[a][b] == ' ')
{
arr[a][b] = '0';
break;
}
}
}
int ISFULL(char arr[ROW][LINE], int row, int line)//判断棋盘是否占满
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < LINE; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
int WIN(char arr[ROW][LINE], int row, int line)//判断输赢
{
int k = 0;
for (k = 0; k < ROW; k++)
{
if (arr[k][0] == arr[k][1] && arr[k][1] == arr[k][2] && arr[k][0] != 0)
{
return arr[k][0];
}
}
for (k = 0; k < LINE; k++)
{
if (arr[0][k] == arr[1][k] && arr[1][k] == arr[2][k] && arr[0][k] != 0)
{
return arr[0][k];
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != 0)
{
return arr[0][0];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != 0)
{
return arr[0][2];
}
if (ISFULL(arr, row, line))
return 'p';
return ' ';
}
好了,简单的三子棋就完成了,大家如果有不懂的地方或者有需改进的地方,欢迎大家在下方评论,谢谢。