linux中shell俄罗斯方块源代码,用shell写俄罗斯方块(一)

shell能是命令行解释器,shell脚本是命令的有序结合。在网上看到一位哥们用shell语言写了一个游戏,俄罗斯方块,佩服呀。为了弥补童年的不足,我们一起用shell语言开始编写我们自己的俄罗斯方块吧。

我们先来回顾一下,俄罗斯都有哪些方块吧。

6bcb09294ff7c971f96a66059d5e85ec.png

box0=(0 0 0 1 1 0 1 1)

85bd1110b8f888a17c05909f66ee7f6f.png

39e0b2214722080380d108e12f874214.png

box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)

0031508ee3a6946179633cbddc0563a7.png

583ba804bfdaa2ad2b8859596649aded.png

box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0 )

f2d9f772e518f260cce275b28aaa39a7.png

a4d2eab9221a7330e483cd71cecb15d4.png

box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)

c276eab28ffa9c517f68a0eda974c2da.png

93689b47e9e6b4c472cb8cd4cb280075.png

19603986a64995fde3e3ccb7875b9e8c.png

2fc942cb9faa88da16c4498126966ab9.png

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 )

5f014a262eb1f2c708009c94722c27f9.png

b0472d6f151cd8f18581cab07522360b.png

47e887b7890305a5b8366b49a7a381bf.png

9a7e3edb20517917a52080b4b2a93fae.png

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)

0fc56f0c5a0fe2d1e6ecbe77a693f2f3.png

26018fb81ac3e09afc58e424af9a01b0.png

c81852ae4dcd2954b907146569de6b23.png

5592911d44736914970af39b884aef98.png

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 )

从上面我们可以看出,每幅图下面都有一个box = ()东东,这个是什么呢?它是shell中的数组,后面括号里面放的是它的元素,即坐标点.

一起来看看shell中数组的语法吧

Bash中,数组变量的赋值有两种方法:

(1)name=(value1 ... valuen)此时小标从0开始

(2)name[index]=value

下面以一个简单的脚本来说明,脚本内容如下

#!/bin/bash

#定义数组

A=(a b c def)

#把数组按字符串显示输出

echo ${A[@]}或echo ${A[*]}

显示:a b c def

#数组的长度表示${#A[*]}

len=${#A[*]}或者len=${#A[@]}

echo ${#A[*]}

显示: 4

#改变数组元素的值

A[3] ="hello word"

echo ${A[*]}

显示:a b c hello word

#循环输出数组

len=${#A[@]}

for ((i = 0;i < len;i ++))

do

echo -n "${A[i]}"

done

________________________________

(( i = 0 ))

while (( i < len ))

do

echo "${A[i]}"

(( i = i + 1))

done

#循环输出数组元素的另一种写法,注意,${A[*]}不能写成$A,$A默认是第一个元素,如果A="a b c ded",就可以写$A

for value in ${A[*]}

do

echo $value

done

现在坐标点有了,那怎样把这些坐标点显示在屏幕上?这里我们要看一下shell中echo的用法

echo的基本语法不在进行讲解,我们来看一些其他的

echo 要变换颜色的时候,要使用-e

格式:echo -e "\033[背景颜色;字体颜色m字符串\033[0m"

eg:

echo -e "\033[41;36m something here \033[0m"

其中41的位置代表底色,36的位置是代表字的颜色

那些ascii code是对颜色调用的始末

\033[;m ... \033[0m

例子:

让字体变为红色并且不停的闪烁

echo -e "\033[31m\033[05m请确认是否要停止当前的sequid进程,输入[Y|N]\033[0m"

字背景颜色范围:40 -- 49

40:黑 41:深红 42:绿 43:黄 44:蓝 45:紫 46:深绿 47:白色

字颜色:30 -- 39

30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:深绿 37:白

ANSI控制码的说明

\033[0m 关闭所有属性 \033[1m设置高亮度 \033[4m下划线 \033[y;xH设置光标位置

到这里我们把我们要在屏幕显示的坐标点都显示出来吧:

16d6d77a0f5b190c4b68683021d7ba94.png

效果:

d48bc9afc7789daf27bf099569393991.png

到此我们终于可以在屏幕上画出东东了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值