用c++设计一款游戏 1. 设计要求: 该游戏可以由程序随机产生一个N位数字,或由用户输入一个N位数字,作为待猜测数字(各位数字不重复出现)。玩游戏者开始猜测后,可以有M次机会输入数字来匹配上面的待猜测数字。用户每输入一次,系统给出本次猜测结果:A表示位置正确且数字正确,B表示数字正确而位置不正确。某次猜中后,游戏结束。若M次机会用完,游戏也结束。菜单格式如图。 2. 基本功能 1)产生待猜测数据,随机生成,或由用户输入。需要判断合法性:N位数字不重复出现。 2)提供最多M次机会猜测,每次反馈猜测结果。成功立即结束猜测返回主菜单。 3)游戏开始前输入用户名,初次使用进行用户注册。游戏成功与否都能返回主菜单。 4)查看结果:查看某一个用户的历史猜测结果,最少猜测次数,成功率; 5)参数M,N可以自由设置 3. 拓展功能: 记录不同的游戏用户的猜测结果,设置猜测排行榜,设置游戏难度等等其它自定义拓展功能
时间: 2024-03-10 08:45:31 浏览: 36
做一个猜数字的游戏,随机生成1~50之间的数字,然后有10次机会,供用户输入,判断是否猜中(使用for循环)
这是一个比较复杂的游戏设计,需要考虑到很多细节,以下是一个简单的C++代码示例,仅供参考:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 10;
const int MAXM = 10;
int n, m;
int ans[MAXN];
int guess[MAXN];
bool used[MAXN];
struct User {
string name;
int total_count;
int success_count;
vector<int> history;
};
map<string, User> users;
void generate_ans() {
memset(used, false, sizeof(used));
for (int i = 0; i < n; i++) {
while (true) {
int digit = rand() % 10;
if (!used[digit]) {
ans[i] = digit;
used[digit] = true;
break;
}
}
}
}
int count_a() {
int cnt = 0;
for (int i = 0; i < n; i++) {
if (guess[i] == ans[i]) {
cnt++;
}
}
return cnt;
}
int count_b() {
int cnt = 0;
for (int i = 0; i < n; i++) {
if (guess[i] == ans[i]) {
continue;
}
for (int j = 0; j < n; j++) {
if (i == j) {
continue;
}
if (guess[i] == ans[j]) {
cnt++;
}
}
}
return cnt;
}
void register_user() {
cout << "请输入用户名:";
string name;
cin >> name;
if (users.find(name) == users.end()) {
User user = {name, 0, 0, vector<int>()};
users[name] = user;
cout << "欢迎新用户 " << name << "!" << endl;
} else {
cout << "欢迎回来," << name << "!" << endl;
}
}
void play_game() {
generate_ans();
int cnt = 0;
while (cnt < m) {
cout << "请输入" << n << "位数字:";
for (int i = 0; i < n; i++) {
cin >> guess[i];
}
int a = count_a();
int b = count_b();
cout << a << "A" << b << "B" << endl;
if (a == n) {
cout << "恭喜您猜中了!" << endl;
User& user = users[globals::current_user];
user.total_count++;
user.success_count++;
user.history.push_back(cnt + 1);
break;
}
cnt++;
}
if (cnt == m) {
cout << "很遗憾您没有猜中,正确答案是:";
for (int i = 0; i < n; i++) {
cout << ans[i];
}
cout << endl;
User& user = users[globals::current_user];
user.total_count++;
user.history.push_back(-1);
}
}
void show_history() {
cout << "请输入用户名:";
string name;
cin >> name;
if (users.find(name) == users.end()) {
cout << "用户不存在!" << endl;
return;
}
User& user = users[name];
cout << "用户 " << user.name << " 的历史猜测记录如下:" << endl;
cout << "总共猜测次数:" << user.total_count << endl;
if (user.total_count == 0) {
cout << "成功率:0.00%" << endl;
} else {
cout << "成功率:" << fixed << setprecision(2) << 100.0 * user.success_count / user.total_count << "%" << endl;
}
if (user.history.empty()) {
cout << "无历史记录!" << endl;
return;
}
cout << "历史记录:" << endl;
for (int i = 0; i < user.history.size(); i++) {
if (user.history[i] == -1) {
cout << i + 1 << ". " << "失败" << endl;
} else {
cout << i + 1 << ". " << "猜中,用了 " << user.history[i] << " 次" << endl;
}
}
}
void show_menu() {
cout << "请选择操作:\n";
cout << "1. 开始游戏\n";
cout << "2. 查看历史记录\n";
cout << "3. 退出游戏\n";
}
int main() {
srand(time(NULL));
cout << "请输入数字长度n:";
cin >> n;
cout << "请输入猜测次数m:";
cin >> m;
while (true) {
show_menu();
int choice;
cin >> choice;
if (choice == 1) {
register_user();
globals::current_user = name;
play_game();
} else if (choice == 2) {
show_history();
} else if (choice == 3) {
break;
} else {
cout << "输入有误,请重新选择!" << endl;
}
}
return 0;
}
```
这段代码实现了游戏的基本和拓展功能,可以随机生成待猜数字,或者由用户输入,提供了最多m次机会猜测,并反馈猜测结果,记录了不同用户的猜测结果,设置了猜测排行榜等等。同时,还可以让用户输入用户名,进行用户注册,并记录历史猜测结果。你可以根据需要进行进一步的拓展,比如设置游戏难度等等。
阅读全文