我正在用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'
上面的代码不起作用,因为我不知道如何执行贴图移动。
你真的做不到
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)
我认为最好的选择是分开的逻辑存储房间在其他类例如:
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)
您可以将所有房间组织在一个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]。我希望管理员能够为任何用户访问和编辑此字段,但我不希望用户自己有权访问此字段。我该怎么做呢?
如何使类示例推断类型基于实例值检查: 打字沙盒。