作者:菜鳥小編
公眾號(hào):菜鳥學(xué)Python
暑假馬上就要結(jié)束了,在暑假即將走向尾聲的時(shí)候,小編特地為大家準(zhǔn)備了一款小游戲——連連看。希望通過(guò)這一款小游戲?yàn)榇蠹曳潘缮硇模有聦W(xué)年的到來(lái)。
連連看想必大家都玩過(guò),相同的圖片,可以連在一起消掉,但前提是圖片連接的路徑要是直線,或者是“L”形(連接線有一個(gè)拐彎)或者是類似于“U”形(連接線有兩個(gè)拐彎)。那么程序是如何實(shí)現(xiàn)的呢, 先看一下整個(gè)的設(shè)計(jì)思路 :
01.
游戲的界面設(shè)計(jì)
1).首先是對(duì)于整體界面的設(shè)計(jì),如下圖所示:
大家運(yùn)行程序后,會(huì)首先彈出選擇框, 是否從第一關(guān)開始,選擇第一關(guān)后,點(diǎn)擊游戲便可以開始游戲。我們?cè)O(shè)計(jì)了一個(gè)菜單,點(diǎn)擊游戲/開始游戲即可!
02.
把火影忍者的人物放畫布
接下來(lái)就是將游戲人物放到畫布上去,這里我們選擇了我最喜歡的火影忍者的頭像,哈哈!
1).首先程序規(guī)定了每一個(gè)種類圖片
圖片所能出現(xiàn)的次數(shù)為4次,然后如果我們想實(shí)現(xiàn)一個(gè)8x8大小的圖片地圖,那么就一共有8x8/4=16種類型的圖片可以出現(xiàn)。我們將每一種類型圖片編碼為一個(gè)數(shù)字,例如上圖中鳴人的編號(hào)為0,小櫻的編號(hào)為1。然后在對(duì)應(yīng)到圖片上去,所以就會(huì)得到16(種類)x4(每個(gè)種類的圖片數(shù)量)=64個(gè)圖片,如下圖所示:
2).然后,我們將上述的圖片打亂
按照畫布上的位置分別放置圖片,就得到了連連看的圖片界面。
3).部分代碼如下圖所示
該函數(shù)是對(duì)畫布圖片進(jìn)行一個(gè)初始化:
-
首先,是將每一個(gè)類別的小圖片都添加self.num張,形成一個(gè)self.picsKind * self.num大小的一維數(shù)組;
-
然后,將小圖片的索引順序進(jìn)行打亂;
-
最后,是將小圖片的索引轉(zhuǎn)化為一個(gè)二維數(shù)組,也就是呈現(xiàn)給大家的一個(gè)正方形的界面。
這里是將我們存放到self.pics里面的圖片,通過(guò)函數(shù)self. get_left_top_point函數(shù)來(lái)獲得其對(duì)應(yīng)的坐標(biāo),并按照此坐標(biāo)將圖片放置到畫布的相應(yīng)位置。
其中有一點(diǎn)應(yīng)用的很是巧妙,就是利用索引來(lái)作為判斷是否是一類圖片的標(biāo)志(后面有代碼示例的) ,接下來(lái)就是進(jìn)行圖片的消除,如下圖所示。
03.
核心算法解釋
敲黑板劃重點(diǎn)來(lái)了, 只有符合上述三種情況的圖片我們才能夠消除,那么程序如何判斷二者是否符合被消除的條件呢?
-
我們以直線連接為例。上圖中可以直線連接的兩個(gè)佐助橫縱坐標(biāo)分別為(2,3)和(3,3),那么我們就判斷他們x坐標(biāo)(直線連接,橫縱坐標(biāo)肯定有一個(gè)相等,就不用判斷相等的坐標(biāo)了);
-
如果他們中間沒(méi)有其他的圖片,那么他們就可以被連接然后消掉,否則就不可以;
例如(4,4)和(4,6)的小櫻之間有一個(gè)其他人的存在,他們就不能被連接,其他的情況也是類似判斷,部分代碼如下圖所示:
上面的3中連接方法( 直連,L型連接和U型連接) 。當(dāng)我們判斷二者可以連接后,利用tkinter的畫布中的delete函數(shù),便可以將圖片刪掉。部分程序如下所示:
當(dāng)我們將所有的圖片都消掉后,程序便會(huì)彈出提示框,祝賀我們闖關(guān)成功。下面,小編就為大家?guī)?lái)視頻展示,看看小編的功力如何。
(連連看運(yùn)行視頻)
怎么樣看完視頻,是不是感覺(jué)還不錯(cuò), 唯一美中不足的就是沒(méi)有加入聲音。 大家如果有興趣的可以拿著完整的源碼改改,看看能否優(yōu)化和加入聲音,這樣效果更佳!
需要源碼,后臺(tái)輸入:【連連看】
往期閱讀
速來(lái)!免費(fèi)包郵送35本經(jīng)典Python書籍
企業(yè)難尋AI人才,求職者就業(yè)難,如何破局?
漲姿勢(shì)|一位資深的Python大牛,有趣有料
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
