#include "mainwidget.h" #include "ui_mainwidget.h" MainWidget::MainWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MainWidget) { ui->setupUi(this); rockImg = new QPixmap(":/imgs/rock"); // 随机数为 0 时, 加载拳头 paperImg = new QPixmap(":/imgs/paper"); // 随机数为 1 时, 加载布 scissorsImg = new QPixmap(":/imgs/scissors"); // 随机数为 2 时, 加载剪刀 // 电脑初始化时加载的图片 QPixmap firstImg; firstImg.load(":/imgs/scissors"); ui->randImgsLable->setPixmap(firstImg); // 初始化计分板数据 numsOfGame = 0; currentScore = 0; // 随机函数定义 srand(time(NULL)); // 随时间变化的随机种子 timer = new QTimer(); connect(timer,&QTimer::timeout,[&](){ randNum = rand() % 3; // 在 0-2 之间随机取值 QPixmap nowImg = switchImgs(randNum); // 根据当前的随机值加载图片 ui->randImgsLable->setPixmap(nowImg); // 将当前随机值对应的图片设置到主界面 // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<start(0.05*1000); // 50ms // 更新游戏次数 ui->numsOfGameLable->setText("游戏次数: " + QString::number(numsOfGame)); } QPixmap MainWidget::switchImgs(int randNum) { switch (randNum) { case rock: return *rockImg; // 随机数为 0 时, 加载拳头 break; case paper: return *paperImg; // 随机数为 1 时, 加载布 break; case scissors: return *scissorsImg; // 随机数为 2 时, 加载剪刀 break; default: return *paperImg; // 默认加载布 break; } } void MainWidget::on_rockBtn_clicked() { // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 if(timer->isActive() == false){ return; } timer->stop(); // 随机数生成的计数器停止 playerInputNum = rock; // 玩家出拳 // 则玩家赢加 10 分, 输减 3 分, 平局不得分 if(randNum == scissors){ currentScore+=10; } else if(randNum == paper) { currentScore-=3; } // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<currentScoreLable->setText("当前得分: " + QString::number(currentScore)); } void MainWidget::on_paperBtn_clicked() { // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 if(timer->isActive() == false){ return; } timer->stop(); // 随机数生成的计数器停止 playerInputNum = paper; // 玩家出布 // 则玩家赢加 10 分, 输减 3 分, 平局不得分 if(randNum == rock){ currentScore+=10; } else if(randNum == scissors) { currentScore-=3; } // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<currentScoreLable->setText("当前得分: " + QString::number(currentScore)); } void MainWidget::on_scissorsBtn_clicked() { // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 if(timer->isActive() == false){ return; } timer->stop(); // 随机数生成的计数器停止 playerInputNum = scissors; // 玩家出剪刀 // 则玩家赢加 10 分, 输减 3 分, 平局不得分 if(randNum == paper){ currentScore+=10; } else if(randNum == rock) { currentScore-=3; } // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<currentScoreLable->setText("当前得分: " + QString::number(currentScore)); } void MainWidget::on_clearBtn_clicked() { timer->stop(); // 随机数生成的计数器停止 // 统计数据重置为 0 currentScore = 0; numsOfGame = 0; // 更新游戏次数 ui->numsOfGameLable->setText("游戏次数: "); // 更新计分板 ui->currentScoreLable->setText("当前得分: "); // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<