俄罗斯方块

1.游戏区:
◆游戏区可以划分成20行12列,共20*12个小方块区域。可以使用一个二维数组来表示。如int m_iMap[20][12], 其值为1表示有方块,为0表示

无方块。
◆每个图形由4个小方块构成,共有7种组合,其ID定义如下:
    0         1        2        3        4            5        6
    @@@@     @@      @        @@           @@        @            @
             @@    @@@      @@     @@        @@@    @@@
◆当前图形:可以用一个4元素的数组来表示,如CPoint m_ptCurrent[4],其中保存方块的坐标值,如(3,5)表示该方块位于第3行第5列,不要

直接保存像素坐标值。小方块的长度和宽度的像素值(如20)可以保存在一个宏常量GRID_SIZE中。
◆下一图形的ID:可以用一个数表示,如m_iNextShapeID
◆每种图形可以进行90度翻转,7种图形衍生出19种变化。翻转状态可以用m_iRoateState记录,0表示初始状态,1、2、3分别表示旋转90度、

180度、270度后的状态。
◆左键:使当前方块向左移动一格。m_ptCurrent [i].x – 1
◆右键:使当前方块向右移动一格。m_ptCurrent [i].x + 1
◆下键:使当前方块向下移动一格。m_ptCurrent [i].y + n,        n表示难度级别
◆上键:使当前方块顺时针旋转90度。计算出4个小方块新的坐标位置m_ptCurrent[4]。
◆使当前图形自动下降:OnTimer事件中实现,使m_ptCurrent[i].y + n
◆随机产生7种图形中的一种,作为下一图形。srand(GetTickCount());        rand() % 7;
◆算法设想:开始使用上次产生的“下一图形”的形状ID生成“当前图形”m_ptCurrent 重新产生“下一图形”……
◆碰撞检测:检测当前图形m_ptCurrent的4个方块的下端和m_iMap的上端,如果有重合,说明不能再下移了。
翻转时的碰撞检测
◆计分算法:填满的行要消除掉,并增加分数。重置m_iMap[20][12]二维数组的值。
加分规则:如果一次消1行,得10分;一次消2行,得30分;一次得3行,得60分;一次得4行,得90分。一次最多只可能消4行。
◆左右移动的限制:不允许移出20*12的边界。
◆小方块的实现:使用图像(Bltbit)或者使用矩形画图(Rectangle, FillSolidRect)
◆方块颜色,背景色:m_colorBlock, m_colorGameArea, m_colorNextArea, m_colorHelpArea
◆游戏结束:m_iMap[0][i]中任何一个元素为1,表明游戏结束。
2.下一图形提示区
3.帮助说明区

游戏视频教程:http://www.rjpx.net/cshipin/734.html

posted @ 2012-03-02 11:16  JAVA教程  阅读(498)  评论(0编辑  收藏  举报