如何用Python做三階拼圖?
作者 | Ahab
來源 | Ahab雜貨鋪(ID:AhabBin)
今天是年假的最後一天,明天大家就要回到各自的工作崗位上去,公眾號從今天開始恢復更新。不知道大家假期過得怎麼樣,帥張提到假期多關注一些家裡的變化,自己也記錄了點東西,準備今天整理下跟大家分享,可是過了這一個假期,自己狀態全無,不知道大家會不會跟我一樣有節後焦慮症,不能很快恢復之前的工作狀態,最後還是寫點簡單有意思的技術文分享給大家,希望大家在輕鬆的狀態下開始工作。
今天這篇文章比較有意思,用python做一個三階拼圖,自己寫這個程式的出發點很簡單,就是為了哄自己的小外甥玩,不過他好像不是特別感興趣,那又怎樣。話不多說,我們開始學習吧。
程式介紹
先上圖讓大家感受一下
程式的功能很簡單,還是之前我們用到的pygame和隨機數的知識,整個流程非常的清晰,但是我們需要注意:該遊戲如果直接在地圖的二維陣列上進行隨機打亂,是會很大機率出現無解的情況。所以,我是在拼好的基礎上採用隨機移動(按照遊戲規則來移動)的思路進行地圖打亂。
具體實現
隨意的找一張照片跟程式碼檔案放在同一檔案資料夾下就可以。
import random
import pygame
# 初始化
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]
]
繪製初始地圖並且設定勝利地圖,這裡使用陣列的方式進行處理。
# 遊戲的單擊事件
def click(x, y, map):
if y - 1 >= 0 and map[y - 1][x] == 8:
map[y][x], map[y - 1][x] = map[y - 1][x], map[y][x]
elif y + 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 >= 0 and map[y][x - 1] == 8:
map[y][x], map[y][x - 1] = map[y][x - 1], map[y][x]
elif x + 1 <= 2 and map[y][x + 1] == 8:
map[y][x], map[y][x + 1] = map[y][x + 1], map[y][x]
這裡需要設定遊戲的點選事件,簡單的說就是滑鼠點選圖片進行移動的邏輯,主要的邏輯程式碼就是做了if判斷,比較容易理解。
# 打亂地圖
def randMap(map):
for i in range(1000):
x = random.randint(0, 2)
y = random.randint(0, 2)
click(x, y, map)
使用隨機數的方式將地圖進行打亂。
# 載入圖片
img = pygame.image.load('2.jpg')
# 隨機地圖
randMap(imgMap)
# 遊戲主迴圈
while True:
# 延時32毫秒,相當於FPS=30
pygame.time.delay(32)
for event in pygame.event.get():
# 視窗的關閉事件
if event.type == pygame.QUIT:
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if pygame.mouse.get_pressed() == (1, 0, 0):
mx, my = pygame.mouse.get_pos()
if mx < 498 and my < 498:
x = int(mx / 166)
y = int(my / 166)
click(x, y, imgMap)
if imgMap == winMap:
print("成功!")
載入我們的照片,並且將地圖進行隨機打亂。設定遊戲的主迴圈,獲取滑鼠的座標,判斷滑鼠是否在操作範圍內,計算滑鼠點選的圖塊,判斷操作是否成功。
# 背景色填充成綠色
s.fill((0, 255, 0))
# 繪圖
for y in range(3):
for x in range(3):
i = imgMap[y][x]
if i == 8: # 8號圖塊不用繪製
continue
dx = (i % 3) * 166 # 計算繪圖偏移量
dy = (int(i / 3)) * 166
s.blit(img, (x * 166, y * 166), (dx, dy, 166, 166))
# 畫參考圖片
s.blit(img, (500, 0))
# 重新整理介面
pygame.display.flip()
將背景進行填充,繪製圖片和設定參考圖片。
寫在最後
總之,新的一年,新的開始,一起努力吧。程式碼已經上傳到Github。
連結:
https://github.com/AhabWang/AhabCode/blob/master/%E6%8B%BC%E5%9B%BE%E6%B8%B8%E6%88%8F.py
(本文為AI科技大本營轉載文章,轉載請微信聯絡原作者)
徵稿推薦閱讀:
手機晶片誰是AI之王?高通、聯發科均超華為
“百練”成鋼:NumPy 100練
程式設計師如何用“撞針“拯救35億地球人?
搜狗的 AI 中場戰事
小心!你的臉正在成為色情片主角
咋跟鄉親們解釋,何謂“區塊鏈”?
分散式系統與訊息投遞
27 道阿里巴巴 Java 面試題,你會幾道?
點選“閱讀原文”,開啟CSDN APP 閱讀更貼心!
相關文章
- 用Python做一個三階拼圖。Python
- 如何用Python做詞雲?Python
- 如何用Python做情感分析?Python
- 如何用python做資料分析Python
- 如何用Python做中文分詞?Python中文分詞
- 如何用Python做自動化特徵工程Python特徵工程
- 如何用 Linux 幫助你拼寫Linux
- 如何用Python做AQI分析並視覺化?Python視覺化
- 如何用Phaser實現一個全家福拼圖H5H5
- 如何用python建立詞雲圖片Python
- 如何用word做流程圖 word文件製作流程圖的方法流程圖
- 如何用Python做輿情時間序列視覺化?Python視覺化
- 如何用Python做詞雲?(基礎篇視訊教程)Python
- 【模組三】Python高階Python
- 如何用 Python 和深度遷移學習做文字分類?Python遷移學習文字分類
- 一步一步教你如何用Python做詞雲Python
- 如何用Python和R對故事情節做情緒分析?Python
- Python 爬蟲實戰之爬拼多多商品並做資料分析Python爬蟲
- python兩個三階矩陣相乘Python矩陣
- python實現三階魔方還原Python
- 如何自己做小程式拼團,實體店怎麼做拼團【拼團連結生成工具】
- 拼多多如何做爆款?拼多多爆款玩法是什麼?
- Python 做圖片清晰度識別Python
- Python 從入門到進階之路(三)Python
- Python爬蟲進階之APP逆向(三)Python爬蟲APP
- 如何用Python 製作詞雲-對1000首古詩做詞雲分析Python
- vue拼圖動畫DemoVue動畫
- canvas拼圖功能實現Canvas
- web拼圖錯誤分析Web
- 如何用 React 做服務端渲染React服務端
- 2019最新Python學習路線圖:如何用Python建立微信機器人Python機器人
- 微信收藏拼長圖發朋友圈教程 微信怎麼拼圖?
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- Python | 一萬多條拼車資料,看春運的遷徙圖Python
- python做頻率統計圖 完整版Python
- 如何用Python和深度神經網路尋找近似圖片?Python神經網路
- 鴻蒙第三方元件——SwipeCaptcha滑動拼圖驗證元件鴻蒙元件APT
- 拼多多標品是什麼?如何做?