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

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

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

文章分类
文章存档

2014年(1)

2013年(27)

2012年(5)

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

分类: linux

2013-04-23 12:42:16

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

欢迎转载,请注明原处,凯发k8官网下载客户端中心的版权个人所有,不得用于商业用途,违者将追求起法律责任。  chengyaogen.blog.chinaunix.net
 
我们现在屏幕上画出一个矩阵,这个很简单
  1. #!/bin/bash

  2. clear

  3. #边缘距离
  4. left=10
  5. top=5

  6. #矩阵的长和宽
  7. widthsize=25
  8. hightsize=25

  9. #画出矩阵
  10. function draw_rectangle()
  11. {
  12.     local x y

  13.     echo -e "\033[32m\033[46m\033[1m"

  14.     for ((i = 0 ;i < widthsize;i ))
  15.     do
  16.         ((x = left i))
  17.         ((y = top hightsize - 1))
  18.     
  19.         echo -e "\033[${top};${x}h="
  20.         echo -e "\033[${y};${x}h="

  21.     done

  22.     for ((i = 0 ;i < hightsize;i ))
  23.     do
  24.         ((x = left widthsize - 1))
  25.         ((y = top i))
  26.     
  27.         echo -e "\033[${y};${left}h||"
  28.         echo -e "\033[${y};${x}h||"

  29.     done

  30.     echo -e "\033[0m"
  31. }

  32. draw_rectangle
效果图:
 
矩阵有了,接下来就是让盒子从矩阵的顶部下落下来到底部停止
  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. left=10
  27. top=5

  28. #矩阵的长和宽
  29. widthsize=28
  30. hightsize=26

  31. #确定从矩阵那个地方出来
  32. function ensure_postion()
  33. {
  34.     local sumx=0 i j

  35.     ((minx = ${newbox[0]}))
  36.     ((miny = ${newbox[1]}))
  37.     ((maxy = miny ))
  38.     
  39.     for ((i = 2; i < ${#newbox[*]};i = 2))
  40.     do
  41.         #确定最小的x坐标
  42.         if ((minx > ${newbox[i]}))
  43.         then
  44.             ((minx = ${newbox[i]}))
  45.         fi
  46.         
  47.         #确定最小的y坐标
  48.         if ((miny > ${newbox[i1]}))
  49.         then
  50.             ((miny = ${newbox[i1]}))
  51.         fi

  52.         if ((${newbox[i]} == ${newbox[i-2]}))
  53.         then
  54.             continue
  55.         fi
  56.         
  57.         ((sumx ))

  58.     done

  59.     if ((sumx == 0))
  60.     then
  61.         ((sumx = 1))
  62.     fi
  63.     
  64.     #当前x,y坐标
  65.     ((currentx = left widthsize / 2 - sumx * 2 - minx))
  66.     ((currenty = top 1 - miny))    

  67.     return 0
  68. }

  69. #画出矩阵
  70. function draw_rectangle()
  71. {
  72.     local x y

  73.     echo -e "\033[32m\033[46m\033[1m"

  74.     for ((i = 0 ;i < widthsize;i ))
  75.     do
  76.         ((x = left i))
  77.         ((y = top hightsize - 1))
  78.     
  79.         echo -e "\033[${top};${x}h="
  80.         echo -e "\033[${y};${x}h="

  81.     done

  82.     for ((i = 0 ;i < hightsize;i ))
  83.     do
  84.         ((x = left widthsize - 1))
  85.         ((y = top i))
  86.     
  87.         echo -e "\033[${y};${left}h||"
  88.         echo -e "\033[${y};${x}h||"

  89.     done

  90.     echo -e "\033[0m"
  91. }


  92. #画出方块
  93. function draw_box()
  94. {
  95.     local i j x y

  96.     if (($1 == 0))
  97.     then
  98.         for ((i = 0;i < 8;i = 2))
  99.         do
  100.             ((x = currentx 3 * ${newbox[i]}))
  101.             ((y = currenty ${newbox[i1]}))

  102.             echo -e "\033[${y};${x}h "
  103.         done
  104.     else
  105.         echo -e "\033[${colourarry[$colournum]}m\033[1m"
  106.         for ((i = 0;i < 8;i = 2))
  107.         do
  108.             ((x = currentx 3 * ${newbox[i]}))
  109.             ((y = currenty ${newbox[i1]}))

  110.             echo -e "\033[${y};${x}h[*]"
  111.         done
  112.     fi

  113.     echo -e "\033[0m"
  114. }

  115. #随机产生方块
  116. function random_box()
  117. {
  118.     #随机产生盒子号
  119.     (( boxnum = $random % 7 ))    
  120.     #随机长生盒子的类型
  121.     ((rotatetype = $random % ${rotatecount[boxnum]}))
  122.     #随机产生颜色
  123.     ((colournum = $random % ${#colourarry[*]}))

  124.     #找到所在box中的起始位置
  125.     ((j = ${boxoffset[boxnum]} * 8 rotatetype * 8))

  126.     for(( i = 0 ;i < 8;i ))
  127.     do
  128.         ((newbox[i] = ${box[ji]}))
  129.     done
  130. }

  131. #判断能否下移
  132. function move_test()
  133. {
  134.     local vary=$1 i
  135.     
  136.     #当前的y坐标加上newbox里面的坐标,其值是否大于28
  137.     for ((i = 0;i < ${#newbox[@]}; i = 2))
  138.     do
  139.         if ((vary ${newbox[i1]} > 28))
  140.         then
  141.             return 0
  142.         fi
  143.     done

  144.     return 1
  145. }


  146. draw_rectangle
  147. random_box
  148. ensure_postion

  149. while :
  150. do
  151.     draw_box 1

  152.     sleep 0.1
  153.     draw_box 0

  154.     ((currenty ))

  155.     if move_test currenty
  156.     then
  157.         draw_box 1
  158.         sleep 2
  159.         draw_box 0
  160.         random_box
  161.         ensure_postion
  162.     fi

  163. done

  164. echo
效果图:
下一次,我们实现通过键盘改变方块形状和移动方块,并且实现累加
阅读(3991) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图