这是第一次用Qt写的有实际意义的小游戏,主要参考资料来自于Qt学习之路(2)和Qt文档,以及网上一些零碎的博客资料,还有很多可以优化的地方,以及一些小bug.
实现功能:蛇的移动会改变自身的颜色,蛇的头部会随着蛇的移动而转动方向,实现了特殊食物和特殊障碍物,以及游戏难度的控制,和游戏登陆界面和结束界面的控制.
[0]:开始界面的设置,为了方便起见,我使用了QtDesigner制作了开始界面,它设置了开始界面的几个按钮,以及按下之后会出现的东西,具体的实现主要是靠一个自己定义的Processcliked()槽函数,它响应所有按钮的点击,并且进行相应的处理.注意::这里涉及到的一个问题是如何判断是哪一个按钮的clicked()的信号呢?方法就是利用Sender()函数获取相应的发送端,然后进行判断.
代码如下:
#ifndef SNAKE_START_DLG_H
#define SNAKE_START_DLG_H
#include <QDialog>
namespace Ui {
class Snake_Start_Dlg;
}
class Snake;
class GameWindow;
class Snake_Start_Dlg : public QDialog
{
Q_OBJECT
public:
explicit Snake_Start_Dlg(QWidget *parent = 0);
~Snake_Start_Dlg();
private slots:
void processcliked();
private:
Ui::Snake_Start_Dlg *ui;
GameWindow* gamewindow;
};
#endif
#include "snake_start_dlg.h"
#include "QPushButton"
#include "qdebug.h"
#include "constant.h"
#include "GameWindow.h"
#include "ui_snake_start_dlg.h"
extern int originalspeed;
Snake_Start_Dlg::Snake_Start_Dlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::Snake_Start_Dlg)
{
ui->setupUi(this);
setWindowTitle(tr("贪吃蛇主界面"));
ui->HelpText->setVisible(false);
ui->selection->setVisible(false);
}
Snake_Start_Dlg::~Snake_Start_Dlg()
{
delete ui;
}
void Snake_Start_Dlg::processcliked()
{
QPushButton* btn =static_cast<QPushButton*>(sender());
if(btn->objectName()=="start")
{
hide();
gamewindow = new GameWindow(this);
gamewindow->show();
}
else if(btn->objectName()=="end")
this->close();
else if(btn->objectName()=="help")
ui->HelpText->s