五子棋的开发文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

五子棋开发文档

1、开发工具

核心算法——应用c++开发,并生成dll文件供界面程序调用。

棋盘界面——应用c#.net开发,完成下棋时的人机交互。

2、核心算法程序

用于实现下棋过程中的“胜负判断”和“下棋决策”。

程序中,各函数功能如下:

void restart()——开局函数。

实现核心算法中的棋盘落子记录数组flag[15][15]清零,用于标志新的一局游戏开

始。每次开始新游戏时调用。

int judge()——判断游戏胜负函数。

返回值:0 ——未分胜负;1 ——人胜; 2 ——计算机胜。

int donext(int x,int y,int *nx,int *ny) ——计算机落子决策算法I。

参数说明:

x ——人落子的竖轴坐标。

y ——人落子的横轴坐标。

nx ——计算机决策的落子的竖轴坐标。

ny ——计算机决策的落子的横轴坐标。

算法说明:

该算法分四个方向扫描,分别是左——右、上——下、左上——右下、右上——左下。每次扫描根据可落棋子处在该方向上的两侧的已有棋子情况,判断该落棋点的防御价值和进攻价值。四个方向扫描完成后,如果所有可落棋点均不构成威胁,则选择最有利的进攻方式落棋;若可构成威胁,但有可致胜进攻位置,则按可致胜的进攻位置落棋;落构成威胁且无更佳的进攻位置,则落棋至威胁最大的位置。

int donext2(int x,int y,int*nx,int*ny) ——计算机落子决策算法II。

x ——人落子的竖轴坐标。

y ——人落子的横轴坐标。

nx ——计算机决策的落子的竖轴坐标。

ny ——计算机决策的落子的横轴坐标。

算法说明:

该算法按从左到右,从上到下的方式扫描整个棋盘,并分别决策每个可落棋点的防御价值和进攻价值。每次扫描根据可落棋子处在左——右、上——下、左上——右下、右上——左下四个方向,共8侧的已有棋子情况,判断该落棋点的防御价值和进攻价值时,根据所判方向的两侧落子情况进行。决策时还需考虑连续棋子的长度因素,共同评估该处落子的危险程度(对方)和取胜程度(己方)。落棋后,无连续棋子,赋值为1;连续棋子长度为2,半死-2,全死-0,活棋-9;连续长度为3,全死-0,半死-3,活-37;长度4:半死-4,全死-0,活-149;长度为5:600。

整个棋盘扫描完成后,如果所有可落棋点均不构成威胁,则选择最有利的进攻方式落棋;若可构成威胁,但有可致胜进攻位置,则按可致胜的进攻位置落棋;落构成威胁且无更佳的进攻位置,则落棋至威胁最大的位置。

int setvalue(int lflag,int llength,int lb,int rflag,int rlength,int rb,int f)——用于评价每落棋点的威胁程度和进攻价值。

参数意义:

Lflag——左侧已有棋子性质。

Llength——左侧已有棋子的连续长度

Lb——左侧连续棋子的左侧是否是活棋

Rflag——右侧已有棋子性质。

Rlength——右侧已有棋子的连续长度

Rb——右侧连续棋子的左侧是否是活棋

f——计算的是威胁程度还是进攻价值的标记。若为Flag_person,则计算的是威胁程度;若为flag_computer,则计算的是进攻价值。

void initsetvalue()——用于初始化评价数组的函数,每次决策下一步步骤时调用。

int getvalue(int x,int y,int* pv,int* cv)——得到每一位置的威胁程度和进攻价值的数值。调试时用。

3、棋盘界面程序

游戏时界面如下:

图1 设置游戏中的先手

图2 游戏过程中的画面

3.1 功能介绍

每次开始新游戏时,需点击“开始游戏”菜单,然后弹出设置先手关系的界面,如图1所示。游戏过程中画面,如图2所示。

3.2 函数介绍

void DrawChessbord(Graphics gp)——绘制棋盘。在onpaint时间处理重载函数中调用。

void DrawChess(Graphics gp)——绘制棋子。在onpaint时间处理重载函数中和每次落子(包括人和计算机)后调用。

private int[] findposition(int x,int y)——根据鼠标位置,映射落子的棋盘位置。

private void Form1_Click(object sender, EventArgs e)——鼠标单击事件处理函数。处理落子后的显示和计算机决策函数的调用,用于完成人机交互的主要功能。

相关文档
最新文档