为了熟悉面向对象编程的思路,网上找到了大佬写的黑白棋的C#编程程序,学习受益良多,下面是网页链接链接: link
在学习中遇到几个问题,并给出了自己的解决方法,供大家参考。
1,“提示”数组元素残留
在下完一局游戏后,如果点击”开始游戏“,直接开始下一局,会出现有一部分用来覆盖“提示”的图片,重新出现在棋盘上。
图片:
一局游戏结束后,点击“开始游戏”,部分用来覆盖“提示”的图片,重新出现在棋盘上。
这里为了方便查看,我将原先用来清除“提示”的背景图片替换成具有标识的图片。
p1.png;
解决方法:
没有搞清图片出现的规律,但是可以确定是Info数组元素残留导致的,于是我在点击“开始游戏”按钮时,对Info数组进行了清空,可以解决这个问题。
2,棋子覆盖
在进行游戏时,我发现点击频率过快,会出现同一个棋子连续变色的情况,仔细观察,发现当鼠标点击位置对应的棋子满足“Can_go”函数时,就可以在当前位置落子。如果当前位置已经有棋子,理论上不可落子,但实际上,此时再点击当前位置,依旧可以落子。
如下图,此时(D,5)有白子,理论上,黑子不可落在(D,5).
当鼠标点击(D,5)位置,依旧可以落子,导致(C,5)、(D,5)棋子变色。
当再次点击(C,5),又会导致(D,5)再次变成白子。交替点击(C,5)和(D,5),会使两颗棋子连续变色。
解决方法:
因为当前位置有棋子,所以不应该允许再次下子,所以我在Can_go函数中增加了对当前位置是否有子的判断。只有当前位置无子,才能进行接下来的判断。之所以不在CheckDirect函数中添加,是因为CheckDirect函数在落子之后,还要被调用,此时当前位置已经落子,此时“Map[x1,y1] !=0”;如果在CheckDirect函数内部添加,会与“Map[x1,y1]==0”的逻辑冲突,导致无法翻棋。
3,游戏结束会出现多余提示
在游戏进行到尾声,判断胜负时,会出现先弹出"对方无可走位置,请继续走棋"的提示,关闭之后在出现胜利提示的弹框。
解决方法:
如果不想在游戏结束时出现"对方无可走位置,请继续走棋"的提示弹框,可以将对应的程序段放在胜利判断的程序段后面。
小结:
困难像弹簧,看你强不强;你强它就弱,你弱它就强。
02-14
07-07
12-09
02-07
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交