有没得跟我同款的小伙伴儿!!!最近感觉我这记忆力有点儿差啊!出门忘记带钥匙、把自己锁门外了,要打电话叫开锁公司........花了100多 心痛!
上班之前看窗外下雨到楼下才想起来说带伞????结果又没带...........
也常常忘记事情。
所以我决定用 Python 写一个简单的锻炼脑力的游戏小程序来自己玩。
游戏规则:
棋盘的规则非常简单。它分为两方:攻击方和防守方。
具体流程如下:
-
防守方写一个4位数字,每位数字不能重复。
-
攻击方有10次猜测的机会,在每次机会里面,攻击方可以说出一个4位数,让防守方检查。
-
定义两个字母 A 和 B
-
攻击方说出的4位数里面,每有任何一位或者多位的数字和位置都对,则 A+1。例如防守方的答案是1234,攻击方的答案是6274,那么就是2A
-
在第4步检查以后,如果攻击方剩下的数字里面,有一位或者多位数字,在防守方剩下的数字里面,但位置不对,则 B+1。例如防守方的数字是1234,攻击方的数字是4190,就是2B。
-
防守方给出 A 和 B 的值,攻击方根据这两个值修正自己的猜测数。如果10次内猜对了,那么攻击方胜利。如果超过10次都猜不对,则防守方胜利。
-
特别说明,在匹配数字的时候,首先检查数字和位置都对的情况。检查完成以后,再检查数字对位置不对的情况。并且这个时候,是攻击方的剩余数字从左至右依次到防守方的剩余数字中检查。
-
每检查一个数字,就把这个数字从攻击方和防守方的数字里面同时剔除。所以对于防守方的数字1234,如果攻击方的数字为4437,那么检查结果应该是1A1B。因为一开始把数字3剔除了,攻击方剩余447,防守方剩余124.然后攻击方的第一个4和防守方的4匹配上了以后也会剔除。变成攻击方剩余47,防守方剩余12.此时防守方已经没有4了。
在这个游戏规则里面,防守方的作用仅仅是检查结果而已,并没有攻防对抗,所以我们可以用程序来代替防守方。
Python 实现
首先我们来生成防守方的4位数字。由于4位数字不相等,所以我们使用 Python 的随机数来生成:
由于要检查的数据通过 input 输入,所以为了保持类型一致,我们都使用字符串来表示。
运行效果如下图所示:
接下来,让玩家连续进行10次尝试,每次输入一个4位数:
运行效果如下图所示:
接下来,首先检查位置和数字都正常的情况:
这里,使用zip
来同时迭代guess
和answer
,从而实现逐位一一对应检查。
接下来,我们来寻找数字对,但位置不对的情况:
这个代码就比较简单了。把guess
剩下的数字一个一个到答案剩下的数字里面去查询,如果找到了,B 就加1.然后从答案里面删除这个数字。接着查找 guess 的下一个数字。
完整的代码如下图所示:
如果10次猜测都失败了,运行效果如下图所示:
如果猜对了,运行效果如下图所示:
计算过程如下图所示:
结尾
至此,珠玑棋的命令行版本就完成了。
希望这个小游戏能帮助大家锻炼一下大脑,记得三连哦!
完整的文章项目代码可以来小白解答学习的Python交流圈:959755565 大家一起学习、成长,Figthing!!
如果大家对这个游戏有兴趣的话,把它转变成一个网页,这样可玩性会高不少哦!!!