代码汇总在最后
一、源文件及头文件的创建
首先,对于三子棋来说所有代码放在一个源文件中不利于编写和查找代码。因此可将其分为test.c实现三旗子的大致流程,game.c实现具体游戏过程(如打印棋盘,玩家下棋,电脑下棋,判断输赢),以及game.h包含头文件及函数。
二、三子棋游戏的逻辑和基本流程
- 打印游戏菜单,让玩家选择进入游戏或退出游戏。
- 初始化棋盘
- 打印棋盘
- 玩家下棋
- 判断是否满足游戏结束的条件(输赢及和棋)
- 电脑下棋
- 判断是否满足游戏结束的条件(输赢及和棋)
- 重复3-7,直到出现输赢或和棋(即棋盘下满)
三、代码实现
1.游戏菜单及进入游戏
void menu()
{
printf("***********************\n");
printf("*******三子棋游戏******\n");
printf("*****1.play 0.exit*****\n");
printf("***********************\n");
}
根据游戏逻辑,编写出主函数,游戏具体实现过程在game()函数中实现 。
int main()
{
srand((unsigned int)time(NULL));//设置随机数的生成起点,电脑下棋时要用到
int input = 0;
do//do while语句使得一打开程序先打印一遍菜单,
在游戏结束后或者选择错误时通过循环再次打印
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏具体实现
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
2.头文件
将上述整理好的下棋流程分别用函数实现之前,先在头文件中包含这些函数。
棋盘使用的二维char数组来表示。数组的行列数用宏定义,方便修改棋盘的大小。
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//宏定义
#define ROW 4
#define COL 4
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘
void DispalyBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑下棋
//找没有下棋的随机下棋
void ComputerMove(char board[ROW][COL], int row, int col);
//玩家赢 - '*'
//电脑赢 - '#'
//平局 - 'Q'
//继续 - 'C'
char IsWin(char board[ROW][COL], int row, int col);
3.初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
4.打印棋盘
void DispalyBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j