用c++完成猜数字游戏 1. 设计要求: 该游戏可以由程序随机产生一个N位数字,或由用户输入一个N位数字,作为待猜测数字(各位数字不重复出现)。玩游戏者开始猜测后,可以有M次机会输入数字来匹配上面的待猜测数字。用户每输入一次,系统给出本次猜测结果:A表示位置正确且数字正确,B表示数字正确而位置不正确。比如:2A1B,表示2位位置正确且数字正确,1位数字正确但是位置不正确。 某次猜中后,游戏结束。若M次机会用完,游戏也结束。菜单格式如图。 2. 基本功能 1)产生待猜测数据,随机生成,或由用户输入。需要判断合法性:N位数字不重复出现。 2)提供最多M次机会猜测,每次反馈猜测结果。成功立即结束猜测返回主菜单。 3)游戏开始前输入用户名,初次使用进行用户注册。游戏成功与否都能返回主菜单。 4)查看结果:查看某一个用户的历史猜测结果,最少猜测次数,成功率; 5)参数M,N可以自由设置 3. 拓展功能: 记录不同的游戏用户的猜测结果,设置猜测排行榜,设置游戏难度等等其它自定义拓展功能。
时间: 2024-03-08 07:50:43 浏览: 95
以下是使用C++实现猜数字游戏的示例代码:
```cpp
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;
const int MAX_N = 10; // 最大位数
const int MAX_M = 10; // 最大猜测次数
// 产生一个不重复的N位数字
string generateNumber(int n) {
string res;
vector<int> nums;
for (int i = 0; i < 10; ++i) {
nums.push_back(i);
}
random_shuffle(nums.begin(), nums.end());
for (int i = 0; i < n; ++i) {
res += to_string(nums[i]);
}
return res;
}
// 判断一个字符串是否是N位数字
bool isValidNumber(const string& s, int n) {
if (s.size() != n) {
return false;
}
for (int i = 0; i < n; ++i) {
if (s[i] < '0' || s[i] > '9') {
return false;
}
for (int j = i + 1; j < n; ++j) {
if (s[i] == s[j]) {
return false;
}
}
}
return true;
}
// 统计猜测结果
string countResult(const string& guess, const string& target) {
int a = 0, b = 0;
for (int i = 0; i < target.size(); ++i) {
if (guess[i] == target[i]) {
++a;
} else if (target.find(guess[i]) != string::npos) {
++b;
}
}
return to_string(a) + "A" + to_string(b) + "B";
}
// 保存游戏结果
void saveResult(const string& username, const string& guess, const string& result) {
ofstream fout("result.txt", ios::app);
if (fout) {
fout << username << " " << guess << " " << result << endl;
}
fout.close();
}
// 查看历史猜测结果
void viewResult(const string& username) {
ifstream fin("result.txt");
if (fin) {
string line;
while (getline(fin, line)) {
if (line.substr(0, username.size()) == username) {
cout << line << endl;
}
}
}
fin.close();
}
int main() {
srand(time(NULL)); // 设置随机数种子
string username;
cout << "请输入用户名:";
cin >> username;
int n, m;
cout << "请输入位数N和猜测次数M:";
cin >> n >> m;
string target;
cout << "请选择产生待猜测数据的方式(1.随机生成,2.由用户输入):";
int choice;
cin >> choice;
if (choice == 1) {
target = generateNumber(n);
} else if (choice == 2) {
while (true) {
cout << "请输入一个不重复的" << n << "位数字:";
cin >> target;
if (isValidNumber(target, n)) {
break;
} else {
cout << "输入不合法,请重新输入!" << endl;
}
}
} else {
cout << "输入不合法,程序退出!" << endl;
return 0;
}
cout << "游戏开始!" << endl;
for (int i = 1; i <= m; ++i) {
string guess;
cout << "请输入第" << i << "次猜测结果:";
cin >> guess;
if (isValidNumber(guess, n)) {
string result = countResult(guess, target);
cout << result << endl;
if (result == to_string(n) + "A0B") {
cout << "恭喜你猜中了!" << endl;
saveResult(username, guess, result);
break;
}
if (i == m) {
cout << "很遗憾,你没有猜中!答案是:" << target << endl;
saveResult(username, guess, result);
}
} else {
cout << "输入不合法,请重新输入!" << endl;
--i;
}
}
// 查看历史猜测结果
cout << "是否查看历史猜测结果?(1.是,2.否):";
cin >> choice;
if (choice == 1) {
viewResult(username);
}
return 0;
}
```
该程序实现了猜数字游戏的基本功能,包括产生待猜测数字、开始猜测、统计猜测结果、保存游戏结果、查看历史猜测结果等。可以通过拓展记录不同用户的猜测结果、设置猜测排行榜、设置游戏难度等来实现更多功能。
阅读全文