如何编辑类的实例?

时间:2019-04-03 17:55:53

标签: python class

我正在用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

1 个答案:

答案 0 :(得分:0)

问题是您的find函数正在创建一个新的symbol并返回它。当up()修改find()的结果时,它只是更改了一些不在符号列表(我认为是)中的副本。

一种解决方案是只返回find中列表中的元素。即

for element in symbols:
    if element.x == x and element.y == y:
        return element
return None