文章目录
声明
我写的可能有点复杂,如果想直接看代码,可直接跳转到完整的代码流程部分,将其拼起来即可!
多文件
在开始讲三子棋之前呢,先说说多文件吧。我们平常写代码的时候,如果程序比较大,那么直接包含在一个文件中就会显得比较乱,并且不容易维护,这个时候就需要用到多文件。使用多文件的时候可以将整个程序拆分开来,比方说分为头文件、函数文件、测试文件。当然如果有需要的话,还可以继续细分。
在这里我用了三个文件来分,第一是test.c,用来存放主函数和菜单,用来进行测试使用,第二是game.h用来存放头文件、宏定义以及函数声明,第三是game.c用来存放各个函数。
三子棋游戏实现讲解
test.c
要实现三子棋游戏,首先要一个可以用来测试我们的代码的主函数部分 。我们玩游戏通常都会有选择,所以我们就可以在主函数这里提供一个选择的权力:玩还是退出,游戏嘛,当然是玩完一盘又一盘的所以可以通过循环来实现!
//测试三子棋游戏
#include "game.h"
void menu()
{
printf("**********************\n");
printf("****1.play 0.exit***\n");
printf("**********************\n");
}
void test()
{
int num;
srand((size_t)time(NULL));
do
{
menu();
printf("请输入你的选择:>");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择有误,请重新选择:");
break;
}
} while (num);
}
int main()
{
test();
return 0;
}
game.h
这是头文件的代码
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#define ROW 3 //行数
#define COL 3 //列数
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//声明
void INITBUF(char buf[ROW][COL], int row, int col);
void DisplayBuf(char buf[ROW][COL], int row, int col);
void PlayerMova(char buf[ROW][COL], int row, int col);
void ComputerMove(char buf[ROW][COL], int row, int col);
//告诉我们四种游戏状态
//玩家赢-'*'
//电脑赢-'# '
//平局-'P'
//继续-'C'
char whowin(char buf[ROW][COL], int row, int col);
三子棋是三行三列,所以我们设定全局变量方便使用,这里的’*’,’#’是为了区别双方对弈的棋子,大家也可以用其他替换,方便观看即可!首先我们初始化棋盘信息(INITBUF(buf, ROW, COL)),然后我们打印出棋盘(DisplayBuf(buf, ROW, COL))随便后我们便开始玩家下棋(PlayerMova(buf, ROW, COL)),和电脑下棋(ComputerMove(buf, ROW, COL)),每下一次棋打印棋盘。最后判断输赢(whowin(char buf[ROW][COL], int row, int col))
game.c
实现三子棋每一个步骤的函数代码
有点长,所以我分成一个个的发,这样更直观
INITBUF()
初始化棋盘,初始化为空格
void INITBUF(char buf[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
buf[i][j] = ' ';
}
}
}
DisplayBuf()
打印棋盘
void DisplayBuf(char buf[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", buf[i][j]);
if (j < col - 1)
{
printf("|");
}
}
puts("");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
puts("");
}