今天是年假的最后一天,明天大家就要回到各自的工作崗位上去,公眾號從今天開始恢復更新。不知道大家假期過得怎么樣,帥張提到假期多關注一些家里的變化,自己也記錄了點東西,準備今天整理下跟大家分享,可是過了這一個假期,自己狀態全無,不知道大家會不會跟我一樣有節后焦慮癥,不能很快恢復之前的工作狀態,最后還是寫點簡單有意思的技術文分享給大家,希望大家在輕松的狀態下開始工作。
今天這篇文章比較有意思,用python做一個三階拼圖,自己寫這個程序的出發點很簡單,就是為了哄自己的小外甥玩,不過他好像不是特別感興趣,那又怎樣。話不多說,我們開始學習吧。
程序介紹
先上圖讓大家感受一下
程序的功能很簡單,還是之前我們用到的pygame和隨機數的知識,整個流程非常的清晰,但是我們需要注意:該游戲如果直接在地圖的二維數組上進行隨機打亂,是會很大幾率出現無解的情況。所以,我是在拼好的基礎上采用隨機移動(按照游戲規則來移動)的思路進行地圖打亂。
具體實現
隨意的找一張照片跟代碼文件放在同一文件文件夾下就可以。
importrandomimportpygame#初始化pygame.init()#窗口標題pygame.display.set_caption('Ahab雜貨鋪拼圖游戲')#窗口大小s=pygame.display.set_mode((1200,600))
然后進行游戲初始化,設置標題和游戲界面的大小。
#繪圖地圖imgMap=[[0,1,2],[3,4,5],[6,7,8]]#判斷勝利的地圖winMap=[[0,1,2],[3,4,5],[6,7,8]]
繪制初始地圖并且設置勝利地圖,這里使用數組的方式進行處理。
#游戲的單擊事件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]
這里需要設置游戲的點擊事件,簡單的說就是鼠標點擊圖片進行移動的邏輯,主要的邏輯代碼就是做了if判斷,比較容易理解。
#打亂地圖defrandMap(map):foriinrange(1000):x=random.randint(0,2)y=random.randint(0,2)click(x,y,map)
使用隨機數的方式將地圖進行打亂。
#加載圖片img=pygame.image.load('2.jpg')#隨機地圖randMap(imgMap)#游戲主循環whileTrue:#延時32毫秒,相當于FPS=30pygame.time.delay(32)foreventinpygame.event.get():#窗口的關閉事件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("成功!")
加載我們的照片,并且將地圖進行隨機打亂。設置游戲的主循環,獲取鼠標的坐標,判斷鼠標是否在操作范圍內,計算鼠標點擊的圖塊,判斷操作是否成功。
#背景色填充成綠色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()
將背景進行填充,繪制圖片和設置參考圖片。
寫在最后
總之,新的一年,新的開始,一起努力吧。代碼已經上傳到Github。
-
代碼
+關注
關注
30文章
4857瀏覽量
69527 -
python
+關注
關注
56文章
4813瀏覽量
85304
原文標題:如何用Python做三階拼圖?
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
三階互調失真的測量教材
請問你們是怎么設計三階LPF的?有這方面的資料嗎?
APM的三階互補方案
介紹PCB一階、二階、三階電路的概念和劃分方法
HDI PCB一階和二階和三階依靠什么來區分

評論