那麼我已經通過很多網站教學如何解決它,但想知道如何創建它。我對它的編碼方面不感興趣,但想知道更多關於它的算法。例如,當網格生成10個左右的地雷時,我會使用任意隨機函數將其自身分佈在網格中,但是又如何設置與其關聯的數字並決定打開哪個框?我無法構建任何通用算法,我將如何去做這件事。掃雷後代算法的算法是什麼
回答
也許東西的線路:
grid = [n,m] // initialize all cells to 0
for k = 1 to number_of_mines
get random mine_x and mine_y where grid(mine_x, mine_y) is not a mine
for x = -1 to 1
for y = -1 to 1
if x = 0 and y = 0 then
grid[mine_x, mine_y] = -number_of_mines // negative value = mine
else
increment grid[mine_x + x, mine_y + y] by 1
這幾乎是它...
** 編輯 **
因爲這種算法可能鉛到創建有些地雷集結在一起,或者更糟糕的是很分散(因此無聊解決),那麼在生成mine_x
時可以添加額外的驗證和mine_y
號碼。例如,要確保至少3個相鄰小區都沒有地雷,甚至可能有利於限制地雷是彼此太遠, **
我的號碼等
** UPDATE已經採取了與JS斌玩一點點的自由這裏想出了一個功能Minesweeper game demo。這只是爲了演示本答案中描述的算法。我沒有優化生成的地雷位置的隨機性,因此有些遊戲可能不可能或太容易。此外,沒有驗證網格中有多少個地雷,所以實際上可以創建一個包含1000個地雷的2乘2網格......但這隻會導致無限循環:)享受!
這會在已經放置的地雷上增加,所以你會希望地雷可以用數量足夠負,以至於不會遞增到零,就像我的= -20。然後,每個負數都是我的。 – 2010-08-26 19:04:01
修改後的答案更加精確 – 2010-08-26 19:05:28
我沒有放置地雷的問題,但是如何獲得生成這些數字的線索來識別地雷?我沒有想法在那 – Rahul 2010-08-26 19:26:09
你只是種下地雷,然後你遍歷每一個細胞並計算鄰近的地雷。或者您將每個計數器設置爲0,並且每個種子礦都將增加所有相鄰的單元格計數器。
如果要將m
地雷放在N
方格上,並且您可以訪問隨機數發生器,則只需穿過剩餘的方格,並對每個方形計算(剩餘#個地雷)/(剩餘的#個方格)和地點如果您的隨機數等於或低於該值,則爲礦。現在
,如果你要標註與鄰近煤礦的數量每平方,你可以做它直接:
count(x,y) = sum(
for i = -1 to 1
for j = -1 to 1
1 if (x+i,y+j) contains a mine
0 otherwise
)
,或者如果你喜歡,你可以用零數組開始,並增加各在3x3的廣場中有一個在中心有一個地雷。 (對地雷編號不會造成傷害)
這會產生一個純粹隨機且正確標註的掃雷遊戲。然而,一些隨機遊戲可能不是好玩的遊戲,選擇隨機但有趣的遊戲是一項更具挑戰性的任務。
我可以創建網格並使用任意隨機函數放置地雷,但挑戰在於未來,當我嘗試將數字與這些地雷關聯時,我沒有關於如何去做這些地雷的想法。 – Rahul 2010-08-26 19:24:35
我提供了僞代碼(無邊界檢查),確實如此。 (注意總和 - 你加起來9個值是1或0,這取決於那裏是否有地雷。) – 2010-08-26 19:26:54
- 1. 掃雷算法
- 2. 掃雷清算算法
- 3. 的Python:floodfill算法掃雷艇
- 4. 掃雷算法卡住了
- 5. 掃雷算法UI問題
- 6. 改進我的掃雷解決算法
- 7. 掃雷探測器的搜索算法
- 8. 改進我的掃雷算法c#
- 9. Vista掃雷艇Gameover揭祕算法
- 10. 掃雷隨機產生地雷算法不正確
- 11. 什麼是算法
- 12. 遞歸算法優於迭代算法的優點是什麼?
- 13. Random.next()背後的算法是什麼?
- 14. Robocopy背後的算法是什麼?
- 15. 色輪背後的算法是什麼?
- 16. 什麼是TreeNode.Nodes.ContainsKey的算法
- 17. 自然算法顯示計算答案的算法是什麼
- 18. 什麼是算法運算的後驗和先驗分析?
- 19. 這是什麼算法?
- 20. 什麼是McNaughton-Yamada算法?
- 21. 這是什麼算法?
- 22. 什麼是s2k算法?
- 23. 什麼是cooks-kim算法
- 24. 這是什麼算法
- 25. 什麼是單遍算法
- 26. 什麼是Excel Days360算法?
- 27. 什麼是「make -jX」算法
- 28. 什麼是單程算法,是我的算法?
- 29. 減法算法的意思是什麼?
- 30. 格雷厄姆掃描算法 - > sqrt和arctan2巨大的值
每個礦井應該增加每個不是礦井的鄰居單元。 – cthom06 2010-08-26 18:51:57
,解決所有的問題..但是3和4。我將如何合併這些數字。如果我解析的方式只適用於單一的工作 – Rahul 2010-08-26 19:00:11
[掃雷算法](http:// stackoverflow。com/questions/1738128/minesweeper-algorithm) – BoltClock 2010-08-26 19:09:49