Android 俄罗斯方块游戏

游戏描述: 

 俄罗斯方块分为多个形状,每次在屏幕的上方的中间随机出现一个形状,然后这个形状以一定的速度向下落。

   下落过程中,可以使用键盘下左右控制方块的移动,按上设为改变方块的形状,当下落在屏幕的底或者碰到屏幕上已经堆积的方块时停下,以它自身的形状加入到屏幕上已堆积的方块 中。

堆积的方块中,若有其中有一行被所有方块填满,则这一行被消除。

当堆积的方块中其中有一列,超过屏幕顶端,则Game Over

冲突检测:

1、 移动的冲突检测。

1) 当方块分别在最左边、最右边、最下面时,方块不能向左、右、下方移动。

2) 当方块左、右、下方有堆积的方块时,方块不能向左、右、下方移动。

2、 变换的冲突检测。

1) 当方块变换后的状态中存在一个坐标,使得这个坐标越界(超出上下左右边界),那么不能变换(该程序采用恢复到变换前的状态)。

2) 当方块变换后的状态中存在一个坐标,使得这个坐标和已堆积的方块的坐标重合,那么不能变换。

   判断停下:

                1、方块中存在一个坐标在屏幕的底时,则方块停下,加入已堆积的方块中。

                2、方块中存在一个坐标的纵坐标加+1和已经堆积方块中的一个坐标重合,则方块停下,加入已堆积的方块中。

                方块停下后,初始化新的方块。

判断消行:

            当方块停下来的时候,从方块最小纵坐标到最大纵坐标扫描已堆积的方块,若在堆积的方块中这一行已填满,则消除改行所有的方块,且将该行上面的方块向下移动一行。

 

不足之处:

1、每次初始化方块时,都是new的一个新Shape的对象,这样太耗费空间了,可否只用new一个对象,然后再下一次的时候初始化Shape对象时,直接改变Shape指向的子类。一开始我想的是第一次初始化方块时,直接new 出来。在以后初始化方块时(若shape不为空),先向上转换为Shape类型,然后再强转为Shape的其他子类,这样显然不行。单例模式?用了子类怎么办?

2、在各种冲突检测中,时间复杂度太高。

 

游戏相关图片:

 

diamond1

 

diamond2

 

完整代码见附件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值