零、前言

学习shell的时候,无聊的我,写了个简单版的文字mud,暂且叫武林群侠传吧。可能90后都不知道文字mud是什么了……哈哈

壹、效果

先看下效果吧,GIF图如下

文字效果如下:

  1. [root@yaomm mud]# sh mudGameV03.sh
  2. 初始生命值:【10
  3. 2020-06-24/23:05:31 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 1 关战斗开始------------------------------ ########
  4. 2020-06-24/23:05:31 ####### 你的对手【小兵甲】已出现,对方已经开始发起攻击 ########
  5. 请出招反击:【1、野球拳,2、排云掌,3、风神腿】,请输入 0~2 3个数字选择武功:1
  6. 您使出了【 排云掌
  7. 2020-06-24/23:05:31 ####### 您被【小兵甲】打败了,生命值减一,当前生命值:【9】 ########
  8. 2020-06-24/23:05:31 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  9. -----------------------------------------------------------------------------------------
  10. 2020-06-24/23:05:32 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 2 关战斗开始------------------------------ ########
  11. 2020-06-24/23:05:32 ####### 你的对手【小兵甲】已出现,对方已经开始发起攻击 ########
  12. 请出招反击:【1、野球拳,2、排云掌,3、风神腿】,请输入 0~2 3个数字选择武功:2
  13. 您使出了【 风神腿
  14. 2020-06-24/23:05:33 ####### 您打败了【小兵甲】,经验加1,当前战力值:【3】 ########
  15. 2020-06-24/23:05:33 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  16. -----------------------------------------------------------------------------------------
  17. 2020-06-24/23:05:34 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 3 关战斗开始------------------------------ ########
  18. 2020-06-24/23:05:34 ####### 你的对手【小兵甲】已出现,对方已经开始发起攻击 ########
  19. 请出招反击:【1、野球拳,2、排云掌,3、风神腿】,请输入 0~2 3个数字选择武功:3
  20. 2020-06-24/23:05:36 ####### ERROR: 无效输入,请输入 0~2 这3个数字来选择武功! ########
  21. ############# 使用武功出错,本回合重新开始 ###################
  22. 2020-06-24/23:05:36 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 3 关战斗开始------------------------------ ########
  23. 2020-06-24/23:05:36 ####### 你的对手【小兵甲】已出现,对方已经开始发起攻击 ########
  24. 请出招反击:【1、野球拳,2、排云掌,3、风神腿】,请输入 0~2 3个数字选择武功:1
  25. 您使出了【 排云掌
  26. 2020-06-24/23:05:39 ####### 您打败了【小兵甲】,经验加1,当前战力值:【6】 ########
  27. Lv1 初出茅庐】您已不再是战五渣,继续努力!
  28. 2020-06-24/23:05:40 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  29. -----------------------------------------------------------------------------------------
  30. 2020-06-24/23:05:41 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 4 关战斗开始------------------------------ ########
  31. 2020-06-24/23:05:41 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  32. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:2
  33. 您使出了【 十三太保横练神功
  34. 2020-06-24/23:05:43 ####### 您被【兵丁头目】打败了,生命值减一,当前生命值:【8】 ########
  35. 2020-06-24/23:05:43 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  36. -----------------------------------------------------------------------------------------
  37. 2020-06-24/23:05:44 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 5 关战斗开始------------------------------ ########
  38. 2020-06-24/23:05:44 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  39. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:2
  40. 您使出了【 十三太保横练神功
  41. 2020-06-24/23:05:46 ####### 您打败了【兵丁头目】,经验加2,当前战力值:【9】 ########
  42. 2020-06-24/23:05:46 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  43. -----------------------------------------------------------------------------------------
  44. 2020-06-24/23:05:47 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 6 关战斗开始------------------------------ ########
  45. 2020-06-24/23:05:47 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  46. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:1
  47. 您使出了【 葵花点穴手
  48. 2020-06-24/23:05:48 ####### 您打败了【兵丁头目】,经验加2,当前战力值:【12】 ########
  49. 2020-06-24/23:05:48 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  50. -----------------------------------------------------------------------------------------
  51. 2020-06-24/23:05:49 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 7 关战斗开始------------------------------ ########
  52. 2020-06-24/23:05:49 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  53. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:1
  54. 您使出了【 葵花点穴手
  55. 2020-06-24/23:05:57 ####### 您被【兵丁头目】打败了,生命值减一,当前生命值:【7】 ########
  56. 2020-06-24/23:05:57 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  57. -----------------------------------------------------------------------------------------
  58. 2020-06-24/23:05:58 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 8 关战斗开始------------------------------ ########
  59. 2020-06-24/23:05:58 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  60. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:2
  61. 您使出了【 十三太保横练神功
  62. 2020-06-24/23:06:00 ####### 您打败了【兵丁头目】,经验加2,当前战力值:【15】 ########
  63. 2020-06-24/23:06:00 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  64. -----------------------------------------------------------------------------------------
  65. 2020-06-24/23:06:01 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 9 关战斗开始------------------------------ ########
  66. 2020-06-24/23:06:01 ####### 你的对手【兵丁头目】已出现,对方已经开始发起攻击 ########
  67. 请出招反击:【1、野球拳Lv2,2、葵花点穴手,3、十三太保横练神功】,请输入 0~2 3个数字选择武功:2
  68. 您使出了【 十三太保横练神功
  69. 2020-06-24/23:06:10 ####### 您打败了【兵丁头目】,经验加2,当前战力值:【18】 ########
  70. Lv2 小试牛刀】您小试牛刀,便已在江湖上打出了名号!
  71. 2020-06-24/23:06:10 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  72. -----------------------------------------------------------------------------------------
  73. 2020-06-24/23:06:11 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 10 关战斗开始------------------------------ ########
  74. 2020-06-24/23:06:11 ####### 你的对手【锦衣卫】已出现,对方已经开始发起攻击 ########
  75. 请出招反击:【1、野球拳Lv3,2、葵花宝典,3、紫霞神功】,请输入 0~2 3个数字选择武功:1
  76. 您使出了【 葵花宝典
  77. 2020-06-24/23:06:12 ####### 您打败了【锦衣卫】,经验加3,当前战力值:【21】 ########
  78. 2020-06-24/23:06:12 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  79. -----------------------------------------------------------------------------------------
  80. 2020-06-24/23:06:13 ####### >>>>>>>>>>>>>>>>>>>>>>--------第 11 关战斗开始------------------------------ ########
  81. 2020-06-24/23:06:13 ####### 你的对手【锦衣卫】已出现,对方已经开始发起攻击 ########
  82. 请出招反击:【1、野球拳Lv3,2、葵花宝典,3、紫霞神功】,请输入 0~2 3个数字选择武功:0
  83. 您使出了【 野球拳Lv3
  84. 2020-06-24/23:06:13 ####### 您打败了【锦衣卫】,经验加3,当前战力值:【24】 ########
  85. 2020-06-24/23:06:13 ####### <<<<<<<<<<<<<<<<<<<<<---------本回合结束!敌人刷新中,请等待……-------------------- ########
  86. -----------------------------------------------------------------------------------------

