3.2. textgame.world¶
This module contains only one class, textgame.world.World that
holds all rooms, items and monsters, is responsible for spawning
monsters randomly in the rooms and managing daylight.
At initialization you can pass a dict to textgame.world.World that’s
formatted like this:
{
"room_id1": {
"descript": "You're in the great room.",
"doors": {"south": "room_id2"}
},
"room_id2": {
"descript": "You're in the small room.",
"doors": {"north": "room_id1"}
}
}
The items inside the dict automatically get converted to textgame.room.Room objects
and linked to each other according to the doors dict.
Every argument of textgame.room.Room.fill_info() can be put as a key-value
pair inside this dict.
The same is true for items, weapons and monsters, see the example.
World has a member called storage_room of type textgame.room.Room that
can be used to put stuff inside that should not be visible for the player.
-
class
textgame.world.World(rooms=None, items=None, weapons=None, monsters=None, seed=None)[source]¶ Bases:
object- Parameters
rooms – dict describing all rooms (see above)
items – dict describing all items
weapons – dict describing all weapons
monsters – you guessed it
seed (int) – seed for the random number generator. If
None, a random seed is taken
-
create_items(descriptions, tag='items')[source]¶ create
textgame.movable[Weapon,Item,Monster]objects based on description-dict (see above). This gets called on initialization ifweapons,items,monsterswas provided.- Parameters
descriptions (dict) –
tag – can be ‘items’, ‘monsters’, ‘weapons’
-
create_rooms(descriptions)[source]¶ create
textgame.room.Roomobjects based on description-dict (see above). This gets called on initialization ifroomswas provided.
-
manage_daylight()[source]¶ check if it’s nighttime and turn all rooms dark if yes
- Return type
a message that night came in or an empty string
-
manage_fight(player)[source]¶ if there are active, harmful monsters around, this method checks if the player is fighting them and kills the player / the monster, depending on random numbers and the monster’s strenght
- Return type
string describing the status of the fight
-
put_items_in_place()[source]¶ iterate over all items, see if their
initlocationpoints to a room in this world and add it there. This is done automatically if the items are passed at initialization
-
put_monsters_in_place()[source]¶ iterate over all monsters, see if their
initlocationpoints to a room in this world and add it there. This is done automatically if the monsters are passed at initialization
-
room(ID)[source]¶ get room by ID. If the room is not found, the logger prints an error
- Parameters
ID – room ID
- Return type
textgame.room.RoomorNone
-
set_room_restrictions(restrictions)[source]¶ takes a dict of the following form:
{ "room_ID": {"func": my_func} }
for every
room_ID, find the corresponding room and callset_specialswith the mapped dict on it. Seetextgame.room.Room.set_specials()for further reference.
-
spawn_monster(location)[source]¶ randomly spawn a monster in location
the condition for a monster to spawn is:
no other monsters in this room
random number must be smaller than monster’s
spawn_probat least one of the strings in monster’s
spawns_inlist must be contained in the location’s IDmonster’s
spawns_atmust be equal to the current daytime or ‘always’monster must not be active already
- Parameters
location –
textgame.room.Roomin which a monster should spawn
-
update(player)[source]¶ increase the time, call
textgame.world.World.manage_fight()andtextgame.world.World.manage_daylight()- Return type
output of
manage_fightandmanage_daylight(str)