前言
本次的游戏是实现n子棋,'*‘表示玩家下棋,’#'表示电脑下棋。主要运用循环,函数及数组的知识。语言使用C语言,编译环境是VS2022。
一、设计思路
头文件"game.h"中完成声明棋盘的行列,声明自定义函数以及需要引用的函数的头文件。
源文件hanshu.c中包括一下函数:
主函数:完成游戏基本框架的构建
menu函数:供玩家选择的游戏菜单
game函数:游戏的主要步骤
1.初始化棋盘
2.打印棋盘
3.玩家下棋
4.打印棋盘
5.判断玩家是否赢
6.电脑下棋
7.打印棋盘
8.判断电脑是否赢
9.输出结果(玩家赢,电脑赢,平局)
源文件game.c中是游戏主要步骤的具体实现代码。
二、代码实现
1.头文件
1.代码如下:
//定义棋盘的行和列,可根据自己的需求设定
#define ROW 4
#define COL 4
//srand()和rand()函数引用的头文件
#include<stdlib.h>
//time()函数引用的头文件
#include<time.h>
//棋盘的初始化
void InitBoard(char board[ROW][COL], int row, int col);
//棋盘的显示
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家走
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑走
void ComperMove(char board[ROW][COL], int row, int col);
//判断玩家或者电脑是否赢
char IsWin(char board[ROW][COL], int row, int col);
//判断棋盘是否填满
int IsFull(char board[ROW][COL], int row, int col);
2.代码分析:
首先游戏主要步骤的函数需要声明在头文件中,以便在源文件hanshu.c中只要引用的头文件“game.h”就可以使用。
其次这里需要介绍三种新的函数,srand,rand,time。使用它们需要包含新的头文件。
1.srand(int a)初始化随机种子产生器,即将种子的值改为 a。如果要产生随机种子,可以用下面这个语句
srand((unsigned int)time(NULL));
2.rand()函数返回一个从 0~32767 之间的随机整数,如果要指定范围,例如取[m,n]范围内的随机数,则用公式 rand()%(n-m+1)+m 表示。
3.time()函数返回一个从 1970.1.1 00.00.00 到现在的秒数。因为每次运行的时间不同,因此产生的随机种子也不同,这样就保证运行时可以得到不同的随机序列。
2.源文件hanshu.c
1.代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"game.h"
void menu() {
printf("***********************************\n");
printf("***1.play*******0.exit*************\n");
printf("***********************************\n");
}
void game() {
char board[ROW][COL];//存放走出的棋盘信息
//初始化棋盘
InitBoard(board, ROW, COL);
//打印棋盘
DisplayBoard(board, ROW, COL);
char ret = 0;
while (1) {
//游戏下棋
//玩家下棋
PlayerMove(board, ROW, COL);
DisplayBoard