用C++写一个可以导入题库的竞猜游戏
时间: 2023-11-13 11:02:55 浏览: 70
好的,我可以为您提供一个简单的竞猜游戏的C++代码,其中包括导入题库的功能。由于我不知道您的具体需求和题库格式,因此我将提供一个基本的代码框架,您可以根据自己的需要进行修改和扩展。
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib> //用于随机数生成
#include <ctime> //用于获取当前时间
using namespace std;
// 定义问题结构体
struct Question {
string question; // 问题
vector<string> options; // 选项
int answer; // 答案
};
// 定义题库结构体
struct QuestionBank {
string name; // 题库名称
vector<Question> questions; // 题目列表
};
// 读取题库文件
QuestionBank readQuestionBank(string fileName) {
QuestionBank bank;
bank.name = fileName;
ifstream fin(fileName);
if (!fin) {
cout << "无法打开文件 " << fileName << endl;
exit(1);
}
string line;
Question question;
int count = 0;
while (getline(fin, line)) {
if (line.empty()) {
continue; // 空行跳过
}
if (count % 5 == 0) {
// 新的问题开始
question.question = line;
} else if (count % 5 == 4) {
// 答案行
question.answer = stoi(line); // 将字符串转换为整数
bank.questions.push_back(question); // 将问题添加到题库中
} else {
// 选项行
question.options.push_back(line);
}
count++;
}
fin.close();
return bank;
}
// 询问用户是否继续进行游戏
bool askContinue() {
cout << "是否继续游戏?(Y/N): ";
char c;
cin >> c;
return (c == 'Y' || c == 'y');
}
// 随机生成题目序号
int randomIndex(int size) {
srand((int)time(0)); // 设置种子
return rand() % size;
}
// 游戏主函数
void playGame(QuestionBank& bank) {
cout << "欢迎来到 " << bank.name << " 竞猜游戏!" << endl;
int totalNum = bank.questions.size(); // 总题数
int correctNum = 0; // 回答正确的题数
while (true) {
int index = randomIndex(totalNum); // 随机生成题目序号
Question question = bank.questions[index];
// 输出问题和选项
cout << question.question << endl;
for (int i = 0; i < question.options.size(); i++) {
cout << i+1 << ". " << question.options[i] << endl;
}
// 读取用户答案
int answer;
cout << "请选择答案(1-" << question.options.size() << "): ";
cin >> answer;
// 判断答案是否正确,并统计得分
if (answer == question.answer) {
cout << "回答正确!" << endl;
correctNum++;
} else {
cout << "回答错误!正确答案是 " << question.options[question.answer-1] << endl;
}
// 输出当前得分和总题数
cout << "当前得分: " << correctNum << "/" << totalNum << endl;
if (!askContinue()) {
break; // 退出游戏
}
}
cout << "游戏结束!您的最终得分是 " << correctNum << "/" << totalNum << endl;
}
int main() {
// 读取题库文件
QuestionBank bank = readQuestionBank("题库.txt");
// 进入游戏
playGame(bank);
return 0;
}
```
在上面的代码中,我们首先定义了两个结构体:`Question` 表示问题,包括问题描述、选项和正确答案;`QuestionBank` 表示题库,包括题库名称和题目列表。然后我们实现了读取题库文件的函数 `readQuestionBank`,它将从文件中读取问题和选项,创建 `Question` 对象并将其添加到题库中。我们还实现了一些辅助函数,如询问用户是否继续游戏、随机生成题目序号等。
在 `main` 函数中,我们首先读取题库文件,然后进入游戏主函数 `playGame`。在游戏主函数中,我们首先输出欢迎信息,然后随机生成一个题目并输出问题和选项。然后读取用户的答案,判断是否正确,并输出当前得分和总题数。如果用户选择继续游戏,那么我们继续随机生成下一个题目,否则退出游戏。
需要注意的是,上面的代码只是一个简单的示例,还有很多地方可以进行改进和扩展,例如添加计时器、支持多玩家、支持多种题库格式等。您可以根据自己的需要进行修改和扩展。
阅读全文