所以我知道如何保存班级的x,y坐标,但我不知道如何在我的玩家所在的坐标处保存建筑物。我会尝试更清楚地说明这一点。
我正在以文字为基础。要移动播放器,您可以键入左,右,上或下。因此它会相应地改变你的x和y。
Ex:要向上移动,它会向玩家类的y值加1。 player.yPos + = 1。然而,如果玩家进入0,1然后0,2但是又回到0,1并且在0,1点处有一座建筑物,我怎么能确保它在玩家时仍然存在回去?我一直在想我必须将所有玩家的x,y动作存储到列表中。我不知道如何使该列表的位置等于将存在的对象。如果这没有意义,我可以尝试重写。
P.S。请尽可能使用最简单的逻辑解释。一般来说,当我在stackoverflow上读到一些东西时,我想跳出悬崖,它是如何涉及的。 (基本上,请为我愚蠢!)
class player:
Cnuts = 0
statPoints = 0
pStrength = 0
pConstitution = 0
pQuickness = 0
pIntelligence = 0
pStamina = 0
playerName = ''
Weapon = 0
Armour = 0
Shield = 0
inventory = []
xPos = 0
yPos = 0
#Building Code
class Entity:
id = 0
xPos = 0
yPos = 0
name = ''
description = ''
def __init__(self, id, xLocation, yLocation, name, description):
self.xLocation = xLocation
self.yLocation = yLocation
self.id = id
self.name = name
self.description = description
class Structure(Entity):
pass
我还没有决定结构/建筑课程的内容,因为我不知道除了实体已有的东西之外还需要什么。我还有另一个类,它也是从Entity继承的,这就是为什么我拥有它。
#Map code
isExploring = True
def Map():
while isExploring == True:
pInput = input('What direction would you like to go?')
if pInput == 'Up':
player.yPos += 1
elif pInput == 'Down':
player.yPos -= 1
elif pInput == 'Left':
player.xPos -= 1
elif pInput == 'Right':
player.xPos += 1
elif pInput == 'Diagonal Left':
player.xPos
player.yPos
elif pInput == 'Diagonal Right':
pass
elif pInput == 'Down Diag Left':
pass
elif pInput == 'Down Diag Right':
pass
提前感谢您的帮助!
答案 0 :(得分:1)
我没有看到建筑物的代码,但我猜测建筑最终会继承Entity
(玩家也应该继承这个类)。实体对象具有self.xLocation
和self.yLocation
,因此这使得实现位置感知播放器更容易一些。所以你所做的就是你为建造所做的课必须实现__hash__
方法,所以就像这样。
class Building(Entity):
def __hash__(self):
return hash(tuple(self.xLocatioin, self.yLocation))
def __eq__(self, other):
return isinstance(other, Building) and hash(self) == hash(other)
该函数被称为__hash__
,因为python将此特殊关键字识别为意味着构建对象可以放在字典中。因此,每当您尝试将Building
对象放入集合中或将其用作字典的键时,python将自动调用它的__hash__
方法,并使用该值来确定位置将对象放在集合/字典中。实现哈希通常意味着实现__eq__
,这是python在使用==
运算符比较2个对象时自动调用的另一个神奇函数。
然后,玩家类会将其访问过的每个建筑物存储在一个集合中,然后可以查询该集合以确定是否已经访问过该建筑物
class Player(Entity):
def __init__(self, *args):
super.__init__(self, args)
self.visited = set()
self.currLocation = tuple(self.xLocatioin, self.yLocation)
def visit(self, entity):
if not beenHere(entity):
self.visited.add(entity)
self.currLocation = tuple(entity.xLocatioin, entity.yLocation)
def beenHere(self, entity):
return entity in self.visited
你有它,现在玩家对象可以确定它之前访问过哪个建筑物