今天是年假的最后一天,明天大家就要回到各自的工作崗位上去,公眾號從今天開始恢復(fù)更新。不知道大家假期過得怎么樣,帥張?zhí)岬郊倨诙嚓P(guān)注一些家里的變化,自己也記錄了點東西,準(zhǔn)備今天整理下跟大家分享,可是過了這一個假期,自己狀態(tài)全無,不知道大家會不會跟我一樣有節(jié)后焦慮癥,不能很快恢復(fù)之前的工作狀態(tài),最后還是寫點簡單有意思的技術(shù)文分享給大家,希望大家在輕松的狀態(tài)下開始工作。
今天這篇文章比較有意思,用python做一個三階拼圖,自己寫這個程序的出發(fā)點很簡單,就是為了哄自己的小外甥玩,不過他好像不是特別感興趣,那又怎樣。話不多說,我們開始學(xué)習(xí)吧。
程序介紹
先上圖讓大家感受一下
程序的功能很簡單,還是之前我們用到的pygame和隨機(jī)數(shù)的知識,整個流程非常的清晰,但是我們需要注意:該游戲如果直接在地圖的二維數(shù)組上進(jìn)行隨機(jī)打亂,是會很大幾率出現(xiàn)無解的情況。所以,我是在拼好的基礎(chǔ)上采用隨機(jī)移動(按照游戲規(guī)則來移動)的思路進(jìn)行地圖打亂。
具體實現(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è)置游戲的點擊事件,簡單的說就是鼠標(biāo)點擊圖片進(jìn)行移動的邏輯,主要的邏輯代碼就是做了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:#延時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),計算鼠標(biāo)點擊的圖塊,判斷操作是否成功。
#背景色填充成綠色s.fill((0,255,0))#繪圖foryinrange(3):forxinrange(3):i=imgMap[y][x]ifi==8:#8號圖塊不用繪制continuedx=(i%3)*166#計算繪圖偏移量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文章
4788瀏覽量
68628 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84695
原文標(biāo)題:如何用Python做三階拼圖?
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論