2014-10-09 77 views
1

我想編寫的代碼,將扮演一個骰子游戲叫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。

如果有人能幫助我,我會非常感激,我不知道我做錯了什麼。

謝謝。

回答

0

看起來你正在犯一個小的邏輯錯誤。

我有這樣的代碼來設置陣列:

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,計算機將銀行動輒

這是不正確的:每個i,j和k必須大於等於10才能從該數組中讀取1。

+0

哇,顯然我是一個白癡,謝謝你指出,非常感謝。 – 2014-10-10 01:52:20

+0

我也意識到爲什麼這意味着它會不斷滾動,它需要在銀行可以存入任何點前達到10點,這顯然是一個不可能滿足的條件,所以它會一直保持滾動。 – 2014-10-10 05:43:58

+0

@ Paradigm84:發生。只需稍微改變策略數組? – 2014-10-10 08:20:17