当前位置: 首页 > Linux

Bash小技巧:一个可以上下左右移动俄罗斯方块的Shell脚本

时间:2023-04-06 06:44:20 Linux

在Linuxbash中,上一篇介绍了一个显示彩色俄罗斯方块的shell脚本。下面继续介绍如何在shell脚本中使用k、j、h、l键对单个块进行上下左右移动。脚本执行效果先贴出shell脚本的具体执行截图如下:实际执行时,可以在框内上下左右移动Z形方块。脚本代码假设有一个moveblock.sh脚本,具体代码内容如下。在这段代码中,几乎每一行代码都提供了详细的注释,方便阅读。本文后面也会对一些关键点进行说明,以帮助理解。#!/bin/bash#实现一个可以上下左右移动的盒子,移动范围限制在指定的边框内。#以下常量指定矩形边框的上、下、左、右边界#指定边框左侧的列数FRAME_LEFT=3#指定边框右侧的列数FRAME_RIGHT=26#指定边框上方的行数FRAME_TOP=2#指定边框下方的行数FRAME_BOTTOM=18#下面的BLOCK数组对应一个Z字形的正方形,具体形状为:#[][]#[][]#这里用行数和列数来表示每个小方块的位置。#第一个小方块的起始行数和列数均为0,作为整个方块的原点。#第二个小方块和第一个小方块在同一行,行数也为0。每个小方块#显示两个字符,所以第二个小方块的起始列号为2。#第三个小方块在第一个小方块的下一行,行号为1。它的列号为2。#第四个小方块和第三个小方块在同一行,它的行号为1。它的列数是4。#使用这些行数和列数加上方块的起始行数和列数可以定位每个小方块应该在哪一行和哪一列上显示。之后,可以使用ANSI转义码来设置光标的位置。BLOCK=(00021214)#地形正方形。第一个小方块的行号为0,列号为2,其他小方块类似。#可以在下方发表评论,看看土方块的移动效果。##BLOCK=(02101214)#这个值加上BLOCK数组中的小方块行数,#将指定每个小方块应该显示在哪一行。#初始值为边框上方行号的下一行。blockLine=$((FRAME_TOP+1))#blockColumn指定要显示的整个块的起始列。#这个值加上BLOCK数组中小方块的列数,#就会指定每个小方块应该显示在哪一列。#它的初始值是border左边的列数的下一列。blockColumn=$((FRAME_LEFT+1))#定义下面两个常量来检查块的最右边和底部边界。#Zigzag块有两行。边框下方的行数减少到2,这是框开头的最大行数。如果行数大于这个,就会超出边界范围。BLOCK_MAX_BASE_LINE=$((FRAME_BOTTOM-2))#Z型方块的长度为6个字符。border右边的列数减少到6,#是box开头的最大列数。如果列数大于这个就会超出边界Scope.BLOCK_MAX_BASE_COLUMN=$((FRAME_RIGHT-6))#显示一个矩形边框作为方块移动函数的边框范围showFrame(){#设置边框字符的显示属性:高亮和反显,绿色文字,绿色背景printf"\e[1;7;32;42m"locali#使用下面的"\e[line;columnH"ANSI转义码将光标移动到指定的行和列,然后显示相应的边框字符。#行数递增,列数不变,垂直显示边框的左右边界for((i=FRAME_TOP;i<=FRAME_BOTTOM;++i));做printf"\e[${i};${FRAME_LEFT}H|"printf"\e[${i};${FRAME_RIGHT}H|"done#列数增加,行数不变,边框上下边界水平显示for((i=FRAME_LEFT+1;i