2048 遊戲核心演算法

2022-08-13 17:21:12 字數 1776 閱讀 2196

2048 遊戲核心演算法

架構顯示(介面)與控制(演算法)分離

控制台pyqt

pygame

演算法1. 高內聚:

上下移動 -矩陣轉置-> 左右移動

向左移動 --> 合併資料 --> 零元素後移

向右移動 -翻轉-> 合併資料 --> 零元素後移

2. 降維思想:

將二維列表的操作,改為對一維列表的操作.

list_merge = none

# zero_to_end()

# print(list_merge)

# merge()

# print(list_merge)

# 3. 向左移動

map = [

[2, 0, 0, 2],

[4, 2, 0, 2],

[2, 4, 2, 4],

[0, 4, 0, 4],

]def move_left():

"""向左移動map

思想:獲取每行,交給list_merge,在通知merge()進行合併

:return:

"""global list_merge

for line in map:

list_merge = line

merge()

# move_left()

# print(map)

# 4. 向右移動 move_right

def move_right():

"""向左移動map

思想:獲取每行,交給list_merge,在通知merge()進行合併

:return:

"""global list_merge

for line in map:

# 從右向左獲取資料形成新列表

list_merge = line[::-1]

# 處理資料

merge()

# 將處理後的資料再從右向左還給map

line[::-1] = list_merge

# move_right()

# print(map)

# 5. 向上移動 move_up 轉置 move_left 轉置

def square_matrix_transposition():

"""方陣轉置(列轉換為行)

:param map: 需要轉置的方陣

:return:

"""for c in range(1, len(map)): # 1 2 3

for r in range(c, len(map)):

map[r][c - 1], map[c - 1][r] = map[c - 1][r], map[r][c - 1]

def move_up():

"""向上移動

思想: 轉置 move_left 轉置 

"""square_matrix_transposition()

move_left()

square_matrix_transposition()

# 6. 向下移動

def move_down():

"""向下移動

思想: 轉置 move_right 轉置

:return:

"""square_matrix_transposition()

move_right()

square_matrix_transposition()

# move_up()

move_down()

print(map)

2048核心演算法,c 實現

這一篇主要講如何相應操縱者給出的指令,對地圖進行相應的操作。這裡我最開始的思路很簡單,就是將地圖的移動方式分為四種,即上 w 下 s 左 a 右 d 但是如果分為四個函式的話,那就太繁瑣了,復用性太差,相同的 複製四次只修改一點,十分難看,所以通過思考將四個移動方式合併成為乙個移動方式就是本篇所要思...

用於C51的2048核心演算法

直接可以使用,呼叫turn direction 即可以對4x4陣列進行移動。用法 宣告乙個4x4陣列,並賦初值為0,然後呼叫給定的turn 跟 addnumber即可。ps is over有錯誤,其他正常,過幾天修正。測試 平台為vs2010,測試通過。介面名稱 turn direction die...

打地鼠遊戲核心演算法

1.新增背景 2.新增敵方小怪地板 for var i 0 i0.4?that.visible true that.visible false that.type parseint math.random 4 that.initwithspriteframe cc.spriteframecache....