day12 coding Qt作业:猜拳(改bug,优化代码)
This commit is contained in:
parent
de36ac8b3c
commit
6f894cb9b1
|
@ -7,24 +7,31 @@ MainWidget::MainWidget(QWidget *parent)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
rockImg = new QPixmap(":/imgs/rock"); // 随机数为 0 时, 加载拳头
|
||||||
|
paperImg = new QPixmap(":/imgs/paper"); // 随机数为 1 时, 加载布
|
||||||
|
scissorsImg = new QPixmap(":/imgs/scissors"); // 随机数为 2 时, 加载剪刀
|
||||||
|
|
||||||
// 电脑初始化时加载的图片
|
// 电脑初始化时加载的图片
|
||||||
QPixmap firstImg;
|
QPixmap firstImg;
|
||||||
firstImg.load(":/imgs/scissors");
|
firstImg.load(":/imgs/scissors");
|
||||||
ui->randImgsLable->setPixmap(firstImg);
|
ui->randImgsLable->setPixmap(firstImg);
|
||||||
|
|
||||||
|
// 初始化计分板数据
|
||||||
|
numsOfGame = 0;
|
||||||
|
currentScore = 0;
|
||||||
|
|
||||||
// 随机函数定义
|
// 随机函数定义
|
||||||
srand(time(NULL)); // 随时间变化的随机种子
|
srand(time(NULL)); // 随时间变化的随机种子
|
||||||
// randNum = rand() % 3; // 在 0-2 之间随机取值
|
|
||||||
timer = new QTimer();
|
timer = new QTimer();
|
||||||
|
connect(timer,&QTimer::timeout,[&](){
|
||||||
|
randNum = rand() % 3; // 在 0-2 之间随机取值
|
||||||
|
QPixmap nowImg = switchImgs(randNum); // 根据当前的随机值加载图片
|
||||||
|
ui->randImgsLable->setPixmap(nowImg); // 将当前随机值对应的图片设置到主界面
|
||||||
|
|
||||||
|
// 调试信息
|
||||||
|
qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<<randNum
|
||||||
|
<<", playerInputNum: "<<playerInputNum<<endl;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWidget::~MainWidget()
|
MainWidget::~MainWidget()
|
||||||
|
@ -36,15 +43,7 @@ MainWidget::~MainWidget()
|
||||||
void MainWidget::on_startGameBtn_clicked()
|
void MainWidget::on_startGameBtn_clicked()
|
||||||
{
|
{
|
||||||
numsOfGame++;
|
numsOfGame++;
|
||||||
connect(timer,&QTimer::timeout,[&](){
|
|
||||||
randNum = rand() % 3; // 在 0-2 之间随机取值
|
|
||||||
QPixmap nowImg = switchImgs(randNum); // 根据当前的随机值加载图片
|
|
||||||
ui->randImgsLable->setPixmap(nowImg); // 将当前随机值对应的图片设置到主界面
|
|
||||||
|
|
||||||
// 调试信息
|
|
||||||
qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<<randNum
|
|
||||||
<<", playerInputNum: "<<playerInputNum<<endl;
|
|
||||||
});
|
|
||||||
timer->start(0.05*1000); // 50ms
|
timer->start(0.05*1000); // 50ms
|
||||||
|
|
||||||
// 更新游戏次数
|
// 更新游戏次数
|
||||||
|
@ -55,30 +54,33 @@ QPixmap MainWidget::switchImgs(int randNum)
|
||||||
{
|
{
|
||||||
switch (randNum) {
|
switch (randNum) {
|
||||||
case rock:
|
case rock:
|
||||||
randImg = new QPixmap(":/imgs/rock"); // 随机数为 0 时, 加载拳头
|
return *rockImg; // 随机数为 0 时, 加载拳头
|
||||||
break;
|
break;
|
||||||
case paper:
|
case paper:
|
||||||
randImg = new QPixmap(":/imgs/paper"); // 随机数为 1 时, 加载布
|
return *paperImg; // 随机数为 1 时, 加载布
|
||||||
break;
|
break;
|
||||||
case scissors:
|
case scissors:
|
||||||
randImg = new QPixmap(":/imgs/scissors"); // 随机数为 2 时, 加载剪刀
|
return *scissorsImg; // 随机数为 2 时, 加载剪刀
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
randImg = new QPixmap(":/imgs/paper"); // 默认加载布
|
return *paperImg; // 默认加载布
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *randImg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::on_rockBtn_clicked()
|
void MainWidget::on_rockBtn_clicked()
|
||||||
{
|
{
|
||||||
|
// 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作
|
||||||
|
if(timer->isActive() == false){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
timer->stop(); // 随机数生成的计数器停止
|
timer->stop(); // 随机数生成的计数器停止
|
||||||
playerInputNum = rock; // 玩家出拳
|
playerInputNum = rock; // 玩家出拳
|
||||||
// 电脑不出“布”, 则玩家加 10 分, 否则减 3 分
|
// 则玩家赢加 10 分, 输减 3 分, 平局不得分
|
||||||
if(randNum != paper){
|
if(randNum == scissors){
|
||||||
currentScore+=10;
|
currentScore+=10;
|
||||||
} else {
|
} else if(randNum == paper) {
|
||||||
currentScore-=3;
|
currentScore-=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,12 +94,17 @@ void MainWidget::on_rockBtn_clicked()
|
||||||
|
|
||||||
void MainWidget::on_paperBtn_clicked()
|
void MainWidget::on_paperBtn_clicked()
|
||||||
{
|
{
|
||||||
|
// 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作
|
||||||
|
if(timer->isActive() == false){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
timer->stop(); // 随机数生成的计数器停止
|
timer->stop(); // 随机数生成的计数器停止
|
||||||
playerInputNum = paper; // 玩家出布
|
playerInputNum = paper; // 玩家出布
|
||||||
// 电脑不出“剪刀”, 则玩家加 10 分, 否则减 3 分
|
// 则玩家赢加 10 分, 输减 3 分, 平局不得分
|
||||||
if(randNum != scissors){
|
if(randNum == rock){
|
||||||
currentScore+=10;
|
currentScore+=10;
|
||||||
} else {
|
} else if(randNum == scissors) {
|
||||||
currentScore-=3;
|
currentScore-=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,12 +118,17 @@ void MainWidget::on_paperBtn_clicked()
|
||||||
|
|
||||||
void MainWidget::on_scissorsBtn_clicked()
|
void MainWidget::on_scissorsBtn_clicked()
|
||||||
{
|
{
|
||||||
|
// 当计数器状态为 false, 即计时器当前已经是 stop 状态时, 点击当前按钮时, 直接返回, 不进行其他逻辑操作
|
||||||
|
if(timer->isActive() == false){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
timer->stop(); // 随机数生成的计数器停止
|
timer->stop(); // 随机数生成的计数器停止
|
||||||
playerInputNum = scissors; // 玩家出剪刀
|
playerInputNum = scissors; // 玩家出剪刀
|
||||||
// 电脑不出“拳”, 则玩家加 10 分, 否则减 3 分
|
// 则玩家赢加 10 分, 输减 3 分, 平局不得分
|
||||||
if(randNum != rock){
|
if(randNum == paper){
|
||||||
currentScore+=10;
|
currentScore+=10;
|
||||||
} else {
|
} else if(randNum == rock) {
|
||||||
currentScore-=3;
|
currentScore-=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,16 +142,16 @@ void MainWidget::on_scissorsBtn_clicked()
|
||||||
|
|
||||||
void MainWidget::on_clearBtn_clicked()
|
void MainWidget::on_clearBtn_clicked()
|
||||||
{
|
{
|
||||||
|
timer->stop(); // 随机数生成的计数器停止
|
||||||
|
|
||||||
// 统计数据重置为 0
|
// 统计数据重置为 0
|
||||||
currentScore = 0;
|
currentScore = 0;
|
||||||
numsOfGame = 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: "<<randNum
|
qDebug() << "numsOfGame: " << numsOfGame <<", randNum: "<<randNum
|
||||||
|
|
|
@ -28,10 +28,12 @@ private:
|
||||||
int randNum; // 电脑出招映射的随机数 0, 1, 2
|
int randNum; // 电脑出招映射的随机数 0, 1, 2
|
||||||
int playerInputNum; // 玩家点击的按钮映射的数值 0, 1, 2
|
int playerInputNum; // 玩家点击的按钮映射的数值 0, 1, 2
|
||||||
QTimer *timer; // 计时器
|
QTimer *timer; // 计时器
|
||||||
QPixmap *randImg; // 随机的电脑出招图片
|
// QPixmap *randImg; // 随机的电脑出招图片
|
||||||
int numsOfGame; // 游戏次数
|
int numsOfGame; // 游戏次数
|
||||||
int currentScore; // 当前得分
|
int currentScore; // 当前得分
|
||||||
|
QPixmap *rockImg; // 拳头
|
||||||
|
QPixmap *paperImg; // 布
|
||||||
|
QPixmap *scissorsImg; // 剪刀
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 定义枚举: 0-拳、1-布、2-剪刀
|
// 定义枚举: 0-拳、1-布、2-剪刀
|
||||||
|
|
Loading…
Reference in New Issue