【面向对象编程-黑白棋-补丁】

为了熟悉面向对象编程的思路,网上找到了大佬写的黑白棋的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,游戏结束会出现多余提示
在游戏进行到尾声,判断胜负时,会出现先弹出"对方无可走位置,请继续走棋"的提示,关闭之后在出现胜利提示的弹框。
在这里插入图片描述
在这里插入图片描述
解决方法:
如果不想在游戏结束时出现"对方无可走位置,请继续走棋"的提示弹框,可以将对应的程序段放在胜利判断的程序段后面。
在这里插入图片描述
在这里插入图片描述
小结:
困难像弹簧,看你强不强;你强它就弱,你弱它就强。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。 棋子:白棋棋子每颗由白两色组成,一面白,一面,共64个(包括棋盘中央的4个)。棋子呈圆饼形。    棋盘:白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内。棋盘可分为“角”、“边”以及白棋“中腹”。现今的棋盘多以8x8较为普遍。 棋钟:正式的比赛中可以使用棋钟对选手的时间进行限制。非正式的对局中一般不使用棋钟。 白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。开始时在棋盘正中有两白两四个棋子交叉放置,棋总是先下子。    下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。 并且,只有在可以翻转棋子的地方才可以下子。  如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。     每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。其中两颗是棋,另两颗是白棋棋总是先走。    当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的颜色,使它们成为您方的颜色。例如,如果您执棋,并且看到在一排白棋的某一端是一颗棋,那么当您将一颗棋放在这一排的另一端时,所有的白棋都将翻转并变为棋!   所有的直线方向均有效:水平、垂直和斜线方向。    走棋的唯一规则是只能走包围并翻转对手的棋子。每一回合都必须至少翻转一颗对手的棋子。    按规则不能再走棋时,这一回合弃权。计算机会自动将控制权交给对方。 得分 “翻转棋”的计分方法非常简单。游戏过程中随时都显示棋数与白棋数。结束时棋数最多的一方就是赢家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值