• 5633阅读
  • 5回复

[原创]简单算法之俄罗斯方块 [复制链接]

上一主题 下一主题
离线yuanjq91
 

只看楼主 倒序阅读 楼主  发表于: 2012-02-14
  自己做了个俄罗斯方块,不知道有没有朋友需要,发个帖子分享分享。。

大体讲下 程序总共分四个文件 block.h tetris.h tetris.cpp main.cpp
其中block.h定义了7种方块
static int blockType[7][4][4]; 数组中用1和0来表示小方块
tetris.h 中定义类tetris 并在类中定义了结构
struct
{
bool isPieceExist;   //表示当前位置是否有小方块存在
QPoint piecePoint;  //表示当前小方块的左上角点在窗口的像素位置
QColor pieceColor; //表示当前小方块的颜色
}pieceState[14][23];
界面有14行23列 结构体数组保存了主界面所有方块当前的状态
用两个int型保存当前方块左上角的像素位置
    int curHor;
    int curVer;
首先在构造函数中给结构体数组pieceState[14][23]赋值
for(int j = 0; j < 23; j++)
{          
     pieceState[j].isPieceExist = false;
     pieceState[j].piecePoint = QPoint(1 + 25 * i, 15 + 25 * j );
     pieceState[j].pieceColor = QColor(Qt::white);
}
然后在paintEvent()函数中把主界面 预览界面的方块画出来
当程序开始运行时调用函数getBlockNumber(QTime t)得到当前方块的类型并把它显示在预览窗口上
再一次调用getBlockgetBlockNumber(QTime t) 并根据得到方块类型给int curBlock[4][4]赋值 得到当前方块
定义一个定时器QTimer 每多少毫秒就发出信号当前方块就往下移动一格
判断是否能移动 如果能就移动 不能就保存curBlock[4][4]到pieceState[14][23]中
然后就是在keyPressEvent(QKeyEvent *event)中实现键盘的读取与执行 上键变形 下键快速下移 再就是左右移动
然后就是随着分数等级的升高QTimer发出信号的频率升高 方块下落速度变快
还有就是当满行时消行并加分
可能讲不清 还是直接贴代码吧
新手学习Qt 希望对新新手有用。。

附件: tetris.rar (528 K) 下载次数:126
离线cmjs
只看该作者 1楼 发表于: 2012-02-14
谢谢LZ!!
离线tcspecial

只看该作者 2楼 发表于: 2012-02-15
谢谢LZ分享, 学习了 ...
离线fish0619

只看该作者 3楼 发表于: 2012-02-17
qt的demo里面不是有一个。。
离线tsuibin

只看该作者 4楼 发表于: 2012-02-18
挺好的,我到时候把用QT做的五子棋也放上来吧,或者考虑搞一个QT游戏专区 ?
离线iaccepted

只看该作者 5楼 发表于: 2012-02-19
看了这个,晚上正好闲着没事,就写了个贪吃蛇,非常简单,蛇身接触都没检测,以后再写,传上来玩玩http://www.qtcn.org/bbs/read-htm-tid-47692.html
在技术的道路上我一直在追求卓越……
快速回复
限100 字节
 
上一个 下一个