用qt写一个 完整打地鼠小游戏
时间: 2023-06-16 17:04:05 浏览: 56
好的,下面是一个简单的打地鼠游戏的Qt代码,供您参考:
```cpp
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QLabel>
#include <QtCore/QTimer>
#include <QtCore/QTime>
#include <QtCore/QRandomGenerator>
class MoleGame : public QWidget
{
Q_OBJECT
public:
MoleGame(QWidget *parent = nullptr)
: QWidget(parent)
{
// 初始化游戏界面
setFixedSize(400, 400);
setWindowTitle(tr("打地鼠游戏"));
// 初始化游戏组件
m_scoreLabel = new QLabel(this);
m_scoreLabel->move(10, 10);
m_scoreLabel->setText(tr("得分: 0"));
m_timeLabel = new QLabel(this);
m_timeLabel->move(300, 10);
m_timeLabel->setText(tr("时间: 30s"));
m_startButton = new QPushButton(this);
m_startButton->move(150, 350);
m_startButton->setText(tr("开始游戏"));
// 连接游戏组件的信号槽
connect(m_startButton, &QPushButton::clicked, this, &MoleGame::startGame);
// 初始化游戏状态
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &MoleGame::updateMole);
m_score = 0;
m_timeLeft = 30;
}
private slots:
void startGame()
{
// 开始游戏
m_startButton->setEnabled(false);
m_scoreLabel->setText(tr("得分: 0"));
m_timeLabel->setText(tr("时间: 30s"));
m_score = 0;
m_timeLeft = 30;
m_timer->start(1000);
// 隐藏地鼠
for (int i = 0; i < 9; ++i) {
m_holes[i]->hide();
}
}
void updateMole()
{
// 更新游戏状态
--m_timeLeft;
m_timeLabel->setText(tr("时间: %1s").arg(m_timeLeft));
if (m_timeLeft == 0) {
// 游戏结束
m_timer->stop();
m_startButton->setEnabled(true);
return;
}
// 随机出现地鼠
int holeIndex = QRandomGenerator::global()->bounded(9);
m_holes[holeIndex]->show();
}
void hitMole()
{
// 打中地鼠
++m_score;
m_scoreLabel->setText(tr("得分: %1").arg(m_score));
sender()->hide();
}
protected:
void paintEvent(QPaintEvent *event) override
{
// 绘制游戏背景
QPainter painter(this);
painter.setBrush(QBrush(Qt::green));
painter.drawRect(rect());
// 绘制地鼠洞
for (int i = 0; i < 9; ++i) {
painter.setBrush(QBrush(Qt::black));
painter.drawEllipse(m_holes[i]->pos(), 50, 50);
}
}
void mousePressEvent(QMouseEvent *event) override
{
// 点击地鼠
for (int i = 0; i < 9; ++i) {
if (m_holes[i]->isVisible() && m_holes[i]->geometry().contains(event->pos())) {
hitMole();
break;
}
}
}
private:
QLabel *m_scoreLabel;
QLabel *m_timeLabel;
QPushButton *m_startButton;
QTimer *m_timer;
int m_score;
int m_timeLeft;
QLabel *m_holes[9] = { nullptr };
void initHoles()
{
// 初始化地鼠洞
for (int i = 0; i < 9; ++i) {
m_holes[i] = new QLabel(this);
m_holes[i]->setFixedSize(50, 50);
m_holes[i]->setAlignment(Qt::AlignCenter);
m_holes[i]->setStyleSheet("font-size: 24px; color: white; background-color: brown");
m_holes[i]->hide();
m_holes[i]->move(50 + (i % 3) * 100, 100 + (i / 3) * 100);
connect(m_holes[i], &QLabel::clicked, this, &MoleGame::hitMole);
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MoleGame w;
w.show();
return a.exec();
}
#include "main.moc"
```
该游戏使用了Qt的基本组件,包括`QLabel`、`QPushButton`、`QTimer`和`QPainter`等。在游戏开始后,每秒钟随机出现一个地鼠,玩家需要点击地鼠来得分。游戏时间为30秒,时间到后游戏结束,显示得分和重新开始按钮。