用Qt creater写一个翻硬币的游戏
时间: 2023-05-26 13:07:11 浏览: 129
本游戏有两枚硬币,一面是正面,另一面是反面,玩家每次可以翻转一枚或两枚硬币,目标是将两枚硬币都翻成正面。当玩家翻转硬币时,游戏会随机翻转硬币,让玩家猜测哪个硬币是正面,哪个硬币是反面。
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr); //MainWindow构造函数
~MainWindow(); //MainWindow析构函数
private slots:
void on_pushButton_1_clicked(); //点击按钮1
void on_pushButton_2_clicked(); //点击按钮2
private:
Ui::MainWindow *ui;
QPushButton *pushButton_1;
QPushButton *pushButton_2;
bool coin_1; //硬币1的状态
bool coin_2; //硬币2的状态
void updateCoins(); //更新硬币状态
void checkWin(); //检查游戏是否获胜
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <stdlib.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 初始化硬币状态
coin_1 = false;
coin_2 = false;
// 创建按钮1
pushButton_1 = new QPushButton(this);
pushButton_1->setGeometry(150, 80, 80, 80);
pushButton_1->setIcon(QIcon(":/images/coin.png"));
pushButton_1->setIconSize(QSize(80, 80));
pushButton_1->setFlat(true);
// 创建按钮2
pushButton_2 = new QPushButton(this);
pushButton_2->setGeometry(270, 80, 80, 80);
pushButton_2->setIcon(QIcon(":/images/coin.png"));
pushButton_2->setIconSize(QSize(80, 80));
pushButton_2->setFlat(true);
// 连接按钮1的点击信号槽
connect(pushButton_1, SIGNAL(clicked()), this, SLOT(on_pushButton_1_clicked()));
// 连接按钮2的点击信号槽
connect(pushButton_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_1_clicked()
{
coin_1 = !coin_1; // 翻转硬币1
updateCoins(); // 更新硬币状态
checkWin(); // 检查游戏是否获胜
}
void MainWindow::on_pushButton_2_clicked()
{
coin_2 = !coin_2; // 翻转硬币2
updateCoins(); // 更新硬币状态
checkWin(); // 检查游戏是否获胜
}
void MainWindow::updateCoins()
{
// 随机翻转硬币
int random = rand() % 2;
coin_1 = (coin_1 && random) || (!coin_1 && !random);
random = rand() % 2;
coin_2 = (coin_2 && random) || (!coin_2 && !random);
// 更新硬币图标
if (coin_1) {
pushButton_1->setIcon(QIcon(":/images/coin_head.png"));
} else {
pushButton_1->setIcon(QIcon(":/images/coin_tail.png"));
}
if (coin_2) {
pushButton_2->setIcon(QIcon(":/images/coin_head.png"));
} else {
pushButton_2->setIcon(QIcon(":/images/coin_tail.png"));
}
}
void MainWindow::checkWin()
{
// 游戏获胜
if (coin_1 && coin_2) {
QMessageBox::information(this, "Congratulations", "You win!");
coin_1 = false;
coin_2 = false;
updateCoins(); // 显示硬币反面
}
}
注:需要在项目中添加coin.png,coin_head.png和coin_tail.png三张图片
程序界面如下:
玩家可以点击硬币翻转,游戏会随机翻转硬币。当两枚硬币都翻转为正面时,游戏结束,弹出提示信息“Congratulations,You win!”。
阅读全文