tft每日頭條

 > 遊戲

 > python2048遊戲設計論文

python2048遊戲設計論文

遊戲 更新时间:2024-07-30 11:15:47

python2048遊戲設計論文(用python寫遊戲之2048)1

2048這個遊戲相信大家都不陌生吧

遊戲的規則很簡單,你需要控制所有方塊向上下左右的某一方向運動,方向上兩個相同數字合并會相加,每次移動後在空白處生成一個2或者4,最終得到一個“2048”的方塊就算勝利了。

雖然簡單但卻虐心,今天我們就來分析這個遊戲的算法原理,并用python把這個遊戲寫出來。

ok,我們分析的思路就是給這個遊戲來一個二向箔,降維打擊,如何做,可以往下看。

首先我們把遊戲4*4的方格,稱之為棋盤,然後忽略棋盤的背景和顔色,使之變成4*4的田字格,田字格裡是對應的數字,空白的方格用0填充,如下圖

python2048遊戲設計論文(用python寫遊戲之2048)2

圖變成了一個4*4的方格,接下來去除方格,把每一行提取出來寫到python的列表裡,比如第一行變成 [2, 0, 2, 0], 那麼這個4*4的方格,就變成了一個4*4的二維矩陣

python2048遊戲設計論文(用python寫遊戲之2048)3

抽象成python的數據格式之後,我們看數字移動和數字加減的操作。

以向左移動為例,移動的結果,第一行會變成[4, 0, 0, 0 ], 第三行會變成[8, 0, 0, 0],即

python2048遊戲設計論文(用python寫遊戲之2048)4

可以想象每一行計算的方法是一緻的,隻要搞定了一行數字的移動算法,那麼整體4行就是把這個算法執行4遍即可。所以我們就完成了初步的降維,把4*4的計算,變成了4*1的計算。

那麼接下來我們以第一行的數字的移動為例,介紹數字該怎麼移動。

還看移動之前該矩陣的第一行 [2, 0, 2, 0], 向左移動時,需要把不為零的數字,一起向左移動,第一位的2不需要移動,第二位是0,不看,第三位的2,需要往左一位。那麼我們換個思路,2向左移動,是不是可以看成是第二位的0向後移動,如果我們把第二位的0先删掉,[2, 0, 2, 0] 變成 [2, 2, 0], 然後再把0在最後添加進去,[2, 2, 0]變成[2, 2, 0, 0],這樣2就向左移動了,神奇不神奇?

那我們完成了移動,怎麼完成相同的數字相加呢

其實隻要從行的第一位開始,比較它和它後邊的那一位,如果一樣,就把它乘以2,然後把它後邊的那一位删掉,最後在行的末尾添加一個0,保證矩陣的shape一直是 4*4。

操作可以看下圖

python2048遊戲設計論文(用python寫遊戲之2048)5

ok,到這裡完成了一行的向左移并相加的算法,那麼四行的算法是一緻的,也就完成了整個4*4矩陣左移并相加的操作。

那麼問題來了,向右移該怎麼做呢?

其實右移和左移的操作很相似,隻在行的方位上移動數字,行與行之間沒有什麼直接操作,那麼在右移時,先把每一行逆序一下,也就是 [2, 0, 2, 0]變成 [0, 2, 0, 2], 再做左移的操作,完成之後,把結果再逆序一下,是不是就ok了呢?

我們來看一下

python2048遊戲設計論文(用python寫遊戲之2048)6

再問你一遍,神奇不神奇?

更神奇的還在後邊呢,目前完成了左移和右移的操作,那麼上移和下移呢?接下來我們要給這個遊戲來第二次降維打擊。

這裡要用到一個我們學過的線代的知識,矩陣的轉置,什麼?你說不知道。ok,意思就是行轉列,列轉行的操作。

什麼?還不知道?看圖理解

python2048遊戲設計論文(用python寫遊戲之2048)7

這下清楚了吧。

細心觀察之後,你會發現,原本矩陣數字上移的操作,經過轉置之後就變成了左移的操作。又可以用我們之前的算法了。(鼓掌)

那麼上移的操作就變成了 轉置-->左移-->再轉置

那麼下移呢,聰明的你肯定已經猜出來了。

沒錯下移就是 轉置-->右移-->再轉置

ok,至此,2048遊戲核心邏輯,分析完畢,來個總結:

1. 以左移為基礎,把4行的操作看成1行的操作。

2. 左移的操作,先把0全部移到行的末尾

3. 然後從行第一位開始,判斷與後一位是否相等且不等0,若相等該位乘以2,删除後一位,末尾添加0

4. 右移操作是 行逆序--左移--再逆序

5. 上移操作是 矩陣轉置--左移--再轉置

6. 下移操作是 矩陣轉置--右移--再轉置

下邊開始撸代碼,let's go。

python2048遊戲設計論文(用python寫遊戲之2048)8

python2048遊戲設計論文(用python寫遊戲之2048)9

這裡隻展示核心邏輯的代碼實現,其餘代碼就不一一展示了,有興趣的私信回複 2048 即可獲取完整的源代碼

效果展示:

python2048遊戲設計論文(用python寫遊戲之2048)10

好的,裝x完畢,撤(完)。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved