|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2018-01-08, 11:40 AM | #1 |
管理版主
|
原創 - 走迷宮遊戲
十三年前的作品
花了三天把程式碼作一些更改 https://mega.nz/#!NxQm3KAD!JrvlypKmj...Y15HiEb9U_j3lQ 因為同樣是VB6的作品 所以如系統沒有註冊COMDLG32.OCX元件者 會無法使用 載入/繪製 地圖檔功能 出現錯誤者請點 []點擊我安裝OCX.bat 以註冊元件 如果有新的想法會持續更新,沒有的話就這樣了~ 簡易使用說明: 最多可放置兩隻老鼠(姑且說它是老鼠) 請點擊地圖通道放置之(那個起點只是建議值,標好看而已) 接著點 [開始跑] 即可觀賞之 [重置/讀入] 跑完可按此鈕 重置畫面 及 老鼠歸籠 老鼠於籠中狀態下 按下此鈕則可載入其他 "地圖檔" [繪製地圖] 可載入現有地圖檔作編輯 或 生成全新地圖檔素圖 手繪製作: 點滑鼠左鍵: 開通通道 點滑鼠右鍵: 放置磚牆,磚牆上按鍵則標示"起點" 連擊滑鼠左鍵: 標示"終點" P.S.最大尺寸請限定在 100X100,否則會有誤 越細小密集的磚牆地圖可能會讓老鼠行走有誤,請拉大地圖並 將老鼠放置正確之 大型迷宮下如覺得老鼠走的久,可以改小 [速度(反應)] 程式碼探討: 1) 雖然程式碼設計上按下 [開始跑] 會重置老鼠心中的 "參考地圖旗幟" 但很有趣的是 同樣地圖給它們跑第二次平均統計下會跑得比第一次快(時間花得少) 這一點讓人不解?? (難不成他真的有學習力!? 思考邏輯很簡單不太可能才對) P.S.不要不相信我沒有作弊! 2) 前一代老鼠思考邏輯是使用【動態】參考地圖旗幟,但發現有不符合真實情況的設計邏輯 (雖然想完全實作但以VB6來說麻煩了點) 所以二代改成一開始就知道起點GPS的理念 (市面上大多是這樣設計) 雖然可惜但想想你要走花園迷宮時,不也是知道外觀所以也蠻符合現實才對... P.S.等哪天程式碼許可的情況再嘗試能否實現 【動態】參考地圖旗幟,畢竟這樣才比較像真的智慧體~ 3) 發現老鼠最怕的迷宮就是甜甜圈式走道,這種地圖會發生最多的重覆行走現象 遊戲上只要某一隻抵達終點就會統計出"重覆行走步數",一般來說第一名者通常數字也比較少 但開闊型地圖則不一定,這點是很有趣的現象。 4) 智慧線設計目前無作用,等想好設計理念到時再加入。 最後,雖然有想過開放程式碼,但就是上面第2)點不滿意,不想獻醜也就沒有一併釋出 等哪天心血來潮再說吧~ ============== 本來想放在中文化區,但想想這個只是排解無聊性質就改到這 也望有興趣的版友多多捧場 +++++Ver2.0.2+++++ http://forum.slime.com.tw/thread288075.html#post2372520 此帖於 2018-01-16 11:07 AM 被 mini 編輯. |
送花文章: 2013,
|
向 mini 送花的會員:
|
johnss (2018-01-13)
感謝您發表一篇好文章 |
2018-01-08, 06:49 PM | #2 (permalink) |
版區管理員
|
語法:
10 KEY OFF: CLS 20 RANDOMIZE TIMER 30 PRINT : PRINT 40 INPUT "Input Length and width (H,V)"; H, V 50 IF H <> 1 AND V <> 1 THEN 70 60 PRINT "Input Error! again...": GOTO 40 70 DIM W(H, V), V(H, V) 80 Q = 0: Z = 0: X = INT(RND * H + 1) 90 FOR i = 1 TO H 100 IF i = X THEN 120 110 PRINT ".--"; : GOTO 130 120 PRINT ". "; 130 NEXT i 140 PRINT "." 150 C = 1: W(X, 1) = C: C = C + 1 160 R = X: S = 1: GOTO 230 170 IF R <> H THEN 210 180 IF S <> V THEN 200 190 R = 1: S = 1: GOTO 220 200 R = 1: S = S + 1: GOTO 220 210 R = R + 1 220 IF W(R, S) = 0 THEN 170 230 IF R - 1 = 0 THEN 560 240 IF W(R - 1, S) <> 0 THEN 560 250 IF S - 1 = 0 THEN 390 260 IF W(R, S - 1) <> 0 THEN 390 270 IF R = H THEN 310 280 IF W(R + 1, S) <> 0 THEN 310 290 X = INT(RND * 3 + 1) 300 ON X GOTO 900, 940, 970 310 IF S <> V THEN 340 320 IF Z = 0 THEN 370 330 Q = 1: GOTO 350 340 IF W(R, S + 1) <> 0 THEN 370 350 X = INT(RND * 3 + 1) 360 ON X GOTO 900, 940, 1040 370 X = INT(RND * 2) + 1 380 ON X GOTO 900, 940 390 IF R = H THEN 490 400 IF W(R + 1, S) <> 0 THEN 490 410 IF S <> V THEN 440 420 IF Z = 1 THEN 470 430 Q = 1: GOTO 450 440 IF W(R, S + 1) <> 0 THEN 470 450 X = INT(RND * 3 + 1) 460 ON X GOTO 900, 970, 1040 470 X = INT(RND * 2) + 1 480 ON X GOTO 900, 970 490 IF S <> V THEN 520 500 IF Z = 1 THEN 550 510 Q = 1: GOTO 530 520 IF W(R, S + 1) <> 0 THEN 550 530 X = INT(RND * 2 + 1) 540 ON X GOTO 900, 1040 550 GOTO 900 560 IF S - 1 = 0 THEN 750 570 IF W(R, S - 1) <> 0 THEN 750 580 IF R = H THEN 680 590 IF W(R + 1, S) <> 0 THEN 680 600 IF S <> V THEN 630 610 IF Z = 1 THEN 660 620 Q = 1: GOTO 640 630 IF W(R, S + 1) <> 0 THEN 660 640 X = INT(RND * 3 + 1) 650 ON X GOTO 940, 970, 1040 660 X = INT(RND * 2 + 1) 670 ON X GOTO 940, 970 680 IF S <> V THEN 710 690 IF Z = 1 THEN 740 700 Q = 1: GOTO 720 710 IF W(R, S + 1) <> 0 THEN 740 720 X = INT(RND * 2 + 1) 730 ON X GOTO 940, 1040 740 GOTO 940 750 IF R = H THEN 840 760 IF W(R + 1, S) <> 0 THEN 840 770 IF S <> V THEN 800 780 IF Z = 1 THEN 830 790 Q = 1: GOTO 950 800 IF W(R, S + 1) <> 0 THEN 830 810 X = INT(RND * 2 + 1) 820 ON X GOTO 970, 1040 830 GOTO 970 840 IF S <> V THEN 870 850 IF Z = 1 THEN 890 860 Q = 1: GOTO 880 870 IF W(R, S + 1) <> 0 THEN 890 880 GOTO 1040 890 GOTO 1140 900 W(R - 1, S) = C 910 C = C + 1: V(R - 1, S) = 2: R = R - 1 920 IF C = H * V + 1 THEN 1150 930 Q = 0: GOTO 230 940 W(R, S - 1) = C: C = C + 1 950 V(R, S - 1) = 1: S = S - 1: IF C = H * V + 1 THEN 1150 960 Q = 0: GOTO 230 970 W(R + 1, S) = C 980 C = C + 1: IF V(R, S) = 0 THEN 1000 990 V(R, S) = 3: GOTO 1010 1000 V(R, S) = 2 1010 R = R + 1 1020 IF C = H * V + 1 THEN 1150 1030 GOTO 560 1040 IF Q = 1 THEN 1100 1050 W(R, S + 1) = C: C = C + 1: IF V(R, S) = 0 THEN 1070 1060 V(R, S) = 3: GOTO 1080 1070 V(R, S) = 1 1080 S = S + 1: IF C = H * V + 1 THEN 1150 1090 GOTO 230 1100 Z = 1 1110 IF V(R, S) = 0 THEN 1130 1120 V(R, S) = 3: Q = 0: GOTO 1140 1130 V(R, S) = 1: Q = 0: R = 1: S = 1: GOTO 220 1140 GOTO 170 1150 FOR j = 1 TO V: PRINT "|"; 1160 FOR i = 1 TO H 1170 IF V(i, j) < 2 THEN 1200 1180 PRINT " "; 1190 GOTO 1210 1200 PRINT " |"; 1210 NEXT i 1220 PRINT 1230 FOR i = 1 TO H 1240 IF V(i, j) = 0 THEN 1270 1250 IF V(i, j) = 2 THEN 1270 1260 PRINT "| "; : GOTO 1280 1270 PRINT "|--"; 1280 NEXT i 1290 PRINT ".": NEXT j 1300 END 不過這程式沒辦法在VB執行,倒是可以在QB執行 前幾天有在網路找到QB64位元的程式,有編譯成執行檔,連接在下面 https://drive.google.com/file/d/1v47...ew?usp=sharing |
__________________ 『唸金母心咒:嗡。金母。悉地。吽。』 持此咒者,可免一切瘟疫,一切瘟神抱頭四散。 魔術就是欣賞神奇的效果 如果魔術的秘密被破解了 那魔術就失去欣賞的價值 |
|
送花文章: 1530,
|
2018-01-15, 02:38 PM | #8 (permalink) |
管理版主
|
Ver2.0.2
https://mega.nz/#!NxQm3KAD!JrvlypKmj...Y15HiEb9U_j3lQ
裡面有兩個版本 (其一為原本的 "GPS預知設計") 新版 完成 "動態旗標設計",程式碼使用類似動態陣列的設計技巧 可以突破固定陣列的邏輯限制,又當小於100x100時記憶體使用會較少(其實程式碼增加後一來一往下並沒有佔到多少便宜...) 只是此設計所代表的意義是: 較真實的智慧體 (使用相對座標,GPS則是絕對座標) P.S. 相對座標: 藉由起點推算出 每一步相對於起點所對應出來的座標值 此帖於 2018-01-16 03:05 PM 被 mini 編輯. |
送花文章: 2013,
|
2018-01-17, 03:51 PM | #9 (permalink) |
管理版主
|
探討為何統計第二次通常比第一次還快
根據合理分析是因為: "亂數的不重複設計所導致"
根據試驗當單一老鼠時 常態性下可通行方向 少於4時 會出現此現象 (上下左右都可以通行之通道 占多數時=開闊型地圖,此時結果反而會有相反結果) 當地圖是 "開闊型地圖" VB6的亂數設計反而會使下一次的花費時間 比前一次還多 (根據實驗成等比級數增加趨勢) 那這在其他版VB 或 程式語言下是否也是如此 一般亂數設計就是用時間當因子 (因為時間有不重複性) 所以推論其他程式語言或許也是這般結果 那探討這有何意義? 這論述其實非常有意義 在預測或模擬設計時非常有參考價值 模擬: 可通行方向越多 會形成較多的 預測盲點,預測盲點越多 預測的可控制性就越小 【時間花費(少)】代表【可控制性(佳)】 【可通行方向(多)】代表【預測盲點多寡(多)】 預測: 【相同起點時間】代表【預測盲點減少】 【形成趨勢】代表【可通行方向越少】 以上 模擬與預測看似條件相反,所以: 要預測準確模擬環境就要越單純,否則會趨向於中性 但投入兩隻老鼠時 不論是 地圖開闊與否都會有股 "第二次通常比第一次還快" 的現象 所以 短期連續的大量亂數(兩隻同步取用亂數當參考) 會使 模擬與預測 趨勢相同 (同樣有 "可通行方向越多 會形成較多的 預測盲點,預測盲點越多 預測的可控制性就越小" 的現象) 結論: 不論"群體" 或 "單一",要用程式語言寫出接近現實的情況 請去除多餘的不可測性(盡量單純),而時間因素則要有一致姓(精確) 越高級的計算機(#1單一時間能實現大量的同質亂數) 能得到越準確的模擬與預測 ,因為群體越大趨勢越單一,群體越大又要需要#1 就須計算機越高級。 |
送花文章: 2013,
|