代码太多,不全贴出来了,说下主要思路。

贰、代码解析

1、定义级别

根据战力值定义青铜、白银这样的段位,根据段位随机对手、武功!

  1. #####################################################
  2. # 作者:姚毛毛
  3. # 版本:v0.3
  4. # 更新日期:2020-06-24
  5. # 更新日志:添加招式、战斗过程
  6. # ---------------------------------------------------
  7. # 战力值<=5: Lv0 战五渣
  8. # 战力值5-15: Lv1 初出茅庐
  9. # 战力值16-30: Lv2 小试牛刀
  10. # 战力值31-40: Lv3 锋芒毕露
  11. # 战力值41-50: Lv4 声名鹊起
  12. # 战力值51-60: Lv5 名动江湖
  13. # 战力值61-70: Lv6 一代宗师
  14. # 战力值71-80: Lv7 武林盟主
  15. # 战力值81-90: Lv8 隐士高人
  16. # 战力值91-100: Lv9 江湖传说
  17. # 战力值小于0:Lv-1 死亡,少侠重来
  18. #####################################################

2、定义全局变量

初始战力值为0,初始等级为0,当前生命值是最大生命值-扣除生命值。

每次战斗失败都扣除一点生命值

  1. # 战力值
  2. GLOBAL_POWER=0
  3. # 名字
  4. GLOBAL_NAME='少侠'
  5. # 等级
  6. GLOBAL_LEVEL=0
  7. # 生命,初始生命值10点,下个版本规划:每升一级,最大生命值=10+等级*5
  8. GLOBAL_LIFE=10
  9. GLOBAL_LIFE_MAX=10
  10. # 已扣除生命值
  11. GLOBAL_LIFE_DEDUCT=0
  12. # 战斗回合
  13. GLOBAL_COUNT=1

