home · contact · privacy
Don't generate objects at illegal positions. Plus, refactor.
[plomrogue2-experiments] / new / plomrogue / game.py
index 2e780928cd073d6e23d2248ff30307abfcc2b40e..da8fe1a49962928d10fec5424baab8669db8a2ba 100755 (executable)
@@ -1,4 +1,5 @@
-from plomrogue.tasks import Task_WAIT, Task_MOVE, Task_PICKUP, Task_DROP
+from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_PICKUP,
+                             Task_DROP, Task_EAT)
 from plomrogue.errors import ArgError, GameError
 from plomrogue.commands import (cmd_GEN_WORLD, cmd_GET_GAMESTATE,
                                 cmd_MAP, cmd_MAP, cmd_THING_TYPE,
@@ -11,7 +12,7 @@ from plomrogue.mapping import MapHex
 from plomrogue.parser import Parser
 from plomrogue.io import GameIO
 from plomrogue.misc import quote, stringify_yx
-from plomrogue.things import Thing, ThingMonster, ThingHuman, ThingItem
+from plomrogue.things import Thing, ThingMonster, ThingHuman, ThingFood
 
 
 
@@ -32,6 +33,13 @@ class WorldBase:
             return t
         return None
 
+    def things_at_pos(self, yx):
+        things = []
+        for t in self.things:
+            if t.position == yx:
+                things += [t]
+        return things
+
 
 
 class World(WorldBase):
@@ -83,8 +91,15 @@ class World(WorldBase):
 
         def add_thing(type_):
             t = self.game.thing_types[type_](self)
-            t.position = (random.randint(0, yx[0] -1),
-                          random.randint(0, yx[1] - 1))
+            while True:
+                new_pos = (random.randint(0, yx[0] -1),
+                           random.randint(0, yx[1] - 1))
+                if self.map_[new_pos] != '.':
+                    continue
+                if len(self.things_at_pos(new_pos)) > 0:
+                    continue
+                break
+            t.position = new_pos
             self.things += [t]
             return t
 
@@ -102,8 +117,10 @@ class World(WorldBase):
         self.player_id = player.id_
         add_thing('monster')
         add_thing('monster')
-        add_thing('item')
-        add_thing('item')
+        add_thing('food')
+        add_thing('food')
+        add_thing('food')
+        add_thing('food')
         return 'success'
 
 
@@ -116,6 +133,7 @@ class Game:
         self.tasks = {'WAIT': Task_WAIT,
                       'MOVE': Task_MOVE,
                       'PICKUP': Task_PICKUP,
+                      'EAT': Task_EAT,
                       'DROP': Task_DROP}
         self.commands = {'GEN_WORLD': cmd_GEN_WORLD,
                          'GET_GAMESTATE': cmd_GET_GAMESTATE,
@@ -135,7 +153,7 @@ class Game:
         self.thing_type = Thing
         self.thing_types = {'human': ThingHuman,
                             'monster': ThingMonster,
-                            'item': ThingItem}
+                            'food': ThingFood}
 
     def get_string_options(self, string_option_type):
         if string_option_type == 'direction':