设计模式学习笔记(2) 俄罗斯方块设计方案

俄罗斯方块设计方案      

       首先当然是  Game , Block , Square   是应该没有什么疑问的(出问题的话到时候再说)。

       Game对象作为整个游戏的代表,可以start可以stop,可以创建Block对象,并响应键盘消息和timer消息,调用Block对象的Move,Turn方法等。Block对象有很多种,并且不同的方块应该具有不同的外观(比如颜色),不如弄一个BlockStyle类来封装这些。
     
       方块的形状应该如何存储呢,有两种方案,一是用一个4*4的2维数组,二是一个4个元素的一维数组,每个元素包含相对方块的x,y坐标。我们决定用第二种方法。  BlockStyle的数组只是一个摸版,构造Block的时候它会根据传给它的摸版构造4个Square存在另一个数组中。

       Block的move只需改变Block自身的坐标,而Turn方法则改变摸版数组,然后调用Draw方法重画。

       Block还要实现的一个重要功能就是判断是不是撞了,包括撞墙了,到底了。不过这个功能似乎应该由Game对象来做,因为这和周围环境有关,只有Game对象知道这些。

       而小小的Square里面大有文章,因为它要可以包含许多种类的道具。在腾讯做的俄罗斯中正在下降的方块中是不会有道具的,只有等你消了一行或以上,才会产生道具,并且是从最下面一行开始向上,每一行在随机的位置产生一个道具。这是不是意味着产生道具的工作应该由Game对象来做呢?  应该是这样的(出了问题再说)。

       我们也许可以给Square加一个方法MakeTool给这个Square添加道具。这个方法由Game调用。当然道具是多种多样的,可以写个道具的基类或接口,这个接口应该包括Draw和Do,Draw用来让不同道具有不同外观,do让不同道具有不同用途。具体的道具从中继承产生。具体产生什么道具由Game对象决定。有了道具当然就要发挥作用了,我们在Square对象销毁的时候检查有没有道具,有道具的话就调用道具的Do(),让不同的道具各显神通。

       在处理消行的过程中,感觉到有必要添加一个Line对象,管理一行的Square。这样Block到底的时候(由Game对象来判断),把它所有的Square放到相应的Line里面去,然后这个Block可以去死了。Line对象再检查自己是不是要消了,消之前先消每个Square,有道具还得用道具,消的时候还得告诉Game对象,Game再把上面的Line放下来。然后Game对象根据需要可能还要产生新道具,调用Line的MakeTool,Line再随机产生一个位置,再调用该位置的Square的MakeTool。

其他  GameState 游戏当前状态


待续......

posted on 2005-04-08 22:57 huangyi 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/SupperCabbage/archive/2005/04/08/134430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值