最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

戰(zhàn)棋游戲移動(dòng)范圍算法

2022-05-21 12:18 作者:Nimanggi  | 我要投稿

---------------------------------------------------------------------------------


做一個(gè)四邊格戰(zhàn)棋類游戲的移動(dòng)范圍算法。


基本規(guī)則是:

? ? 四邊格,只允許臨邊移動(dòng)(上、下、左、右)。

? ? 有計(jì)步規(guī)則,每個(gè)格的計(jì)步權(quán)重為“1”。

? ? 障礙格不許移動(dòng)。


實(shí)現(xiàn)邏輯:


while (步數(shù) > 0) {

? ? 1. 設(shè)置角色當(dāng)前的位置

? ? 2. 計(jì)算當(dāng)前剩余的步數(shù)

? ? 3. 分別判斷當(dāng)前格子四周是否可以移動(dòng)(是否為障礙格或已達(dá)到邊界)

}


```

? ? ?+----+

? ? ?| 02 |

+----+----+----+

| 01 | 00 | 03 |

+----+----+----+

? ? ?| 04 |

? ? ?+----+

```




/**

 * 獲取角色移動(dòng)范圍

 * @param __actorSite__ 角色位置

 * @param __moveRange__ 角色可移動(dòng)范圍

 */

XXX.prototype.getMovingRangeSites = function (__actorSite__, __moveRange__) {

 ? ?// 地圖大小

 ? ?let mapSize = this._battleAPI._battleData.getMapSize();

 ? ?// 初始化

 ? ?let siteHasBeenChosenArr = new Array(mapSize.width);

 ? ?for (let i = 0; i < siteHasBeenChosenArr.length; ++i) {

 ? ? ? ?siteHasBeenChosenArr[i] = new Array(mapSize.height);

 ? ?}

 ? ?// 檢索site是否被選擇的臨時(shí)用數(shù)組,標(biāo)記全地圖的site是否被使用

 ? ?for (let i = 0; i < mapSize.width; ++i) {

 ? ? ? ?for (let j = 0; j < mapSize.height; ++j) {

 ? ? ? ? ? ?siteHasBeenChosenArr[i][j] = 0;

 ? ? ? ?}

 ? ?}



 ? ?// 初始化結(jié)果數(shù)組

 ? ?let rangeSitesArr = [];



 ? ?// 判斷range范圍是否合法

 ? ?if (__moveRange__ >= 1 && __moveRange__ <= 20) {

 ? ? ? ?//

 ? ? ? ?let cellsToBeCheckArr = [];

 ? ? ? ?cellsToBeCheckArr.push(__actorSite__);



 ? ? ? ?// 根據(jù)角色移動(dòng)的步數(shù)檢索幾次

 ? ? ? ?for (let index = 1; index <= __moveRange__; index++) {



 ? ? ? ? ? ?// 臨時(shí)保存本次檢查出來的site

 ? ? ? ? ? ?let tempArr = [];



 ? ? ? ? ? ?// 當(dāng)前步數(shù)能走到的site

 ? ? ? ? ? ?for (const iterator of cellsToBeCheckArr) {

 ? ? ? ? ? ? ? ?// 檢索順序:左 上 右 下

 ? ? ? ? ? ? ? ?// 相鄰節(jié)點(diǎn)坐標(biāo)

 ? ? ? ? ? ? ? ?let siteLeft = {

 ? ? ? ? ? ? ? ? ? ?x: iterator.x - 1,

 ? ? ? ? ? ? ? ? ? ?y: iterator.y

 ? ? ? ? ? ? ? ?};



 ? ? ? ? ? ? ? ?// 判斷是否滿足邏輯要求的條件 及 檢索時(shí)是否已經(jīng)選擇過該點(diǎn)

 ? ? ? ? ? ? ? ?if (this._checkSiteEnable(siteLeft) && !this._checkSiteHasBeenChosen(siteLeft, siteHasBeenChosenArr)) {

 ? ? ? ? ? ? ? ? ? ?// 將該點(diǎn)設(shè)置成一倍檢索狀態(tài)

 ? ? ? ? ? ? ? ? ? ?siteHasBeenChosenArr[siteLeft.x][siteLeft.y] = 1;

 ? ? ? ? ? ? ? ? ? ?// 保存該點(diǎn)到結(jié)果數(shù)組

 ? ? ? ? ? ? ? ? ? ?rangeSitesArr.push(siteLeft);

 ? ? ? ? ? ? ? ? ? ?// 保存該點(diǎn)到臨時(shí)數(shù)組,作為下次循環(huán)的根節(jié)點(diǎn)

 ? ? ? ? ? ? ? ? ? ?tempArr.push(siteLeft);

 ? ? ? ? ? ? ? ?}



 ? ? ? ? ? ? ? ?let siteUp = {

 ? ? ? ? ? ? ? ? ? ?x: iterator.x,

 ? ? ? ? ? ? ? ? ? ?y: iterator.y + 1,

 ? ? ? ? ? ? ? ?};



 ? ? ? ? ? ? ? ?if (this._checkSiteEnable(siteUp) && !this._checkSiteHasBeenChosen(siteUp, siteHasBeenChosenArr)) {

 ? ? ? ? ? ? ? ? ? ?siteHasBeenChosenArr[siteUp.x][siteUp.y] = 1;

 ? ? ? ? ? ? ? ? ? ?rangeSitesArr.push(siteUp);

 ? ? ? ? ? ? ? ? ? ?tempArr.push(siteUp);

 ? ? ? ? ? ? ? ?}



 ? ? ? ? ? ? ? ?let siteRight = {

 ? ? ? ? ? ? ? ? ? ?x: iterator.x + 1,

 ? ? ? ? ? ? ? ? ? ?y: iterator.y

 ? ? ? ? ? ? ? ?};



 ? ? ? ? ? ? ? ?if (this._checkSiteEnable(siteRight) && !this._checkSiteHasBeenChosen(siteRight, siteHasBeenChosenArr)) {

 ? ? ? ? ? ? ? ? ? ?siteHasBeenChosenArr[siteRight.x][siteRight.y] = 1;

 ? ? ? ? ? ? ? ? ? ?rangeSitesArr.push(siteRight);

 ? ? ? ? ? ? ? ? ? ?tempArr.push(siteRight);

 ? ? ? ? ? ? ? ?}



 ? ? ? ? ? ? ? ?let siteDown = {

 ? ? ? ? ? ? ? ? ? ?x: iterator.x,

 ? ? ? ? ? ? ? ? ? ?y: iterator.y - 1,

 ? ? ? ? ? ? ? ?};



 ? ? ? ? ? ? ? ?if (this._checkSiteEnable(siteDown) && !this._checkSiteHasBeenChosen(siteDown, siteHasBeenChosenArr)) {

 ? ? ? ? ? ? ? ? ? ?siteHasBeenChosenArr[siteDown.x][siteDown.y] = 1;

 ? ? ? ? ? ? ? ? ? ?rangeSitesArr.push(siteDown);

 ? ? ? ? ? ? ? ? ? ?tempArr.push(siteDown);

 ? ? ? ? ? ? ? ?}

 ? ? ? ? ? ?}



 ? ? ? ? ? ?// 將本次循環(huán)檢索出來的site 放入待檢查數(shù)組,以便下次循環(huán)使用

 ? ? ? ? ? ?cellsToBeCheckArr = tempArr;

 ? ? ? ?}

 ? ?} else {

 ? ? ? ?// range不合法時(shí)直接返回null

 ? ? ? ?rangeSitesArr = null;

 ? ?}



 ? ?return rangeSitesArr;

};




戰(zhàn)棋游戲移動(dòng)范圍算法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
鹤壁市| 文昌市| 都昌县| 印江| 柯坪县| 措美县| 鹤庆县| 隆回县| 玉环县| 宜兰县| 陆丰市| 苏尼特左旗| 遂宁市| 南昌县| 凉山| 神农架林区| 长武县| 泌阳县| 藁城市| 陆丰市| 理塘县| 绩溪县| 天峻县| 松阳县| 延安市| 铁岭市| 黄梅县| 宝鸡市| 大连市| 珠海市| 哈密市| 通辽市| 南昌县| 富锦市| 台前县| 盐城市| 赫章县| 子洲县| 平乐县| 大邑县| 罗甸县|