From 6f894cb9b1aa593cb28a39b73ce6f27f34b9481f Mon Sep 17 00:00:00 2001 From: flykhan Date: Thu, 29 Jun 2023 10:12:24 +0800 Subject: [PATCH] =?UTF-8?q?day12=20coding=20Qt=E4=BD=9C=E4=B8=9A:=E7=8C=9C?= =?UTF-8?q?=E6=8B=B3(=E6=94=B9bug=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day12/rock-paper-scissors/mainwidget.cpp | 84 ++++++++++++++---------- day12/rock-paper-scissors/mainwidget.h | 6 +- 2 files changed, 52 insertions(+), 38 deletions(-) diff --git a/day12/rock-paper-scissors/mainwidget.cpp b/day12/rock-paper-scissors/mainwidget.cpp index 2608d71..34a3ec0 100755 --- a/day12/rock-paper-scissors/mainwidget.cpp +++ b/day12/rock-paper-scissors/mainwidget.cpp @@ -7,24 +7,31 @@ MainWidget::MainWidget(QWidget *parent) { 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)); // 随时间变化的随机种子 -// randNum = rand() % 3; // 在 0-2 之间随机取值 timer = new QTimer(); + connect(timer,&QTimer::timeout,[&](){ + randNum = rand() % 3; // 在 0-2 之间随机取值 + QPixmap nowImg = switchImgs(randNum); // 根据当前的随机值加载图片 + ui->randImgsLable->setPixmap(nowImg); // 将当前随机值对应的图片设置到主界面 - - - - - - - - + // 调试信息 + qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<randImgsLable->setPixmap(nowImg); // 将当前随机值对应的图片设置到主界面 - // 调试信息 - qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<start(0.05*1000); // 50ms // 更新游戏次数 @@ -55,30 +54,33 @@ QPixmap MainWidget::switchImgs(int randNum) { switch (randNum) { case rock: - randImg = new QPixmap(":/imgs/rock"); // 随机数为 0 时, 加载拳头 + return *rockImg; // 随机数为 0 时, 加载拳头 break; case paper: - randImg = new QPixmap(":/imgs/paper"); // 随机数为 1 时, 加载布 + return *paperImg; // 随机数为 1 时, 加载布 break; case scissors: - randImg = new QPixmap(":/imgs/scissors"); // 随机数为 2 时, 加载剪刀 + return *scissorsImg; // 随机数为 2 时, 加载剪刀 break; default: - randImg = new QPixmap(":/imgs/paper"); // 默认加载布 + return *paperImg; // 默认加载布 break; } - - return *randImg; } void MainWidget::on_rockBtn_clicked() { + // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 + if(timer->isActive() == false){ + return; + } + timer->stop(); // 随机数生成的计数器停止 playerInputNum = rock; // 玩家出拳 - // 电脑不出“布”, 则玩家加 10 分, 否则减 3 分 - if(randNum != paper){ + // 则玩家赢加 10 分, 输减 3 分, 平局不得分 + if(randNum == scissors){ currentScore+=10; - } else { + } else if(randNum == paper) { currentScore-=3; } @@ -92,12 +94,17 @@ void MainWidget::on_rockBtn_clicked() void MainWidget::on_paperBtn_clicked() { + // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 + if(timer->isActive() == false){ + return; + } + timer->stop(); // 随机数生成的计数器停止 playerInputNum = paper; // 玩家出布 - // 电脑不出“剪刀”, 则玩家加 10 分, 否则减 3 分 - if(randNum != scissors){ + // 则玩家赢加 10 分, 输减 3 分, 平局不得分 + if(randNum == rock){ currentScore+=10; - } else { + } else if(randNum == scissors) { currentScore-=3; } @@ -111,12 +118,17 @@ void MainWidget::on_paperBtn_clicked() void MainWidget::on_scissorsBtn_clicked() { + // 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作 + if(timer->isActive() == false){ + return; + } + timer->stop(); // 随机数生成的计数器停止 playerInputNum = scissors; // 玩家出剪刀 - // 电脑不出“拳”, 则玩家加 10 分, 否则减 3 分 - if(randNum != rock){ + // 则玩家赢加 10 分, 输减 3 分, 平局不得分 + if(randNum == paper){ currentScore+=10; - } else { + } else if(randNum == rock) { currentScore-=3; } @@ -130,16 +142,16 @@ void MainWidget::on_scissorsBtn_clicked() void MainWidget::on_clearBtn_clicked() { + timer->stop(); // 随机数生成的计数器停止 + // 统计数据重置为 0 currentScore = 0; numsOfGame = 0; - timer->stop(); // 随机数生成的计数器停止 - // 更新游戏次数 - ui->numsOfGameLable->setText("游戏次数: " + QString::number(numsOfGame)); + ui->numsOfGameLable->setText("游戏次数: "); // 更新计分板 - ui->currentScoreLable->setText("当前得分: " + QString::number(currentScore)); + ui->currentScoreLable->setText("当前得分: "); // 调试信息 qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<