[Tutor] my text adventure, saving and restoring

david din22 at earthlink.net
Mon Dec 5 02:09:37 CET 2005


when i restore from the pickle i can see my exits and descriptions are still there.
but look won't see the description and move can't move to the next room.
i am stumped. what is going on here? how can i fix it? please help?



IDLE 1.1.2      ==== No Subprocess ====
>>> 
>rooms
[<__main__.Room instance at 0x00E08EB8>]

{}
>world
{(0, 0): <__main__.Room instance at 0x00E08EB8>}
>dr
>>startroom
>l
[0, 0]
startroom
>dig n
(0, 1)
>n
>dr
>>nextroom
>rooms
[<__main__.Room instance at 0x00E08EB8>, <__main__.Room instance at 0x00E7BFD0>]
startroom
{'n': <__main__.Room instance at 0x00E7BFD0>}
nextroom
{'s': <__main__.Room instance at 0x00E08EB8>}
>world
{(0, 1): <__main__.Room instance at 0x00E7BFD0>, (0, 0): <__main__.Room instance at 0x00E08EB8>}
>save
>quit
Traceback (most recent call last):
  File "C:\Documents and Settings\david\Desktop\t.py", line 150, in ?
    p.do()
  File "C:\Documents and Settings\david\Desktop\t.py", line 93, in do
    sys.exit()
SystemExit
>>> 
>rooms
[<__main__.Room instance at 0x00E13F30>, <__main__.Room instance at 0x00E13698>]
startroom
{'n': <__main__.Room instance at 0x00E13698>}
nextroom
{'s': <__main__.Room instance at 0x00E13F30>}
>world
{(0, 1): <__main__.Room instance at 0x00E13FA8>, (0, 0): <__main__.Room instance at 0x00E132B0>}
>n
alas, you cannot go that way
>l
[0, 0]

>
import sys
import string
import pickle
import os.path

world = {}
rooms = []
class Room:
    def __init__(self,coords):
        self.contents = []
        self.description = ''
        self.coords = coords
        world[tuple(coords)] = self
        rooms.append(self)
        self.exits = {}
    def nextdoor(self,direction):
        if direction == 'n':
            nextdoor =  (self.coords[0], self.coords[1] + 1)
            return list(nextdoor)
        elif direction == 's':
            nextdoor =  list((self.coords[0], self.coords[1] - 1))
            return nextdoor
        elif direction == 'e':
            nextdoor =  list((self.coords[0] +1, self.coords[1]))
            return nextdoor
        elif direction == 'w':
            nextdoor =  (self.coords[0] -1, self.coords[1])
            return list(nextdoor)
    

class Player:
    def __init__(self,name):
        self.name = name
        self.location = None
        self.inventory = []
        self.wielded = None
    def look(self):
        print self.location.coords
        print self.location.description

    def move(self,direction):
        type(direction)
        if self.location.exits.has_key(direction):
            self.location = self.location.exits[direction]
        else:
            print 'alas, you cannot go that way'
    def wield(self,what):
        self.wielded = what
    def wear(self,what):
        pass
    def take(self,what):
        pass
    def drop(self,what):
        pass
    def dig(self,direction):
        target = tuple(self.location.nextdoor(direction))
        print target
        if self.location.exits.has_key(target):
            print 'there is already an exit to that room'
        elif world.has_key(target):
            print 'already a room there, attempt to make exits'
           
            self.location.exits[direction] = world[target]
           
            world[target].exits[opdir(direction)] = self.location
        
        else:
            world[target]=Room(target)
            self.location.exits[direction] = world[target]
            world[target].exits[opdir(direction)] = self.location
         
    def describeroom(self):
        self.location.description = raw_input('>>')
    def save(self):
        f = open('savefile', 'w')
        pickle.dump(world,f)
        pickle.dump(rooms,f)
        for i in rooms:
            pickle.dump(i,f)
           
        f.close()
    def do(self):
        cmd = string.split(raw_input('>'))
        verb = cmd[0]
        if len(cmd) > 1:
            target = cmd[1]
        
        if verb == 'l':
            self.look()
        elif verb in ['n','s','e','w']:           
            self.move(verb)
        elif verb == 'quit':
            sys.exit()
        elif verb == 'i':
            for a in self.inventory:
                print a.name
        elif verb == 'dig':
            self.dig(target)
        elif verb == 'dr':
            self.describeroom()
        elif verb == 'save':
            self.save()
        elif verb == 'world':
            print world
        elif verb == 'rooms':
            print rooms
            for i in rooms:
                print i.description
                print i.exits
        else:
            print 'what?'

class Thing:
    def __init__(self,name):
        self.name = name


def opdir(direction):
    if direction == 'n':
        return 's'
    if direction == 's':
        return 'n'
    if direction == 'e':
        return 'w'
    if direction == 'w':
        return 'e'
    
        
p = Player('david')
room1 = Room([0,0])

p.location = room1
sword = Thing('sword')
hat = Thing('hat')
p.inventory.append(sword)
p.inventory.append(hat)

if os.path.isfile('savefile'):
    f = open('savefile','r')
    world = pickle.load(f)
    rooms = pickle.load(f)
    for i in rooms:
        i = pickle.load(f)
       
    f.close()
    while 1:
        p.do()
else:
    while 1:
        p.do()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20051204/d7ab05d1/attachment-0001.htm


More information about the Tutor mailing list