SLG中搜尋某個角色可移動區域的演算法

2021-06-15 18:42:45 字數 1546 閱讀 5234

可根據地形的不同,以及角色能力的不同來判斷可移動區域。例如騎士在平地上可以移動更大的範圍。

**如下:

/*** 搜尋可走區域

* @param map 當前地圖表

* @param row 行

* @param col 列

* @param locomotivity 該角色的預設移動力

* @param direction 方向

*/public void scanmovablearea(byte map, int row, int col, int locomotivity, int direction)

/** 向下判斷 **/

if(direction != 2)

/** 向左判斷 **/

if(direction != 4)

/** 向右判斷 **/

if(direction != 8)

}/**

* 地形對移動力的消耗

* @param row 行

* @param col 列

* @return 移動力消耗值

*/public int mapexpendlocomotivity(int row, int col)

}//超出邊界

if(row < 0 || col < 0 || row > gamewidth || col > gameheight)

return 1000;

//具體的情況各位朋友可以根據自己的遊戲來設計。

找到可以移動的區域後,就可以確定要移動的具體位置。這時候又要涉及到找路演算法了。對於與a*演算法(以前有一位同事寫過)。不過下次我會用遞迴演算法來實現,速度更快,更簡單。

差點忘記說明了以上得到的map陣列怎麼使用。這時乙個記錄了剩餘移動力的陣列。在顯示可移動的區域的時候只要判斷map裡面的值是否為空,不為空就畫出乙個矩形,代表該區域可走。

int max = math.max(math.max((int)byte0, (int)byte1), math.max((int)byte2, (int)byte3));

if(max == byte0)

vector = scanpath(curx, cury, destx, desty - 1);

else

if(max == byte1)

vector = scanpath(curx, cury, destx, desty + 1);

else

if(max == byte2)

vector = scanpath(curx, cury, destx - 1, desty);

else

if(max == byte3)

vector = scanpath(curx, cury, destx + 1, desty);

vector.addelement((object)dest);

return vector;

}還有兩個陌生的變數就是 _map_height和_map_width ,這個很簡單了,就是slg地圖中的長度和寬度。

呵呵,希望這些**段對slg的朋友有些幫助。

刪除二叉搜尋樹中的某個結點

刪除操作的原型為 int deletebstree pnode proot,int data 返回型別int用來表示刪除是否成功,其中pnode表示如下 typedef int datatype typedef struct bstreenode node,pnode 刪除操作的原理為 首先在二叉搜...

繼安卓後 谷歌將在移動搜尋中展示iOS應用資訊

程式設計驛站 chinaz.com 5月28日訊息程式設計客棧 近日,谷歌發布官方部落格稱,將把ios應用併入搜尋引擎結果頁中,即在未來的谷歌搜尋結果頁中會顯示相關的ios應用資訊 orfxrh注 針對ios裝置使用者 這也是谷歌繼android應用之後,在app索引上的又一大動作。據了解,未來幾天...

搜尋某個字串在那個表的那個欄位中

搜尋某個字串在那個表的那個欄位中 declare str varchar 100 set str white 要搜尋的字串 declare s varchar 8000 declare tb cursor local for select s if exists select 1 from b.na...