2014-10-09 72 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