所以我正在为2048游戏实现几个功能,并且在重要的所谓match( row )
[搜索相邻或仅由None
分隔的列表项时遇到一些问题并添加它们在最左边的位置]。我的算法本身似乎运行得很好,但是当实现为辅助函数时,它遇到了一些麻烦。例如,匹配的行用作[2]
或[4,4]
,而它应分别作为[None,2,None,None]
和[2,None,2,4]
输入,我可以从中查询可能的NoneType对象删除。
非常感谢在这个问题上提出的任何亮点。
这是完整的功能:
def match(row):
copy1 = row.copy()
score = 0
while None in copy1: copy1.remove(None)
i = 0
while i < len(copy1):
temp = copy1[i]
if i < len(copy1)-1 and copy1[i+1] == temp:
row[i] = temp*2
row[row.index(temp)] = None
score = score + temp*2
i = i + 2
else:
i = i + 1
return row
答案 0 :(得分:0)
这是同一功能的替代实现。如果您不重复使用row
变量并为trimmed
和new_row
使用单独的索引,则会变得更加清晰。
def match(row):
trimmed = list(filter(None, row))
new_row = [None] * 4
score = 0
i = 0
j = 0
while i < len(trimmed):
temp = trimmed[i]
if i + 1 < len(trimmed) and trimmed[i + 1] == temp:
new_row[j] = temp * 2
score += temp * 2
i += 1
else:
new_row[j] = temp
i += 1
j += 1
return new_row