本人新手,最近做了一個演算法。運行成功了,但是還是有些問題而且智能度不高。
我是用二維陣列存盤,-1表示空白,0表示白色(人),1表示電腦。
兩個for遍歷,對每一個旗子進行
對當前旗子的附近8個棋子進行探測,分別計算上下左右左上左下右上右下判斷棋子數,
同時判斷是否被阻擋,通過判斷棋子在一個方向的棋子數來決定是否最大而下一步在這里。
這是一個方向的代碼
棋子向左向右的代碼
flag = 1;////初始化
number = 1;////臨時數量
stone = 0;/////兩邊是否被檔,0沒有被阻擋,1被阻擋一邊,2兩邊都被阻擋
while (data[i][j + flag] == data[i][j] && (j + flag) <= 14)///////向右環計算棋子數
{
flag++;
number++;
}
if (data[i][j + flag] == ISWHITE && (j + flag) <= 14)//////判斷向右是否有棋子阻擋,若有,當前方向棋子數-0.5
{
number -= 0.5;
stone++;
}
if (data[i][j + flag] == -1 && (j + flag) <= 14)///////如果是空白的 將地址加入臨時變數
{
temp_y = i;
temp_x = j+flag;
}
flag = 1;///////////初始化加數
while (data[i][j - flag] == data[i][j] && (j - flag) >= 0)//////////向左
{
flag++;
number++;
}
if (data[i][j - flag] == ISWHITE && (j - flag) >= 0)/////////向左判斷阻擋
{
number -= 0.5;
stone++;
}
if (data[i][j - flag] == -1 && (j - flag) >= 0)///////向左判斷空白
{
temp_y = i;
temp_x = j-flag;
}
if (stone != 2)/////////勢能判斷是否最大,如果最大,坐標等于臨時x,y
if (number > total)/////////total為上一個最大數
{
y = temp_y; x = temp_x;
total = number;
}
這只是像附近8個棋子進行探測數量而判斷,我下一步準備向當前棋子附近16個棋子進行探測。
而且這個棋子的遍歷太麻煩,出現很多重復了的
uj5u.com熱心網友回復:
大神指導一下,并糾正下我思路。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/64401.html
標籤:Cocos2d-x
