前言: 本期我們將制作一個(gè)拼圖小游戲 。讓我們愉快地開(kāi)始吧~~~
先來(lái)看看效果是這樣子的:

文章插圖
開(kāi)發(fā)工具 **Python版本:**3.6.4
私信小編01即可獲取大量python學(xué)習(xí)資源相關(guān)模塊: pygame模塊;
以及一些Python自帶的模塊
環(huán)境搭建 安裝Python并添加到環(huán)境變量 , pip安裝需要的相關(guān)模塊即可 。
原理介紹 游戲簡(jiǎn)介: 將圖像分為m×n個(gè)矩形塊 , 并將圖像右下角的矩形塊替換為空白塊后 , 將這些矩形塊隨機(jī)擺放成原圖像的形狀 。游戲目標(biāo)為通過(guò)移動(dòng)非空白塊將隨機(jī)擺放獲得的圖像恢復(fù)成原圖像的模樣 , 且規(guī)定移動(dòng)操作僅存在于非空白塊移動(dòng)到空白塊 。
例如下圖所示:

文章插圖
逐步實(shí)現(xiàn): Step1:游戲初始界面 既然是游戲 , 總得有個(gè)初始界面吧?
OK , 我們先寫一個(gè)游戲初始界面:
'''顯示游戲開(kāi)始界面'''def ShowStartInterface(screen, width, height): screen.fill(cfg.BACKGROUNDCOLOR) tfont = pygame.font.Font(cfg.FONTPATH, width//4) cfont = pygame.font.Font(cfg.FONTPATH, width//20) title = tfont.render('拼圖游戲', True, cfg.RED) content1 = cfont.render('按H或M或L鍵開(kāi)始游戲', True, cfg.BLUE) content2 = cfont.render('H為5*5模式, M為4*4模式, L為3*3模式', True, cfg.BLUE) trect = title.get_rect() trect.midtop = (width/2, height/10) crect1 = content1.get_rect() crect1.midtop = (width/2, height/2.2) crect2 = content2.get_rect() crect2.midtop = (width/2, height/1.8) screen.blit(title, trect) screen.blit(content1, crect1) screen.blit(content2, crect2) while True:for event in pygame.event.get():if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == ord('l'): return 3elif event.key == ord('m'): return 4elif event.key == ord('h'): return 5pygame.display.update()復(fù)制代碼 根據(jù)玩家自身水平 , 可以選擇不同難度的拼圖游戲 。
Step2:定義移動(dòng)操作 定義移動(dòng)操作的目的是為了移動(dòng)拼圖(好像是廢話T_T) , 具體實(shí)現(xiàn)起來(lái)十分簡(jiǎn)單:
'''將空白Cell左邊的Cell右移到空白Cell位置'''def moveR(board, blank_cell_idx, num_cols): if blank_cell_idx % num_cols == 0: return blank_cell_idx board[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1] return blank_cell_idx - 1'''將空白Cell右邊的Cell左移到空白Cell位置'''def moveL(board, blank_cell_idx, num_cols): if (blank_cell_idx+1) % num_cols == 0: return blank_cell_idx board[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1] return blank_cell_idx + 1'''將空白Cell上邊的Cell下移到空白Cell位置'''def moveD(board, blank_cell_idx, num_cols): if blank_cell_idx < num_cols: return blank_cell_idx board[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols] return blank_cell_idx - num_cols'''將空白Cell下邊的Cell上移到空白Cell位置'''def moveU(board, blank_cell_idx, num_rows, num_cols): if blank_cell_idx >= (num_rows-1) * num_cols: return blank_cell_idx board[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols] return blank_cell_idx + num_cols復(fù)制代碼
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 5款免費(fèi)制造電子名片的工具 制作名片用什么軟件好
- 春餅面怎么和才能軟軟的 春餅的制作方法
- 臘八蒜可以用樂(lè)扣盒子制作嗎
- 教你把照片制作mv視頻 怎么制作mv視頻加帶字
- 游戲簡(jiǎn)潔有寓意的名字,有深意好聽(tīng)的游戲名字
- 蘿卜蹲名字
- 小黑貓是什么意思
- 微星游戲本深度評(píng)測(cè) 微星游戲本怎么樣
- 拯救者R7000開(kāi)箱評(píng)測(cè) 拯救者游戲本怎么樣
- 雙飛燕J95游戲鼠標(biāo)開(kāi)箱測(cè)評(píng) 雙飛燕鼠標(biāo)怎么樣
