[投稿] mazebot core code

看板mud_jy (金庸修真錄)作者 (Full House)時間10月前 (2023/06/20 14:33), 10月前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這是mazebot的核心部分 kulic有硬解mazemap的code 但是仍然有人在自己寫其他模式的mazebot的時候遇到一些問題 先解說核心概念 1. 當前座標 pos.x, pos.y 2. 移動 #var dir 1 1-north 2-east 3-south 4-west #AL move { #case @dir {north} {east} {south} {west}; } 2. 更改方向的ALIAS #AL cdircw //change direction clockwise { #if (@dir>3) {#math dir 1} {#add dir 1} } #AL cdirccw //change direction counter clockwise { #if (@dir=1) {#math dir 4} {#add dir -1} } 3. 移動讀取當格座標 XXXX{(}%1,%2{)} #TR {XXXX{(}%1,%2{)}} { #if (@pos.x=%1 && @pos.y=%2) {cdirccw} { #math pos.x %1; #math pos.y %2; cdircw}; #ALA +1 {#if !@fight move} } 核心概念就是,移動了之後座標沒變=移動失敗,移動方向逆時針修正 移動了之後座標有改=移動成功,移動方向順時針修正(同時更新座標) 4. (如果進入一格是依序下k)確認是否清空(可以移動) #AL checkmob { cdircw; look }//因為要look,look的結果等於無移動->座標不會動,其結果會導致cdirccw //所以要先cdircw來補償 5. 有人提到有些maze的結構會導致直接繞外側到出口 因為maze的出口座標會跟前一格顯示相同,會cdirccw一次 如果要回maze內(第一次遇到出口),那就cdirccw再一次 如果要離開maze(第二次遇到出口),那就cdircw一次 所以 在進入maze前先設定 #math wayout 0; #TR {出口} { #add wayout 1; #if (@wayout<2) {cdirccw} {cdircw} } 這樣的話如果第二次遇到出口,一秒後沒有進入戰鬥,就會離開maze -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.191.211 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud_jy/M.1687242836.A.E69.html ※ 編輯: deathcustom (211.23.191.211 臺灣), 06/20/2023 14:49:19
文章代碼(AID): #1aaKXKvf (mud_jy)
文章代碼(AID): #1aaKXKvf (mud_jy)