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: "<