岩石纸剪刀游戏蟒蛇

时间:2015-12-05 07:17:32

标签: python

我目前正在制作像石头剪刀一样的游戏。为此,我考虑使用randint()函数生成随机数。但是我想让它变得更好,以便程序记住球员过去的选择历史并与之对抗。我怎么能这样做?我是初学者,但如果以正确的方式指出,我已准备好学习。

我尝试过使用条件概率的概念,到目前为止它还没有按预期工作。

def probable(model,test_model):
    p={}
    for i in 'rps':
        check_sequence=test_model+i
        if model.count(test_model)==0:
            return -1
        p[i]=(model.count(check_sequence)/model.count(test_model))
    if p[max(p)]==0:
        return -1
    else:
        return max(p)

这里变量“test_model”包含过去玩家做出的选择。变量“模型”包含用户做出的整个选择列表。

1 个答案:

答案 0 :(得分:2)

您可以使用简单的数组来解决此问题。例如,如果为所有随机选择声明一个数组,如

choices = ['r', 's', 'p']

如果你在0和len(选择)之间随机整数,它将选择其中一个。如果你想记住过去的选择,你可以简单地添加/删除每个选择到数组。例如,如果玩家玩“r”,您可以在选项中添加“p”,并且选择的概率会增加。

choices.append('p')

现在你的选择数组是这样的

['r', 's', 'p', 'p']

但是每次你需要检查数组中是否存在'r','s'和'p'中的至少一个。此外,如果您将相同的选项添加到此数组中,则可能会选择最后添加的数组。所以你可能需要调整问题阵列。

这是我的解决方案:

import random

probs = ['r', 's', 'p']
opposites = {'r':'p', 'p':'s', 's':'r'}
beats = {'r':'s', 'p':'r', 's':'p'}

def controlProbs():
    if 'r' not in probs:
        probs.append('r')
    if 's' not in probs:
        probs.append('s')
    if 'p' not in probs:
        probs.append('p')

def adjustProbs(choice):
    if len(probs) > 20:
        probs.remove(choice)
        controlProbs()
    else:
        probs.append(beats[choice])

def pick():
    index = random.randint(0, len(probs)-1)
    return probs[index]

def controlInput(player):
    if len(player) != 1 or player not in 'rsp':
        return False
    return True

while True:
    player = raw_input("Pick your equipment!: ")
    if not controlInput:
        print "Please choose a valid one! (r, s, p)"
        continue
    computer = pick()
    print "My choice is: " + computer
    if opposites[player] == computer:
        print "You beat me!"
    elif opposites[computer] == player:
        print "I beat you!"
    else:
        print "Tie :)"

    #Here is adjusting probobalities
    adjustProbs(player)

对于这个解决方案,你得到了那个输出:

Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!: 

希望我的回答是可以理解的!

注意:我的解决方案肯定可以升级。这不是最好的,而是简单的。