我想編寫的代碼,將扮演一個骰子游戲叫Pig通過與對計算機檢查索引
對於計算機的玩家一個人在命令行中,我使用的是3D numpy的陣列存儲基於信息當前得分AI_1_current遊戲策略,庫存的得分AI_1_bank和對手的得分存入銀行human_bank。
這個想法是,每輪,計算機會檢查策略數組,如果索引[AI_1_current,AI_1_bank,human_bank]的值等於0,它將繼續滾動,如果它等於1,它會銀行現在的分數。
現在,我遇到的問題是需要計算機輪到的功能沒有正確讀取數組,並且不應該在應該執行時進行操作。
我有這樣的代碼來設置陣列:
AI_1_strategy = numpy.zeroes((100,100,100))
for i in range(10, 100):
for j in range(10, 100):
for k in range(10, 100):
AI_1_strategy[i, j, k] = 1
在理想情況下應該是說,如果是我,J或K大於或等於10,計算機將銀行動輒
然後,我有這個代碼來檢查陣列:
if AI_1_strategy[AI_1_bank, AI_1_current, human_bank] == 1:
AI_1_bank += AI_1_current # add current points to the bank
AI_1_current = 0
time.sleep(3) # 3 second delay
if AI_1_bank >= 100: # win condition
print "AI_1 WINS!"
else:
AI_current = 0 # sets current points to 0
print "AI has banked"
pig_human() # moves to the player's turn
else:
time.sleep(3) # 3 second delay
print "AI_1 chose to keep rolling"
pig_AI_1() # AI takes another roll
儘管此代碼,計算機將無法一致地存儲。
的問題也會發生,如果我不是這樣做:
AI_1_strategy = numpy.ones((100,100,100))
for i in range(10, 100):
for j in range(10, 100):
for k in range(10, 100):
AI_1_strategy[i, j, k] = 0
除了在這種情況下,將銀行動輒無論得分,當它真的應該停止銀行一旦I,J或k達到10。
如果有人能幫助我,我會非常感激,我不知道我做錯了什麼。
謝謝。
哇,顯然我是一個白癡,謝謝你指出,非常感謝。 – 2014-10-10 01:52:20
我也意識到爲什麼這意味着它會不斷滾動,它需要在銀行可以存入任何點前達到10點,這顯然是一個不可能滿足的條件,所以它會一直保持滾動。 – 2014-10-10 05:43:58
@ Paradigm84:發生。只需稍微改變策略數組? – 2014-10-10 08:20:17