用c++进行设计 题目二 猜数字游戏 1. 设计要求: 该游戏可以由程序随机产生一个N位数字,或由用户输入一个N位数字,作为待猜测数字(各位数字不重复出现)。玩游戏者开始猜测后,可以有M次机会输入数字来匹配上面的待猜测数字。用户每输入一次,系统给出本次猜测结果:A表示位置正确且数字正确,B表示数字正确而位置不正确。比如:2A1B,表示2位位置正确且数字正确,1位数字正确但是位置不正确。 某次猜中后,游戏结束。若M次机会用完,游戏也结束。菜单格式如图。 2. 基本功能 1)产生待猜测数据,随机生成,或由用户输入。需要判断合法性:N位数字不重复出现。 2)提供最多M次机会猜测,每次反馈猜测结果。成功立即结束猜测返回主菜单。 3)游戏开始前输入用户名,初次使用进行用户注册。游戏成功与否都能返回主菜单。 4)查看结果:查看某一个用户的历史猜测结果,最少猜测次数,成功率; 5)参数M,N可以自由设置 3. 拓展功能: 记录不同的游戏用户的猜测结果,设置猜测排行榜,设置游戏难度等等其它自定义拓展功能。
时间: 2024-03-06 16:51:08 浏览: 81
C++实现猜数字游戏
好的,这是一个比较大的项目,需要一些时间和精力来完成。我会尽力提供一些思路和代码实现的建议。首先,我们需要定义一些基本的数据结构和变量:
```c++
#include <iostream>
#include <vector>
#include <map>
#include <ctime>
#include <cstdlib>
#include <cstring>
using namespace std;
// 猜测结果结构体,包括A和B的数量
struct GuessResult {
int A;
int B;
};
// 用户结构体,包括用户名和历史猜测记录
struct User {
string name;
vector<string> history;
};
// 用户名和用户信息的映射表
map<string, User> users;
// 待猜测数字和猜测次数的全局变量
string target;
int max_guesses;
// 生成随机数,不重复
string generateRandomNumber(int n) {
string res = "";
vector<int> digits;
for (int i = 0; i < 10; i++) {
digits.push_back(i);
}
for (int i = 0; i < n; i++) {
int idx = rand() % digits.size();
res += to_string(digits[idx]);
digits.erase(digits.begin() + idx);
}
return res;
}
// 检查数字是否合法,即各位数字不重复
bool checkNumber(string number) {
bool digits[10];
memset(digits, 0, sizeof(digits));
for (int i = 0; i < number.size(); i++) {
if (digits[number[i]-'0']) {
return false;
}
digits[number[i]-'0'] = true;
}
return true;
}
// 检查猜测结果,计算A和B的数量
GuessResult checkGuess(string guess) {
GuessResult res = {0, 0};
for (int i = 0; i < guess.size(); i++) {
if (guess[i] == target[i]) {
res.A++;
} else if (target.find(guess[i]) != string::npos) {
res.B++;
}
}
return res;
}
// 添加用户
void addUser(string name) {
if (users.count(name)) {
cout << "User already exists!" << endl;
} else {
User user = {name, {}};
users[name] = user;
cout << "User added successfully!" << endl;
}
}
// 猜数字游戏
void guessNumber(string name) {
if (!users.count(name)) {
addUser(name);
}
User& user = users[name];
cout << "Welcome, " << name << "!" << endl;
cout << "Please enter the length of the number you want to guess: ";
int n;
cin >> n;
target = generateRandomNumber(n);
cout << "Target number generated!" << endl;
max_guesses = n * 2;
int guesses = 0;
while (guesses < max_guesses) {
cout << "Guess #" << guesses + 1 << ": ";
string guess;
cin >> guess;
if (guess.size() != n) {
cout << "Invalid guess length!" << endl;
continue;
}
if (!checkNumber(guess)) {
cout << "Invalid guess number!" << endl;
continue;
}
GuessResult res = checkGuess(guess);
user.history.push_back(guess);
if (res.A == n) {
cout << "Congratulations! You've guessed the number!" << endl;
return;
} else {
cout << res.A << "A" << res.B << "B" << endl;
}
guesses++;
}
cout << "Sorry, you've used up all your guesses. The target number was " << target << "." << endl;
}
// 查看用户历史猜测记录
void viewHistory(string name) {
if (!users.count(name)) {
cout << "User not found!" << endl;
} else {
User& user = users[name];
cout << "User: " << name << endl;
cout << "Total guesses: " << user.history.size() << endl;
if (user.history.size() > 0) {
cout << "Minimum guesses: " << user.history.size() << endl;
cout << "Success rate: " << (float)count_if(user.history.begin(), user.history.end(), [target](string guess) {
return guess == target;
}) / user.history.size() * 100 << "%" << endl;
cout << "History: " << endl;
for (string guess : user.history) {
cout << guess << " ";
}
cout << endl;
}
}
}
// 主菜单
void mainMenu() {
while (true) {
cout << "Welcome to Guess Number Game!" << endl;
cout << "1. Play Game" << endl;
cout << "2. View History" << endl;
cout << "3. Exit" << endl;
int choice;
cin >> choice;
if (choice == 1) {
cout << "Please enter your name: ";
string name;
cin >> name;
guessNumber(name);
} else if (choice == 2) {
cout << "Please enter your name: ";
string name;
cin >> name;
viewHistory(name);
} else if (choice == 3) {
cout << "Goodbye!" << endl;
break;
} else {
cout << "Invalid choice!" << endl;
}
}
}
int main() {
srand((unsigned)time(NULL));
mainMenu();
return 0;
}
```
以上是一个简单的实现,包括了随机生成数字、检查数字是否合法、检查猜测结果、添加用户、游戏、查看历史记录和主菜单等基本功能。你可以根据自己的需求进行修改和拓展。
阅读全文