遊戲 2048 的基本遊戲策略是什麼?
最近 2048 這個遊戲很火啊,這個遊戲的基本策略是什麼?
基本的思想就是遞歸生成,要嚴格按照一定步驟,就像解九連環那樣,決不能碰運氣。
一開始的步驟是這樣,如果左下角第一個數字是,那麼就在他的右邊放,依次類推,直到剩下4或者2,此時只要往末尾的數字填一個4或者2,頂端數字就會變成。然後在頂端數字旁邊,再用同樣的方法構造,……直到逐格降冪後出現4或者2。如果最後一行用完了,就轉彎繞上來。
下圖是一個遊戲剛開始的例子,我只要在右下角合併一個2,頂端數字就可以變成32,然後我繼續再頂端數字旁構造16、8……
.嚴格按照這種方法,最後勝利前的圖是這樣的:
此時只要弄一個8出來和第三行第一列的數字合併即可達成2048。
這種方法要求你絕對慎用向上鍵。向右鍵也需要謹慎使用,只有在數列所在行滿行的時候才能使用。否則在左下角可能會出現4或者2,這會將你的數列錯行。有一個問題是,這種方法做出來的2048,由於最後一個步驟是將等比數列求和,所以屏幕上幾乎不剩任何數字,分數較低。但沒關係,這個小遊戲剛剛取消了只能玩到2048的限制,只要按照這種方法玩,不僅2048幾乎可次次達成,然後再keep going,4096都不是夢(需要運氣)。
(敗在了追尋8192的路上,頂部空間不夠了)
重大更新!已突破16384!求對手!上圖
實我是來顯擺的。作為一個完成8192超10w分的人應該還是有資格回答這個問題的。其實按照數據帝的玩法基本是2048沒有問題的了,還有一點就是要固定好所需要的數字,例如最後一行排列著256 512 1024 2048。這時候你就需要一個256在第三行第一個格,為了保持這個位置,你需要塞滿第三行來固定。大概就是這樣了。ps:目測極限就是16384了,因為我玩到8192的時候已經差不多沒有格子放數字了,上圖如此混亂是因為我已經玩到困了...=_= 遊戲的時候盡量不要向上推,推了就很難控制位置了。
-----------------逼於無奈分割線---------------這答案好像寫得口氣有點大了…有不少人說要挑戰…但是挑戰也走心一點好嗎…不要用悔棋版啊啊啊啊…我玩的不是悔棋版啊啊啊啊…你們用悔棋版挑戰我的正常版…我也是醉了=_=
今天下午在人人上看見這個遊戲,玩了好一會兒才通關。
首先分析下這個遊戲:
1. 在4乘4的方格上,每移動一步會隨機在空位出現2或4;
2. 相同的數字碰撞可以合成兩倍的數字;
3. 遊戲的最終目的是合成2048這個數字。
鑒於每次空格里隨機出現的數字是2和4,所以我認為基本的策略是將較小的數字(2,4,8…)接觸到空格的概率最大化。具體來說,就是讓現有的較大數字盡量在某個遠離空格的角落,較小數字在更更接近空格。
所以開局的時候我大概會比較快的無腦按20S,將數字集中在左下角(取決於個人習慣,任一個角落沒區別),如圖:
然後就開始稍微慢些觀察著移動,基本原則如上所說,讓新的數字盡量接觸小的數字。
在移動的過程中也要注意一些細節。
比如在橫向移動時記得保證最下一排是滿的(有四個數字),這是為了防止隨機數出現在最下面一排。
最後就是這樣啦:
PS:貌似在完成2048的同時分數越高越好,有志之士們繼續努力吧~~
知乎首答,後續想到啥再補充。2048超進化 - U77總有好遊戲
我覺得各位應該好好的來這裡體驗下如何快速達到2048!!!
想用演算法來解決問題:
所以,只做知識的搬運工 (圖好像不穩定):
What is the optimal algorithm for the game 2048?
I"m the author of the AI program that others have mentioned in this thread. You can view the AI in action or read the source.
Currently, the program achieves about a 90% win rate running in
javascript in the browser on my laptop given about 100 milliseconds of
thinking time per move, so while not perfect (yet!) it performs pretty
well.Since the game is a discrete state space, perfect information,
Monotonicity
turn-based game like chess and checkers, I used the same methods that
have been proven to work on those games, namely minimaxsearch with alpha-beta pruning.
Since there is already a lot of info on that algorithm out there, I"ll
just talk about the two main heuristics that I use in the static evaluation function and which formalize many of the intuitions that other people have expressed here.This heuristic tries to ensure that the values of the tiles are all
either increasing or decreasing along both the left/right and up/down
directions. This heuristic alone captures the intuition that many others
have mentioned, that higher valued tiles should be clustered in a
corner. It will typically prevent smaller valued tiles from getting
orphaned and will keep the board very organized, with smaller tiles
cascading in and filling up into the larger tiles.Here"s a screenshot of a perfectly monotonic grid. I obtained this by
running the algorithm with the eval function set to disregard the other
heuristics and only consider monotonicity.Smoothness
The above heuristic alone tends to create structures in which
adjacent tiles are decreasing in value, but of course in order to merge,
adjacent tiles need to be the same value. Therefore, the smoothness
heuristic just measures the value difference between neighboring tiles,
trying to minimize this count.A commenter on Hacker News gave an interesting formalization of this idea in terms of graph theory.
Here"s a screenshot of a perfectly smooth grid, courtesy of this excellent parody fork.
Free Tiles
And finally, there is a penalty for having too few free tiles, since
options can quickly run out when the game board gets too cramped.And that"s it! Searching through the game space while optimizing
Edit:
these criteria yields remarkably good performance. One advantage to
using a generalized approach like this rather than an explicitly coded
move strategy is that the algorithm can often find interesting and
unexpected solutions. If you watch it run, it will often make surprising
but effective moves, like suddenly switching which wall or corner it"s
building up against.Here"s a demonstration of the power of this approach. I uncapped the
tile values (so it kept going after reaching 2048) and here is the best
result after eight trials.Yes, that"s a 4096 alongside a 2048. =) That means it achieved the elusive 2048 tile three times on the same board.
無意間刷到這個問題,沒有別的意思,純粹的想裝一逼。
這是去年8月份弄的,快一年沒玩了。
還有,對於二樓回答對不起了。
唉,無敵是多麼的寂寞~[欠操]
遊戲介紹:
「2048」,在一個4*4的方格中進行。通過方向鍵操作,在同一直線上,沿移動方向,數字相同合併(加法)。3個相同數字,則按先後合併。既,4,4,4向右合併,則8,4;向左,則8,4。向上向下同理。每次方向操作後,都會在沒有數字的空格位置產生一個數字(一般只會出現2,4,沒看源碼)。產生數2048,則挑戰成功。16個方格都有數字且無法再合併,則挑戰失敗。
核彈_百度百科
核心:
2 + ( 2 + 4 + 8 + 16 ) = 32
.
.
.
128+(128 + 256 + 512 + 1024)= 2048
S型進貢」。
優點:操作步數少,方便快捷。15分鐘就可以闖過「16銅人陣」。
思路:
把方格分成2類,積累區(第一行,顏色階梯)和拼湊區(第二三四行)。
積累區:
放置大樹,且a[1][4]最大,a[1][3]次之,a[1][2]再次,a[1][1]最小。
如果局點:a[1][4]=1024,a[1][3]=512,a[1][2]=256,a[1][1]=128,a[2][1]=128,那麼只要上右右右右合併就形成2048。由此,只要一開始就在積累區形成階梯安排,那麼依次累加就會形成局點。因此,在積累區主要或者只需進行「向右」操作。形成由右向左的階梯安排。那麼如何有效的安排積累區呢?這就需要拼湊區的幫助了。
拼湊區:
既然積累區只需進行向右操作,那麼如何「進貢」?顯然,a[2][1](藍色)就是入口點。只要a[2][1]==a[1][1],那麼就可以開始鏈式反應了。那麼在積累區也需要類似的階梯安排,只不過是從左向右從下向上(斜的階梯狀)。
操作時注意幾點:
1.積累區不到萬不得已不要「左移」。因為左移時,可能會在a[1][4]產生空格。如果沒有在這個空格上產生數字,則無傷大雅;如果產生了數字,尤其是在後期,只能說你中獎了,一般都很難進行下去,不過不是絕對的,只是新的「積累區」就變小了。如果在積累區,由於合併產生空格,一定利用操作,將新產生的數字填滿,盡量形成階梯安排。
2.注意相鄰合併性
(1)由於遊戲規則,相鄰的數是成倍數關係(2倍,4倍,8倍...)。相鄰的數相差不要太大,保持在2倍,4倍為妙。
(2)既然入口點a[2][1],那麼它的「進貢點」a[2][2]和a[3][1]就尤其重要。如果a[2][2]&>a[2][1],那麼只能由a[3][1]來「進貢」;同理,如果a[3][1]&>a[2][1],那麼只能由a[2][2]來「進貢」。剩下的格子作為「再次進貢點」,同時注意(1)。
3.即使在挑戰過程中,產生了「要悲劇點」,耐心發現聯繫,調整過來。只要能形成階梯安排,「上上下下左左右右」的直上直下操作也無妨,要靈活多變,因地制宜。
4.最後,「實踐出真知,熟能生巧」。
以上只是個人的一些看法,歡迎來電來信來連探討。
5.9update,一點小修改。
個人測試合成2048需要7分鐘,4096需要15分鐘左右,珍愛生命,遠離2048
已經玩了很久,已合成8192,基本每局都能合成4096的來挖個坑,早晨起來就答~
不過我的水準暫時也就是8192,大神們就不要搭理我了,新手們可以看一下嗯。
個人認為這個遊戲是比較機械的,有固定的玩法,只要不出差錯,2048還是很容易得到的~
第一次覺得有一個問題一定要認真答一下!!畢竟花費了數十小時玩這個!
下面就是我的一點見解。 :)
我認為這個遊戲可以分為幾個階段。
1.初期(剛開始一局遊戲)
有序性(水準至少是對這遊戲已經有所了解)
這個遊戲很關鍵的就是數字的布局要有序。
對於我的遊戲習慣而言,就是最大的數字擺在左上角,且盡量不讓它移動,左邊數第一列的數字,大小順序就如上圖那樣,最大的在左上,然後從大到小排布下來。
這樣做的意義在於所有的數周圍都是大小接近的數字,方便合成更大的數字, 初期的布局就如下圖。
按照這種布局, 很關鍵的就是你一定不能向右或者向下劃(第一列四個數字都不相同的時候是可以向下的,如上圖,因為第一列沒有相同的數字,向下劃時,只會移動另外三列,而第一列不會向下),如果你向右劃,則很可能出現一個2在第一列,因為周圍的數字都比較大,所以難以合成新的數字,會造成很大的麻煩,新手很可能就玩死了(當然還是可以拯救的,後面提到)。
2.中期
合成512 1024之後
在合成1024之後,你會發現你的格子有點不夠用了!如下圖~
此時就要用到第二列了,具體的方法是第一列從大到小排布下來,第二列從小到大排布下來,同時讓第一列最小的數字和第二列最大的數字大小接近。
目的是讓第二列最大的數及時與第一列最小的數合成新的數字,從而節省格子。布局如同上圖~
但是很有可能你的布局出現我這樣的問題(如上圖),第二列最大的數字大於第一列最小的數。此時就會導致第二列最大的數字不方便加入第一列。
此時的解決方法有兩種:
1.把64移到上面的位置,然後移動一個2到64和32所夾的格子處,再然後把這個數字不斷合成為更大的數字,到了32時就可以讓它加入第一列了!然後繼續保持這種布局繼續完成~
2.可以將錯就錯,將第二列最大的數字合成到和第一列倒數第二位的數字相同時再加入第一列,比如上圖中的64可以進一步做成128再與第一列的128合成更大的數字。
3.中後期
2048之後的玩法(各種小問題及解決)
其實和1024之後的玩法接近,就是要保證布局的穩定性,即第一列和第二列的大小順序。
我覺得這個階段最重要的是細節。
每一次向下劃的時候都要注意第一列是不是又相同的數字,避免最大的數上面出現一個2.
再比如合成過程中一定要注意出現下圖的問題
此時只能向右划了有木有!一划就要出問題有木有!
避免這個問題的核心我覺著就是一定要每一步都思路清晰,要讓每個數字附近都是大小接近的數字,當布局不太正常的時候,早早注意到就可以避免,這樣就很難出現這種問題了。
萬一(其實根本不是萬一),最大的數字上出現了一個2,該怎麼拯救!
具體來說就是盡量使用向下和向左的操作, 將1024這一行的四個數字做成不一樣的(確保不會向右移動),且1024上 的那一行可以向右滑動,此時向右劃,空出1024上的位置,向上滑就把1024移動到了左上角,再然後就是調整一下布局,使它有規律,就可以繼續操作了。
第二種方法還是將錯就錯,將上圖中的2合成一個8,從而使第一列的數字可以向下再合成一次,這樣1024就會出現在第三行,進行上面的操作時會更容易調整。
4.後期
4096以後
個人認為此時的難度主要是格子實在是太不夠用了,第一列會塞滿很大的數,所以主要依靠第二列,用之前的方法不斷往第一列湊較大的數字,同時操作的時候要更加細心,避免出現只能向右劃的狀況,核心的是第二列也要像第一列一樣保持大小布局的穩定性(從下到上的次序為大到小),始終保證最大的在下方,且每次向上劃的時候保證這一列不會動。
玩到4096以後就很容易玩死了,所以我也就合成了兩次8192,先就想到這麼多~如果有需要會再補充嗯,希望有人看到我的答案:)
首先分析2048遊戲:
1.格子里的總數字會隨著步數增加而以2或4地增加。所以,要達到2048,必須有足夠多的步數作為支撐。即玩家堅持的步數越多,勝利希望也越大。
2.四個方向地位相等。
3.要持續遊戲,需要方格之間的「密度」(即數字大小)相對一致。這樣才能使得合併變得可能。
4.遊戲系統選擇一個空格隨機出現2或4。所以當任何一個方塊被移動時,它原來的位置都有一定概率出現新的數字,從而可能打亂玩家的安排。
基於以上分析,可以得到下面的想法:
1.使得方格之間的「密度」趨於一致。由於有一個最大的目標(即2048),在完成這個目標前,這個方格的數值是相當大的。為了使得方格之間「密度」趨於一致,我們需要盡量減少與之交接的格子數量。所以,一個最大的數只能放在角上。既然只能放在角上,那麼就註定它不能移動(見分析4)。類似的,次大的數(如1024 512之流)只能放在最大數的直接鄰域,且順序固定或無大變化(如最底一行是2048 1024 512 256)。同時,由於角點處有兩個方向(如左下角,有最左邊和最下邊兩個方向),而達到目的只需要一個方向的排列就夠了,所以我們可以捨棄一個方向(如捨棄最左邊,即保留最底一行的排列是2048 1024 512 256,則「up」的操作被捨棄,否則會使得左下角最大數發生可能的位置變化,即我們只用三個方向完成遊戲。只要控制好,可以保證不出現非up不可的情況,下面都基於捨棄up來實現)。同時,為了生成和將最大數壓在左下角,left和down優先順序相對比right高。
2.為了實現想法1,在達到目標前,我們需要保持這樣的排列而無變化(注意,是無變化。即無論怎樣操作最底一行的排列永遠是類似2048 1024 512 256這樣的大小順序),我們需要保證左右移動時最下一行的排列不變,同時也是整個4乘4矩陣中最大的一排。所以,在選擇left還是down的時候,當最下一排沒有被填滿時,用down。填滿後視用left將最下一排合併,出空格後繼續down,直到用left對最後一排壓不出來空格。此時left和right隨便用,但是要控制好不出現非up的情況。
3.不斷重複以上過程。同時注意不斷提高最下一排的密度。注意微調防止死。達到目標只是時間和耐心的問題。
總而言之,開局胡亂down+left,穩定後微調使得最下一排按序排列成等比數列,再按思路走就行了。一般2048用8分鐘,斐波那契慢一點但也在15分鐘內吧。完全無腦直接按,只有瀕死狀態才微調,很快又能出無腦按。
本方法不僅對4乘4傳統2048有效,還對8乘8的65536以及4乘4的斐波那契也有效。因為我的分析與具體消數規則無關,也與尺寸無關。演算法驗證還在用matlab寫,但估計沒那麼快做出來,時間有限,關鍵還是碼力太差了?▂?。
本答案純粹拋磚。
=====================2014.6.22更新=============================
本方法有缺陷。
在寫代碼到一半時,我發現步驟2中的黑體字有的時候是不能實現的。還有,有的時候會非用up不可,從而被打亂計劃。多次實驗後發現這貌似是不可用操作避免的。
更多的討論,請看:What is the optimal algorithm for the game, 2048?
從遊戲開始一直按向右向下向左向上依次滑動,最高能出來一個 512 和幾個 128什麼的,剩下的再用上面那些技能。
玩到8196(2的13次方)的飄過,16個格子理論上是應該可以到2得17次方(131072,因為每次移動的新增可能是4相當於最後拓展了一個格子,所以是2的17次方),但我個人感覺無論再怎麼斟酌技巧2的14次方也就是極限了,因為此遊戲每次滑動新生出來2的位置是隨機的。
==== 分割線,開始回答 ====
其實得分最高的人的回答已經很好了,我隨手寫一下達到 2 的16 次方的情況
(32768) (16384) (8192) (4096)
(256) (516) (1024) (2048)
(128) (64) (32) (16)
(2) (2) (4) (8)
其實就是蛇形的,保持大小順序,盡量做到上圖所示。
一個別人沒有提到但是超有用的技巧,由於本人工程師出身,對滑動事件和處理比較敏感,發現了一個程序的小漏洞,當你在如下情況時,往往會打破你預期的規律
(1024) (512) (258) (128)
(4) (8) (16) (32)
(空) (空) (空) (空)
(空) (空) (空) (空)
此時必須要下滑才能繼續,但下滑新生成的2也許會完全打亂頂部的結構、順序
此時你快速下滑,再快速上滑,就會在底部出現兩個2 ,而頂部不會有變化
原因是兩個滑動事件並發接受了,新產生的兩個2會根據當前的情況選擇空白位置
看了前面的回答覺得好麻煩...我也來個
其實本質就是兩個相同的方格拼在一起變成一個新的(進化的)方格(2進位數不過是便於人們理解,加法多容易)
玩家大多多玩幾次就會發覺如果前幾個回合是上下左右任意移動的話後來就會出現四周都有較小的數但移不到一塊兒去
於是最好的方法便是把所有新出現的2或4都放在一個區域內,這樣就可以組合成大數與之前的大數相結合,又不能讓其他區域內出現小數,所以要儘可能減少移動的方向數
也就是之前大家說到的盡量堆在一個角(方向只用右和上、右和下、左和上、左和下),一個用來消除小數(2和4)變大數;一個用來囤積大數,到了一定程度讓大數相結合再讓小數區域內的較大的數填充,周而復始...加細心一點別不小心死掉的話,通關應該沒什麼問題了~
差不多就這樣:)採用無恥的悔棋大法後,終於過百萬了。
玩法基本按目前的排列順序
--------------------------------------------------------------------
最終結果,理論上的最高分,累死我了
很喜歡這個遊戲,可以玩到8196, 放上我玩的兩段錄像以供參考:
http://video.sina.com.cn/v/b/129302682-1293259722.html
http://go2048.com/?replay=5134
(昨天看到了go2048這個網站,玩了幾把,刷到了比較靠前;今天看到ilyakor, 也就是目前排第一的那個,他的策略不明覺厲,大家可以觀察一下)
我玩的時候基本策略與 @chenqin 一致,在操作時比較多地使用靠下部的4*3的格子生成64, 128和256這類方塊來給第一行「進貢」。可以在非危險情況下提高手速。為了拿到高分,可以練一下如何「在4*3的棋盤內不使用向下的按鍵,在左上角生成一個128」 (這樣就有很大的機會拿到2048了); 隨著操作的熟練,可以嘗試在同樣的情形下生成256和512(找到規律之後實際上沒有想像中困難,這樣玩幾次就能玩到8196了).
接觸了這個遊戲有一周了,總結了一些心得:
- 把大的數字放在角上(以左上角為例)
- 任何情況都不要往
- 第一排能排滿盡量排滿
- 數字按蛇形分布
為了形象一些,我就再玩一局吧。方法採用向左上角發展,第一排降序第二排升序的方法:
- 進入到遊戲後,你需要做的就是亂按,直到左上角的數字達到一個比較大的數,一般是32,最好不要超過64
- 接下來就是不斷翻倍第一排的數字,使數字全部靠左上角集中。
Tips:在下圖這種情況時,一定要把第一排排滿,否則你向右的話,你左上角的最大
數的左邊可能會有2冒出來。
- 按照這種策略你的左上角數字會越來越大,也會出現這種必須向右的狀況,下面就看你的人品了,如果你的人品太差會再128的左邊出現一個2,就會非常棘手,所以盡量避免這種情況
- 現在已經形成第一排降序,第二排升序的大體形態了
- 最不想出現的情況出現了,在256的左邊出現了一個2,所以我現在的當務之急是除掉這個2。應該怎麼除掉?必須把2變成256,然後2個256再合併到左上角,雖然很麻煩,但這是必須的也是唯一的方法了
- 清除了左上角的障礙後,我們繼續按前面的原則進行排列
- 接下來一帆風順,距離2048更近一步了
- 接下來我遇到了一個棘手的問題,因為我必須向下移動了,這對已經成型的第一排是一個毀滅的打擊
- 最後力挽狂瀾,拯救住了
- 如果一切順利的話,你也會達到2048
- 繼續玩,還是用剛才的策略玩到4096了
- Game Over!
遊戲其實多玩,就會總結出一些規律的,這才是遊戲的樂趣~
我摸索到的2048通關方法:
1.先貼邊構建一個按冪指數增長的數列A,比如2,4,8,16。這樣其他的3*4個格子里的數字基本可以自由移動了。
2.然後貼著A構建一個冪指數小一級的數列B,比如:空,2,4,8。然後推兩下就可以和旁邊列A消除,得到32了。
3.始終保持這個數列的四個數字都固定在某行,然後移動其他數字,至少最大數要在某一角。
4.如此往複若干次,直到構建出最大數1024.這時1024應該在某一角。
5.繼續構建數列A,即1024,512,256,128.
6.繼續S形構建數列C,即64,32,16,8
7.然後沿著S形逐個消除,就可以享受勝利的喜悅了!
(請叫我天才少女好嘛謝謝)
控制台輸入:
GameManager.prototype.addRandomTile = function () {
if (this.grid.cellsAvailable()) {
var value = 1024;
var tile = new Tile(this.grid.randomAvailableCell(), value);
}
};
既然我不像適應它的規則,我就改變他的規則吧233333333
首先點那個Auto-run可以看到有演算法可以保證輕鬆玩到2048,而且感覺並不是按照我們一般的思路來移動的(大數會到處跑)。理性的分析我就不搞了,數學思維嚴重退化。。。
顯然我們不能和cpu比每步最優,如果每走一步都認真去比較移動的得失顯然腦容量會不夠的,而且人的注意力無法這麼長時間集中,另外還有隨機因素在攪局。但是人勝在可以吸取教訓並總結經驗,我認為遵循下面幾個大原則就可以了:
1、大數盡量放在角落裡不要頻繁移動(不過也有迫不得已的時候)。
2、盡量保持兩層自由空間,如果被逼到頂層,運氣不好就得重來。
3、優先消除離大數近的2和4。1024對2說:世間最遙遠的距離就是你在我身旁,我們卻永遠無法擁抱。。。
4、每層注意梯度,同3。
那個求對手的..........come on !!!!!純手工
上面回答都很全面了,順便就貼一個遊戲理論最大數字的分析。原帖在9gag扒的。
我只玩到4096=。= 到一萬多朋友真是有耐心啊
推薦閱讀: