第27章 围棋 (第2/2页)
围棋的棋盘,盘面有纵横各十九条等距离、垂直交叉的平行线(19x19),共构成361个交叉点。
盘面上标有九个小圆点,称为“星位”,中央的星位又称“天元”。
使用的棋子分黑白两色,可称为黑子、白子,棋子的数量以黑白子各180个为宜。
围棋的下法,是双方各执一色棋子,黑子先行,交互落子,每次只许落一子。棋子需落在棋盘的点上。
围棋讲究气,一个棋子在棋盘上,与它直线紧邻的空点就是这个棋子的气。
棋子直线紧邻的点上,如果有同色棋子存在,则他们便连成一个整体。
如果所有的气均为对方所占据,便呈无气状态。无气状态的棋子不能在棋盘上存在。
把无气之子提出盘外的手段叫提子,落子后,对方棋子无气,应立即提取。
落子后,若该子会立即成为无气状态,又不能提取对方棋子时,则应禁止落下,为禁着点。
围棋的计算胜负(按数子规则),先将双方死子全部清理出盘外,然后对一方的活棋(包括活棋围住的点)以子为单位进行计数,最终子多者胜出。
其中为了抵消黑方先手的优势,黑方需要进行贴子,需贴出三又四分之三子。简言之,黑方至少185点数以上方为获胜,反之白方胜。
有口诀如下:
棋之盘,方十九,三百六十一叉点。
黑白子,黑先走,黑胜要过一八五。
交叉口,气相连,气尽棋亡最自然。
遇打劫,停一手,防止全局形再现。
......
对于张应郗来说,他的任务就是把这些规则转换成程序语言展现出来。
他需要用代码画出棋盘,用二位数组存储棋盘位置,然后画棋子,对点位的三种状态定义枚举常量,即空位、黑子、白子。
再使用适配器模式监听用户的触屏事件,对于落子的触屏实现方式,他想到两种实现思路。
一种方式是触屏单击落子,屏幕下方再准备一个确认按钮,用户点位上单击落子后,点确认按钮落子无悔。
另一种方式是触屏双击落子,用户在屏幕的点位上单击落子,再单击其他位置,可以改变落子,只有双击才会真正落子,落子无悔。
他本想把两种方式都做出来,到时候让用户自己选择落子方式,但本着最小化开发原则,还是直接设置死了落子原则,直接采用触屏双击落子方式。
按照执黑先行,轮流落子规则,让程序判定当前触屏的棋手和落子状态。比如用户甲落子后,屏幕提示用户乙操作。
这里面数判断棋子的气较为繁琐,不仅要判断单个棋子的气,还要计算相连己方棋子的气,对已经计算过棋子的位置也需要记录,这样后面避免重复计算。
对于一些禁着点,也需要进行判断,不能让棋子落在里面。
界面的话,中间一个棋盘,下方布置几个按钮,有“开始”、“悔棋”、“过一手”、“认输”、“提子”,“结束”。
最上面是文字显示位,显示当前轮到棋手。当终局时,文字显示获胜方和获胜子数。
围棋比赛里使用的计时器,张应郗暂时也放弃了,反正是元老们私下对弈,又不是比赛,弄个计时器没什么意义。
张应郗将业务规则、用户界面、交互方式和关键逻辑实现方法,整理记录在文档上,心中对整个围棋项目实施大致有数了。
打开专用的魔网程序开发软件,他开始进行真正的开发。
魔网开发语言的理念和原理,和蓝星确实相似,大多数情况张应郗都可以运用自己在蓝星的开发经验,写出对应代码。
遇到一些魔网独有的函数方法或语法,也可以在系统整理的魔网开发大全资料中检索。
这次开发可以说是宗门高层对他的一次面试,面试的结果决定他今后在宗门内的地位。
张应郗写的废寝忘食,每次都需要野猪无牙过来拱他提醒,他才能想到吃饭的事。
用了2天时间,张应郗做出了一个初版围棋程序。
他摸着自己头发,唏嘘道:“你们辛苦了,一定要坚持住啊!”
系统见张应郗初版弄出来了,提起了一丝兴趣,停下当前对功法的解析。
“小伙子,干的不错嘛,居然自己做出来了,哥送你一次免费测试怎么样!”
不等张应郗同意,系统直接扫过整个围棋程序,没到半分钟,系统就挑出了十多个bUG,嘿嘿地笑。
“技术尚需琢磨,要加强学习啊,自己去修复吧。”
而且,系统还额外送了一个传道受业任务给张应郗。
场景转换。
张应郗成为铁功宗的一个产品经理。
现在宗门要生产一种新产品,使用现有的生产条件。
现可供生产的产品有甲、乙、丙、丁四种类型。因缺少相关资料背景,对新产品的市场需求只能估计为大、中、小三种状态,在不同市场需求条件下,新产品的收益值如下所示:
产品....需求量大....需求量中....需求量小
甲.........800............320............-250
乙.........600............300............-200
丙.........300............150................50
丁.........400............250..............100
系统:你接下来的任务,是采用“后悔值”方法,算出应生产哪种产品?
张应郗惊呼,好家伙,系统开始出带表格的题了!