我想编写的代码,将扮演一个骰子游戏叫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