我正在编写代码,通过命令行和一个人一起玩一个名为猪的骰子游戏。
对于计算机的玩家,我使用一个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
理想情况下,这意味着,如果i,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
除了这种情况,它将银行的每一个回合,无论分数,当它真正应该停止银行业务,一旦我,j或k达到10。
如果有人能帮我,我会非常感激的,我不知道我做错了什么。
谢谢。
发布于 2014-10-09 22:50:48
看起来你犯了一个小小的逻辑错误。
我有这样的代码来设置数组: AI_1_strategy =numpy.zeroes(100,100,100),i在范围(10,100):j在范围(10,100):k在范围内(10,100):AI_1_strategyi,j,k=1 理想情况下,这意味着,如果i,j或k大于或等于10,计算机将存储每一个回合。
这是不正确的:每一个i、j和k都必须是>=10,才能从这个数组读取一个1。
https://stackoverflow.com/questions/26281204
复制相似问题