黑白棋 联系客服

发布时间 : 星期四 文章黑白棋更新完毕开始阅读

程序而言,他会在每一次对局结束以后升级定式,因此,对于有自学习功能的电脑来说,用上一次击败电脑的战术对付电脑是不会管用的。另一方面,具有自学习功能的电脑的中局棋力也会越来越强,原因是电脑会通过不断升级估值函数的权重来提高棋力。

3.2模块功能

黑白棋程序的整体流程是主函数main()通过调用图形系统初始化函数initgraph()、棋盘绘制函数DrawQp()、对战函数Playtoplay()以及关闭图形系统函数closegraph()来实现游戏程序。函数DrawQp()绘制棋盘并进行游戏状态初始化。对战函数playtoplay()使用两个嵌套的while循环来模拟走棋的过程,外层循环用来变换棋手,内层循环用来模拟棋手的具体走棋过程,关键是调用函数QpChange()来判断棋盘的变化。按Esc键直接退出游戏。

除此之外,实现黑白棋游戏的其他函数包括SetPlayColor()、MoveColor()、DoScore() 、PrintScore()等。函数SetPlayColor()用来设置棋子的初始颜色为黑色和白色。函数MoveColor()完成恢复棋盘原始状态的功能:棋手每走完一步棋后,该函数恢复棋盘格子的原始状态,即如果是从起点出发就将格子恢复为红色,其他情况如果是1,则恢复白色棋子,是2则恢复黑色棋子。函数DoScore()用来处理棋手所得的分数。函数PrintScore()完成在不同的位置输出棋手的成绩。函数PlayWin()输出最后胜利者的结果信息。

黑白棋游戏的棋盘由8*8个格子组成,每个格子的大小为40*40的屏幕像速。棋盘左上角的坐标为(100,100),右下角的坐标为(420,420),棋盘左上角格子的中心坐标为x=120,y=120.游戏中棋子为半径15像速的圆,分别填充为黑色和白色。

程序采用8*8二维数组Map来存放对局双方对弈情况——即双方在棋盘上的对弈棋子。

数组元素Map[0][0]在棋盘左上角第一个位置相对应,数组元素Map[0][1]与棋盘第一行第二个位置相对应,以此类推。因此,数组元素Map[7][0]对应着棋盘左下角的落子位置,元素Map[7][7]对应着棋盘右下角位置棋子。程序约定:数组元素值为1代表黑方,2代表白方,否则说明棋盘上该位置对弈双方尚未落子。棋手下棋时,棋子每次都在棋盘左上方的初始位置(120,80)出现,以供游戏者移动。

程序中用变量x、y分别代表当前棋子的横、纵坐标(x、y)。用下棋手数t来标识对弈棋手,t不能被2整除则代表黑方,能被2整除则代表白方棋手。因此根据下棋手

数t记录黑、白双方对弈棋局Map的代码为:

If(t%2==1) /*黑方棋手,则将棋盘数组中对应元素置1*/ Map[(x-120)/40][(y-120)/40]=1;

Else /*白方棋手,则将棋盘数组中对应元素置2*/ Map[(x-120)/40][(y-120)/40]=2;

游戏中判断对弈双方是否可以在当前位置(x,y)落子是实现的关键。落子的判断条件为:当前位置(x ,y)不是初始位置(120,80)。同时在该位置黑、白双方尚未落子,并且可以翻转对方棋子时,方可在当前位置落子。程序首先进行判断:

Y!=80&&Map[(x-120)/40][(y-120)/40]!=1&&Map[(x-120)/40][(y-120)/40]!=2 即当前棋子位置不是初始位置,并且双方均未落子。

在满足上述条件的前提下,通过调用函数QpChange()来判断当前下棋位置是否乐意翻转对方棋子,并最终确定此置是否可以落子。函数QpChange()入口参数包括落子当前的位置坐标(x,y),以及下棋手数t。函数根据当前棋局的情况,即记录在数组Map中的游戏双方对弈的内容,以棋手下棋的当前位置为中心对棋盘的八个方向进行判断,决定是否可以使对方棋子翻转,同时修改被翻转棋子的颜色,最后将棋盘修改标记yes返回。

这里以向右的判断为例,来说明函数QpChange()的具体实现:初始时棋盘修改标记yes为0,即为棋子翻转。通过行列坐标交换计算当前棋子在棋盘数组Map中的,当棋子位于棋盘8列中的前6列时才向右进行判断;遇到己方棋子或空格时停止,并将位于两位置间的对方棋子变为己方颜色的棋子。若存在被改变颜色的棋子,则置位棋盘修改标记yes为1。若无棋子颜色翻转,则不做修改,其他7个方向的情况类似。

程序通过检测方向键来移动旗子,移动一步后重复落子条件的判断,满足落子条件则落子,然后换对手下棋,若累计尝试落子次数超过棋盘上剩余空格的数量时,当前棋手失去一次落子机会,换对手下棋。

游戏者分数score的更新通过函数DoScore()实现。该函数通过统计保存对弈情况数组Map的元素值实现对棋手得分的更新。

4. 结果与结论

图表 1

图表 2

图表 3

图表 4