自己做了个俄罗斯方块,不知道有
没有朋友需要,发个帖子分享分享。。

大体讲下 程序总共分四个
文件 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 希望对新新手有用。。