求改进
  • 板块灌水区
  • 楼主SZXC
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/2/4 15:54
  • 上次更新2025/2/4 20:25:35
查看原帖
求改进
1437065
SZXC楼主2025/2/4 15:54
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cmath>
#include <iomanip>
#include <limits.h> 
using namespace std;
class Timer {
private:
    bool running;
    bool paused;
    clock_t start_time;
    clock_t pause_time;
    double elapsed_time;
public:
    Timer() : running(false), paused(false), elapsed_time(0.0) {}

    void start() {
        if (!running) {
            running = true;
            paused = false;
            start_time = clock();
        }
    }

    void pause() {
        if (running && !paused) {
            paused = true;
            pause_time = clock();
        }
    }

    void resume() {
        if (running && paused) {
            paused = false;
            elapsed_time += (double)(clock() - pause_time) / CLOCKS_PER_SEC;
        }
    }

    void stop() {
        if (running) {
            running = false;
            elapsed_time += (double)(clock() - start_time) / CLOCKS_PER_SEC;
            display();
        }
    }

    void display() const {
        double total_elapsed = elapsed_time;
        if (running && !paused) {
            total_elapsed += (double)(clock() - start_time) / CLOCKS_PER_SEC;
        }

        int hours = int(total_elapsed / 3600);
        total_elapsed -= hours * 3600;
        int minutes = int(total_elapsed / 60);
        total_elapsed -= minutes * 60;
        int seconds = int(total_elapsed);
        int milliseconds = int((total_elapsed - seconds) * 1000);

        cout << "已用时间:"
             << setfill('0') << setw(2) << hours << ":"
             << setw(2) << minutes << ":"
             << setw(2) << seconds << "."
             << setw(3) << milliseconds << endl;
    }

    void reset() {
        running = false;
        paused = false;
        elapsed_time = 0.0;
    }
};
bool getInput(double &answer) {
    cin >> answer;
    if (cin.fail()) {
        cin.clear();
        cin.ignore(INT_MAX, '\n'); // 使用INT_MAX代替numeric_limits<streamsize>::max()
        cout << "输入无效,请重新输入!" << endl;
        return false;
    }
    return true;
}
int score = 0;
int level = 1;
int wrongnum = 0;
int truenum = 0;
int randomInt(int min, int max) {
    return rand() % (max - min + 1) + min;
}

bool checkAnswer(double correct, double input) {
    return fabs(correct - input) < 0.001;
}

void additionLevel() {
    cout << "\n=== 第" << level << "关:加法挑战 ===" << endl;
    for (int i = 0; i < 10; ++i) {
        int a = randomInt(10 * level, 50 * level);
        int b = randomInt(10 * level, 50 * level);
        cout << a << " + " << b << " = ? ";
        
        double answer;
        while (!getInput(answer)) {}

        if (checkAnswer(a + b, answer)) {
            cout << "正确!\n";
            score += 10;
            truenum++;
        } else {
            cout << "错误!正确答案是:" << a + b << endl;
            wrongnum++;
        }
    }
}
void fractionLevel() {
    cout << "\n=== 第" << level << "关:分数运算 ===" << endl;
    for (int i = 0; i < 10; ++i) {
        int numerator1 = randomInt(1, 5 * level);
        int denominator1 = randomInt(2, 5 * level);
        int numerator2 = randomInt(1, 5 * level);
        int denominator2 = randomInt(2, 5 * level);
        
        cout << "(" << numerator1 << "/" << denominator1 << ") + ("
             << numerator2 << "/" << denominator2 << ") = ? ";
        
        double correct = (numerator1*1.0/denominator1) + (numerator2*1.0/denominator2);
        double answer;
        cin >> answer;
        if (checkAnswer(correct, answer)) {
            cout << "正确!\n";
            score += 15;
            truenum++;
        } else {
            cout << "错误!正确答案是:" << correct << endl;
            wrongnum++;
        }
    }
}
void equationLevel() {
    cout << "\n=== 第" << level << "关:解方程 ===" << endl;
    for (int i = 0; i < 10; ++i) {
        int x = randomInt(1, 10); // 随机生成解
        int a = randomInt(1, 3 + level);
        int b = randomInt(5 * level, 10 * level);
        int right_side = a * x + b;
        
        cout << a << "x + " << b << " = " << right_side << ",求x的值:";
        
        double answer;
        while (!getInput(answer)) {}

        if (checkAnswer(x, answer)) {
            cout << "正确!\n";
            score += 20;
            truenum++;
        } else {
            cout << "错误!正确答案是:" << x << endl;
            wrongnum++;
        }
    }
}
int main() {
    srand(time(0));
    Timer timer;
    timer.start();
    cout << "======== 数学大通关 ========\n";
    cout << "规则:\n";
    cout << "1. 通过3关即可获胜\n";
    cout << "2. 每个关卡有10道题\n";
    while (level <= 3) {
        cout << "\n当前得分:" << score  << " 关卡:" << level << endl;
        switch(level) {
            case 1:
                additionLevel();
                break;
            case 2:
                fractionLevel();
                break;
            case 3:
                equationLevel();
                break;
        }
        cout << "\n对了" << truenum << "题!\n";
        cout << "\n错了" << wrongnum << "题!\n";
        level++;
    }
    timer.stop();
    if (level > 3) {
        cout << " 恭喜你通关!最终得分:" << score << endl;
    } else {
        cout << "\n游戏结束!最终得分:" << score << endl;
    }
    timer.reset();

    return 0;
}

可以运行,挺好玩的,但是我感觉太长了,求大佬们优化优化

2025/2/4 15:54
加载中...