掃雷網(wǎng)頁版
時間:2023-05-12 16:42:01 | 來源:網(wǎng)站運營
時間:2023-05-12 16:42:01 來源:網(wǎng)站運營
掃雷網(wǎng)頁版:
掃雷游戲地址:掃雷 Minesweeper
移動端地址:手機掃雷
游戲特性:- 第一步不會觸雷,同時也不會是數(shù)字。
- 支持雙鍵排除操作。
- 三種難度可選擇。
- 三種顏色圖標(biāo)可選擇。
- 游戲在本地記錄每種難度下最佳五局成績。
- 支持自定義模式。
更新:2021-3-20將數(shù)字提示由文字改為圖標(biāo),以消除不同瀏覽器之間的顯示差異。
更新:2021-2-10增加問號開關(guān)。
更新:2020-12-17增加自定義模式。
改善了雙鍵操作時的動畫效果,提升操作手感。
更新:2020-9-14修復(fù)了游戲結(jié)束判定。
更新:2020-5-111、圖標(biāo)繪制由CSS改為圖片,以求更好的性能。
2、更細致的模擬 windows7 掃雷的一些行為,比如松開觸發(fā)掃雷動作,如果左鍵按下后,右鍵隨后也按下,會取消掃雷動作。雙鍵按下劃過圖形區(qū)域,也有動畫(不知道這有什么用),且無論哪個先松開,都不會觸發(fā)動作。雙鍵排除時紅色的X號會閃兩下(感覺這東西應(yīng)該用 CSS3 動畫實現(xiàn),可我搞不定,還是用了setinterval 函數(shù))。
3、從本站看到非常牛逼的 Knuth-Durstenfeld Shuffle 洗牌算法,也把它用上了,不過隨機函數(shù)還是系統(tǒng)自帶的,所以應(yīng)該沒啥實質(zhì)的卵用。好處是看起來更合理。因為第一次點擊布雷,除了第一步不能是雷以外,為了有更好的開局,周圍 8 個也不能是雷,所以在生成雷的時候,會有一個最多 9 個坐標(biāo)的排除列表。用原來的算法,感覺沖撞會很頻繁,雖然以電腦的速度,一定能完成布雷,但不合理。
后記:一些實現(xiàn)細節(jié)游戲的第一步不會是雷,實現(xiàn)原理就是游戲的布雷是從第一步點擊開始的。還有一點,就是不但第一步不會是雷,而且也不會是數(shù)字,因為如果點到數(shù)字,對游戲的開局沒有太大幫助。實現(xiàn)原理就是在第一步的基礎(chǔ)上,通過第一個坐標(biāo),再獲取周圍最多8個坐標(biāo),然后在布雷的時候,將這最多9個坐標(biāo)全部排除。
雙鍵操作我覺得是游戲最麻煩的地方,游戲的雙鍵操作并不是真的同時點擊,而是左右任何一個按鍵按下去的情況下,再按下另一個,才會激活雙鍵功能。我最初很困惑如何實現(xiàn)這個雙鍵功能,甚至寫了一個通過時間間隔判定是否是雙鍵的功能。但后來發(fā)現(xiàn),這樣做雖然也能玩,但和 windows7 自帶的掃雷動作是不一樣的。最后一番琢磨,搞出來的這個基本和 windows7 掃雷一摸一樣。另外也極力模擬一些細節(jié),比如在大塊的區(qū)域按下雙鍵,無論任何順序松開按鍵,都不會觸發(fā)動作。同時,如果按下雙鍵在任意區(qū)域移動,也會有連續(xù)的動畫。
布雷算法最初用的就是隨機生成橫、豎坐標(biāo)的隨機數(shù),如果重復(fù)則重新了,直到完成。這樣做雖然能用,但顯然不合理,有時候可能沖撞太多。后來看了大名鼎鼎的 Knuth 洗牌算法,驚呼牛逼,趕緊用上。具體實現(xiàn)就是整兩個數(shù)組,一個是雷,一個是空白格子,空白格子再減去排除的格子數(shù)量,然后將其用洗牌算法打亂,然后再依次填充到一個映射布局的二維數(shù)組里(實際用的對象)。
清除一片的算法就是無腦遍歷,每次清除一個格子的周圍,循環(huán)到?jīng)]有格子為止。感覺更正確的做法似乎應(yīng)該用遞歸,但當(dāng)時沒想出來,而現(xiàn)在感覺沒有必要再修改。
根據(jù)我對 Js 的理解,計時器功能應(yīng)該是不精確的。