3.3模块流程图
Step++ 人人对战 Step值的奇偶来判断,初值为0 奇 偶 step++ 移动棋子 判断胜负 判断胜负 否 是 是 否 下棋 移动棋子 下棋 1号棋手 2号棋手 交换棋手 显示胜负信息 显示胜负信息 交换棋手
棋手下棋流程
//棋色类型
TStoneColor = (scBlack, //黑棋 scWhite); //白棋
//落子点状态类型
TPointState = (psBlack, //有黑棋 psWhite, //有白棋
第 16 页 共 35 页
psNone, //没有棋 psInvalid); //无效位置
显示当前下棋的棋手 Player1或player2 A D/ ENTER/SPACE W/ S/ ESC 判断当前有无棋子 左移光标 右移光标 下棋 上移光标 下移光标 退出 有 无 改变棋型表相应值 退出循环 显示棋子 判断胜负 是 否 电脑下棋流程
第 17 页 共 35 页
结束 退出循环,交换棋手
三、详细设计 1.基本操作
1.1界面以及落子处理
1.使用二维数组Chessboard[15,15]储存棋盘的状态,以0表示没有放子的位置,以1表示放黑子的位置,以2表示放白子的位置;
2.以鼠标的状态提示当前持子的一方; 3.将棋盘作为图片的形式贴处在程序界面上;
4.加载棋子资源(黑、白棋子),当鼠标在棋盘上点击的时候产生事件,处理鼠标的位置产生对应的棋盘坐标位置;
5.判断落子出是否可以落子:不可以则不做任何处理,不改变鼠标的状态;可以落子,则打印对应的棋子图像,记录棋盘位置,并将位置传递给判定函数;
6.交换持子方,重复落子过程,直到判定函数产生胜出结果; [2] 程序流程
第 18 页 共 35 页
本程序由六个基本功能模块构成,各模块的详细分析如下:
(1)初始化:首先,建立盘面数组board[21][21]、对战双方的棋型表Computer[21][21][4]和Player[21][21][4]并将它们清零以备使用 (2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。
(3)玩家下子:当轮到玩家下时,玩家通过鼠标在棋盘上落子,程序会根据该点的位置,在board[21][21]数组的相应地方记录。
(4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体实现方法如下:玩家在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。但是,电脑不会像人一样分析问题,要让它知道哪是“活三”、哪是“冲四”,就得在棋盘上逐点计算,一步一步的教它。
先来分析己方的棋型,从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到
Computer[x][y][n]中就行了(x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向)。而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法填写电脑的棋型表。
电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了。遍历棋型表Computer[15][15][4]和
Player[15][15][4]找出其中数值最大的一点,在该点下子即可。
1.2五子棋判胜
本功能模块主要对游戏的胜负进行判定.
1.由玩家输入棋子所在位置,由系统判定胜负,若胜,则游戏结束;否则,游戏继续.
2.对胜负判定需先确定一个中心棋子位置.
第 19 页 共 35 页
3.由一个中心棋子可以引出四条线形成五子连一线. 4.判定过程中注意越界现象. 概要设计
1. 五子棋的判胜条件即为5个相同的棋子连在一条线上. 2. 以一个棋子为中心,有4条线可以形成五子连线.如图所示:(描红的为中心棋子)
3. 中心棋子即为最后一步所下棋子.
4. 以1线为例,从中心棋子出发(设为白子),先向左进行判断,若棋子为白子,则计数器加1(初始值为1),否则(为黑子或无子),则返
第 20 页 共 35 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C#五子棋设计(4)在线全文阅读。
相关推荐: