pygame教程(八):數字華容道遊戲

2021-02-13 娜驛站

前言

前兩章我們學習了遊戲的初步實戰,利用所學的知識編寫了一個記憶迷宮小遊戲,較綜合地練習了用pygame開發遊戲的流程及相關的知識,這一章,我們繼續進入遊戲實戰,利用所學的知識開發一個「數字華容道」小遊戲。

數字華容道簡介

喜歡玩智力遊戲的同學們應該會熟悉這個玩法,以通常的4階為例,即在4X4的方格中填寫1~15共15個數字棋子,空出一個方格,通過不斷移動棋子,將所有數字按順序從小到大排列完畢,下面動畫是我們遊戲完成的最終形態:

如果有看過《最強大腦》的同學,應該還記得在有一季選拔賽中,就有用《數字華容道》這道題目來選拔選手。在本章,我們將來學習如何用pygame來開發這一款小遊戲。

遊戲思路

作為遊戲開發者,自然不只是要研究如何去解答題目,而是要對遊戲各種意外進行分析並編寫相應代碼來規範用戶輸入行為,下面列舉一下這個遊戲的開發步驟:

繪製背景及初始布局。

根據數字序列的逆序數奇偶性來生成新題目。

處理鍵盤四個方向鍵的響應。

處理滑鼠點擊響應。

計時、計步並進行結束判斷。

保存玩家成績。

疑難問題處理計算數字序列的奇偶性

需要注意的是:並不是任意生成的隨機數列均存在答案,由於初始空位的存在位置及生成數列的逆序數奇偶性,需要對這些情況進行一一計算,我們可固定初始位置於位4X4方格的右下角,在這種情況下,只需要保證1~15這十五個數隨機生成序列的逆序數為偶數即可,計算逆序數的函數如下:

構建數字棋子節點

由於每個數字棋子需要記錄其位置、顯示其上數字以及記錄其將移動的方向,所以可將每一個棋子元素設計為如下形式:

m = [位置數據,數字,可移動標記]

因為每個數字棋子最多只有四個方向可移動,且其每一次只可能有一個移動方向,所以這裡將可移動標記設為'0000'字符串,分別代表「左上右下」位置,當每個位置上變為1時,即代表相關的位置可移動,比如'0100'即代表該數字棋子可向上移動,假如此時玩家按下「向上」鍵時,該棋子即向上移動一格。

代碼如下:

以上代碼完成了題目的生成,該函數所帶參數是區分初始狀態和解題狀態。

查找可移動的數字棋子

當我們固定了一個空位後,需要即時計算出該空位四周的數字棋子,並將其可移動方向標記下來,這個應該不困難,根據行、列加減1後即可判斷,代碼如下:

由於我們設置的標記是字符串,每次變更需要對其進行修改,這段代碼還可以優化。

移動棋子到空位並交換

當玩家按下方向鍵後,需要判斷當前是否有數字棋子可供移動,若有,則將可移動棋子與空位交換,此時用動畫處理,代碼如下:

需要注意的是,對於列表而言,交換其兩個元素,需要直接引用列表,這樣才能交換列表中兩元素的次序。

處理鍵盤和滑鼠事件

處理方向鍵比較容易,這一點在上一次遊戲中我們有專門講述,這裡只列舉一段代碼,有練習過的同學很容易看明白:

對於滑鼠的處理,上一章中,我們直接獲取滑鼠的位置,自己寫了代碼來檢測當前滑鼠是否在相關方塊上點擊,這一次我們採取另一種更有效的方法,即直接可用pygame.Rect的collidepoint方法,如果滑鼠在該區域點擊,該方法返回True,否則返回False。代碼如下:

細心的同學應該注意到鍵盤和滑鼠的響應我們調用的是同一個函數,因為這部分功能是相同的,所以可將其單獨提取出來成一個函數,這將起到代碼重用的作用。

小結

在本章,我們講述了如何開發一個「數字華容道」的基本步驟,其中有部分功能與上一個記憶迷宮的遊戲類似,本章只對部分關鍵內容進行了講解,當然在遊戲開發過程中還有不少的開關變量需要設置,這一部分內容細瑣繁雜,短短一篇文章很難表述清楚,有願意進一步了解的可在公眾號內留言。