3、定义段位对应的随机敌人与武功

  1. function loadData() {
  2. # Lv0 对手:1、小兵甲;2、明教教众;3、黄河四鬼;
  3. #declare -A map0
  4. #map0=(["1"]="小兵甲" ["2"]="明教教众" ["3"]="黄河四鬼" )
  5. LEVEL_0_AI=("小兵甲" "明教教众" "黄河四鬼")
  6. LEVEL_0_KongFu=("野球拳" "排云掌" "风神腿")
  7. LEVEL_1_AI=("兵丁头目" "天地会青木堂成员" "沙船帮舵主")
  8. LEVEL_1_KongFu=("野球拳Lv2" "葵花点穴手" "十三太保横练神功")
  9. LEVEL_2_AI=("锦衣卫" "天地会青木堂香主" "沙船帮长老")
  10. LEVEL_2_KongFu=("野球拳Lv3" "葵花宝典" "紫霞神功")
  11. LEVEL_3_AI=("锦衣卫伍长" "黑白双煞" "沙船帮帮主")
  12. LEVEL_3_KongFu=("野球拳Lv4" "三分归元气" "独孤九剑")
  13. LEVEL_4_AI=("锦衣卫百户" "铁拳无敌归辛树" "天地会陈近南")
  14. LEVEL_4_KongFu=("野球拳Lv5" "吸星大法" "脚底抹油")
  15. LEVEL_5_AI=("锦衣卫千户" "燕子坞慕容复" "金蛇郎君")
  16. LEVEL_5_KongFu=("野球拳Lv6" "斗转星移" "神行百变")
  17. LEVEL_6_AI=("右军统领" "鸠摩智" "铁掌帮裘千仞")
  18. LEVEL_6_KongFu=("野球拳Lv7" "天山折梅手" "一阳指")
  19. LEVEL_7_AI=("左军统领" "大理段誉" "战神乔峰")
  20. LEVEL_7_KongFu=("野球拳Lv8" "六脉神剑" "少林般若掌")
  21. LEVEL_8_AI=("柱国大将军" "中神通王重阳" "老顽童周伯通")
  22. LEVEL_8_KongFu=("野球拳Lv9" "战神图录" "左右互搏术")
  23. LEVEL_9_AI=("黄裳" "逍遥子" "武当张三丰")
  24. LEVEL_9_KongFu=("野球拳Lv10" "乾坤大罗移" "降龙十八掌")
  25. }

