簡體   English   中英

python中的文本RPG

[英]Text RPG in python

main.py

import engine
engine.objects['key'] = "It's a key"
engine.main()

engine.py

# inventory = []

objects = {

}

def main():
    while True:
        choice = raw_input(">>: ")
        command, obj = choice.split()
        if command == 'examine':
            if obj in objects:
                print objects[obj]
            else:
                print 'joking right?'
        else:
            print 'joking right?'

當我輸入“檢查”時沒有第二個單詞,參數,它給了我一個錯誤。

>>: asdf
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    engine.main()
  File "C:\Users\Patrick\Documents\Programming\Game engine test\engine.py", line
 11, in main
    command, obj = choice.split()
ValueError: need more than 1 value to unpack
Press any key to continue . . .

我理解為什么,但我該如何解決?

所以我們可以從問題中消除raw_input() ,並將其歸結為以下幾行:

choice = 'examine'
result = choice.split()      # result == ['examine']
command, obj = result        # Boom.

split()的返回值是一個列表。 如果只有一個單詞(用空格分隔),例如“examine”,則列表只包含一個元素。

然后,當你試圖將該列表解壓縮到commandobj ,python說,“我不能那樣做。你期待兩個條目,但我只有一個。”

您需要做的是執行一些中間檢查:

args = choice.split()
if len(args) < 2:
    print 'Invalid command.'
    continue
command, obj = args
# ...
args = choice.split()
command = args[0]
#Branch according to command here
#Most likely you will want to separate them into functions
if command == 'examine':
    if len(args) < 2:
       print 'Missing argument'
    else:
       obj = args[1]
       if obj in objects:
           print objects[obj]
       else:
           print 'joking right?'
else:
    print 'joking right?'

您也可以查看python標准庫中的cmd模塊 您基本上可以使用do_<MYCOMMANDNAME>函數創建一個對象,它將發出命令提示符並將第一個單詞作為command查找,並查找相應的do_command函數以使用其余參數執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM