史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   生活話題、日常閒聊、喇勒唬爛灌水區 (http://forum.slime.com.tw/f23.html)
-   -   走迷宮遊戲 (http://forum.slime.com.tw/thread288075.html)

mini 2018-01-08 11:40 AM

走迷宮遊戲
 
十三年前的作品
花了三天把程式碼作一些更改
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-08 06:49 PM

語法:

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

GWBASIC的程式,也是我寫Basic程式的另一個目的,就是希望能夠執行這個程式(有點遙不可及齁:on_52:)
不過這程式沒辦法在VB執行,倒是可以在QB執行
前幾天有在網路找到QB64位元的程式,有編譯成執行檔,連接在下面
https://drive.google.com/file/d/1v47...ew?usp=sharing

魔術王子 2018-01-08 06:52 PM

不過我沒辦法下載MEGA的檔案,畫面一直停留在初始化:on_47::on_47::on_47:

mini 2018-01-08 08:22 PM

引用:

作者: 魔術王子 (文章 2372428)
不過我沒辦法下載MEGA的檔案,畫面一直停留在初始化:on_47::on_47::on_47:

可能晚一點再試試
方才可以下...,要不然先轉存到 你申請的MEGA空間,接著再從你申請的MEGA點擊下載

又剛剛想到如何實現
【動態】參考地圖旗幟
可能近期會改版一下
預計改版後外表是不會感覺不同,純粹是程式碼邏輯運作變化

魔術王子 2018-01-08 09:14 PM

引用:

作者: mini (文章 2372429)
可能晚一點再試試
方才可以下...,要不然先轉存到 你申請的MEGA空間,接著再從你申請的MEGA點擊下載

又剛剛想到如何實現
【動態】參考地圖旗幟
可能近期會改版一下
預計改版後外表是不會感覺不同,純粹是程式碼邏輯運作變化

其實我現在連自己的MEGA空間都進不去,一直出現正在接收帳戶資料的畫面
還好我沒有什麼重要資料存在裡面

mini 2018-01-08 09:48 PM

引用:

作者: 魔術王子 (文章 2372430)
其實我現在連自己的MEGA空間都進不去,一直出現正在接收帳戶資料的畫面
還好我沒有什麼重要資料存在裡面

清空網路暫存
換瀏覽器
網路重新撥號(換IP)
再不然就是隔日再試

以前也碰過
大多是隔幾天後就正常了

魔術王子 2018-01-08 11:36 PM

引用:

作者: mini (文章 2372431)
清空網路暫存
換瀏覽器
網路重新撥號(換IP)
再不然就是隔日再試

以前也碰過
大多是隔幾天後就正常了

清除暫存資料後,重新登錄就正常了,謝謝
似乎漸漸跟電腦脫軌了,竟然連這麼簡單的概念都沒聯想到

mini 2018-01-15 02:38 PM

Ver2.0.2
 
https://mega.nz/#!NxQm3KAD!JrvlypKmj...Y15HiEb9U_j3lQ

裡面有兩個版本 (其一為原本的 "GPS預知設計")
新版
完成 "動態旗標設計",程式碼使用類似動態陣列的設計技巧
可以突破固定陣列的邏輯限制,又當小於100x100時記憶體使用會較少(其實程式碼增加後一來一往下並沒有佔到多少便宜...)
只是此設計所代表的意義是:
較真實的智慧體 (使用相對座標,GPS則是絕對座標)

P.S.
相對座標: 藉由起點推算出 每一步相對於起點所對應出來的座標值

mini 2018-01-17 03:51 PM

探討為何統計第二次通常比第一次還快
 
根據合理分析是因為: "亂數的不重複設計所導致"

根據試驗當單一老鼠時
常態性下可通行方向 少於4時 會出現此現象
(上下左右都可以通行之通道 占多數時=開闊型地圖,此時結果反而會有相反結果)
當地圖是 "開闊型地圖"
VB6的亂數設計反而會使下一次的花費時間
比前一次還多 (根據實驗成等比級數增加趨勢)

那這在其他版VB 或 程式語言下是否也是如此
一般亂數設計就是用時間當因子 (因為時間有不重複性)
所以推論其他程式語言或許也是這般結果

那探討這有何意義?
這論述其實非常有意義
在預測或模擬設計時非常有參考價值
模擬:
可通行方向越多 會形成較多的 預測盲點,預測盲點越多 預測的可控制性就越小
【時間花費(少)】代表【可控制性(佳)】
【可通行方向(多)】代表【預測盲點多寡(多)】
預測:
【相同起點時間】代表【預測盲點減少】
【形成趨勢】代表【可通行方向越少】
以上
模擬與預測看似條件相反,所以:
要預測準確模擬環境就要越單純,否則會趨向於中性

但投入兩隻老鼠時
不論是 地圖開闊與否都會有股
"第二次通常比第一次還快" 的現象
所以
短期連續的大量亂數(兩隻同步取用亂數當參考) 會使 模擬與預測 趨勢相同
(同樣有 "可通行方向越多 會形成較多的 預測盲點,預測盲點越多 預測的可控制性就越小" 的現象)

結論:
不論"群體" 或 "單一",要用程式語言寫出接近現實的情況
請去除多餘的不可測性(盡量單純),而時間因素則要有一致姓(精確)
越高級的計算機(#1單一時間能實現大量的同質亂數) 能得到越準確的模擬與預測
,因為群體越大趨勢越單一,群體越大又要需要#1 就須計算機越高級。


所有時間均為台北時間。現在的時間是 07:08 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1