【小游戏】AB猜数字
这个游戏由来已久。记得我小学的时候流行过电子词典,就是袖珍版的笔记本电脑。主要功能是查英语单词的翻译。记得当时我手里这款里边有几种小游戏,现在还记得的有一个养猫游戏,每天给它喂食、给它球玩之类的。另一个记得的就是这个猜数字的游戏,当时觉得还挺难的,经常无法通关。最近又在某视频平台看到有人玩,于是想拿出来再玩玩。
最近正好在整理 shell 编程相关的知识,就用 shell 写一个小游戏吧。正好这个游戏的逻辑不复杂。游戏名实在是忘了,就叫它AB猜数字吧,lol
先介绍一下游戏规则。每局游戏会生成一个随机排列的四位数字,四个数字不重复。玩家有8次机会给出自己的答案。如果数字和位置都正确,用A标记;如果数字正确但位置错误,用B标记。比如正确答案是2478,如果玩家给出的答案是1286,返回的标记是0A2B,如果玩家给出的答案是2487,返回的标记是2A2B。
好的,规则就这么一点儿。
下边来看一下代码实现逻辑:
第一步,生成随机四位数字作为正确答案:
# 创建数组,元素是0到9
num_array=( $(seq 0 9) )
# 定义一个变量amount, 生成随机数使用
amount=10
# 定义一个空数组 bingo,用来放置生成的四个数字
declare -a bingo
# 定义变量i, 作为循环变量
i=0# 四次循环,因为答案是四个数字
while [ $i -lt 4 ]
do# num 是 1-10 的随机数num=$((RANDOM%amount))# n 是 以 num 为索引从数组中取出的一个数字(0到9)n=${num_array[$num]}# 如果在之前的循环中已经取出了数字,就直接进入下一次循环if [ -z "$n" ]thencontinueelse# 将取出的数字存到数组 bingo 中bingo[$i]=$n# 将取出的数字从原数组中删除,避免出现重复数字unset 'num_array[$n]'fi# 索引自增(( i++ ))
done
第二步,游戏进行:
# 记录A结果的变量
a_result=0
# 记录B结果的变量
b_result=0
# 记录游戏次数
count=0
# 整个进行阶段使用一个 while 循环包起来,最主要的功能是读取用户输入
while read -rp "请输入你的答案:" ans
do# 如果给出的答案不足四个数字,打印错误if [ ${#ans} -ne 4 ]thenecho "格式错误"continueelse# 这里用了双层 for 循环,分别比较正确答案和给出的答案的每一位数字是否相同for bingo_index in {0..3}dofor ans_index in {0..3}do# 如果数字相同且位置也相同,记录A的结果的变量 a_result 自增1# 如果数字相同但位置不相同,记录B的结果的变量 b_result 自增1if [ "${bingo[$bingo_index]}" -eq "${ans:${ans_index}:1}" ]thenif [ "$bingo_index" -eq "$ans_index" ]then(( a_result++ ))breakelse(( b_result++ ))breakfifidonedone# 如果 a_result 等于4,也就是答案正确,游戏结束,打印恭喜玩家字样if [ "$a_result" -eq 4 ]thenecho "恭喜你答对了!"exit 1else# 如果 a_result 不等于4,打印当前的答案状态,即xAyB,并打印剩余猜测次数echo "${a_result}A${b_result}B 加油!你还有$(( 7 - count ))次机会~"fi# 标记当前次数的变量 count 自增 1(( count++ ))# 如果 count 等于8,也就是说这是最后一次,打印失败字样,并打印正确答案if [ "$count" -eq 8 ]thenecho "你已经尝试8次了,挑战失败"echo "正确答案是:${bingo[*]}"exit 1fi# 每次循环之后清空 a_result 和 b_resulta_result=0b_result=0fi
done
游戏截图:
【小游戏】AB猜数字相关推荐
- 【C语言小游戏】猜数字游戏
hello,csdn的小伙伴呢,在前面,我们已经初步了解了c语言,并且系统的学习了分支与循环的内容.今天我们就将分支与循环的内容综合应用一下,来做一个很简单猜数字小游戏. 目录 程序的需求以及最终代码 ...
- java math猜数小游戏_java猜数字小游戏
import java.util.Random; import java.util.Scanner; /** * 一个简单的猜数字游戏 * * @author chried * */ public c ...
- 小游戏制作——猜数字
前言 相信大家在初学C语言时都制作过一个小游戏-猜数字,只不过当时能力有限导致游戏功能较为简单,今天让我们来看一下它的进阶版本. 首先规划一下我们的猜数字游戏: (1)首先程序随机生成一个 0-999 ...
- 猜数游戏控制猜测次数c语言,C语言小游戏之猜数字,三子棋游戏
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() { printf("************ ...
- C#窗体猜数字小游戏AB
用C#窗体做猜数字小游戏 玩法规则 通常由两个人玩,一方出数字,一方猜.出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道.猜的人就可以开始猜.每猜一个数字,出数者就要根据这个数字给出几A几B ...
- 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- python经典小游戏-用Python设计一个经典小游戏:猜大小
码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...
- 【Python基础学习】小游戏之猜年龄
Python基础学习 小游戏之猜年龄 import random age = random.randint(0,100) count = 0 while count < 3:count +=1u ...
- python简单小游戏赌大小分析_用Python设计一个经典小游戏:猜大小
原标题:用Python设计一个经典小游戏:猜大小 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. ...
最新文章
- 2021年大数据ZooKeeper(五):ZooKeeper Java API操作
- linux hiredis升级,Redis平滑升级
- 大熊猫卸妆后_您不应错过的6大熊猫行动
- python-第一个python程序-向世界问好
- 再读《精通css》00
- git切换分支出现head is now at_git寻根——^和~的区别
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-2 工程及程序构架介绍
- PHP+Mysql+jQuery找回密码
- Beautiful Sequence
- 【水果识别】基于matlab GUI RGB+HSV水果成熟度分级系统【含Matlab源码 825期】
- canoe和python_CANoe开发从入门到精通
- 使用IDM下载软件下载百度云网盘里的资源,以Chrome浏览器为例
- 下载并安装lsi MegaRAID raid卡 管理工具
- 查看linux进程日志,查看linux日志_查看linux日志的方法
- CSS实现抽奖大转盘
- 【Linux问题栏】虚拟机中无法识别电脑摄像头和usb摄像头
- 笔记本分屏后鼠标卡顿问题解决
- 语音数据集 | Speech datasets
- 《MySQL必知必会》学习笔记——组合查询、全文本搜索
- java开发用i5还是i7,酷睿i3和i5以及i7有什么区别