标题:简单算法之俄罗斯方块
作者:yuanjq91
日期:2012-02-14 17:52
内容:
自己做了个俄罗斯方块,不知道有没有朋友需要,发个帖子分享分享。。
大体讲下 程序总共分四个文件 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.isPieceExist = false;
pieceState.piecePoint = QPoint(1 + 25 * i, 15 + 25 * j );
pieceState.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 希望对新新手有用。。
#1 [cmjs 02-14 20:25]
谢谢LZ!!
#2 [tcspecial 02-15 17:27]
谢谢LZ分享, 学习了 ...
#3 [fish0619 02-17 00:22]
qt的demo里面不是有一个。。
#4 [tsuibin 02-18 00:50]
挺好的,我到时候把用QT做的五子棋也放上来吧,或者考虑搞一个QT游戏专区 ?
#5 [iaccepted 02-19 21:32]
看了这个,晚上正好闲着没事,就写了个贪吃蛇,非常简单,蛇身接触都没检测,以后再写,传上来玩玩http://www.qtcn.org/bbs/read-htm-tid-47692.html