Here is the problematic part of the code:
import numpy as np
class Player():
def __init__(self, health, maxHealth, baseDmg, dmg, name, weapons, items, isAlive, previousRoom, room):
self.health = health
self.maxHealth = maxHealth
self.baseDmg = baseDmg
self.dmg = dmg
self.name = name
self.weapons = weapons
self.items = items
self.isAlive = isAlive
self.previousRoom = previousRoom
self.coords = (0, 0)
def Move(self, direction):
if direction not in self.room.exits:
print("Cannot Move In That Direction!")
return
newRoomName = self.room.exits[direction]
self.previousRoom = self.room.name
print("Moving to", newRoomName)
world[newRoomName] = newRoomName
self.room = world[newRoomName]
class Room():
def __init__(self, name, description, exits, hasWeapon, weapon, hasItem, item, hasEnemy, enemy, isFirstVisit, coords):
self.name = name
self.description = description
self.exits = exits
self.hasWeapon = hasWeapon
self.weapon = weapon
self.hasItem = hasItem
self.item = item
self.hasEnemy = hasEnemy
self.enemy = enemy
self.isFirstVisit = isFirstVisit
self.coords = coords
world = {}
rooms = np.empty((11,11), object)
rooms[5][5] = Room(
"room1",
"",
{"E": "room2"},
False,
None,
False,
None,
False,
None,
True,
(5, 5)
)
rooms[5][6] = Room(
"room2",
"",
{"W": "room1"},
False,
None,
False,
None,
False,
None,
True,
(5, 5)
)
counter = 1
world["room1"] = rooms[3][3]
world["room2"] = rooms[3][4]
player = Player(10, 10, 5, 5, "Jedidiah", [], [], True, world["room1"].coords, world["room1"].coords)
What I am trying to do is make a movement system in python using a 2d array and dictionaries (as per the project requirements), but it keeps giving me an error saying that "str object has no attribute 'coords'":
Traceback (most recent call last):
File "main.py", line 75, in <module>
player = Player(10, 10, 5, 5, "Ethan", [], [], True, world["room1"].coords, world["room1"].coords)
AttributeError: 'NoneType' object has no attribute 'coords'
I have no idea why this is happening, but I'm sure it is a simple solution. I am new to programming, so please make the answers as simple as possible. All help is appreciated.
CodePudding user response:
np.empty
with object dtype makes an array with None
elements:
In [184]: rooms = np.empty((2,2), object)
In [185]: rooms
Out[185]:
array([[None, None],
[None, None]], dtype=object)
I see you have a set a couple of elements of rooms
[5,5] and [5,6] to Room
objects, and assigned a couple of other elements to the world
dict (3,3) (3,4). These elements are still None
.
Looks like all those 'unset' coordinates are giving you problems. Either be more careful about the indexing, or add some safeguards to correctly handle None
elements.