1. 五子棋对战说明 2. 实验报告
3. 源代码
五
子
棋
作品特点:C 语言程序 五子棋 作品功能:五子棋人机对战,人人对战。
目录:1
五子棋介绍。
五子棋棋型介绍。 人人对战的实现。 电脑下子的实现。 棋型价值的计算。 胜利及棋型的判断。 补充说明
五子棋介绍。
五子棋是一种两人对弈的纯策略型棋类游戏。只 要 任 意 一 方 在 棋 盘 上 且 同 一 个 回 合 上 连 为 五 子 为 胜 。 还 有 禁 手 规则 , 在 本 程 序 中 不 作 讨 论 。
五子棋棋型介绍。
1
本程序中的棋型均为本人自定义。本程序总共设计 35 种棋型。●表示玩家的棋子,◎表示电脑的棋子。以下称电脑 方为己方,玩家方为对方。从一空点向某一方向判断该方向 的棋型。某一方向指 1-8 方向 从右顺时针开始数。
①1①
①2①
空棋型。从一空点向一方向看连续 2 个为空的棋 型。空棋型共 1 种。
如图,从左端的空点向右看会发现 有连续 2 个空点。
活棋型。2 端无挡的棋型为活棋型。活棋型共 8 种: 己方 4 种,对方 4 种。
左图为 己活 3 。从左端的空点
向右看会发现己方有连续的 3 个子,且右端无挡。故 该点的 1 方向为己活 3。
左图为 对活 2
①3①
冲棋型。1 端无挡的棋型为冲棋型。冲棋型共 9 种: 己方 4 种,对方 4 种,边界 1 种。
左图为边界冲棋型。空点的右端为边界。
或
左图为 己冲 2。从左
端的空点向右看会发现己方有连续的 2 个子,且右端 有挡(此处有挡表示有对方的子或为边界)。故该点的 1 方向为己冲 2。
2
①4①
左图为 对冲 4。
空活棋型。从一空点向一方向看有 1 个空点,继 续看有己方或对方的活棋型。空活棋型共 8 种:己 方 4 种,对方 4 种。
左图为 己空活 2。从左端的空点
向右看有 1 个空点,继续看会发现己方有连续的 2 个 子,且右端无挡。故该点的 1 方向为己空活 2。
左图为 对空活 1。
①5①
空冲棋型。从一空点向一方向看有 1 个空点,继 续看有己方或对方或边界冲棋型。空冲棋型共 9 种:己方 4 种,对方 4 种,边界 1 种。
左图为边界空冲棋型。空点的右端为空点再
右看为边界。
或
左图为 己空冲 2。
从左端的空点向右看有 1 个空点,继续看会发现己方 有连续的 2 个子,且右端有挡。故该点的 1 方向为己空 冲 2。
3 人人对战的实现。
双方玩家轮流下子,直到一方形成五连即判为胜方。下 子时输入棋盘上显示的对应坐标。如果某方需要悔棋,则 输入 15 15 即可。悔棋只能悔一步。在人机对战中亦可悔 棋。
3
4 电脑下子的实现。
人机对战中电脑下子是通过 AI(int *p,int *q)这个函数 实现的。用 p 、q 返回下子的坐标。先历遍棋盘上所有点, 如发现一个空点则调用函数 value(int p,int q)计算该空点 的价值。每个点又由 8 个方向的棋型组成。调用函数 qixing(int n,int p,int q)判断空点 p q 在 n 方向上的棋型 号。对每种棋型进行赋值,然后对各个方向的棋型进行分 析。最后计算出该空点的价值。如此找到棋盘上价值最大 的空点,则电脑在该处下子。
5
棋型价值的计算。
棋型价值的计算是通过函数 value(int p,int q)实现的。先 调用函数 qixing(int n,int p,int q) 判断空点 p q 在 n 方向 上的棋型号。n 为 1-8 方向 从右顺时针开始数。对 8 个方 向的棋型进行分析后给出该点的价值。各种棋型的价值存 在数组 a[2][4][4]中。本程序将两相反方向的棋型进行合 在一起进行分析。本程序分为六类进行讨论。
① 空棋型 and 其他。
① 边界冲棋型 and 其他。
① 边界空冲棋型 and 其他。
① 己活己活 己活己冲 对活对活 对活对冲。
4
6
① 己活对活 己活对冲 己冲对活 己冲对冲。 ① 其他棋型。
①
胜利及棋型的判断。
胜利及棋型的判断都调用了函数 yiwei(int n,int *i,int
*j)。在 n 方向上对坐标 i j 移位。 n 为 1-8 方向 从右顺时 针开始数。
胜利的判断:每下一次子从该点向 1 方向移位,移位后判断 新点是否与下的子相同。如相同则继续移位判断,否则转向 判断即 n+=4;如转向后仍然没五连,则换下一个方向判断即 n-=3;直到出现五连则胜利,如果 8 个方向判断完都没有五 连则返回 0,表示还未胜利。
棋型的判断:棋型的判断主要运用 switch 语句。在某一方向 移位后判断该点的状态。最后得出该方向上的棋型号。
7 补充说明
在 WIN7