小编最为边缘计算机专业的大学生,最近涉及了一下Qt技术,特意记下来学习心得和大家分享。
Qt技术作为C 的一个扩展是十分强大的,它不仅仅是一个C 库,它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。这次小编就简单写了一个GUI程序,为了致敬经典,选择了贪吃蛇小游戏。
好了,话不多说,上干货。
1、首先是两个头文件,mainWidget.h文件和GameWidget.h文件
#ifndef MAINWIDGET_H
#include <QLabel>
#include <QFont>
class mainWidget : public QWidget
{
Q_OBJECT
public:
mainWidget(QWidget *parent = 0);
~mainWidget();
//void resizeEvent(QResizeEvent *);
private:
QPushButton *startbtn;
QPushButton *exitbtn;
GameWidget *g;
QLabel *label;
signals:
public slots:
void exitSlot();
void startSlot();
};
#endif // MAINWIDGET_H
class GameWidget : public QWidget
{
Q_OBJECT
public:
explicit GameWidget(QWidget *parent = 0);
~GameWidget();
void paintEvent(QPaintEvent *);
void keyPressEvent(QKeyEvent *);
private:
QPushButton *upbtn;
QPushButton *leftbtn;
QPushButton *downbtn;
QPushButton *rightbtn;
QPushButton *startbtn;
QPushButton *returnbtn;
int direction;
int snake[100][2];
int snake1[100][2];
int foodcount;
QTimer *timer;
int foodx,foody;
int score;
int level;
QLabel *scorelabel;
QLabel *levellabel;
QLabel *scoreshow;
QLabel *levelshow;
QString str1,str2;
QSound *sound;
QSound *sound1;
signals:
void UpSignal();
void DownSignal();
void LeftSignal();
void RightSignal();
public slots:
void upbtnSlot();
void startbtnSlot();
void returnbtnSlot();
void timeoutSlot();
};
#endif // GAMEWIDGET_H
2、接下来是三个源文件,GameWidget.cpp、main.cpp、mainWidget.cpp
#include \”GameWidget.h\”
#define LEFT 2
#define RIGHT 3
GameWidget::GameWidget(QWidget *parent) : QWidget(parent)
{
this->setAutoFillBackground(true);
this->setWindowTitle(\”Game Start\”);
this->setWindowIcon(QIcon(\”:/new/prefix1/img/1.png\”));
QPalette palette;
palette.setBrush(QPalette::Background,QBrush(QPixmap(\”:/new/prefix1/img/green.jpg\”).scaled(this->size())));
this->setPalette(palette);
//声音区
sound=new QSound(\”:/listen/img/5611.wav\”);
sound1=new QSound(\”:/listen/img/die.wav\”);
//按钮区
upbtn=new QPushButton(\”↑\”,this);
rightbtn=new QPushButton(\”→\”,this);
rightbtn->setGeometry(QRect(420,130,40,30));
downbtn=new QPushButton(\”↓\”,this);
downbtn->setGeometry(QRect(380,170,40,30));
startbtn=new QPushButton(\”开始\”,this);
startbtn->setGeometry(QRect(350,220,40,30));
returnbtn=new QPushButton(\”返回\”,this);
returnbtn->setGeometry(QRect(410,220,40,30));
//设置分数等级为0
score=0;
level=0;
//显示分数等级标签区
QFont font;
font.setFamily(\”Consolas\”);
font.setBold(true);
font.setPixelSize(19);
//判断蛇是否撞到自身
for(int i=1;i<=foodcount;i )
{
if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1])
{
sound1->play();
memcpy(snake,snake1,sizeof(snake));
timer->stop();
//判断蛇是否撞到墙体
if(snake[0][0]<0||snake[0][0]>=COL||snake[0][1]<0||snake[0][1]>=ROW)
{
sound1->play();
memcpy(snake,snake1,sizeof(snake));
timer->stop();
if(QMessageBox::question(this,\”提示\”,\”游戏结束,是否重新游戏\”,QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes)
{
QTime t;
int i;
}
this->update();
}
#include \”mainWidget.h\”
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mainWidget w;
w.show();
return a.exec();
}
mainWidget::~mainWidget()
{
delete startbtn;
delete exitbtn;
}
void mainWidget::exitSlot()
{
if(QMessageBox::question(this,\”退出游戏\”,\”是否退出当前游戏\”,QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
{
delete this;
exit(0);
}
}
void mainWidget::startSlot()
{
g=new GameWidget(this);
g->show();
}
剩下的就是一些资源文件了,在这里就不一一解释了。
看一下完成图。
开始页面
游戏主页面
提示页面
这个小程序用到的算法不是很多,但是涉及的Qt知识还是比较多的,初次分享Qt知识,大神看见轻点喷。T
想要完整源代码小伙伴们评论区哟,请关注“包火火工作室”。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。