最后,为了保持游戏界面整齐好看,我会在每行用一个竖线作为结尾,并在最后结束行循环:
printf '%sn' "|" # 显示出行分隔符 printf ' %sn' "-----------------------------------------" # 结束行循环 done printf 'nn'
完整的 plough 代码如下:
plough() { r=0 printf 'nn' printf '%s' " a b c d e f g h i j" printf 'n %sn' "-----------------------------------------" for row in $(seq 0 9); do printf '%d ' "$row" for col in $(seq 0 9); do ((r+=1)) is_null_field $r printf '%s e[33m%se[0m ' "|" "${room[$r]}" done printf '%sn' "|" printf ' %sn' "-----------------------------------------" done printf 'nn' }
我花了点时间来思考,is_null_field 的具体功能是什么。让我们来看看,它到底能做些什么。在最开始,我们需要游戏有一个固定的状态。你可以随便选择个初始值,可以是一个数字或者任意字符。我最后决定,所有单元格的初始值为一个点(. ),因为我觉得,这样会让游戏界面更好看。下面就是这一函数的完整代码:
is_null_field() { local e=$1 # 在数组 room 中,我们已经用过循环变量 'r' 了,这次我们用 'e' if [[ -z "${room[$e]}" ]];then room[$r]="." #这里用点(.)来初始化每一个单元格 fi }
现在,我已经初始化了所有的格子,现在只要用一个很简单的函数就能得出当前游戏中还有多少单元格可以操作:
get_free_fields() { free_fields=0 # 初始化变量 for n in $(seq 1 ${#room[@]}); do if [[ "${room[$n]}" = "." ]]; then # 检查当前单元格是否等于初始值(.),结果为真,则记为空余格子。 ((free_fields+=1)) fi done }
(编辑:西安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|