QT 贪吃蛇
为了熟悉QT的相关知识,我用了大约8个小时的时间用QT再次写了一遍贪吃蛇。
因为QT的机制和平时写的程序流程不同,所以程序中可能没有遵守代码规范。
运行效果:
程序内除了实现贪吃蛇的基本功能外,还添加了记录得分、调节游戏速度、重新开始游戏等功能。
游戏内容使用QPainter类进行绘制。
编译环境:
Windows Qt 5.9.0 Qt Creator 4.3.0
思路:
数组存储蛇节点坐标的贪吃蛇游戏思路。
因为编写过程中使用了分文件编写,且QT框架的其他部分较多,这里仅展示程序实现主要代码。
代码:
MainWindow.h 主窗口类头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter> //画家类
#include "snake.h" //蛇类
#include <QKeyEvent> //键盘事件
#include "food.h" //食物类
#include <QTimer> //定时器类
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//绘图事件
void paintEvent(QPaintEvent *);
//游戏结束的情况
void GameOver();
private:
Ui::Widget *ui;
Snake snake; //蛇对象
char key = 'd'; //接收键值,初始向右
Food food; //食物对象
//创建定时器
QTimer *timer = new QTimer(this);
bool gameflag = false;//游戏结束标记
int score = 0; //记录得分
int timerspeed = 200; //定时器速度
bool bugflag = false; //用于解决操控过快导致撞死自己的bug的标志
//键盘事件,改变键值
void keyPressEvent(QKeyEvent *ev);
};
#endif // WIDGET_H
MainWindow.cpp函数实现
#include "MainWindow.h"
#include "ui_widget.h"
#include <QLabel>
#include <QPushButton>
//主窗口构造函数
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this); //初始化出.ui界面
//一个格子宽高25像素,地图宽高600像素,每行有24个格子
//设置固定窗口大小
setFixedSize(1000,600);
//设置得分标签控件的属性
ui->label->setFont(QFont("黑体", 20, QFont::Bold, false));
//设置游戏速度标签内容
ui->label_2->setFont(QFont("楷体", 16, QFont::Bold, false));
ui->label_2->setText("游戏速度:");
//滑动条控件,这里将数值按一定比例放大缩小
ui->horizontalSlider->setValue(200 >> 2);
//监听滑动条控件滑动时,改变定时器速度为滑动条的值
connect(ui->horizontalSlider,QSlider::valueChanged,[=]()
{
timerspeed = ui->horizontalSlider->value() << 2;
});
//设置重新开始按钮属性和内容
ui->pushButton_3-