用shell写俄罗斯方块(四)-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 217856
  • 博文数量: 33
  • 博客积分: 256
  • 博客等级:
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-14 18:39
个人简介

前方的路,充满了艰辛。-

文章分类
文章存档

2014年(1)

2013年(27)

2012年(5)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2013-04-23 12:42:02

原文地址: 作者:草根老师

 
欢迎转载,请注明涞源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[i1]}))

  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[i1]}))

  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[ji]}))
  66.     done
  67. }

  68. while :
  69. do
  70.     random_box
  71.     draw_box 1
  72.     sleep 1
  73.     draw_box 0
  74. done


阅读(4166) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:用shell写俄罗斯方块(五)

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图