shell版俄罗斯方块二:界面绘制

<span style="font-size:24px;">1、这里有一个很重要的命令:echo,用这个命令改变输出的颜色及光标的位置,具体可以参看我另一篇转载的博客
2、定义方块的表达方式,所有方块都是由4个单位块组成,4个单位块的不同位置就组成了不同方块,且每一方块都有不同的形式。
   box数组,前8个是单位块的坐标,后两个是出现的第一个方块的位置。
3、
</span>
#!/bin/bash

#Program
#	This program trys to draw border
#History
#   Walker first 2015-07-27

marginLeft=4;
marginTop=5;
mapWidth=10;
mapHeight=20;
((mapLeft=${marginLeft}+2))
((mapTop=${marginTop}+1))

box0_0=(0 0 0 1 1 0 1 1 0 4) #方块数组

box1_0=(0 1 1 1 2 1 3 1 0 3)
box1_1=(1 0 1 1 1 2 1 3 -1 3)

box2_0=(0 0 1 0 1 1 2 1 0 4)
box2_1=(0 1 0 2 1 0 1 1 0 3)

box3_0=(0 1 1 0 1 1 2 0 0 4)
box3_1=(0 0 0 1 1 1 1 2 0 4)

box4_0=(0 2 1 0 1 1 1 2 0 3)
box4_1=(0 1 1 1 2 1 2 2 0 3)
box4_2=(1 0 1 1 1 2 2 0 -1 3)
box4_3=(0 0 0 1 1 1 2 1 0 4)

box5_0=(0 0 1 0 1 1 1 2 0 3)
box5_1=(0 1 0 2 1 1 2 1 0 3)
box5_2=(1 0 1 1 1 2 2 2 -1 3)
box5_3=(0 1 1 1 2 0 2 1 0 4)

box6_0=(0 1 1 0 1 1 1 2 0 3)
box6_1=(0 1 1 1 1 2 2 1 0 3)
box6_2=(1 0 1 1 1 2 2 1 -1 3)
box6_3=(0 1 1 0 1 1 2 1 0 4)


DrawBorder()//绘制边框函数
{
	local i y x1 x2#局部变量的定义,local的使用
	echo -ne "\033[1m\033[32m\033[42m"#1m表示高亮表示,32表示前景色,42表示背景色,3开头的颜色是前景色,4开头的是背景色
	((x1=marginLeft+1))
	((x2=x1+2+mapWidth*2))
#	echo $x1
#	echo $x2
	for((i=0;i<mapHeight;i++))
	do
		((y=i+marginTop+1))#绘制左右边框
		echo -ne "\033[${y};${x1}H||"
		echo -ne "\033[${y};${x2}H||"
	done

	((x1=marginTop+mapHeight+1))
	for((i=0;i<mapWidth+2;i++))
	do
		((y=i*2+marginLeft+1))//#绘制上下边框
		echo -ne "\033[${marginTop};${y}H=="
		echo -ne "\033[${x1};${y}H=="
	done
	echo -ne "\033[0m"//取消高这显示
}

DrawBox()#方块绘制函数
{
	local i x y xPos yPos
	yPos=${box0_0[8]}#保存首次出现的位置
	xPos=${box0_0[9]}
	echo -ne "\033[1m\033[35m\033[45m"
	for((i=0;i<8;i+=2))#绘制方块,每次绘制一个单位块
	do
		(( y = ${mapTop} + ${box0_0[$i]} + ${yPos} ))
		(( x = ${mapLeft} + 1 + 2*(${box0_0[$i+1]} + ${xPos})))
		echo -ne "\033[${y};${x}H[]"
	done
	echo -ne "\033[0m"
}

clear#清屏
DrawBorder
DrawBox

((overPos=${marginTop}+${mapHeight}+4))
echo -ne "\033[${overPos};1H"#重定位光标位置



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值