和谢耳朵一起玩“蜥蜴史波克”版的石头剪刀布吧

您所在的位置:网站首页 还有蜥蜴和斯波克的来源英文 和谢耳朵一起玩“蜥蜴史波克”版的石头剪刀布吧

和谢耳朵一起玩“蜥蜴史波克”版的石头剪刀布吧

2024-07-09 19:32| 来源: 网络整理| 查看: 265

Smart is the new sexy~

Hola! 周末愉快!Rookie又和大家见面啦😘!

在开始这周的挑战前,我们先来小小的八卦一下~

你们知道Rookie心目中💖最帅的男生是谁吗?

猜猜看!

是他们吗?

❎❎❎不是啦

是他们吗?

❎❎❎也不是啦

好啦...Umm....

其实是下面这三位!

钢铁侠,谢耳朵,夏洛克!!!

为什么呢?

因为他们个个都是智商爆表的大天才,这不,时下流行Smart is the new sexy嘛!

好看的皮囊千篇一律,有趣的灵魂才是万里挑一,尤其是中间那位谢耳朵,简直是Rookie心目中的男神🤵。

不信你看,他连玩石头剪刀布这个简单的游戏都那么帅!

等等!这好像不是简单的石头剪刀布啊。怎么还有蜥蜴和史波克,好酷啊!

Rookie也好想加入他们和谢耳朵一起玩啊!

1. 本期挑战 🎯

求人不如求Python,想和男神一起玩,不如这期让我们来自己动手写一个游戏吧📝!

从小到大,石头剪刀布这个游戏大家都不陌生了,剪刀剪破布,布包住石头,石头砸碎剪刀。

而聪明绝顶的谢耳朵玩的是石头剪刀布的豪华升级版,名字叫做“石头剪刀布,蜥蜴和史波克”。

那它是什么要如何玩呢? 也许谢耳朵说得太快了,大家没听清。就让Rookie来给大家重新介绍一下吧~

石头、剪子、布、蜥蜴、史波克?

石头、剪子、布、蜥蜴、史波克(英语:Rock-paper-scissors-lizard-Spock)是石头剪刀布的升级版,它的发明者是美国的山姆和卡伦。

他们在传统的石头剪刀布的基础上给游戏增加了两种新的手势,分别为动物蜥蜴🦎和星际旅行的人物史波克的著名手势,瓦肯举手礼🖖。

大家好,史波克就是我啦🖖

别看只是添加了两种手势,可游戏的趣味性却大大增加了!

第一,平局的机会减少了。就像谢耳朵说的,平时我们和熟悉的人玩,平局的概率有时甚至能到70%。加入了新的拳种后,想要平局的难度可就大大加大了。

第二,游戏的结局更丰富了。除了5种平局以外,胜负关系由原来的3种一下子扩充到了10种。

要怎么玩?

游戏的主要玩法和传统的石头剪刀布一样,一样的出拳为平局,其余的两两间都有一种胜负关系。

顺时针依次为: Rock (石头), Lizard (蜥蜴), Spock (史波克), Scissors (剪刀), Paper (布)

具体的胜负关系如图中箭头方向所示,让我们从顶点的石头出发:

Rock crushes Lizard (石头砸死蜥蜴)

Lizard poisons Spock (蜥蜴毒死史波克)

Spock smashes Scissors (史波克打碎剪刀)

Scissors cuts paper (剪刀剪碎纸)

Paper covers Rock (纸包裹石头)

Rock crushes Scissors (石头砸碎剪刀)

Scissors decapitates Lizard (剪刀剪断蜥蜴)

Lizard eats Paper (蜥蜴吃掉纸)

Paper disproves Spock (纸反驳史波克)

Spock vaporises Rock (史波克蒸发石头)

了解了玩法,那就让我们快点把代码写完,来玩上一把吧🎮

2. 贴心小提示💡

有了规则,实现一个文字版的“剪刀石头布,蜥蜴史波克”就变得容易多了。

要用到的还是那几个熟悉的小伙伴:

用input方法来告诉Python我们的出拳

用random工具包来随机模拟谢耳朵的出拳

用for loop循环整个猜拳游戏

除此之外,这次还有一个关键的环节Rookie忍不住要认真提示一下

Tip🔖:如何优雅地判断输赢呢?

也许最简单的办法,就是把所有的可能性都罗列一遍✍,像这样:

