2016-05-29 2 views
0

Je bricoler avec un jeu de ma propre création et j'ai rencontré ce problème. Je fais le jeu dans un style de fiction très interactif mais je ne peux pas faire raw_input appeler une fonction comme take sword à take(sword, room) pour l'enlever de room et en inventory. Tout d'abord, voici ce que j'utilise le jeu pour appeler appeler en permanence la raw_input:comment faire un raw_input appeler une fonction

GameOn=True 
while GameOn==True: 
    a=raw_input("C:\>") 
    a=a.lower() 
    if a=="look": 
     look() 

suivant est les fonctions:

def take(item,room): 
    if item in tools: 
     if item[0] in room: 
      room.remove(item[0]) 
      inventory.append(item[1]) 
     print "taken" 
    else: 
     print item, "doesn't exist in this game" 

def look(room): 
    place=areas[room] 
    for i in place: 
     print i 

Et maintenant pour les listes:

sword=["There is a sword here", "sword"] 
room=["There is a table in the corner", sword[0]] 
inventory=[] 
areas=[room,bedroom,living_room] 
tools=[sword, shield, axe] 

tools est là pour montrer ce qui est dans le jeu et peut être pris. areas et noun a plus d'un élément dans la liste, car un jeu avec une pièce et un élément est ennuyeux, donc tout ignorer dans noun et areas ce n'est pas sword ou room. La raison pour laquelle l'épée a deux listes est donc apparaît dans room tandis que sword[1] apparaît dans inventory. Ex.

print inventory 
"sword" 

look(room) 
"There is a table in the corner" 
"There is a sword here" 

Et comment il va chercher dans le jeu:

C:\>look 
"There is a table in the corner" 
"There is a sword here" 

Je peux obtenir take(sword, room) à travailler (ci-dessous), donc je sais que ce n'est pas le code:

>>>room=["There is a table in the corner, sword[0]] 
>>>inventory=[] 
>>>look(room) 
>"There is a table in the corner" 
>"There is a sword here" 
>>>print inventory 
> 

>>>take(sword, room) 
>>>look(room) 
>"There is a table in the corner" 
>>>print inventory 
>"sword" 

J'ai ajouté ' >>> 'pour montrer ce qu'est une variable ou l'appel d'une fonction et'> 'pour montrer la réponse.

Maintenant que cela est couvert, que je réécris une partie de mon code, je fais quelque chose de mal dans le raw_input, je comprends mal les capacités de raw_input, ou sinon comment puis-je take sword de travailler?

+0

Votre boucle principale ne prend jamais les appels, comme son nom l'indique. raw_input vous donne juste l'entrée, vous devez écrire du code pour l'analyser, puis appeler les bits pertinents du reste de votre programme – pvg

Répondre

1

On dirait que vous vous débrouillez plutôt bien. Je ne sais pas si je comprends parfaitement, mais je pense que vous voulez garder une trace de la pièce dans laquelle se trouve l'utilisateur (je ne suis pas sûr si vous le faites déjà, cela n'a pas été spécifié). Une fois que vous faites cela, vous avez déjà l'entrée de l'utilisateur stockée dans a.

Vous voulez ensuite diviser l'entrée (en supposant que l'utilisateur tape la bonne réponse "prendre l'épée") par des espaces et vérifier si le premier mot est "prendre". Alors à ce moment-là, si le premier mot est "prendre", alors vous pouvez simplement appeler votre méthode.

a = raw_input("C:\>") 
a = a.lower() 
if a.split(' ')[0] == 'take': # split the array by spaces 
# (if the input is 'take sword', then [0] will be 'take' and [1] will be 'sword' 
    take(a.split(' ')[1], current_room)