我正在用Python制作一个益智游戏,它应该是3x3幻灯片益智游戏。我已经制作了一个存储名称/ id和x,y坐标的类。
在函数up()
中,我想将星号(*
)向上移动一行,理论上它应该可以工作,但显然不行。我有一个函数,该函数查找与两个坐标(find()
)相关的类实例,并返回名为symbol
的类的实例。
幻灯片拼图的布局:
1 2 3
4 5 6
7 8 *
当我尝试将新值分配给我上面的类实例(由6表示)时,没有任何分配。我想使用global关键字,但这似乎很麻烦,因为那样我就必须检查每个坐标,然后说出要更改的变量。
这是一款益智游戏,因此玩家能够毫无问题地四处走动非常重要。我没有尝试过其他任何事情,因为我不知道如何从这一点开始。
class symbol:
def __init__(self, x, y, val):
self.x = x
self.y = y
self.val = val
s1 = symbol(1, 1, "1")
s2 = symbol(2, 1, "2")
s3 = symbol(3, 1, "3")
s4 = symbol(1, 2, "4")
s5 = symbol(2, 2, "5")
s6 = symbol(3, 2, "6")
s7 = symbol(1, 3, "7")
s8 = symbol(2, 3, "8")
s9 = symbol(3, 3, "*")
def getPos():
xPos = 0
yPos = 0
for element in symbols:
if element.val == "*":
xPos = element.x
yPos = element.y
else:
pass
return xPos, yPos
def find(x, y):
xPos = 0
yPos = 0
found = symbol(100, 100, "FIND")
for element in symbols:
if element.x == x and element.y == y:
found.x = x
found.y = y
found.val = element.val
else:
pass
return found
def up():
x, y = getPos()
if y > 1:
newBlock = find(x, y-1)
myBlock = find(x, y)
myBlock.val = newBlock.val
newBlock.val = "*"
clear()
draw()
print(f"myBlock: {myBlock.val} ({myBlock.x}, {myBlock.y}), newBlock: {newBlock.val} ({newBlock.x}, {newBlock.y})")
else:
pass
#cannot go higher
答案 0 :(得分:0)
问题是您的find
函数正在创建一个新的symbol
并返回它。当up()
修改find()
的结果时,它只是更改了一些不在符号列表(我认为是)中的副本。
一种解决方案是只返回find
中列表中的元素。即
for element in symbols:
if element.x == x and element.y == y:
return element
return None