2017-01-09 3 views
0

私は趣味のためのゲームを書いています/それを最終プロジェクトとしてクールなものとして提出しています。しかし、私は最近、どうやってそれが起こるのか分かりませんでした。文字列が[Python]にならないときに変更される問題

この方法はゲーム用のボックスを描くことですが、実行するたびにコンソール出力はスクリプトにますます多くの文字を追加するようです。私はそれをデバッグしようとしましたが、これまでのところ、私は非常に優れたデバッガではありません。

def drawModule(selections, selected): 
'''Draws a text box based on the inputs given''' 
str1 = "" 
str2 = "" 
str3 = " " 
str4 = "" 
str5 = "" 
modList = selections 
print id(modList) 
print id(selections) 
for i in range(len(modList)): 
    if i == selected: 
     modList[i] = "| " + modList[i] + " | " 
    else: 
     modList[i] = "# " + modList[i] + " # " 
    str3 += modList[i] 
print selections 
print modList 
for i in range(len(modList)): 
    str1 += " " 
    str2 += " " 
    str4 += " " 
    str5 += " " 
    for letter in range(len(modList[i]) - 2): 
     if letter == 0 or letter == (len(modList[i]) - 3): 
      if i == selected: 
       str1 += "|" 
       str2 += "|" 
       str4 += "|" 
       str5 += "|" 
      else: 
       str1 += "#" 
       str2 += "#" 
       str4 += "#" 
       str5 += "#" 
     else: 
      if i == selected: 
       str1 += "-" 
       str2 += " " 
       str4 += " " 
       str5 += "-" 
      else: 
       str1 += "#" 
       str2 += " " 
       str4 += " " 
       str5 += "#" 
sys.stdout.write(str1 + "\n" + str2 + "\n" + str3 + "\n" + str4 + "\n" + str5) 

このメソッドを呼び出すスクリプトは、ゲーム内の戦闘システムの初心者向けです。それは重要ではなく、ASCIIテキストで作られた不正なアイザックのようなものです。

UNFINISHED 
def combat(): 
    '''Runs combat seperately from the selection menu''' 
    inCombat = True 
    print "You've started combat!" 
    time.sleep(1) 
    options = ["attack", "guard", "inventory", "flee"] 
    position = 0 
    clear() 
    while inCombat: 
     if msvcrt.kbhit(): 
      clear() 
      key = msvcrt.getch() 
      print options 
      if ord(key) == 100: 
       position +=1 
       drawModule(options, position) 
      elif ord(key) == 97: 
       position -= 1 
       drawModule(options, position) 
      elif ord(key) == 27: 
       break 

私はまだすべてのソリューションは素晴らしいだろう、この上で私の心を失っています。また、私はこれで偉大ではないので、もし私がより良くできることを見つけたら、もっと知りたいです!複数回実行

コンソール出力:

138650760 
138650760 
['# attack # ', '| guard | ', '# items # ', '# flee # '] 
['# attack # ', '| guard | ', '# items # ', '# flee # '] 
    ########## |-------| ######### ######## 
    #  # |  | #  # #  # 
    # attack # | guard | # items # # flee # 
    #  # |  | #  # #  # 
    ########## |-------| ######### ######## 
-------------------------Second Time---------------------- 
138650760 
138650760 
['# # attack # # ', '| | guard | | ', '# # items # # ', '# # flee # # '] 
['# # attack # # ', '| | guard | | ', '# # items # # ', '# # flee # # '] 
    ################ |-------------| ############### ############## 
    #    # |    | #    # #   # 
    # # attack # # | | guard | | # # items # # # # flee # # 
    #    # |    | #    # #   # 
    ################ |-------------| ############### ############## 

この傾向は時間のいくつかのやんちゃ量を続けています。

modList = selections 

次の2つのリストを同一視している:ラインで

+1

[元のリストを変更したときにオブジェクトリストのコピーを変更する方法は?](http://stackoverflow.com/questions/6612775/how-to-make-a-copy-of -a-list-of-objects-not-change-original-lの変更時) – SiHa

答えて

0

。だから、それ以降:

modList[i] = "| " + modList[i] + " | " 

は実際にselectionsmodListを変更しています。

+0

奇妙なことは実際には戦闘機能のリストオプションを編集することです。これは同じ種類ですか? –

0

問題を引き起こしたコードの早い段階でリストを互いに照合していたという事実でした。問題を解決するためにコピーモジュールのdeepcopy関数を使用しました。

+0

[私自身の質問に答えることができますか?](http://stackoverflow.com/help/self-answer)を見て、2日後に戻ってきて答えにチェックを入れてください。 –

関連する問題