zoukankan      html  css  js  c++  java
  • HGE做的俄罗斯方块

    俄罗斯方块

    1.    简介

    俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

    2.    游戏设计

    1.    流程图

    俄罗斯方块的流程相对比较简单,游戏开始时,方块按照一定的时间间隔下落,然后要根据用户的操作发着改变,还要验证操作的合法性(判断越界),最后就是要消行计分了。其流程图如下所示:

    2-1流程图

     

     

    2.    设计思路

    1.盘的设计

    首先要解决的是显示问题。如何正确的在屏幕上显示俄罗斯方块呢?我们可以注意到其实每一种俄罗斯方块都是由小方块组成的,而要在屏幕上正确显示方块,就要在正确的位置画出小方块就好了。而要做的就是用一个二维数组来保存要显示的方块(如图2-2)。这样二维的格子中,哪一个格子被现有的方块占据了就把它标为非0,空的就为0.然后在画的时候判断格子状态,就可以实现方块的显示了

    2-2 显示方块的格子板

     

     

    2.方块的设计

    传统的俄罗斯方块主要包含七种方块。如图2-3所示。

    2-3 方块类型

    从图2-3我们可以看出,其实每个方块都是由四个小方块组成,这样我们就可以用4*2的数组来保存一种方块的位置,保存组成的四个小方块的行和列。再加一个变换的标志,用来保存当前类型的方块的变换形态。

    3.游戏逻辑

    初始化之后游戏开始,随机创建一个方块类型,计算它的边界,这个边界,包括它的左边界(用来检测是否有碰撞),右边界(用来检测是否右边是否有碰撞),下边界(用来检测下方是否有碰撞),并将其放置到网格盘上,设置方块的下落时间,这个时间就可以作为等级的标准了。每间隔一个时间,就让方块下落一格,这个就可以通过设置方块的4*2数组来实现了(每次让行数加一)。

    在下落过程中要检测按键输入,根据按键来进行方块的变形和移动,但这些操作都要检测其有效性,即是否操作完会有碰撞。最后当方块落地后,要检查是否可以消行,对方块所占的行进行检测,如果可消,就将此行消掉,然后将上面所有行下降一行并进行计分,最后将下一块的方块类型赋于当前方块,开始新的方块的下落。

    4. 

    3.    类图



     

    主要设计了四个类,一个是CGameEngine,用来封装一下HGE的一些函数,CListener的作用是具体实现了HGEFrameFuncRenderFuncCGameBoard就是主要发生游戏逻辑的地方了,一个描述俄罗斯方块所在的盘(估且这么叫)的类。CBlock就是方块的类了,总共包括了七个类弄的方块。

    3.    游戏效果


    第一版的游戏效果图

     

    4.    不足之处

    1.    界面太丑,且没有UI

    2.    没有声音和消行的效果

    3.    感觉类的设计还是有点耦合。


    下载地址:

    http://download.csdn.net/detail/sunstar1989/4095189

  • 相关阅读:
    第四届蓝桥杯JavaC组国(决)赛真题
    第四届蓝桥杯JavaC组国(决)赛真题
    第四届蓝桥杯JavaC组国(决)赛真题
    第四届蓝桥杯C++B组国(决)赛真题
    第四届蓝桥杯C++B组国(决)赛真题
    第四届蓝桥杯C++B组国(决)赛真题
    第四届蓝桥杯C++B组国(决)赛真题
    Qt 动画快速入门(一)
    越败越战,愈挫愈勇(人生就像心电图,一帆风顺,你就挂了!)
    CSS 编码中超级有用的工具集合
  • 原文地址:https://www.cnblogs.com/gameprogram/p/1986461.html
Copyright © 2011-2022 走看看