智能五子棋2

四、*项目实现过程*

*4.1、界面设计*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8ueV1vt-1636549459020)(file:///C:\Users\LJC666\AppData\Local\Temp\ksohtml43100\wps8.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cI6BSDb-1636549459021)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

图4.1.1 总体算法流程图

4.2、游戏裁判算法:判断赢家

当某种颜色的棋子胜利的时候,会有弹窗提示玩家,玩家只有点击“确定”才会重新刷新棋盘,否则点击棋盘是无反应的。

当我判断胜负后能结束游戏时,我会把控制交替下子的变量赋值为另一个数字,使程序进不去落子循环,从而控制赢得游戏之后不能再对棋盘进行改动的操作,而当玩家点击了“确定”之后,程序会立即刷新棋盘,从而使玩家可以进入下一个对局。
 

int i2, j2;

for (i2 = i - 4, j2 = j - 4; i2 <= i + 4 && j2 <= j + 4; i2++, j2++) {



if (a[i2][j2] == x) {               //左上往右下

sum2 = sum2 + 1;

}

else {

sum2 = 0;

}



if (sum2 == 5) {

pd = 1;

}

}



int i3, j3;

for (j3 = j - 4, i3 = i; j3 <= j + 4; j3++) {



if (a[i3][j3] == x) {               //横

sum3 = sum3 + 1;

}

else {

sum3 = 0;

}



if (sum3 == 5) {          //赢

pd = 1;

}

}



int i4, j4;

for (i4 = i - 4, j4 = j + 4; i4 <= i + 4 && j4 >= j - 4; i4++, j4--) {

if (a[i4][j4] == x) {             //右上往左下

sum4 = sum4 + 1;

}

else {

sum4 = 0;

}



if (sum4 == 5) {

pd = 1;

}

}



if (pd == 1) {

return true;

}

else {

return false;

}

}

4.3、机器价值表算法:

​ 每下一颗棋子时,先判断是否产生输赢,若是没有产生输赢,则判断棋盘类型并根据不同的类型刷新价值表。

例如:每下一颗棋子则在其周围加10,活二在其前后各加100,死二则在其为被堵住的地方加50,活三在其前后加1000,死三则在其为被堵住的地方加500,活四则在其前后分别加10000,死四则在其为被堵住的地方加上2000。

当机器落子时,会遍历黑白双方的价值表,判断此时是应该进攻还是防守,应该让自己赢还是不让对方赢,从而更大程度掌握棋局优势。
 

你可能感兴趣的:(c语言)