软件构造Lab2漫谈(3)

本文探讨了Lab2中的围棋和象棋游戏的棋子移动逻辑,包括移动棋子和提子(吃子)的操作。在象棋中,移动棋子涉及到合法位置判断,而在围棋中,移动即落子,规则相对简单。提子是围棋的精髓,当棋子无气时可被提取。文章分析了不同位置棋子被提的条件,并指出连气情况的特殊性,揭示了围棋的复杂性和趣味性。
摘要由CSDN通过智能技术生成

Lab2的博客为什么放一天来写呢,其实大家都知道之前课程的进度和实验进度脱节。所以我的实验也是在最后一周再做的。
这次说说P3吧,讨论一下围棋和象棋游戏中几个操作的关键逻辑。
我看到有些大佬是写了GUI的,奈何小弟不才,只能写控制台了…
给出我的程序流程图:
在这里插入图片描述
接下来讨论一下象棋和围棋关于移动棋子的逻辑的相同和不同,这关系到你如何去写,因为相比其它的什么跳过操作,这部分是核心。
1.移动棋子:
象棋:象棋中的移动棋子操作,我将它抽象为集合A,有这样一个集合B,它是A的子集,我将它映射到实际中的吃子操作,想想为什么?然后A-B是什么?A-B将包括:
1)棋子移动到己方另外棋子的位置,当然这是非法的
2)棋子移动到棋盘外,同样非法
3)棋子移动到可行位置,但不包括吃子的位置(对方棋子所在地)
补充:这里我们暂且抛去不同种类棋子行动的限制,认为它可以随便走(这也是实验比较荒诞的地方)。当然,其实要实现这些限制也并不难。
围棋:围棋的逻辑在我看来实际上要比象棋复杂。这里的移动棋子,我们认为是落子。
因为围棋开局的时候场上没有棋子(除非你下的是珍珑棋局(滑稽))。
就落子而言,它的限制要比象棋少:
1)不能在棋盘外
2)不能下载已经有棋子的地方
2.提子
为什么单独把围棋的提子拿出来呢?
因为在编程的过程中,我发现围棋棋面之所以千遍万幻,正是因为这个神奇的规则。
之前没有学过围棋,简单了解了一下规则,发现提子我们可以认为是“吃子”,当一个棋子的气被全部封住的时候,这个棋子称为死子,对手可以提出。
有这样一些限制:
1)提子的对象必须为对手棋子
2)棋子可简单的分为三类,但并没有覆盖到剩下的各种可能
A)棋盘上四个角的位置,单子来看,杀死它需要2个子
B)棋盘边缘,但是不是四角的位置,杀死它需要3个子
C)其余位置,需要四个子。
这里给出(A)的例子:
在这里插入图片描述
上图中坐标为(1,1)的子显然是可以提取的,提取后如图:
在这里插入图片描述
补充说明一下我查到的气: 棋子紧邻的直线,也就是说只有最多四个方向,东南西北。
但是问题来了,我们常常在各种小说中看主角装X,和人下围棋,屠龙。
在我的理解中,出现一整片的棋子是你的的时候,但是全部被围住了,这时候上面的三种情形不适用了,我将它归结为第四类-“连气”,这也是围棋有趣的地方,因之千变万化。
给出一个简单的例子:
在这里插入图片描述
黑子实际上已经为死子,但是在我们之前的三种逻辑中并不包含这种多子“连气 ”的情况,此时我们按之前的逻辑提取(1,1)棋子。出现失败。
在这里插入图片描述
我想围棋作为国粹,长盛不衰,可能也和这个有关系吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值