以此篇博文纪念走过的2014年以及我刚刚起步的编程学习生涯。
首先声明:
这篇关于俄罗斯方块的文章也许不是很好,但是我会尽自己的努力去说清重点。至于细枝末节之处,希望大家下载下来,共同学习。这里只展示核心代码。
首先,提到这个因我学习qt编程而接触到的游戏,自己多少还是有些迷茫。以前只用C语言编出过用户自定义规模的扫雷游戏。相比起来:俄罗斯方块显得还是要复杂一些,以下问题需要注意:
- 要有清晰的游戏的逻辑流程(类的设计、以及类之间如何关联);
- 要通过qt自带的库函数对游戏的界面进行美化;
- 一些小游戏必备的基本常识(例如:计时器的使用、输入设备的控制)。
void TetrixBoard::drawSquare(QPainter &painter, int x, int y, TetrixShape shape)
{
static const QRgb colorTable[8] = {
0x000000, 0xCC6666, 0x66CC66, 0x6666CC,
0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00
};
painter.drawPixmap(x + 1, y + 1, squareWidth() - 3, squareHeight() - 3, QPixmap(":/box.gif"));
QColor color = colorTable[int(shape)];
//将颜色透明度减小到90
color.setAlpha(90);
painter.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2,color);
//上部和左侧是亮色画线,下侧和右侧是暗色画线从而有一定立体感
painter.setPen(color.light());
painter.drawLine(x, y + squareHeight() - 1, x, y);
painter.drawLine(x, y, x + squareWidth() - 1, y);
painter.setPen(color.dark());
painter.drawLine(x + 1, y + squareHeight() - 1,
x + squareWidth() - 1, y + squareHeight() - 1);
painter.drawLine(x + squareWidth() - 1, y + squareHeight() - 1,
x + squareWidth() - 1, y + 1);
}
下图展示俄罗斯方块这个小游戏的流程 :