if 我出石头,谢耳朵出蜥蜴:    我赢 (石头压死蜥蜴)elif 我出石头, 谢耳朵出史波克: 我输 (史波克蒸发石头) elif 我出蜥蜴,谢耳朵出布:    我赢 (蜥蜴吃了布)    ...    ...    很长很长的省略    ... ...elif 我出史波克,谢耳朵出蜥蜴: 我输 (蜥蜴毒死史波克)

因为我们有5种出拳情况,谢耳朵也有5种出拳情况,乘起来总共的出拳状况就有25种之多了!

25种输赢关系,输的一方记-1,赢的记1,平局记0

像上面那样全部写出来的话,代码就会变得好长好长📜。而代码太长,往往就会显得很啰嗦。

有没有什么好办法简化代码呢?思考一下吧。

⌛⌛⌛

其实我们只要计算一下两个拳种的距离📏就行了。

什么,拳种还有距离?是的,让我们再来看一眼规则图吧

如果我们只看最外圈的箭头,顺时针方向它们构成了一个环⭕

从任意一个拳种出发,顺时针走5步又能回到这个拳种,比如:

(出发) 石头>蜥蜴>史波克>剪刀>纸>石头 (回来)

所以,拳种的距离就可以看成从一个拳种顺时针走到另一个拳种所要的步数。

比如我们出了石头✊,如果谢耳朵的出拳是:

蜥蜴,我们赢🏆。石头走到蜥蜴要1步;

史波克,我们输😭,石头走到史波克要2步;

剪刀,我们赢🏆, 石头走到蜥蜴要3步;

布,我们输😭,石头走到布要4步;

石头,平局,石头走一圈回到石头是5步

换换其它的拳种出发,你会发现一样的规律, 但凡步数是1或者3都是我们赢,是2或者4都是谢耳朵赢,距离是5就是平局。

想明白这点后,我们就能用简洁的代码解决问题啦,让我们把刚才的回路标上数字

(出发) 石头5️⃣>蜥蜴4️⃣>史波克3️⃣>剪刀2️⃣>纸1️⃣>石头5️⃣ (回来)

计算距离的时候,只要把我们的数字和谢耳朵的数字相减得到的结果就是距离啦,比如石头减去剪刀就是5-2=3,看看石头顺时针走到剪刀是不是走了3步?写成代码就是👇

if player_num > sheldon_num: distance = player_num - sheldon_numelse: # 考考你,为什么要加上数字5呢? distance = player_num - sheldon_num + 5

这样我们的代码就从原来的几十行大大缩短为了现在的几行✌

好啦,Rookie的提示完毕,这就是编程背后逻辑思维带来的奇妙,它能把复杂的问题简单化~

3. 完成效果✨

好啦,利用上面介绍的规则和提示,Rookie已经把文字版的石头剪刀布,蜥蜴和史波克写好了。一起来看看效果吧🎇❗

“我输了,男神果然好厉害😘”

4. Rookie的作答👨‍💻

# 1. 定义数字和拳种的关系num_to_name = {4: '石头', 3: '蜥蜴', 2: '史波克', 1: '剪刀', 0: '布'}name_to_num = {v: k for k, v in num_to_name.items()}# 2. 获得我们的出拳player_input = input('请出拳')# 3. 利用字典把我们的出拳转换成为数字player_num = name_to_num[player_input]# 4. 循环这个游戏while True: # 4.1 模拟谢耳朵的出拳 sheldon_num = random.randint(0,4) # 4.2 计算胜负关系,参看小提示环节# 5. 大功告成啦!

和以前一样,Rookie认为编程最重要的是锻炼解决问题的思维和逻辑,代码只不过是一种语言,说的多了,自然就熟练咯。

同时,考虑到文章的篇幅,这里Rookie只贴逻辑和关键的代码提示,需要完整代码的读者们可以后台私信💌Rookie呀。

5. 文末小彩蛋🥚

恭喜你,又看到了这个环节,值得给自己奖励一个小彩蛋~

文字版的游戏挺好玩的,可惜还是满足不了Rookie的胃口~,看不到男神多无聊啊。

所以Rookie给自己偷偷开了个小灶*,用起了Python里专业的游戏工具库,名叫Pygame

有了它,我们就可做出栩栩如生的游戏效果啦。因为Pygame的难度比较高,Rookie下次有机会和大家聊~

这次的彩蛋,Rookie就给大家看看用Pygame做的“石头剪刀布蜥蜴史波克”吧!

Rookie最得意的部分就是看到谢耳朵输掉时的表情了,好可爱💋

好啦,这期的挑战就到这了,为了给大家介绍这个好玩的游戏,Rookie把自己的男神都抖出来了🙊。喜欢的话,还请大家继续关注,多多分享呀🙏



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3