2048ゲームコア実装

3643 ワード

コア機能の実現:
コード1(https://blog.csdn.net/hebtu666/article/details/81663648)
def left():#  
    for i in range(4):#     
        for j in range(3):#          
            for k in range(j+1,4):#  j     
                if l[i][k]!=0:#     ,    。
                    #         k,  0     j    k       。
                    #  2048           ,  242,2 2    
                    if l[i][j]==0:#  j 0
                        l[i][j]=l[i][k]# j   k
                        l[i][k]=0#k 0
                        #             
                        #  :0 2 x x,      2  0  ,   2 0 x x
                    elif l[i][j]==l[i][k]:#    
                        l[i][j]=2*l[i][j]#  
                        l[i][k]=0#k    0
                        break
                        #       ,    j             
                        #  :2 2 2 x,  4 2 x 0,2 2 4 x  4 4 x 0      8
                    else:
                        break#    ,     ,   2 4 x x,  x 2     
                        #      j  。
 
def down():#     
    for i in range(4):
        for j in range(3,0,-1):
            for k in range(j-1,-1,-1):
                if l[k][i]!=0:
                    if l[j][i]==0:
                        l[j][i]=l[k][i]
                        l[k][i]=0
                    elif l[j][i]==l[k][i]:
                        l[j][i]=2*l[j][i]
                        l[k][i]=0
                        break
                    else:
                        break

def up():#  
    for i in range(4):
        for j in range(3):
            for k in range(j+1,4):
                if l[k][i]!=0:
                    if l[j][i]==0:
                        l[j][i]=l[k][i]
                        l[k][i]=0
                    elif l[j][i]==l[k][i]:
                        l[j][i]=2*l[j][i]
                        l[k][i]=0
                        break
                    else:
                        break

def right():#  
    for i in range(4):
        for j in range(3,0,-1):
            for k in range(j-1,-1,-1):
                if l[i][k]!=0:
                    if l[i][j]==0:
                        l[i][j]=l[i][k]
                        l[i][k]=0
                    elif l[i][j]==l[i][k]:
                        l[i][j]=2*l[i][j]
                        l[i][k]=0
                        break
                    else:
                        break

コード2(https://www.jianshu.com/p/dcf6a69a633a)
基本移動(右シフト)を作成し、残りの方向を回転マトリクスで実現します.
#     
def basic(board):
    global score
    global win
    #         

    for i in range(4):
        flag = 1
        while flag:
            flag = 0
            j = 2
            while j >= 0:
                if board[i, j] != 0:
                    if board[i, j + 1] == board[i, j]:
                        board[i, j + 1] = 2 * board[i, j]
                        board[i, j] = 0
                        flag = 1
                    elif board[i, j + 1] == 0:
                        temp = board[i, j]
                        board[i, j] = board[i, j + 1]
                        board[i, j + 1] = temp
                        flag = 1

                j -= 1
    return board


#   
def move_right(board):
    return basic(board)


#   
def move_up(board):
    #    +   
    board = board[::-1, ::-1].T
    board = basic(board)
    board = board[::-1, ::-1].T
    return board


#   
def move_left(board):
    #   
    board = board[::-1, ::-1]
    board = basic(board)
    board = board[::-1, ::-1]
    return board


#   
def move_down(board):
    #   
    board = board.T
    board = basic(board)
    board = board.T
    return board