我试图将游戏2048重新创建为项目,并且我在操作2D阵列时遇到了麻烦。我试图移动2d阵列中的元素,而不让它们离开屏幕。
def move(self, direction):
if (self.d == UP):
for i in range(3):
for j in range(3):
if(self.line[i][j]!= self.line[0][0]):
self.line[i][j] = self.line[i + 1][j]
self.line[i + 1][j] = self.line[i + 2][j]
self.line[i + 2][j] = self.line[i + 3][j]
这是我目前刚刚让他们向上移动的东西,他们似乎总是消失或失败。
答案 0 :(得分:0)
我认为这可能是你想要的,它是在JavaScript中,因为我目前不在我自己的计算机上,但它是:
function up(tbl) {
var x = 0;
while (x < tbl[0].length) {
do {
var move = 0;
var y = 0;
while (y < tbl.length - 1) {
if (tbl[y][x] == 0 && tbl[y + 1][x] != 0) {
tbl[y][x] = tbl[y + 1][x];
tbl[y + 1][x] = 0;
move = 1;
}
else if (tbl[y][x] != 0 && tbl[y][x] == tbl[y + 1][x]) {
tbl[y][x] += tbl[y + 1][x];
tbl[y + 1][x] = 0;
move = 1;
}
y++;
}
} while (move == 1)
x++;
}
return tbl;
}
/* Just a testing table */
var t = [[1, 1, 0, 1],
[0, 2, 2, 8],
[0, 128, 1, 1],
[2, 0, 1, 4]];
up(t);
它的作用是逐列,从上到下,并检查:
此外,如果您想将其应用于其他三个方向,我建议旋转表格,而不是再做3个以上的功能。如果您无法将其转录为Python,我今晚可以帮助您。
编辑:
在这里,同样的事情,但在Python中:
def up(tbl):
x = 0
while (x < len(tbl[0])):
while True:
move = 0
y = 0
while (y < (len(tbl) - 1)):
if (tbl[y][x] == 0 and tbl[y + 1][x] != 0):
tbl[y][x] = tbl[y + 1][x]
tbl[y + 1][x] = 0
move = 1
elif (tbl[y][x] != 0 and tbl[y][x] == tbl[y + 1][x]):
tbl[y][x] += tbl[y + 1][x]
tbl[y + 1][x] = 0
move = 1
y = y + 1
if (move == 0):
break
x = x + 1
return tbl
t = [[1, 1, 0, 1],
[0, 2, 2, 8],
[0, 128, 1, 1],
[2, 0, 1, 4]];
up(t)
print('\n'.join([''.join(['{:5}'.format(item) for item in row]) for row in t]))
哦,原来的2048不允许磁贴在同一回合中合并两次,所以你可能想要调整elif以适应它,因为它将它们合并直到它不再存在。