接到一个工作任务,需要实现一个能够下围棋的App,对手是机器。
初步讨论,选择单独做一个iPad版本,开发语言我选择了 Swift。尽管 Swift 还在演进中,等新版的 iOS 和 XCode 发布后,会升级到第4版,但至少我可以在这个间隙来掌握 Swift 的主要语法。同时考虑到,如果招人的话,会Swift语言本身也是一个过滤条件,有能力掌握或者自学的,水平不会太差。
既然要做围棋,那么先要了解一下围棋的基本知识。拿来腾讯围棋(野狐)玩了几把,居然第一把执黑把对方给吃完了。顿时干劲十足,当然,后来几把都输得一塌糊涂,不懂定势自然吃亏。
野狐上初级玩家是可以选择小棋盘的,因此先从认识棋盘下手。
根据 wiki 上围棋的介绍,标准棋盘有纵横19根黑线,相交的点用来放棋子。棋子分为黑白两方,执黑先行,每次轮流放一个棋子在交叉点上。
为了交流和记忆,棋盘上可以标记坐标,最常见的是从黑方视角触发,按照左手系坐标从左下角开始标记,x轴方向用英文字母表示,从A开始,y轴方向用数字表示,从1开始。由于计算机字体的缘故,x轴可以跳过字母I,以防止和数字1搞混。也有其他坐标法,不作展开。
同时为了方便定位,在标准棋盘上,第4根、第10根和第16根(19-4+1)横线,和第4根、第10根和第16根纵线交叉形成的9个点,叫做星,会有个黑点进行标记,中间的那个黑点叫做天元。
棋盘是可以缩小的,标准棋盘是19x19,也有9x9、13x13,以及15x15、17x17等,星的位置对应调整,天元保持在棋盘中央。值得一提的是,9x9的线是第3根而不是第四根。
棋谱有一个标准格式 SGF,官方网站:http://www.red-bean.com/sgf/,还没来得及深入了解。
围棋术语中英文:http://senseis.xmp.net/?ChineseGoTerms
围棋下棋时,除了在交叉点轮流放棋子外,会有一些规则,比如可以把围起来的对方棋子吃掉(移除棋子),以及有些位置是不能下的(比如打劫、没有气或者不可自杀)。
有了这些信息,棋盘可以开始具体设计了。
网友评论