2016-05-29 3 views
0

私自身の作成でゲームを試していますが、私はこの問題に遭遇しました。私は非常にインタラクティブなフィクションスタイルでゲームを作っていますが、take(sword, room)take swordroominventoryのような関数を呼び出すことはできません。 まず、ここでゲームが継続的に呼び出すために呼び出すために私が使用しているものですraw_input:リストのraw_inputを関数に呼び出す方法

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 

そして今:

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] 

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

次の機能であります

toolsは、ゲームに何が含まれているかを示すためのものです。 areasnounは、1つの部屋と1つのアイテムを持つゲームが退屈なので、リスト内に複数のアイテムがあります。nounareasのすべてが、swordまたはroomでないものは無視してください。剣が2つのリストを有する理由は、roomにはsword[0]が現れ、inventoryにはsword[1]が現れる。 Ex。

print inventory 
"sword" 

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

そして、それはゲーム内でどのように見えるか:私はtake(sword, room)は(下図参照)仕事を得ることができます

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

ので、私はそれはコードではないことを知っている:私は追加

>>>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" 

" >>> 'は関数の変数または呼び出しを示し、'> 'は応答を表示します。

今ではカバーされていますことを、私はtake swordが動作するのですかどのようraw_inputの機能を誤解、あるいはそうでない場合は午前、私はraw_inputで何か間違ったことをやって、私のコードの一部を書き換えるのですか?

+0

メインループは決してtakeを呼び出しません。それはlookと呼ばれる方法です。 raw_inputはあなたに入力を与えるだけで、それを解析するコードを書いてから、残りのプログラムの関連ビットを呼び出さなければなりません – pvg

答えて

1

かなりうまくいくようです。私は完全に理解しているかどうかは分かりませんが、ユーザーが現在いる部屋を把握したいと思っています(あなたが既にそれをしているかどうかわからない、指定されていません)。これを実行すると、すでにユーザーの入力はaに保存されています。

次に、入力を分割する(ユーザーが正しい応答で「剣を取る」と仮定して)スペースで区切り、最初の単語が「テイク」であるかどうかを確認します。その時点で、最初の単語が「take」であれば、メソッドを呼び出すことができます。

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) 
関連する問題