C语言围棋对弈程序设计
用C语言编写一个围棋对弈棋室的程序,模仿两人对弈的过程,其中包括自动提子功能,和自动点目功能。
1、围棋的一些基本常识:
(1)围棋棋子的“气”
见右图1所示黑棋1有4“气”,分别是水平方向上的左右
各有一气,垂直方向上的上下各有一气,对角上的不是它的气。
图1棋子外“气”
(2)提子(吃子),当下在棋盘上的棋子没有外气时便被提掉(死棋)。
图2、打吃状态 图3、提子
图2中黑1和白2都只有一口外气,图3黑先下7位白2没有外气被提掉。
图4、倒扑提子过程 图5死穴
图4演示了倒扑提子全过程,图中左上为原型,左下黑先黑41扑,右上白64提,右下黑93反提把白棋全吃掉。
(3)死穴:上图5黑1、3、5、7四颗黑子中间交差点对白棋来说是死穴,白棋下不进处,但对黑棋不影响可下见图下方。
2、自动提子功能实现
下在棋盘上的棋子同类别的在某一方位上可能是一颗或是一片(纵横连续的),要实现自动提子首要的是计算清楚这些同类棋子的所有外气是多少,如果已经没有外气提掉。一颗棋子下在棋盘上最多有4口外气(见图1),在边上有3气,在角上只有2气。在程序中对于每一颗棋子检测外气描述如下:检测棋子可能有的方向上(上、下、左、右)是否有棋子,如果有,那么在该方向上没有外气。如果在所有的方向上都有棋子,那么它在棋盘上是无外气的。如果在它所有方向上没有同类棋子而且又无外气,那么该颗棋子可以提掉(见图3)。如果在某一方向上有同类棋子,必须计算完连在一起同类的所有外气。如果整片无外气,该片可以