欢迎转载,请注明涞源chengyaogen.blog.chinaunix.net
现在,我们知道,怎样在屏幕上画方块,怎样让方块移动,今天我们将实现,系统随机产生方块,并且让其动起来,嗯,动起来....
现在看看在shell中产生随机数的方法
一、通过时间获得随机数(date)
可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。
例子:
date %s
注意:date 空格 %s
如果用它做随机数,相同一秒的数据是一样的。多线程里面基本不能满足要求了。
date %n
这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
date %s%n
这个可以说比较完美,加入时间戳,又加上纳秒
接下来我们看怎么获得数据内怎么样获得随机数
程序运行的结果:
二、通过内部系统变量($random)
其实,linux已经提供有个系统环境变量了,直接就是随机数
echo $random
通过它,我们可以获得的数据是一个小于或等于5位的整数
学完了随机数,我们让它帮助我们产生随机方块吧。
- #!/bin/bash
- #七中不同的方块的定义
- #通过旋转,每种方块的显示的样式可能有几种
- box0=(0 0 0 1 1 0 1 1)
- box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
- box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
- box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
- 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)
- 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)
- 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中
- box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
- #每个盒子在box中的偏移
- boxoffset=(0 1 3 5 7 11 15)
- #旋转次数
- rotatecount=(1 2 2 2 4 4 4)
- #颜色数组
- colourarry=(31 32 33 34 35 36 37)
- #选装类型
- rotatetype=-1
- #盒子标号
- boxnum=-1
- #新盒子
- newbox=()
- #边缘距离
- 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 ${newbox[i]})))
- ((y = top currenty ${newbox[i1]}))
- echo -e "\033[${y};${x}h "
- done
- else
- echo -e "\033[${colourarry[$colournum]}m\033[1m"
- for ((i = 0;i < 8;i = 2))
- do
- ((x = left 3 * (currentx ${newbox[i]})))
- ((y = top currenty ${newbox[i1]}))
- echo -e "\033[${y};${x}h[*]"
- done
- fi
- echo -e "\033[0m"
- }
- function random_box()
- {
- #随机产生盒子号
- (( boxnum = $random % 7 ))
- #随机长生盒子的类型
- ((rotatetype = $random % ${rotatecount[boxnum]}))
- #随机产生颜色
- ((colournum = $random % ${#colourarry[*]}))
- #找到所在box中的起始位置
- ((j = ${boxoffset[boxnum]} * 8 rotatetype * 8))
- for(( i = 0 ;i < 8;i ))
- do
- ((newbox[i] = ${box[ji]}))
- done
- }
- while :
- do
- random_box
- draw_box 1
- sleep 1
- draw_box 0
- done
阅读(4166) | 评论(0) | 转发(0) |