我有一个项目,我要做一个2048游戏。在
现在,我在函数上,如果两个数相等,求和,如果两个数之间有0,它也应该把它们拉上来。在
基本上我就是这么做的:
'''tab creates the 2048 game board'''
def tab():
return ({
(1, 1): 0, (1, 2): 0, (1, 3): 0, (1, 4): 0,
(2, 1): 0, (2, 2): 0, (2, 3): 0, (2, 4): 0,
(3, 1): 0, (3, 2): 0, (3, 3): 0, (3, 4): 0,
(4, 1): 0, (4, 2): 0, (4, 3): 0, (4, 4): 0
})
#tab_reduc(t,d) gets a board(t) and a place to move as a string ('N','S','E','W') and moves the board as ordered
def tab_reduc(t,d):
for i in range(1,4):
for c in range(1,4):
if t[(i,c)] == t[(i,c+1)] and t[(i,c+1)] != 0:
t[(i,c)] = t[(i,c)] + t[(i,c+1)]
t[(i,c+1)] = 0
elif t[(i,c)] != t[(i,c+1)] and t[(i,c)] != 0:
t[(i,c)] = t[(i,c)]
t[(i,c+1)] = t[(i,c+1)]
elif t[(i,c)] == 0 and t[(i,c+1)] != 0:
t[(i,c)] = t[(i,c+1)]
t[(i,c+1)] = 0
return t
例如,如果我有:
^{pr2}$当我运行“tab_reduce(t,'N')”时,游戏应该开始运行,我确实得到了
(1,1) = 8
(1,2) = 8
(1,3) = 4
(1,4) = 0
但如果我有
(1,1) = 4
(1,2) = 0
(1,3) = 0
(1,4) = 4
我演北方戏,我明白
(1,1) = 4
(1,2) = 0
(1,3) = 4
(1,4) = 0
如果我再做一次,我会得到:
(1,1) = 4
(1,2) = 4
(1,3) = 0
(1,4) = 0
再说一遍:
(1,1) = 8
(1,2) = 0
(1,3) = 0
(1,4) = 0
问题是,这应该在一个重头戏中完成,而不是几出戏。在
有人能帮我吗?在
想法…
移动
N
时,可能需要向后迭代。在因此…
如果你这么做,你就会离你的解决方案更近了。但是,在这种情况下仍然会有一个bug:
^{pr2}$改进后的代码将生成:
当它应该产生:
我将把解决这个问题留给读者练习。我想,解决这个问题最简单的方法是在成功地进行积累时中断迭代。在
还有一些最后的想法:
如果我自己来实现这一点,我会使用稍微不同的策略。这里的关键是把问题分解成步骤。我们继续只谈北方。在
步骤:
让我们删除数字上方的所有
0
。也就是说,让我们把桌子向北展平。所以这个:接下来,让我们看看邻居,如果可以的话合并它们。所以:
第三步是再次删除0。我们需要这样做,因为我们在上一步中插入了一些额外的。在
现在。我们如何在代码中实现这样的东西?在
运行时输出:
我为了自己的理智改变了一些内在的东西。在这段代码中,
(i, j)
向下是i-1
行,右边是j-1
列。在相关问题 更多 >
编程相关推荐