我有一个移动表,根据他们对AI的选择决定玩家是否获胜。 Think Rock,Paper,Scissors有很多动作。 我最终会用Python编写它,但在开始之前,我想知道是否有更好的方法来做这个而不是很多和很多IF语句?
表格如下:
我认为这些动作需要分配数字,或类似的东西?我不知道从哪里开始......
答案 0 :(得分:8)
你可以用dict吗?像这样:
#dict of winning outcomes, the first layer represents the AI moves, and the inner
#layer represent the player move and the outcome
ai = {
'punch' : {
'punch' : 'tie',
'kick' : 'wins',
},
'stab' : {
'punch' : 'loses',
'kick' : 'loses'
}
}
ai_move = 'punch'
player_move = 'kick'
print ai[ai_move][player_move] #output: wins
ai_move = 'stab'
player_move = 'punch'
print ai[ai_move][player_move] #output: loses
我没有绘制出所有动作,但是你得到了要点
答案 1 :(得分:0)
是的,将决策作为键/值对存储在字典中,并将所有可能的组合作为键和决策作为结果。基本上为可能的移动创建一个查找表。
这可以加快决策速度,但必须存储所有可能的组合。
def tie():
print("It's a tie!")
def lose():
print("You lose")
def win():
print("You win")
moves = {
# player_ai action
'punch_punch': tie,
'punch_kick': lose,
'punch_stab': lose,
<..>
}
player_move = <move>
ai_move = <move>
key = "_".join([player_move, ai_move])
if key in moves:
# Execute appropriate function
return moves[key]()
raise Exception("Invalid move")