Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595122
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类:

2013-01-08 10:34:20

 
欢迎转载,请注明涞源chengyaogen.blog.chinaunix.net
现在,我们知道,怎样在屏幕上画方块,怎样让方块移动,今天我们将实现,系统随机产生方块,并且让其动起来,嗯,动起来....
 
现在看看在shell中产生随机数的方法

一、通过时间获得随机数(date)

可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。

例子:
    date   +%s
注意:date   空格   +%s

如果用它做随机数,相同一秒的数据是一样的。多线程里面基本不能满足要求了。

date   +%N
这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞

date  +%s%N
这个可以说比较完美,加入时间戳,又加上纳秒

接下来我们看怎么获得数据内怎么样获得随机数
 
程序运行的结果:
 
 
二、通过内部系统变量($RANDOM)
其实,linux已经提供有个系统环境变量了,直接就是随机数
echo $RANDOM
通过它,我们可以获得的数据是一个小于或等于5位的整数
学完了随机数,我们让它帮助我们产生随机方块吧。
 
  1. #!/bin/bash

  2. #七中不同的方块的定义
  3. #通过旋转,每种方块的显示的样式可能有几种
  4. box0=(0 0 0 1 1 0 1 1)
  5. box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
  6. box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
  7. box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
  8. 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)
  9. 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)
  10. 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)

  11. #把所有盒子放在box中
  12. box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})

  13. #每个盒子在box中的偏移
  14. boxOffset=(0 1 3 5 7 11 15)

  15. #旋转次数
  16. rotateCount=(1 2 2 2 4 4 4)

  17. #颜色数组
  18. colourArry=(31 32 33 34 35 36 37)

  19. #选装类型
  20. rotateType=-1

  21. #盒子标号
  22. boxNum=-1

  23. #新盒子
  24. newBox=()

  25. #边缘距离
  26. top=3
  27. left=3

  28. #当前x,y坐标
  29. currentX=15
  30. currentY=2

  31. function Draw_Box()
  32. {
  33.     local i j x y

  34.     if (($1 == 0))
  35.     then
  36.         for ((i = 0;i < 8;i += 2))
  37.         do
  38.             ((x = left + 3 * (currentX + ${newBox[i]})))
  39.             ((y = top + currentY + ${newBox[i+1]}))

  40.             echo -e "\033[${y};${x}H "
  41.         done
  42.     else
  43.         echo -e "\033[${colourArry[$colourNum]}m\033[1m"
  44.         for ((i = 0;i < 8;i += 2))
  45.         do
  46.             ((x = left + 3 * (currentX + ${newBox[i]})))
  47.             ((y = top + currentY + ${newBox[i+1]}))

  48.             echo -e "\033[${y};${x}H[*]"
  49.         done
  50.     fi

  51.     echo -e "\033[0m"
  52. }


  53. function Random_Box()
  54. {
  55.     #随机产生盒子号
  56.     (( boxNum = $RANDOM % 7 ))    
  57.     #随机长生盒子的类型
  58.     ((rotateType = $RANDOM % ${rotateCount[boxNum]}))
  59.     #随机产生颜色
  60.     ((colourNum = $RANDOM % ${#colourArry[*]}))

  61.     #找到所在box中的起始位置
  62.     ((j = ${boxOffset[boxNum]} * 8 + rotateType * 8))

  63.     for(( i = 0 ;i < 8;i ++))
  64.     do
  65.         ((newBox[i] = ${box[j+i]}))
  66.     done
  67. }

  68. while :
  69. do
  70.     Random_Box
  71.     Draw_Box 1
  72.     sleep 1
  73.     Draw_Box 0
  74. done


阅读(354) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~