今天是年假的最后一天,明天大家就要回到各自的工作崗位上去,公眾號(hào)從今天開始恢復(fù)更新。不知道大家假期過得怎么樣,帥張?zhí)岬郊倨诙嚓P(guān)注一些家里的變化,自己也記錄了點(diǎn)東西,準(zhǔn)備今天整理下跟大家分享,可是過了這一個(gè)假期,自己狀態(tài)全無,不知道大家會(huì)不會(huì)跟我一樣有節(jié)后焦慮癥,不能很快恢復(fù)之前的工作狀態(tài),最后還是寫點(diǎn)簡(jiǎn)單有意思的技術(shù)文分享給大家,希望大家在輕松的狀態(tài)下開始工作。
今天這篇文章比較有意思,用python做一個(gè)三階拼圖,自己寫這個(gè)程序的出發(fā)點(diǎn)很簡(jiǎn)單,就是為了哄自己的小外甥玩,不過他好像不是特別感興趣,那又怎樣。話不多說,我們開始學(xué)習(xí)吧。
程序介紹
先上圖讓大家感受一下
程序的功能很簡(jiǎn)單,還是之前我們用到的pygame和隨機(jī)數(shù)的知識(shí),整個(gè)流程非常的清晰,但是我們需要注意:該游戲如果直接在地圖的二維數(shù)組上進(jìn)行隨機(jī)打亂,是會(huì)很大幾率出現(xiàn)無解的情況。所以,我是在拼好的基礎(chǔ)上采用隨機(jī)移動(dòng)(按照游戲規(guī)則來移動(dòng))的思路進(jìn)行地圖打亂。
具體實(shí)現(xiàn)
隨意的找一張照片跟代碼文件放在同一文件文件夾下就可以。
importrandomimportpygame#初始化pygame.init()#窗口標(biāo)題pygame.display.set_caption('Ahab雜貨鋪拼圖游戲')#窗口大小s=pygame.display.set_mode((1200,600))
然后進(jìn)行游戲初始化,設(shè)置標(biāo)題和游戲界面的大小。
#繪圖地圖imgMap=[[0,1,2],[3,4,5],[6,7,8]]#判斷勝利的地圖winMap=[[0,1,2],[3,4,5],[6,7,8]]
繪制初始地圖并且設(shè)置勝利地圖,這里使用數(shù)組的方式進(jìn)行處理。
#游戲的單擊事件defclick(x,y,map):ify-1>=0andmap[y-1][x]==8:map[y][x],map[y-1][x]=map[y-1][x],map[y][x]elify+1<=?2?and?map[y?+?1][x]?==?8:????????map[y][x],?map[y?+?1][x]?=?map[y?+?1][x],?map[y][x]????elif?x?-?1?>=0andmap[y][x-1]==8:map[y][x],map[y][x-1]=map[y][x-1],map[y][x]elifx+1<=?2?and?map[y][x?+?1]?==?8:????????map[y][x],?map[y][x?+?1]?=?map[y][x?+?1],?map[y][x]
這里需要設(shè)置游戲的點(diǎn)擊事件,簡(jiǎn)單的說就是鼠標(biāo)點(diǎn)擊圖片進(jìn)行移動(dòng)的邏輯,主要的邏輯代碼就是做了if判斷,比較容易理解。
#打亂地圖defrandMap(map):foriinrange(1000):x=random.randint(0,2)y=random.randint(0,2)click(x,y,map)
使用隨機(jī)數(shù)的方式將地圖進(jìn)行打亂。
#加載圖片img=pygame.image.load('2.jpg')#隨機(jī)地圖randMap(imgMap)#游戲主循環(huán)whileTrue:#延時(shí)32毫秒,相當(dāng)于FPS=30pygame.time.delay(32)foreventinpygame.event.get():#窗口的關(guān)閉事件ifevent.type==pygame.QUIT:exit()elifevent.type==pygame.MOUSEBUTTONDOWN: ifpygame.mouse.get_pressed()==(1,0,0): mx,my=pygame.mouse.get_pos() ifmx498?and?my?498:? ????????????????????x?=?int(mx?/?166)? ????????????????????y?=?int(my?/?166)????????????????????click(x,?y,?imgMap)? ????????????????????if?imgMap?==?winMap:????????????????????????print("成功!")
加載我們的照片,并且將地圖進(jìn)行隨機(jī)打亂。設(shè)置游戲的主循環(huán),獲取鼠標(biāo)的坐標(biāo),判斷鼠標(biāo)是否在操作范圍內(nèi),計(jì)算鼠標(biāo)點(diǎn)擊的圖塊,判斷操作是否成功。
#背景色填充成綠色s.fill((0,255,0))#繪圖foryinrange(3):forxinrange(3):i=imgMap[y][x]ifi==8:#8號(hào)圖塊不用繪制continuedx=(i%3)*166#計(jì)算繪圖偏移量dy=(int(i/3))*166s.blit(img,(x*166,y*166),(dx,dy,166,166))#畫參考圖片s.blit(img,(500,0))#刷新界面pygame.display.flip()
將背景進(jìn)行填充,繪制圖片和設(shè)置參考圖片。
寫在最后
總之,新的一年,新的開始,一起努力吧。代碼已經(jīng)上傳到Github。
-
代碼
+關(guān)注
關(guān)注
30文章
4753瀏覽量
68369 -
python
+關(guān)注
關(guān)注
56文章
4783瀏覽量
84474
原文標(biāo)題:如何用Python做三階拼圖?
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論