上一节我们学了一下shell脚本中信号的用法,这一节我们在屏幕上画出一个方块,并且让它动起来.
box0=(0 0 0 1 1 0 1 1)
现在我们就让box0在我们屏幕的任意地方动起来
实现功能:
A -> 左移 D->右移 W->向上 S->向下
思路就是通过改变x,y的坐标,在屏幕不同的地方,把box0画出来
- #!/bin/bash
- #信号
- SigA=20
- SigS=21
- SigD=22
- SigW=23
- sig=0
- #方块在屏幕上的坐标点
- box0=(0 0 0 1 1 0 1 1)
- #边缘距离
- top=3
- left=3
- #当前x,y坐标
- currentX=15
- currentY=2
- function Draw_Box()
- {
- local i j x y
- if (($1 == 0))
- then
- for ((i = 0;i < 8;i += 2))
- do
- ((x = left + 3 * (currentX + ${box0[i]})))
- ((y = top + currentY + ${box0[i+1]}))
- echo -e "\033[${y};${x}H "
- done
- else
- echo -e "\033[31m\033[1m"
- for ((i = 0;i < 8;i += 2))
- do
- ((x = left + 3 * (currentX + ${box0[i]})))
- ((y = top + currentY + ${box0[i+1]}))
- echo -e "\033[${y};${x}H[*]"
- done
- fi
- echo -e "\033[0m"
- }
- function move_left()
- {
- if ((currentX == 0 ))
- then
- return 1;
- fi
- #先清除以前的方块
- Draw_Box 0
-
- #改变x坐标
- (( currentX -- ))
-
- #画出新的方块
- Draw_Box 1
- return 0;
- }
- function move_right()
- {
- if ((currentX > 20 ))
- then
- return 1;
- fi
- #先清除以前的方块
- Draw_Box 0
-
- #改变x坐标
- (( currentX ++ ))
-
- #画出新的方块
- Draw_Box 1
- return 0;
- }
- function move_up()
- {
- if ((currentY == 0 ))
- then
- return 1;
- fi
- #先清除以前的方块
- Draw_Box 0
-
- #改变x坐标
- (( currentY -- ))
-
- #画出新的方块
- Draw_Box 1
- return 0;
- }
- function move_down()
- {
- if ((currenty > 20 ))
- then
- return 1;
- fi
- #先清除以前的方块
- Draw_Box 0
-
- #改变x坐标
- (( currentY ++ ))
-
- #画出新的方块
- Draw_Box 1
- return 0;
- }
- function Register_Signal()
- {
- trap "sig=$SigA;" $SigA
- trap "sig=$SigS;" $SigS
- trap "sig=$SigD;" $SigD
- trap "sig=$SigW;" $SigW
- }
- function Recive_Signal()
- {
- Register_Signal
- Draw_Box 1
- while true
- do
- sigThis=$sig
- case "$sigThis" in
- "$SigA")
- move_left
- sig=0
- ;;
- "$SigS")
- move_down
- sig=0
- ;;
- "$SigD")
- move_right
- sig=0
- ;;
- "$SigW")
- move_up
- sig=0
- ;;
- esac
-
- done
- }
- function Kill_Signal()
- {
- local sigThis
- while :
- do
- read -s -n 1 key
-
- case "$key" in
- "W"|"w")
- kill -$SigW $1
- ;;
- "S"|"s")
- kill -$SigS $1
- ;;
- "A"|"a")
- kill -$SigA $1
- ;;
- "D"|"d")
- kill -$SigD $1
- ;;
- "Q"|"q")
- kill -9 $1
- exit
- esac
- done
- }
- if [[ "$1" == "--show" ]]
- then
- Recive_Signal
- else
- bash $0 --show &
- Kill_Signal $!
- fi
就到这吧,下一节我们随机产生方块,让后让它改变形状。

