亲自测试了一个大牛写的shell脚本,感兴趣可以看看,效果如下:
代码如下:
1 #!/bin/bash 2 3 # Tetris Game 4 # 10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]> 5 6 #APP declaration 7 APP_NAME="${0##*[\/]}" 8 APP_VERSION="1.0" 9 10 11 #颜色定义 12 cRed=1 13 cGreen=2 14 cYellow=3 15 cBlue=4 16 cFuchsia=5 17 cCyan=6 18 cWhite=7 19 colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite) 20 21 #位置和大小 22 iLeft=3 23 iTop=2 24 ((iTrayLeft = iLeft + 2)) 25 ((iTrayTop = iTop + 1)) 26 ((iTrayWidth = 10)) 27 ((iTrayHeight = 15)) 28 29 #颜色设置 30 cBorder=$cGreen 31 cScore=$cFuchsia 32 cScoreValue=$cCyan 33 34 #控制信号 35 #改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面; 36 #当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。 37 sigRotate=25 38 sigLeft=26 39 sigRight=27 40 sigDown=28 41 sigAllDown=29 42 sigExit=30 43 44 #七中不同的方块的定义 45 #通过旋转,每种方块的显示的样式可能有几种 46 box0=(0 0 0 1 1 0 1 1) 47 box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3) 48 box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0) 49 box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1) 50 box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2) 51 box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2) 52 box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2) 53 #所有其中方块的定义都放到box变量中 54 box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]}) 55 #各种方块旋转后可能的样式数目 56 countBox=(1 2 2 2 4 4 4) 57 #各种方块再box数组中的偏移 58 offsetBox=(0 1 3 5 7 11 15) 59 60 #每提高一个速度级需要积累的分数 61 iScoreEachLevel=50 #be greater than 7 62 63 #运行时数据 64 sig=0 #接收到的signal 65 iScore=0 #总分 66 iLevel=0 #速度级 67 boxNew=() #新下落的方块的位置定义 68 cBoxNew=0 #新下落的方块的颜色 69 iBoxNewType=0 #新下落的方块的种类 70 iBoxNewRotate=0 #新下落的方块的旋转角度 71 boxCur=() #当前方块的位置定义 72 cBoxCur=0 #当前方块的颜色 73 iBoxCurType=0 #当前方块的种类 74 iBoxCurRotate=0 #当前方块的旋转角度 75 boxCurX=-1 #当前方块的x坐标位置 76 boxCurY=-1 #当前方块的y坐标位置 77 iMap=() #背景方块图表 78 79 #初始化所有背景方块为-1, 表示没有方块 80 for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done 81 82 83 #接收输入的进程的主函数 84 function RunAsKeyReceiver() 85 { 86 local pidDisplayer key aKey sig cESC sTTY 87 88 pidDisplayer=$1 89 aKey=(0 0 0) 90 91 cESC=`echo -ne "