4、定义段位对应的文字

  1. # 判断战力值
  2. function levelEcho()
  3. {
  4. getLevel # 计算战力等级
  5. # echo "GLOBAL_POWER: $GLOBAL_POWER"
  6. # echo "GLOBAL_LEVEL: $GLOBAL_LEVEL"
  7. case $GLOBAL_LEVEL in
  8. 0)
  9. # GLOBAL_ECHO="【Lv0 战五渣】您还需继续磨练!"
  10. # echoUtil
  11. echo "【Lv0 战五渣】您还需继续磨练!"
  12. ;;
  13. 1)
  14. # GLOBAL_ECHO="【Lv1 初出茅庐】您已不再是战五渣,继续努力!"
  15. # echoUtil
  16. echo "【Lv1 初出茅庐】您已不再是战五渣,继续努力!"
  17. ;;
  18. 2)
  19. echo "【Lv2 小试牛刀】您小试牛刀,便已在江湖上打出了名号!"
  20. ;;
  21. 3)
  22. echo "【Lv3 锋芒毕露】江湖上已经有你的一席之地!"
  23. ;;
  24. 4)
  25. echo "【Lv4 声名鹊起】随着你行侠仗义,在江湖中积极奔走,已经有了侠少的名号!"
  26. ;;
  27. 5)
  28. echo "【Lv5 名动江湖】江湖中多年奔波,凡是江湖人,已无人不知、无人不晓您的名号!"
  29. ;;
  30. 6)
  31. echo "【Lv6 一代宗师】您经过多年磨练,功法大成,声望日隆,终成一代宗师!"
  32. ;;
  33. 7)
  34. echo "【Lv7 武林盟主】经多派掌门推举,你当仁不让,成为武林盟主,号令天下!"
  35. ;;
  36. 8)
  37. echo "【Lv8 隐士高人】您已尝过世间繁华,厌倦武林诡谲、尔虞我诈,因此金盆洗手,退隐山林!"
  38. ;;
  39. 9)
  40. echo "【Lv9 江湖传说】您虽已不在江湖,但江湖永远流传着你的传说!"
  41. ;;
  42. *)
  43. # echo -e "\033[91m 江湖险恶,少侠请重新来过! \033[0m"
  44. GLOBAL_ECHO=" 江湖险恶,少侠请重新来过!"
  45. echoUtil
  46. ;;
  47. esac
  48. }

5、战斗计算

1)获得随机对手

  1. cur_AI_str=LEVEL_${GLOBAL_LEVEL}_AI[$index_AI]
  2. # echo "cur_AI:$cur_AI"
  3. cur_AI=${!cur_AI_str}
  4. GLOBAL_ECHO="你的对手【${cur_AI}】已出现,对方已经开始发起攻击"

2) 输入招式

  1. read -p "请出招反击:【1、${!cur_kongfu0},2、${!cur_kongfu1},3、${!cur_kongfu2}】,请输入 0~2 这3个数字选择武功:" kongfu

3) 获取功夫名

  1. cur_k_0=LEVEL_${GLOBAL_LEVEL}_KongFu[$kongfu]

4 ) 战斗胜利,增加经验值、战力值

  1. let GLOBAL_POWER+=3 # 加速战力值增长

5)战斗失败,削减生命值

  1. let GLOBAL_LIFE_DUCKCT++
  2. # 当前生命值= 最大生命值 - 已扣除生命值
  3. GLOBAL_LIFE=$[ $GLOBAL_LIFE_MAX - $GLOBAL_LIFE_DUCKCT ]

6、循环调用战斗函数

  1. ……
  2. while :
  3. do
  4. # 获取AI 敌人,进行战斗
  5. getAI
  6. is_ai=$?
  7. ……
  8. ……
  9. if [ $GLOBAL_LIFE -le 0 ];then
  10. echo "你的生命值已小于0,游戏结束,请少侠重新来过!"
  11. exit
  12. fi
  13. done

叁、后记

代码已上传git,后台回复github可获取。

写了一天挺累的,但是觉得还蛮有意思的。

熟悉了不少shell的语法跟用法。

也回忆了一下青春。

如果觉得还不错,不妨转发、在看一下吧。