其它教程:

pygame教程(一):基礎知識

pygame教程(二):繪製幾何圖形

pygame教程(三):動畫初步

pygame教程(四):添加文字和播放聲音

pygame教程(五):添加滑鼠和鍵盤響應

pygame教程(六):迷宮小遊戲(1)

pygame教程(七):迷宮小遊戲(2)




相關焦點

  • pygame遊戲常用方法
    python做2d遊戲,用的最多的就是pygame庫,雖然比較老了,但是非常經典。
  • 從零開發一個小遊戲:PyGame入門
    因此,選擇了通過本公號與大家分享最易學的程式語言 Python 的教程和資源,希望對你有幫助。 今天分享的是 Python 翻譯組 最新譯文,原文來自real python,是一篇比較詳細的 PyGame 遊戲開發入門指南。譯者:haiyuqiao,華中科技大學(在讀研究生),正在使用 Python 做數據分析。Fighting from now!
  • pygame教程(三):動畫初步
    在pygame中,移動某種東西是利用blit函數進行的,該函數的功能是將某個Surface對象複製到指定的Surface對象上。讓小貓動起來在學習scratch時,我們學習過如何使那隻小貓在整個屏幕上跑來跑去,在這裡,我們利用pygame也來完成同樣的動作,看看有什麼區別。
  • 數字華容道,這款遊戲可以鍛鍊腦力?
    數字華容道,一款對腦力和體力的考驗,第一次看到這個是在電視上,當時的最強大腦,最強大腦中有一個環節就是數字華容道,這個環節印象計較深,自己總沒有機會體驗到,但是現在,數字華容道出了手機版,以遊戲形式出現,這款遊戲很不錯!接下來讓我們看一下吧!
  • 邂逅數字華容道
    雖然已經時隔超過兩年,八年級第一學期那個在大家眼中再平凡不過的下午,同學們忙忙碌碌,拿著紙和筆,和平常一樣的課表和作業,然而這個下午卻令我記憶猶新。那是下午第二節課,一節新德育課,由於臨近期末課程已經上完,加上老師考慮到臨近期末考試同學們的學習負擔都比較重,老師最終決定放最強大腦第五季來度過這一節課的時間。
  • 限免/數學 數字華容道
    導 讀 看了《最強大腦》,你是不是也想來挑戰一下數字華容道,今天限免的「數字華容道」一種獨特的華容道類型
  • 用pygame實現一個小遊戲——
    遊戲說明這是一款怎麼樣「畫風清奇」的遊戲呢?按歸屬應該屬於射擊類吧(不重要)。大概說明一下就是,控制一個魚(我們的主角色,badfish,白的fish,簡稱「白魚」)發射泡泡,去打貓。遊戲就是這樣的一個遊戲,類似於飛機打外星人,不過換了角色而已。大部分的工作,就是如何進一步豐富這個框架而已。
  • 《數字華容道》有什麼技巧 玩法攻略詳解
    導 讀 數字華容道手遊究竟該怎麼玩呢?
  • 用Pygame和Python做遊戲-從入門到精通(1)
    這裡主要是依靠Pygame來介紹的遊戲開發的方方面面,並不是說咱就可以靠這個做出什麼偉大的遊戲了(當然也不是說不可以)!另外說一下,就產品而言,Pygame更致力於2D遊戲的開發,也就是說,你可以用Pygame寫一個植物大戰殭屍,但是寫一個魔獸世界則相當困難……請不要做出鄙夷的目光,底層的東西永遠是相通的,而且對於新手而言,從簡單的2D入手才是正途。
  • 數字華容道-最強大腦
    數字華容道-最強大腦 休閒益智 大小: 28.49M
  • turtle製作遊戲秘籍之一
    換桶接方塊遊戲跳躍方塊避障遊戲.pynumpy與pillolw像素操作學習代碼地圖破壞者(打方塊)給Sprite類加方法(迷宮碰撞)探照燈手電筒.pypygame圖像處理_隱形的海龜筆pygame圖像處理_生成3D球用Python做3D動畫教程打包免費下載最簡在線搭建
  • 用python寫遊戲之200行代碼寫個數字華容道
    今天來分析一個益智遊戲,數字華容道。當初對這個遊戲頗有印象還是在最強大腦節目上面,何猷君以幾十秒就完成了這個遊戲。前幾天寫2048的時候,又想起了這個遊戲,想著來研究一下。遊戲玩法用儘量少的步數,儘量短的時間,將棋盤上的數字方塊,按照從左到右、從上到下的順序重新排列整齊。效果圖遊戲操作方式第一種是通過鍵盤的按鍵來移動數字,比如按上鍵,需要做的操作是把13移上去。
  • Toby 的 Pygame 學習筆記 | 初識Pygame​及隨書代碼下載推薦!
    比如例子:import pygamefrom pygame.locals import *white = 255,255,255blue = 0,0,200pygame.init()screen = pygame.display.set_mode((600,500))myfont = pygame.font.Font
  • [趣味數學]「遊戲華容道」的歷史
    遊戲華容道的故事來源是三國演義中關雲長義釋曹操。但是這個遊戲的起源,卻不是一般人認為的是「中國最古老的遊戲之一」。實際上它的歷史可能很短。  姜長英在他所著《科學思維鍛鍊與消遣》中說,「估計它的歷史只不過有幾十年。從前人的筆記中沒有發現有玩具華容道的記載。」姜先生自己是在1943年夏第一次看到這個玩具。
  • 數字華容道4x4作為最強大腦第一關真的有那麼難嗎
    數字華容道4X4這款益智遊戲說出來可能很多人會產生疑問,這是什麼小遊戲?可能大家都沒有聽過。但是提到最強大腦我想大家都有所耳聞,熟悉的人了解,最強大腦第一關刷掉海量參賽者的比賽項目正是4X4數字華容道。
  • 南昌9歲男孩破數字華容道紀錄 男孩媽媽:喜歡就去練
    近日,江西南昌一名9歲男孩打破數字華容道世界紀錄的消息引發關注。據江西當地媒體報導,在11月14日下午的南昌市鐵路第一小學,9歲的王懷玄打破了4×4數字華容道最快復原挑戰的金氏世界紀錄,原紀錄是22秒,而王懷玄僅用時10秒多。
  • 9歲男孩破金氏世界紀錄,10秒鐘復原數字華容道
    自古英雄出少年,一位9歲的男孩,用十秒時間復原了數字華容道,打破金氏世界紀錄。2019年11月14日,在江西南昌,一位9歲的男孩打破了4乘4數字華容道復原挑戰的金氏世界紀錄。在三次挑戰中最快的用時為10.036秒。
  • 中國古代民間益智數學遊戲——華容道
    華容道是古老的中國民間益智遊戲:早在1800多年前的三國時期,曹操在赤壁大戰中大敗而逃,一路被張飛、趙雲等人追殺,曹操最終逃至華容道,諸葛亮知道曹操會向華容道逃走,因此特地派關羽在此埋伏捉拿曹操,果然如諸葛亮所算,曹操逃至華容道,因關羽念及舊情,曹操之前有恩於關羽,最終放了曹操。
  • 三國華容道遊戲你會玩嗎
    華容道遊戲取自著名的三國故事,曹操在赤壁大戰中被劉備和孫權的「苦肉計」、「鐵索連舟」打敗,被迫退逃到華容道,又遇上諸葛亮的伏兵,關羽為了報答曹操對他的恩情,明逼實讓,終於幫助曹操逃出了華容道。遊戲就是依照「曹瞞兵敗走華容,正與關公狹路逢。
  • 《最強大腦》選手婁雲皓,用13秒刷新何猷君的數字華容道記錄
    記得之前看《最強大腦》的時候,就被何猷君這個有顏、有腦的富二代圈粉了,他用21秒破解數字華容道為《最強大腦》刷新了記錄。他在一堆埋頭破解的選手中,緊攥雙拳的樣子,我現在都記得很清楚。但沒想到,被婁雲皓用13秒刷新了何猷君的記錄。