欢迎转载,请注明涞源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[i+1]}))
- 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[i+1]}))
- 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[j+i]}))
- done
- }
- while :
- do
- Random_Box
- Draw_Box 1
- sleep 1
- Draw_Box 0
- done
阅读(7482) | 评论(3) | 转发(19) |