2012-03-29 8 views
1

Ich habe ein Problem, ein kleines Text-Fantasy-Spiel mit Klassen für jede Art von Entität (eine Wand, der Spieler, ein Buch usw.) zu machen. Ich habe eine Klasse namens Raum, der wie folgt aussieht:Python-Objekt ist in der Liste noch nicht?

class Room: 

    def __init__(self, desc, items, wallF, wallB, wallL, wallR, isdark): 
     self.desc = desc 
     self.items = items 
     self.wallF = wallF 
     self.wallB = wallB 
     self.wallL = wallL 
     self.wallR = wallR 
     self.isdark = False 

jetzt habe ich zwei Zimmer, die wie folgt definiert sind (nicht, dass ihr Recht zu sagen):

roomstart = Room('There is a hole in the ceiling where you seemed to have fallen through, there is no way back up...', [candle], True, False, False, False, False) 
room2 = Room('You enter a small cobblestone cavort. It is dark, and the smell of rot pervades you', [spellbook], False, True, False, True, True) 

jetzt, das Problem ist folgendes: wenn ich das Programm ausführen es funktioniert gut, bis ich versuche, von roomstart die Kerze zu nehmen, spuckt es dann den Fehler, dass die Kerze nicht in der Liste ist:

(<type 'exceptions.ValueError'>, ValueError("'candle' is not in list",), <traceb 
ack object at 0x00B8D648>) 

(ja, ich habe verwenden sys.exc_info())

jedes Objekt, (die Kerze, ein Dolch, ein Gewand usw.) eine Klasse auch:

class Object: 

    def __init__(self, desc, worth, emitslight, readable, wearable, name): 
     self.desc = desc 
     self.worth = worth 
     self.emitslight = emitslight 
     self.readable = readable 
     self.wearable = wearable 
     self.name = name 

hier ist der Code für die Benutzereingabe:

def handleinput(): 
global moves 
room = Player.location 
if room.isdark == True: 
    print 'It is rather dark in here...' 
else: 
    print room.desc, 'You see here:', 
    for i in room.items: 
     print i.name 
input = str(raw_input('What now? ')).lower() 
if 'look' in input: 
    if room.isdark==True: 
     print "You can't see anything! Its too dark." 
    else: 
     print 'You see:',room.desc, room.items.name 
     if room.wallF == True: 
      print 'There is an exit to the front.' 
     elif room.wallB == True: 
      print 'There is an exit behind you.' 
     elif room.wallL == True: 
      print 'There is an exit to your left.' 
     elif room.wallR == True: 
      print 'There is an exit to your right.' 

elif 'grab' in input: 
    if room.isdark==True: 
     print 'You flail about blindly in the dark room!' 
    else: 
     input2 = str(raw_input('Take what? ')) 
     try: 
      popp = room.items.index(input2) 
      print popp 
     except: 
      print sys.exc_info() 
      print input2.title(),"doesn't exist!" 
     else: 
      print "You take the",input2,"and store it in your knapsack." 
      room.items.pop(popp) 
      Player.inventory.append(input2) 

elif 'wipe face' in input: 
    os.system('cls') 
moves += 1 
+4

aaaahhh Wand Code finden können! – Puppy

+3

Nun, zumindest können wir uns nicht beschweren, dass er * nicht gezeigt hat, was er bisher versucht hat. –

+1

Sie wissen, Kerze und 'Kerze' sind verschiedene Objekte, richtig? –

Antwort

5

Das Objekt candle ist in der Liste, aber die Zeichenfolge 'candle' ist nicht. Vielleicht möchten Sie dies der Objekte mit einem Wörterbuch lösen:

objects = {} 
objects['candle'] = candle 
objects['robe'] = robe 
... 

Dann Sie den Index des Elements über

popp = room.items.index(objects[input2]) 
+0

Wow! Das hat perfekt funktioniert! Ich muss nur daran denken, die Objekte zur Liste hinzuzufügen;) nochmals vielen Dank! Die süße Botschaft des Erfolgs: 'Es ist ein Loch in der Decke, wo Sie durchgefallen zu sein schienen, gibt es kein Weg zurück ... Sie sehen hier: Kerze Was nun? Nimm Nimm was? Kerze Sie nehmen die Kerze und speichern sie in Ihrem Rucksack. Es gibt ein Loch in der Decke, wo du durchgefallen zu sein scheinst, es gibt kein Weg zurück ... Du siehst hier: Was jetzt? ' – CR0SS0V3R

Verwandte Themen