红联Linux门户
Linux帮助

3天学会shell 俄罗斯方块 之一:绘制界面

发布时间:2009-04-14 15:52:41来源:红联作者:kevin_2009
[i=s] 本帖最后由 kevin_2009 于 2009-4-14 16:23 编辑 [/i]

[font=微软雅黑]
没办法,老师让3天内做完shell下的俄罗斯方块编程,那就只能去做咯,呵呵,
顺便和大家一起分享交流,一起努力完成这个有趣的游戏[/font]

第一步就是绘制界面了:

[attach]12778[/attach]

首先我们要学习一下shell下的颜色的使用

那么我们来看看shell下颜色的定义:
代码 颜色
---------------------------------------
0 黑色
1 ?色
2 ?色
3 ?色
4 ?色
5 紫?色
6 青?色
7 白色
-----------------------------------------

使用 shell 的颜色
  
  下面我用一个提示符的例子来解释 shell 的颜色。
  
  [nico@ ebrain: ~]$ PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
  
  这样提示符就全部显示成绿色了。就像这样: [nico@ ebrain: ~]$
  
  \033 声明了转义序列的开始,然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度。稍后我会介绍其他的可用字符。 转义序列字符串要用 \[ 和 \] 括起来, 防止转义序列的文本显示在 shell 里占用太多的空间。
  
  下面我们要选择前景色(这里是 32,代表绿色)。背景色的 40 表示黑色。 要是不想让提示符后面的文字也变成绿色,我们用 \033[0m 关闭转义序列, \033[0m 是 shell 的默认颜色。前景色和背景色都有 8 种可用的选择。
  
  可选颜色:红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)。
  
  用同样色方法设置背景色,不过要把第一个数字“3”替换成“4”, 例如 40、41、42、43、44、45、46、47。
  
  示例:
  
  ~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
  
  这给了我们一个非常多彩的提示符:
  
  nico@ ebrain: ~$
[attach]12779[/attach]
  
相信经过以上的学习,你对shell下的颜色有了进一步的了解,那么我们继续开始俄罗斯方块的编写吧。

从玩家的角度来看俄罗斯方块游戏。这个游戏由几种基本形状的砖头,依照一定的速度下降到窗口的底部。
在下落过程中,砖头是可以翻转和移动的。当底部有砖头衔接,占据了一整条行的时候,就可以被消除掉。所以,
我们的实现就分这么两大部分:后台处理部分和用户界面显示部分。

那么回到界面设计的问题上来。为了让颜色比较容易使用,这里我们用英文把字符给替换掉:

#颜色定义
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)


接下来的工作就是定义数组来显示方块了,我们知道,方块共有8种,而每种方块又各有几种变换的方式:

#七中不同的方块的定义
#通过旋转,每种方块的显示的样式可能有几种
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[@]})
#各种方块旋转后可能的样式数目
countBox=(1 2 2 2 4 4 4)
文章评论

共有 65 条评论

  1. amluola 于 2010-09-28 17:20:17发表:

    学习下

  2. 王文果 于 2010-09-28 14:29:12发表:

    牛人啊

  3. 棉袄加短裤 于 2010-09-25 20:53:09发表:

    [img][/img]

  4. flzy110 于 2009-09-19 09:58:28发表:

    学习学习

  5. zhengsenlin888 于 2009-09-16 09:00:41发表:

    好强!

  6. zllt 于 2009-09-06 18:06:12发表:

    。。。。太酷了

  7. 飞灰橙 于 2009-09-06 15:02:05发表:

    [i=s] 本帖最后由 飞灰橙 于 2009-9-6 15:04 编辑 [/i]

    呀。。

  8. liming198639 于 2009-08-17 16:48:01发表:

    谢谢

  9. xiaomeng 于 2009-08-17 16:18:27发表:

    引用:
    哇,太强了
    taomic 发表于 2009-4-16 20:04

    佩服

  10. gdmzyzx 于 2009-08-17 15:29:19发表:

    学习了,谢谢

  11. ReeChou 于 2009-08-17 15:27:29发表:

    厉害。。 shell也可以这么弄 。。

  12. 紫龙 于 2009-08-14 18:26:58发表:

    挺好玩!

  13. 紫龙 于 2009-08-14 18:26:39发表:

    我也要学习学习!

  14. renxy 于 2009-08-09 20:40:44发表:

    学习了,太强了!!

  15. hantu 于 2009-08-09 01:31:35发表:

    有现成的代码的,看一下源码就可以自己写一个

  16. qiannian521 于 2009-08-08 11:54:42发表:

    学习学习

  17. hanyu_ok 于 2009-08-06 17:22:57发表:

    学习了!!!!

  18. jackwen 于 2009-08-05 15:31:11发表:

    太强了 支持 学习啊!!!!!

  19. nefeithu123 于 2009-08-03 21:06:35发表:

    Shell也可以啊

  20. xp55699312 于 2009-04-17 16:08:17发表:

    太牛了..第一次看啊...Shell也可以啊

  21. li-0578 于 2009-04-17 14:14:17发表:

    学习了!!!

  22. taomic 于 2009-04-16 20:07:38发表:

    代码呢?

  23. taomic 于 2009-04-16 20:04:06发表:

    哇,太强了

  24. huizhixin 于 2009-04-16 18:51:59发表:

    挺佩服!

  25. zzcva 于 2009-04-14 16:01:02发表:

    以前在手机上经常玩这个