目录
代码思路
玩法
具体代码
main.cpp(主函数)
widget.h
mainwindows.h
widget.cpp(主界面)
mainwindows.cpp(游戏界面)
代码思路
将整个工程分为两个类,一个类实现主界面,另一个类实现一种游戏模式。
玩法
本游戏内容单词均为QT常用类和方法,数据类型等词汇。
玩法:
在规定时间内,根据左边文本框的单词,在右边文本框中输入相同的单词即可发射子弹将僵尸消灭,尽量在僵尸碰到植物前,将子弹发射出去。
main.cpp(主函数)
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QLabel>
#include "mainwindow.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
QSqlDatabase db;
// int num;
~Widget();
private slots:
void pushButton_clicked();
void pushButton_2_clicked();
void pushButton_3_clicked();
void pushButton_4_clicked();
void pushButton_5_clicked();
void insert_into();
private:
Ui::Widget *ui;
QWidget *wid;
QWidget *widget;
QLineEdit *li;
QLabel *li1;
QPushButton *bt;
QHBoxLayout *hbox;
};
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include "widget.h"
#include <QKeyEvent>
#include <QSqlQuery>
#include <QPixmap>
#include <QRect>
#include <QLabel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
QTimer *t;
QTimer *t1;
QTimer *t2;
~MainWindow();
void keyPressEvent(QKeyEvent *event);
QPixmap bullet;
QRect rect;
public slots:
void on_pushButton_3_clicked();
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void update_value();
void map_move();
void map_move1();
private:
Ui::MainWindow *ui;
QWidget *widg;
QLabel *lb;
QWidget *widg1;
QLabel *lb1;
int val;
int data;
int x_pos;
int y_pos;
int x_pos1;
int xpos;
int ypos;
int xpos1;
};
#endif // MAINWINDOW_H
widget.cpp(主界面)
#include "widget.h"
#include "ui_widget.h"
#include "mainwindow.h"
#include <QPainter>
#include <QSqlQuery>
#include <QDebug>
#include <QPushButton>
#include <QHBoxLayout>
#include <QProcess>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
wid = new QWidget;
wid->setMaximumSize(250,30);
wid->hide();
li = new QLineEdit;
bt = new QPushButton("添加");
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addWidget(li);
hbox->addWidget(bt);
wid->setLayout(hbox);
//设置背景
QPalette PAllbackground = this->palette();
QImage ImgAllbackground(":/980.jfif");
QImage fitimgpic=ImgAllbackground.scaled(this->width(),this->height(), Qt::IgnoreAspectRatio);
PAllbackground.setBrush(QPalette::Window, QBrush(fitimgpic));
this->setPalette(PAllbackground);
//创建数据库
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("word.db");
bool ok = db.open();
//创建单词库
QString str("create table word(word);");
QSqlQuery query;
query.exec(str);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(pushButton_clicked()));
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(pushButton_2_clicked()));
connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(pushButton_3_clicked()));
connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(pushButton_4_clicked()));
connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(pushButton_5_clicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::pushButton_clicked()
{
//普通模式
MainWindow *wi = new MainWindow;
wi->show();
this->close();
}
void Widget::pushButton_2_clicked()
{
//无尽模式
widget = new QWidget;
widget->show();
li1 = new QLabel("暂未开放");
QHBoxLayout *hbox1 = new QHBoxLayout;
hbox1->addWidget(li1);
widget->setLayout(hbox1);
li1->setAlignment(Qt::AlignCenter);
}
void Widget::pushButton_3_clicked()
{
//退出游戏
close();
}
void Widget::pushButton_4_clicked()
{
//说明
QProcess *p = new QProcess;
p->execute("notepad.exe 1.txt");
}
void Widget::pushButton_5_clicked()
{
//添加
wid->show();
connect(bt,SIGNAL(clicked()),this,SLOT(insert_into()));
}
void Widget::insert_into()
{
//向入据库中加入一条信息
QString str1 = QString("insert into word values('%0');").arg(li->text());
qDebug() << li->text();
qDebug() << str1;
QSqlQuery query1;
query1.exec(str1);
QString st = QString("SELECT DISTINCT * FROM WORD;");
QSqlQuery query2;
query2.exec(st);
if(query2.exec()){
while(query2.next()){
qDebug() << query2.value(0).toString();
}
}
wid->hide();
}
mainwindows.cpp(游戏界面)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "widget.h"
#include <QSqlQuery>
#include <QMovie>
#include <QTimer>
#include <QDebug>
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
widg = new Widget;
widg->hide();
//设置背景
QPalette PAllbackground = this->palette();
QImage ImgAllbackground(":/f72.jpg");
QImage fitimgpic=ImgAllbackground.scaled(this->width(),this->height(), Qt::IgnoreAspectRatio);
PAllbackground.setBrush(QPalette::Window, QBrush(fitimgpic));
this->setPalette(PAllbackground);
//设置图片标签
ui->label->setMinimumSize(40,40);
ui->label->setScaledContents(true);
ui->label->setStyleSheet("QLabel {background-color: transparent;}");
ui->label->setAttribute (Qt::WA_TranslucentBackground);
// ui->label->setPixmap(QPixmap(":/86.jfif"));
QMovie *m = new QMovie(":/87.gif");
ui->label->setMovie(m);
m->start();
ui->label_2->setMinimumSize(40,40);
ui->label_2->setScaledContents(true);
// ui->label_2->setPixmap(QPixmap(":/84.gif"));
QMovie *m1 = new QMovie(":/84.gif");
ui->label_2->setMovie(m1);
m1->start();
ui->label_3->hide();
// lb->setStyleSheet("QLabel{border-image: url(:/0x300a0a0.png);}");
ui->label_3->setStyleSheet("QLabel{background-color: transparent;}");
ui->label_3->setAttribute (Qt::WA_TranslucentBackground);
ui->label_3->setScaledContents(true);
ui->label_3->setPixmap(QPixmap(":/bmw-69319.png"));
ui->label_3->setMaximumSize(20,20);
x_pos1 = ui->label_2->pos().x();
y_pos = ui->label_2->pos().y();
x_pos = x_pos1;
xpos1 = ui->label_3->pos().x();
ypos = ui->label_3->pos().y();
xpos = xpos1;
t = new QTimer;
t1 = new QTimer;
t2 = new QTimer;
connect(t, SIGNAL(timeout()), this, SLOT(update_value()));
connect(t1, SIGNAL(timeout()), this, SLOT(map_move()));
connect(t2, SIGNAL(timeout()), this, SLOT(map_move1()));
data = 0;
val = 2;
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(on_pushButton_2_clicked()));
connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(on_pushButton_3_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_3_clicked()
{
//开始
t->start(1000);
t1->start(100);
x_pos = x_pos1;
xpos = xpos1;
ui->label_2->move(x_pos,y_pos);
ui->label_3->move(xpos,ypos);
//去数据库中查询一条信息
QString str = QString("select word from word where word = 'widget' ;");
QSqlQuery query;
query.exec(str);
if(query.exec())
{
if(query.next())
ui->lineEdit->setText(query.value(0).toString());
}
qDebug() << str;
qDebug() << query.value(0).toString();
}
void MainWindow::on_pushButton_clicked()
{
//暂停
t->stop();
t1->stop();
}
void MainWindow::on_pushButton_2_clicked()
{
//退出
widg->show();
delete this;
}
void MainWindow::update_value()
{
ui->lcdNumber->display(data);
data++ ;
if(11 == data)
{
data = 0;
t->stop();
t1->stop();
}
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
qDebug() << "键盘按下事件" << event->key();
if(event->key() == Qt::Key_Return )
{
QString str1 = ui->lineEdit->text();
QString str2 = ui->lineEdit_2->text();
if(str1 == str2)
{
ui->label_3->show();
data = 0;
t2->start(100);
str2 = nullptr;
ui->lineEdit_2->setText(str2);
// qDebug() << ui->lineEdit->text();
// qDebug() << ui->lineEdit_2->text();
QString str = QString("SELECT DISTINCT * FROM WORD ;");
QSqlQuery query;
query.exec(str);
if(query.exec())
{
int i = 0;
while(query.next())
{
qDebug() << query.value(0).toString();
i++;
if(i == val)
{
ui->lineEdit->setText(query.value(0).toString());
val++;
break;
}
}
}
}
}
}
void MainWindow::map_move()
{
x_pos -= 2;
// xpos += 3;
ui->label_2->move(x_pos,y_pos);
ui->label_3->move(xpos,ypos);
if(x_pos <= xpos + 20)
{
ui->label_3->hide();
x_pos = x_pos1;
xpos = xpos1;
t2->stop();
ui->label_2->move(x_pos,y_pos);
ui->label_3->move(xpos,ypos);
widg1 = new QWidget ;
widg1->show();
lb1 = new QLabel("游戏结束");
lb1->setAlignment(Qt::AlignCenter);
QHBoxLayout *hbox1 = new QHBoxLayout;
hbox1->addWidget(lb1);
widg1->setLayout(hbox1);
}
}
void MainWindow::map_move1()
{
xpos += 3;
}