加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

通过编写扫雷游戏提高你的Bash技巧

发布时间:2019-10-09 11:34:10 所属栏目:建站 来源:Abhishek Tamrakar
导读:副标题#e# 那些令人怀念的经典游戏可是提高编程能力的好素材。今天就让我们仔细探索一番,怎么用 Bash 编写一个扫雷程序。 我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进

最后,为了保持游戏界面整齐好看,我会在每行用一个竖线作为结尾,并在最后结束行循环:

  1. printf '%sn' "|" # 显示出行分隔符
  2. printf ' %sn' "-----------------------------------------"
  3. # 结束行循环
  4. done
  5. printf 'nn'

完整的 plough 代码如下:

  1. plough()
  2. {
  3.   r=0
  4.   printf 'nn'
  5.   printf '%s' "     a   b   c   d   e   f   g   h   i   j"
  6.   printf 'n   %sn' "-----------------------------------------"
  7.   for row in $(seq 0 9); do
  8.     printf '%d  ' "$row"
  9.     for col in $(seq 0 9); do
  10.        ((r+=1))
  11.        is_null_field $r
  12.        printf '%s e[33m%se[0m ' "|" "${room[$r]}"
  13.     done
  14.     printf '%sn' "|"
  15.     printf '   %sn' "-----------------------------------------"
  16.   done
  17.   printf 'nn'
  18. }

我花了点时间来思考,is_null_field 的具体功能是什么。让我们来看看,它到底能做些什么。在最开始,我们需要游戏有一个固定的状态。你可以随便选择个初始值,可以是一个数字或者任意字符。我最后决定,所有单元格的初始值为一个点(.),因为我觉得,这样会让游戏界面更好看。下面就是这一函数的完整代码:

  1. is_null_field()
  2. {
  3. local e=$1 # 在数组 room 中,我们已经用过循环变量 'r' 了,这次我们用 'e'
  4. if [[ -z "${room[$e]}" ]];then
  5. room[$r]="." #这里用点(.)来初始化每一个单元格
  6. fi
  7. }

现在,我已经初始化了所有的格子,现在只要用一个很简单的函数就能得出当前游戏中还有多少单元格可以操作:

  1. get_free_fields()
  2. {
  3. free_fields=0 # 初始化变量
  4. for n in $(seq 1 ${#room[@]}); do
  5. if [[ "${room[$n]}" = "." ]]; then # 检查当前单元格是否等于初始值(.),结果为真,则记为空余格子。
  6. ((free_fields+=1))
  7.     fi
  8.   done
  9. }

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读