当前位置: 首页 > 知识库问答 >
问题:

如何访问具有特定类属性值的类实例?

支铭晨
2023-03-14

我正在用Python制作一个基于文本的RPG,并尝试设置地图和玩家移动。然而,我还没有弄清楚如何“链接”房间,以便玩家可以使用诸如北、南等命令从一个房间无缝移动到另一个房间。

我正在使用一个名为“Room”的类,它具有x坐标和y坐标属性。我已经制作了地图中每个“瓷砖”的实例,具有特定的x-pos和y-pos值。我要做的是根据当前的x-pos或y-pos是什么,转到“Room”类的当前实例。但是,我不知道如何根据属性值查找类实例。

下面是我的代码。任何帮助都将不胜感激。

class Room:
    def __init__(self,name,info,xpos,ypos,exits):
        self.instances.append(self)
        self.name = name
        self.info = info
        self.xpos = xpos
        self.ypos = ypos
        self.exits = exits

作为参考,房间。退出是指您可以从房间的哪些部分退出。这可能只是“s”和“n”,意味着东西两侧都有墙。

为了进一步参考,在下面的代码中,Cloc代表当前位置。我目前将其设置为:

intro_room = Room("Living Room of House", "You are in a dusty living room, in a stranger's house. You don't know how you got here. It's hard to see and your hands are tied", 100, 100, ['s','n'])
cloc = intro_room

另一段代码:

def inp():
    basic = input(">")
    if basic ==  'i':
        print(" ")
        print("This is what is in your current inventory", inventory)
    elif basic == 'h':
        print(" ")
        ### use this when programming actual game
        print("Available commands:\n-move\n-take\n-look\n-talk\n-use\n-enter")
    elif basic == 'm':
        print(" ")
        print(current_location)
    elif basic == 'description':
        print(cloc.name, cloc.info)
    elif basic == 'n':
        cloc = Room.get(ypos==ypos+1) ###try to access instance with certain instance attribute value???
        #etc. for 's', 'e', 'w'

上面的代码不起作用,因为我不知道如何执行贴图移动。

共有3个答案

公良子轩
2023-03-14

你真的做不到

cloc = Room.get(ypos==ypos+1)

您应该创建单独的方法来获取和设置类属性,如下所示:

def getY(self):
    return self.ypos

def setY(self, ypos):
    self.ypos = ypos

#do the same for xpos

所以

cloc = Room.get(ypos==ypos+1)

变成

currentY = cloc.getY()
cloc.setY(currentY += 1)
乌骏
2023-03-14

我认为最好的选择是分开的逻辑存储房间在其他类例如:

class Room:
    def __init__(self,name,info,xpos,ypos,exits):
        self.name = name
        self.info = info
        self.xpos = xpos
        self.ypos = ypos
        self.exits = exits

class RoomCollection:
    def __init__(self):
        self.rooms = []

    def add(self, room):
        self.rooms.append(room)

    def find_by_xpos(self, xpos):
        for room in self.rooms:
            if(xpos == room.xpos):
                return room
        return None

intro_room = Room("Living Room of House", "You are in a dusty living room, in a stranger's house. You don't know how you got here. It's hard to see and your hands are tied", 100, 100, ['s','n'])

all_rooms = RoomCollection()
all_rooms.add(intro_room)

room = all_rooms.find_by_xpos(100)

print(room.name)
苗征
2023-03-14

您可以将所有房间组织在一个dics中,其中的关键是2元组(xpos,ypos)。然后,根据您的退出,您可以退出到不同的房间。

all_rooms = {
   (0, 0): Room(..., xpos=0, ypos=0, ...),
   (0, 1): Room(..., xpos=0, ypos=1, ...),
   ...
}

def inp():
    ...
    elif basic == "move":
        direction = input(f"Which direction? Your options are {cloc.exits}. \n>")
        if direction in cloc.exits:
            # determine new coordinate set based on direction
            new_loc = {
                'n': (cloc.xpos, cloc.ypos + 1),
                's': (cloc.xpos, cloc.ypos - 1),
                'e': (cloc.xpos + 1, cloc.ypos),
                'w': (cloc.xpos - 1, cloc.ypos),
            }[direction]
            # change current location to the new room
            cloc = all_rooms[new_loc]
        else:
            print("You can't move in that direction.")
    elif ...
 类似资料:
  • 问题内容: 我试图通过将所有参数元素为type_id =“ 4218”的所有“ ”元素从URL解析XML文件? XML文件: 这是我的Java代码: 这段代码给了我所有元素,我不想要,我想要属性type_id =“ 4218”的所有元素! 问题答案: XPath是您的正确选择: 并遍历

  • 我正在建立一个本体论。 我有一个叫的类 我有一个名为的对象属性 我添加了一个相当于的

  • 我正在尝试更新当前登录用户的密码。但它显示了零点异常。 配置文件控制器: ProfileService: 给我这个错误: 2019-07-09 01:55:04.284错误---[nio-8080-exec-8]o.g.web.errors.GrailsExceptionResolver: NullPointerExcture发生时处理请求:[POST] /profile/doPasswordCh

  • 问题内容: 如何在Python中将类成员变量限制为特定类型? 较长版本: 我有一个具有多个成员变量的类,这些成员变量在该类的外部设置。由于它们的使用方式,它们必须为特定类型,即int或list。 如果这是C ++,则只需将它们设为私有,然后在“ set”函数中进行类型检查。鉴于这是不可能的,是否有任何方法可以限制变量的类型,以便在为其分配了错误类型的值时在运行时发生错误/异常?还是我需要在使用它们

  • 场景,我有两个类管理员和用户。user包含一个布尔字段,标题为[代码][授权][/code]。我希望管理员能够为任何用户访问和编辑此字段,但我不希望用户自己有权访问此字段。我该怎么做呢?

  • 如何使类示例推断类型基于实例值检查: 打字沙盒。