利用Python实现scissors-rock-paper-lizard-Spock小游戏


两个熟识的人玩普通的石头、剪子、布游戏有75%至80%的几率两人出一样的手势,所以为了减少游戏的平局概率,山姆和卡伦发明了“石头、剪子、布、蜥蜴、斯波克”。石头、剪子、布的手势和通俗猜拳游戏基本一致,蜥蜴的手势为一个蜥蜴面部的手势,而斯波克的手势则为著名的瓦肯举手礼。
游戏规则如下:
在这里插入图片描述
剪刀剪布;
布包石头;
石头砸死蜥蜴;
蜥蜴毒死Spock;
Spock踩碎剪子;
剪子刺死蜥蜴;
蜥蜴吃掉布;
论文(布paper,在英文中也有论文的意思)证明Spock不存在;
Spock融化石头;
石头砸碎剪子。

具体实现代码如下:

1.需要使用的库:

import random

在人机对战时,使用random库中的randint函数为人机生成一个选项。

2.具体代码:

首先选择pvp还是pve:

choice = input('please choose battle mode, 1--pvp  2--pve:')

如果选择了pvp,则创建两个变量op1和op2分别接受两个玩家的选项,这里使用int类型而不适用str类型,是因为等会在写逻辑表达式的时候,可以省略引号,必较方便。

if choice == '1':
    op1 = int(input('''playerA, what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))
    op2 = int(input('''playerB, what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))

根据上面的规则,如果玩家A胜利,则有以下五种情况:
①玩家A出剪刀,玩家B出布或蜥蜴
②玩家A出石头,玩家B出剪刀或蜥蜴
③玩家A出布,玩家B出石头或Spock
④玩家A出蜥蜴,玩家B出Spock或布
⑤玩家A出Spock,玩家B出石头或剪子

if (op1 == 1 and (op2 == 3 or op2 == 4)) or (op1 == 2 and (op2 == 1 or op2 == 4)) or (op1 == 3 and (op2 == 2 or op2 == 5)) or (op1 == 4 and (op2 == 3 or op2 == 5)) or (op1 == 5 and (op2 == 1 or op2 == 2)):
        print('playerA win!')

如果两个玩家选项相同,则平局:

elif op1 == op2:
        print('even!')

否则,玩家B胜利:

else:
        print('playerB win!')

如果选择了pve模式,则只需接受一个玩家的选项:

elif choice == '2':
    man = int(input('''what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))

为计算机生成一个选项:

computer = random.randint(1,5)
    print(f"the computer's choice is:{computer}")

判断输赢的方法与pvp时相同,这里不再赘述。

3.完整代码

import random
choice = input('please choose battle mode, 1--pvp  2--pve:')
if choice == '1':
    op1 = int(input('''playerA, what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))
    op2 = int(input('''playerB, what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))

    if (op1 == 1 and (op2 == 3 or op2 == 4)) or (op1 == 2 and (op2 == 1 or op2 == 4)) or (op1 == 3 and (op2 == 2 or op2 == 5)) or (op1 == 4 and (op2 == 3 or op2 == 5)) or (op1 == 5 and (op2 == 1 or op2 == 2)):
        print('playerA win!')
    elif op1 == op2:
        print('even!')
    else:
        print('playerB win!')
elif choice == '2':
    man = int(input('''what is your choice?1--scissor  2--stone  3--paper  4--lizard  5--spock
your choice is:'''))
    computer = random.randint(1,5)
    print(f"the computer's choice is:{computer}")
    if (man == 1 and (computer == 3 or computer == 4)) or (man == 2 and (computer == 1 or computer == 4)) or (man == 3 and (computer == 2 or computer == 5)) or (man == 4 and (computer == 3 or computer == 5)) or (man == 5 and (computer == 1 or computer == 2)):
        print('player win!')
    elif man == computer:
        print('even!')
    else:
        print('computer win!')

4.玩两把!!!

在这里插入图片描述
第一把,看似是pvp,实际上只有我一个人。
在这里插入图片描述
第二把,pve,电脑运气更好,我输了。

看生活大爆炸时听见Sheldon提过这个游戏,觉得还蛮有意思的,就像能不能用代码实现,于是就写了这个小游戏,没什么用哈哈哈哈哈,但是也算完成了自己的一个小想法吧。
如果你有什么改进的方法,请指出来,我将感激不尽;如果这篇文章能帮助到你,我更将不胜荣幸。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值