2048ゲームコア実装
3643 ワード
コア機能の実現:
コード1(https://blog.csdn.net/hebtu666/article/details/81663648)
コード2(https://www.jianshu.com/p/dcf6a69a633a)
基本移動(右シフト)を作成し、残りの方向を回転マトリクスで実現します.
コード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