我用shell写了个mud游戏:武林群侠传的更多相关文章

  1. MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载

    MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载  武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...

  2. 原创游戏,金庸群侠传X 0.5公布

    首先说一下背景,我个人从小特别爱玩游戏,对小时候一款游戏<金庸群侠传>DOS版更是情有独钟,自己工作以后,利用业余时间自己整了一个原创的改编版丢网上(找图片.音乐.写剧情更是虐心之极,耗时 ...

  3. 一次httpserver优化的经验和教训(silverlight游戏 - 金庸群侠传X0.5上线记)

    金X因为被推荐到ACFUN游戏排行第一名.并同一时候在17YY.7K7K.U77.17173等各大小游戏站点上线.迎来了在线用户数量的爆炸式增长.眼下各大站点使用外链方式.也就是实际链接到金X官网的s ...

  4. 小游戏——金庸奇侠传(JAVA,对面向对象的进一步了解)

    金庸群侠传 游戏运行界面:   游戏实现源码: package game.logic; //人类 public class Person { public String name; //名字 Pers ...

  5. 原生JS实战:写了个斗牛游戏,分享给大家一起玩!

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5869953.html 该程序是本人的个人作品,写的不好,未经本人允许,请 ...

  6. 用JS写了一个打字游戏,反正我是通不了关

    今天想写个简单的游戏, 打字游戏好像都没写过, 那么就写打字游戏吧, gamePad包含了关卡的信息, 可以用来调整给个关卡字符下落的速度: getRandom函数会返回一个字符对象, 这个对象包含了 ...

  7. 在code.org上自己写一个flappy bird游戏

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在code.org上自己写一个flappy bird游戏.

  8. 教你用shell写CGI程序

    以前用shell写过一些cgi的例子.今天向大家介绍一下. CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.CGI会将标准输 ...

  9. 一道面试题:用shell写一个从1加到100的程序

    [试题描述] 请用shell写一个简短的程序,实现1+2+...+100的功能. [程序] 方法一: #!/bin/bash ..} do let sum+=$i done echo $sum 方法二 ...

随机推荐

  1. SQL Server数据库附加失败错误:5123,拒绝访问

    发生错误的图片如下 我们需要更改数据库文件的权限(mdf和ldf两个文件) 右键数据库文件,点击属性 选择安全,点击高级,把每一个角色的访问权限都变成完全控制 如图所示 然后确定确定确定保存等等, l ...

  2. Java实现 蓝桥杯 算法提高 p1001

    算法提高 P1001 时间限制:1.0s 内存限制:256.0MB 提交此题  当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说 ...

  3. Java实现 LeetCode 50 Pow(x,n)

    50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, ...

  4. java算法集训代码填空题练习2

    1 连续数的公倍数 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多. 事实上,它是1至6的每个数字的倍数.即1,2,3,4, ...

  5. (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析

    一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...

  6. python json unicode utf-8处理总结

    1.直接输出字典中文 在python中经常遇见直接print dict(字典),或者dict转json,但是没有给特定的参数,然后打印json字符串,输出的中文就成了unicode码的情况,如下: d ...

  7. linux性能监控工具nmon生成HTML报告-EasyNmon

    一.关于easyNmon说明 为了方便多场景批量性能测试,用golang写了个监控程序,可以通过get url方式启动和停止nmon服务,非常适合配合Loadrunner性能测试框架和jmeter使用 ...

  8. 洛谷 P1115 最大子序和

    **原题链接** ##题目描述   给出一段序列,选出其中连续且非空的一段使得这段和最大.     **解法**:       1.暴力枚举 时间:O(n^3)       2.简单优化 时间:O(n ...

  9. set基本运用

    /* set集合基本用法 */ #include<iostream> #include<set> using namespace std; //set<T>a; v ...

  10. Centos7快速安装RocketMQ

    1. 为什么要用MQ 消息队列是一种"先进先出"的数据结构 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高,容错性就越低.以电商应用为例,用户创建订单后,如果耦合调用库 ...