Qt C++制作贪吃蛇游戏(在Qt5.4.2可以正常运行)

源码素材下载: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;  //蛇移动的方向
 
    //画食物
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值