首页
/
每日頭條
/
遊戲
/
python開發遊戲的路線
python開發遊戲的路線
更新时间:2026-03-22 05:18:21

上一篇文章中,我們梳理了實現簡易版 2048 遊戲的基本知識,這篇文章将介紹如何實現各個模塊。換句話說,上一次我們确定了旅行的目的地,這一次就讓我們自由暢行在山間田野。

python開發遊戲的路線(python實現2048)1

主程序,即 game 函數按部就班地向下執行,該判斷就判斷,然後執行相應函數。首先讀取用戶輸入,第一個判斷:是否移動數字,顯然要移動數字要滿足以下條件:

  • 用戶輸入小寫的 w s a d 對應上下左右
  • 該移動方向上允許移動

具體來說,移動方向最前面有空間或者有連續相同的數字。可以移動則執行 move 函數,并在棋盤上生成随機數字,否則原樣輸出。

其次判斷:棋盤是否被填滿。被填滿時執行 fail 函數。

最後判斷:是否勝利。如果獲勝,打印獲勝提示。

python開發遊戲的路線(python實現2048)2

首先是移動模塊:

basic 函數用來執行移動與碰撞的操作。move_{up,down,right,left} 函數用來實現各個方向上的 basic 函數操作。move 函數用來響應用戶指令,實現各個方向上的移動。

棋盤由 4 * 4 矩陣組成,0 代表該位置上沒有數字。basic 函數就是基于矩陣的運算,且以右移為基礎移動。

4 * 4 矩陣

向右滑動:

每一周期分為 4 輪,每一輪操作一行(共 4 行),從最左面的元素開始執行。設置 flag 用于提示這一輪是否發生了改變,如果發生了改變,這一輪就再進行一次循環,直到 flag 保持為 0 不變。對于循環的每一個元素,如果該元素不為 0 ,若下個元素為 0,就交換當前值與下個元素的值。若下個元素與當前元素相同,則當前元素置 0 ,且下一個元素增加一倍,分數還要增加 100 分。

舉個例子:對于第一行 [2 2 0 4]

第一輪:

  • 4 與 0 不交換 [2 2 0 4]
  • 0 與 2 交換 [2 0 2 4]
  • 0 與 2 交換 [0 2 2 4]
  • flag = 1 且 score = 0

第二輪:

  • 4 與 2 不交換 [0 2 2 4]
  • a13 雙倍 a12 置 0 [0 0 4 4]
  • 0 不變 [0 0 4 4]
  • flag = 1 且 score = 100

第三輪:

  • a14 雙倍 a13 置 0 [0 0 0 8]
  • 不變 [0 0 0 8]
  • 不變 [0 0 0 8]
  • flag = 1 且 score = 100

第四輪:

  • 不變
  • 不變
  • 不變
  • flag = 0 且 score = 0

即第一輪最後輸出結果 [0 0 0 8]。

以上就是向右移動的操作,而對于其他方向上的移動其實就是在此基礎上進行矩陣的轉置與逆置操作。

# A 為 4*4 的矩陣 # 轉置操作 A.T # 逆置操作 A[::-1,::-1]

下圖為原矩陣:

python開發遊戲的路線(python實現2048)3

向下滑動:

将原矩陣轉置得到新矩陣,新矩陣向右滑動,相當于原矩陣向下滑動,再轉置變回原矩陣。

python開發遊戲的路線(python實現2048)4

向左滑動:

将原矩陣逆置得到新矩陣,新矩陣向右滑動,相當于原矩陣向左滑動,再逆置變回原矩陣。

python開發遊戲的路線(python實現2048)5

向上滑動:

将原矩陣轉置加逆置得到新矩陣,新矩陣向右滑動,相當于原矩陣向上滑動,再通過轉置加逆置變回原矩陣。

python開發遊戲的路線(python實現2048)6

python開發遊戲的路線(python實現2048)7

接下來,我們講 choice 模塊:首先獲取值為 0 的矩陣元素的位置,并儲存在字典裡,以序号( 最大值為 count ) 為索引。其次産生 [0,count) 範圍内的随機數(随機抽取值為 0 的元素),并且産生随機數 2 或 4 (概率為 75% 與 25%)。最後将随機抽取的元素更改為生成的随機數(2 或 4)。

python開發遊戲的路線(python實現2048)8

然後是生成分數:

首先遊戲開始時加載一次分數(曆史最高分),遊戲結束時保存最高分。每次打印棋盤前,都比較當前分數與當前最高分,并更改當前最高分數。

python開發遊戲的路線(python實現2048)9

其次是打印模塊:

隻打印非零值。

python開發遊戲的路線(python實現2048)10

最後是一些零碎的知識點:

首先我們要初始化程序,初次運行遊戲會在當前目錄生成 ‘out.npy’ 文件,并且儲存 0 在文本中。其次初始化棋盤,最後就可以愉快地開始遊戲了。

python開發遊戲的路線(python實現2048)11

以上便是 python 實現 2048 遊戲的完結版,如果想獲取源代碼,在微信後台回複 2048 。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
推薦幾款好玩兒的單機遊戲
推薦幾款好玩兒的單機遊戲
哈喽!大家好我是鹹魚。我們在平時生活中最常玩的手機遊戲無非就是刺激戰場,王者榮耀,不過這些遊戲如果隻有你一個人玩的話也會很無聊,下面推薦幾款一個人也能玩的手機單機遊戲給大家吧!死神vs火影當年在4399小遊戲裡面,非常火爆的一款遊戲,死神和...
2026-03-22
一分鐘帶你了解劍網三
一分鐘帶你了解劍網三
一分鐘帶你了解劍網三?有人的地方就有江湖,有江湖的地方就有套路在新聞上,我們時常能看見那些用各種套路騙取财物的騙子而到了遊戲上,騙子們的套路也是一環套一環,讓人不禁直呼防不勝防,我來為大家科普一下關于一分鐘帶你了解劍網三?下面希望有你要的答...
2026-03-22
區塊鍊遊戲領域
區塊鍊遊戲領域
下面是小編收集了大量的資料還有我自己的一些知識以及見解,各位看官請輕噴!聊互聯網新遊戲(區塊鍊遊戲)前,有必要先了解一下電子遊戲發展史!到上世紀70年代,電子遊戲逐步成為一種職業而被人們接受,并在以後成為了一個重要的經濟增長點。比如,電子遊...
2026-03-22
怎麼玩迷你世界沙盒遊戲
怎麼玩迷你世界沙盒遊戲
我們都知道迷你世界從誕生的那天起就一直伴随着攻擊和指責,其實在小編看來,這都是再正常不過的事情了,但是總會有一些玩我的世界的玩家出來說迷你世界是抄襲的,這我可忍不了了,因為遊戲有非常多的表現形式,盡管迷你的表現形式跟mc有許多相似之處,但是...
2026-03-22
網戀被騙三百萬遊戲名
網戀被騙三百萬遊戲名
網絡遊戲受到不少年輕人的喜愛為了心儀的遊戲裝備不少遊戲玩家會不惜重金得到它但是黑心的騙子卻抓住了孩子分辨是非能力弱易上當受騙等特點在網絡中虛構各種理由誘騙孩子轉賬......11月14日,黃石12歲女孩小張不慎落入“免費領皮膚”的騙局,被騙...
2026-03-22
Copyright 2023-2026 - www.tftnews.com All Rights Reserved