Java遞迴實現圍棋提子思想
阿新 • • 發佈:2019-01-25
在製作圍棋遊戲的時候
一般來說會有兩個問題
- 圍棋提子的演算法思想
- Ai走子的演算法思想
由於ai走子的演算法思想確實太過於難了,牽扯到深度學習的東西
這裡就不進行闡述了
畢竟我也根本不會
我將闡述的是圍棋提子的思想
我是使用遞迴的思想來解決的
- 當一名玩家下了一步棋之後,首先看這步棋的四面八方有沒有不同顏色的棋子
- 如果有,則有這個棋子的物件作為形參,開始判斷他的四周為空、異色棋子或者同色棋子
- 如果是異色棋子,返回true
- 如果是同色棋子,將自己標記,並對那個同色棋子執行一下自己這個方法本體
- 如果是空,令氣加一,並放回false
- 如果與操作能順利進行,並且氣等於0,則依次吃掉所有棋子
其實說實話,只要理清楚了,其實並不難的
示例程式碼:
package cn.weiqi.function;
import cn.weiqi.qipan.QiPan;
import cn.weiqi.qizi.QiZiColor;
public class EatedQiZi {
private QiPan qiPan; private QiZiColor qiZiColor; public EatedQiZi(QiPan qiPan, QiZiColor qiZiColor) { this.qiPan = qiPan; this.qiZiColor = qiZiColor; } public boolean eatedQiZi(int X, int Y, int qi) { if(!isYueJie(X, Y) && !isBiaoJi(X, Y) && !isColorSame(X, Y)) { if( (isYueJie(X+1, Y) || isQiZiSave(X+1, Y)) && (isYueJie(X-1, Y) || isQiZiSave(X-1, Y)) && (isYueJie(X, Y+1) || isQiZiSave(X, Y+1)) && (isYueJie(X, Y-1) || isQiZiSave(X, Y-1)) ) { biaoji(X, Y); if( (isYueJie(X+1, Y) || isColorSame(X+1, Y) || isBiaoJi(X+1, Y)) && (isYueJie(X-1, Y) || isColorSame(X-1, Y) || isBiaoJi(X-1, Y)) && (isYueJie(X, Y+1) || isColorSame(X, Y+1) || isBiaoJi(X, Y+1)) && (isYueJie(X, Y-1) || isColorSame(X, Y-1) || isBiaoJi(X, Y-1)) && qi == 0) { killQiZi(X, Y); return true; }else if( eatedQiZi(X+1, Y, qi) && eatedQiZi(X-1, Y, qi) && eatedQiZi(X, Y+1, qi) && eatedQiZi(X, Y-1, qi) && qi == 0) { killQiZi(X, Y); return true; }else { rebiaoji(X, Y); return false; } }else { qi += 1; return false; } }else { return true; } } private void killQiZi(int X, int Y) { qiPan.getQiPan()[X][Y] = null; } private void biaoji(int X, int Y) { qiPan.getQiPan()[X][Y].biaoji = 1; } private void rebiaoji(int X, int Y) { qiPan.getQiPan()[X][Y].biaoji = 0; } private boolean isYueJie(int X, int Y) { if(X<0 || X>18 || Y<0 || Y>18) { return true; }else { return false; } } private boolean isQiZiSave(int X, int Y) { if(qiPan.getQiPan()[X][Y] != null) { return true; }else{ return false; } } private boolean isBiaoJi(int X, int Y) { if(qiPan.getQiPan()[X][Y].biaoji == 1) { return true; }else{ return false; } } private boolean isColorSame(int X, int Y) { if(qiPan.getQiPan()[X][Y].getQiZiColor() == this.qiZiColor) { return true; }else{ return false; } }
}