PyQt挖地雷遊戲學習筆記(1),pyqt學習筆記
想學會PyQt。按習慣做法,從分析學習編程執行個體著手。
從網上找了個“挖地雷”的源碼,大卸八塊,仔細解剖,力圖學到些東西。
原程式中有bug,如:“棋盤”沒有下邊界線;挖出全部地雷後,程式沒反應,不認定獲勝。
我已將其鏟掉,可以正常運行了。
程式源碼可在此下載
所做修改,都在game_scene.py。共有2處:
一是在函數checkWin()中,原文是:
if ((self.mine_map == self.flag_map).all() and (self.mine_map != self.open_map).all()): self.win()
現改為:
if (self.mine_map != self.open_map).all(): self.win()
修改後,程式可以自動正確判定勝利了。
二是在函數paintEvent()中,原文是:
for i in range(y+1): p.drawLine(mx, my+i*sy, mx+x*sx, my+i*sy)
在其後增加一句:
p.drawLine(mx, my+i*sy-1, mx+x*sx, my+i*sy-1)
現已可畫出棋盤底邊。
挖地雷遊戲設計
我曾經寫過一個掃雷,不過應為不會使用滑鼠硬體參數,我的掃雷是每步都用鍵盤輸入想點擊的座標實現的
給你講講過程吧
1.首先是初始化:建立一個21*21的數組,最外邊加一層牆,填入-1,然後隨機放10個地雷
2.然後是點擊部分,重點!
分類(1),如果是點到地雷了->GAME OVER...
分類(2),點到數字了(旁邊有雷),就是判斷四周的格子有幾個雷,顯示
分類(3),四周都沒有雷,這裡用動態規劃,一直延伸到周圍全是數字包圍(包括牆上的-1)這是痛點
3.勝利判斷就簡單了,一直記錄剩餘的地雷就行了
挖地雷有什進階技巧
ˊ侽メ紸桷(361843551)為您解答:1:開始的時候從邊角開始,一半是運氣,然後看它旁邊的數字提示,表示的是它周圍的地雷數目,在拐角的地方尋找他們的焦點,確認是否有地雷,若有的話,用小旗標記,然後再次對應,看是否有交集的地點,慢慢的向外延伸,尤其要注意的是當周圍有數字1,而在你已經開出的地方有串連的話,則周圍全部為安全區域,你可以放心的開出它周圍的地方,但是當你碰到4或者是5的時候,你要小心的像剝皮一樣慢慢思考,切記不可急噪,它考驗的就是你的心細程度,最後完成的時候它會送你一個漂亮的笑臉,很高心的!!2:通過滑鼠操作來把地區中的雷清除完其中在按下時 如果顯示是數字 則表示以這個數字為中心周圍的9個方快中有多少雷如果是雷 則顯示出所有的地雷 掃雷結束當你確定這個方快是雷時 請按滑鼠右鍵 在這個方快上做出小紅旗標誌當你在憂鬱時 請按滑鼠右鍵2次 在方快上做出問號標誌 以幫你確認這個遊戲是考驗人的推理以及數學能力有個竅門的,可以滑鼠兩個鍵一起按.比如你點出一個1,周圍你也插了一個小旗,那就可以在1上面,用兩個鍵一起按,周圍的就都開啟了. 3:初級:全用左鍵。中級:盡量用左鍵(即少用右鍵點雷)。進階:左鍵,右鍵,左右鍵同按靈活使用。要有一個好滑鼠,多加練習。腦子一定要轉的快,手一定要跟的上腦的速度,達到開一片地區馬上就能判斷出雷的位置的水平,即“條件反射”。對於“121”等有技巧的地區,平時多留意,有時停一下想想也好(為了以後掃的更快),開局時和不靠猜的時候要從這裡下手。實在是玩到無從下手時就要靠猜了,以出錯最小機率的地方猜。如“1”的附近用左鍵猜,“6,7”的附近用右鍵猜,組合猜等等。總之,掃雷是一個看似簡單實則蘊涵很多道理的遊戲,大家一定要多思考,多玩。本人成績是初級2秒,中級26秒,進階89秒。想提高成績,實力很重要,但關鍵還是運氣。初級完全是運氣!大家只要多玩,點一兩下都可能完成(即 1秒)。中級還是運氣,有好多雷聚在一起了(接近有二十個雷沒有用右鍵點出來)。進階……也是運氣吧,給的位置都是剛剛好。想提高成績,實力很重要,但關鍵還是運氣。另外,掃雷有一個國外的高手的錄影,初級1秒,中級10秒,進階44秒,自愧弗如。不過他的進階手動的實在是太快了,讓本人不自然的聯想到了諸如“變速齒輪”之類的東東。本來想寫的更詳細些,主要想寫一些固定組合和算機率猜的技巧,或首先你要用左鍵在畫面裡開一片空闊地出來,然後在邊緣位置滑鼠左右鍵一起按,如果你按的那個方格的周圍8個格子裡只有一個雷,那個雷自動拔掉,很輕鬆,然後就是多練習。想調時間很容易,進入遊戲,隨便點個格子,然後立刻點開始欄邊上的“顯示案頭”的表徵圖,然後遊戲最小化,點開以後,時間定格在1秒 掃雷的作弊方法:(windows xp 適用) 1.開啟掃雷,鍵入xyzzy 斷行符號 Shift,螢幕左上方就會有一個像素的小點,當你的滑鼠在小格子上晃的時候,如果那個格子有雷就會有一個亮點:), 記得你得至少先點開一個格子才能看到。(為什麼呢?因為點了一個格子之後,程式才決定所有雷的分布。為啥這麼做呢,因為它希望使用者點的第一個格子永遠都不是雷) 2.把計時器停掉(兩種方法): 1)玩的時候,用window鍵+D最小化所有視窗,然後立即滑鼠點擊恢複掃雷視窗,再任意點一個不會爆炸的格子,這時候再看看? 計時器已經停止了。 2)滑鼠點在笑臉上,按著不動,這時候計時器就停了。你可以接著把滑鼠離開笑臉然後鬆開左鍵,遊戲就不會重新開始,當然計時器還會接著走。你問這有什麼用?呵呵,你可以按著它來停住計時器,然後仔細思考, 呵呵,至......餘下全文>>