源码素材下载:http://download.csdn.net/download/u011314012/10191968
1、开机界面 第一个按键为开始按键,第二个按键为退出按键,当点击时提示是否退出。
2、点击开始按键时进入游戏界面,游戏的等级和分数可以自己去设置,细节问题,自己可以去调试。
贪吃蛇的难点,就是蛇的移动,与绘制蛇身蛇尾。代码里面有备注。
main.cpp
#include "mainwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mainWidget w;
w.show();
return a.exec();
}
mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include <QIcon>
#include <QPalette> //调色板
#include <QBrush> //笔刷
#include <QPixmap>
#include <QPushButton>
#include <QMessageBox>
#include "gamewidget.h"
class mainWidget : public QWidget
{
Q_OBJECT
public:
mainWidget(QWidget *parent = 0);
~mainWidget();
/*只能在类的成员函数中访问*/
private:
QPushButton *startbtn;
QPushButton *exitbtn;
GameWidget *gamewidget; //游戏区
public slots:
void startbtn_click();
void exitbtn_click();
};
#endif // MAINWIDGET_H
mainwidget.cpp
#include "mainwidget.h"
mainWidget::mainWidget(QWidget *parent)
: QWidget(parent)
{
//设置主窗口大小
this->resize (480, 310);
//设置标题
this->setWindowIcon (QIcon("img/icon.png"));
this->setWindowTitle (tr("贪吃蛇"));
//设置背景色(并且对图片进行缩放)
QPalette palette;
palette.setBrush (QPalette::Background, QBrush(QPixmap("img/back.jpg").scaled (this->size ())));
this->setPalette (palette);
startbtn = new QPushButton(this);
//开始按钮图标
startbtn->setIcon (QIcon("img/start.png"));
startbtn->setIconSize (QSize(80, 80));
//设置按键的坐标x, y, w, h
startbtn->setGeometry (QRect(250, 190, 72, 72));
//消除按钮的边框
startbtn->setFlat (true);
exitbtn = new QPushButton(this);
//退出按钮图标
exitbtn->setIcon (QIcon("img/quit.png"));
exitbtn->setIconSize (QSize(70, 70));
//设置按钮的坐标x, y, w, h
exitbtn->setGeometry (QRect(350, 190, 70, 70));
//消除按钮的边框
exitbtn->setFlat (true);
this->connect(startbtn, SIGNAL(clicked(bool)), this, SLOT(startbtn_click()));
this->connect (exitbtn, SIGNAL(clicked(bool)), this, SLOT(exitbtn_click()));
}
/*对象消耗完自动调用析构函数*/
mainWidget::~mainWidget()
{
/*释放空间防止内存泄露*/
delete startbtn;
delete exitbtn;
}
/*按键控制开始函数*/
void mainWidget::startbtn_click ()
{
gamewidget = new GameWidget(this);
gamewidget->show ();
}
/*按键控制退出函数*/
void mainWidget::exitbtn_click ()
{
/*静态成员函数,可以用::直接引用*/
if(QMessageBox::question (this, tr("提示"), tr("您是否要退出?"),
QMessageBox::Ok | QMessageBox::Yes) == QMessageBox::Yes)
{
delete this; //释放自己的资源
exit(0);
}
}
gamewidget.h
#ifndef GAMEWIDGET_H
#define GAMEWIDGET_H
#include <QWidget>
#include <QWidget>
#include <QIcon>
#include <QPalette> //调色板
#include <QBrush> //笔刷
#include <QPixmap>
#include <QPushButton>
#include <QPainter> //引用画笔
#include <QPaintEvent>
#include <QImage>
#include <QTimer>
#include <QMessageBox>
#include <QLineEdit>
#include <QLabel>
#include <QFont>
#include <QInputDialog>
class GameWidget : public QWidget
{
Q_OBJECT
public:
explicit GameWidget(QWidget *parent = 0);
//重载虚函数
void paintEvent(QPaintEvent *);
private:
QLabel *score_label;
QLabel *level_label;
QLineEdit *score_lineEdit;
QLineEdit *level_lineEdit;
QPushButton *leftbtn;
QPushButton *rightbtn;
QPushButton *upbtn;
QPushButton *downbtn;
QPushButton *startbtn;
QPushButton *returnbtn;
QPushButton *stopbtn;
QPushButton *gameoverbtn;
QFont ft;
int direction; //蛇移动的方向
//画食物