这个游戏其实就是一个简单的打怪升级的小游戏(当前还在完善中),添加了用户注册/登录,但账号没法保存,所以这个登录就没啥卵用。。。
废话不多说,直接上代码
大佬们点评一下吧😭😭
2.0已出,大家转载一下
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <windows.h>
#include <map>
#include <conio.h>
using namespace std;
// 用户名和密码存储的map
map<string, string> m;
string username, password;
// 清屏函数
void clearScreen() {
system("cls");
}
// 装备类
class Equipment {
public:
string name; // 装备名称
int attack; // 攻击力
int defense; // 防御力
// 构造函数
Equipment(string n, int a, int d) : name(n), attack(a), defense(d) {}
};
// 玩家类
class Player {
public:
int level; // 等级
int exp; // 经验值
int attack; // 攻击力
int defense; // 防御力
int health; // 生命值
Equipment* weapon; // 武器
Equipment* helmet; // 头盔
Equipment* armor; // 战甲
Equipment* boots; // 靴子
// 构造函数,初始化玩家属性
Player() : level(1), exp(0), attack(10), defense(5), health(100),
weapon(NULL), helmet(NULL), armor(NULL), boots(NULL) {}
// 装备物品
void equip(Equipment* item) {
// 装备新物品之前释放旧物品
if (item->name == "武器" && weapon != NULL) delete weapon;
else if (item->name == "头盔" && helmet != NULL) delete helmet;
else if (item->name == "战甲" && armor != NULL) delete armor;
else if (item->name == "靴子" && boots != NULL) delete boots;
if (item->name == "武器") {
weapon = item;
} else if (item->name == "头盔") {
helmet = item;
} else if (item->name == "战甲") {
armor = item;
} else if (item->name == "靴子") {
boots = item;
}
cout << "装备了 " << item->name << " (攻击: " << item->attack << ", 防御: " << item->defense << ")\n";
updateStats(); // 更新玩家属性
}
// 更新玩家属性
void updateStats() {
attack = 10;
defense = 5;
health = 100 + (level - 1) * 10;
if (weapon) attack += weapon->attack;
if (helmet) defense += helmet->defense;
if (armor) defense += armor->defense;
if (boots) defense += boots->defense;
}
// 获得经验值并检查是否升级
void gainExp(int amount) {
exp += amount;
cout << "获得了 " << amount << " 经验值.\n";
if (exp >= level * 100) {
exp -= level * 100;
level++;
cout << "升级了!当前等级: " << level << "\n";
updateStats(); // 升级后更新属性
}
}
// 显示玩家属性
void displayStats() {
cout << "-------------------- 玩家属性 --------------------\n";
cout << "等级: " << level << " | 攻击: " << attack << " | 防御: " << defense << " | 生命值: " << health << "\n";
cout << "-------------------------------------------------\n";
}
};
// 怪物类
class Monster {
public:
int level; // 怪物等级
int attack; // 怪物攻击力
int defense; // 怪物防御力
int health; // 怪物生命值
bool isBoss; // 是否为头目
// 根据玩家等级生成怪物属性
Monster(int playerLevel, bool boss = false) : level(playerLevel),
isBoss(boss),
attack(5 + playerLevel * 2),
defense(3 + playerLevel),
health(30 + playerLevel * 10) {
if (boss) {
attack += playerLevel * 2; // 头目怪物更强
defense += playerLevel;
health += playerLevel * 20;
}
}
// 判断怪物是否存活
bool isAlive() {
return health > 0;
}
// 显示怪物属性
void displayStats() {
cout << "-------------------- " << (isBoss ? "头目" : "怪物") << "属性 --------------------\n";
cout << "等级: " << level << " | 攻击: " << attack << " | 防御: " << defense << " | 生命值: " << health << "\n";
cout << "-------------------------------------------------\n";
}
};
// 玩家与怪物的战斗函数
void battle(Player& player, Monster& monster, int level) {
cout << "当前关卡: " << level << "\n"; // 显示当前关卡
Sleep(1000);
while (monster.isAlive() && player.health > 0) {
// 显示玩家和怪物的属性
system("cls"); // 清屏,保持界面整洁
player.displayStats();
monster.displayStats();
int damageToMonster = max(0, player.attack - monster.defense);
int damageToPlayer = max(0, monster.attack - player.defense);
monster.health -= damageToMonster;
player.health -= damageToPlayer;
cout << "你对怪物造成了 " << damageToMonster << " 点伤害.\n";
cout << "怪物对你造成了 " << damageToPlayer << " 点伤害.\n";
// 模拟战斗中的延迟
Sleep(1000);
if (!monster.isAlive()) {
cout << "你击败了" << (monster.isBoss ? "头目!" : "怪物!") << "\n";
player.gainExp(monster.level * 50); // 击败怪物后获得经验
} else if (player.health <= 0) {
cout << "你被怪物击败了...\n";
}
}
}
// 生成掉落装备的函数
Equipment* generateLoot() {
string names[] = { "武器", "头盔", "战甲", "靴子" };
int attackValues[] = { 5, 0, 0, 2 };
int defenseValues[] = { 0, 3, 5, 2 };
int index = rand() % 4;
Equipment* loot = new Equipment(names[index], attackValues[index], defenseValues[index]);
return loot;
}
void yx(){
system("cls");
srand(time(0));
Player player;
int currentLevel = 1;
cout << "欢迎来到游戏!这是你的初始属性:\n";
player.displayStats();
Sleep(3000); // 显示初始属性后暂停一会
while (true) {
// 清屏
system("cls");
cout << "\n--- 战斗开始 ---\n";
cout << "\n一只怪物出现了!\n";
Sleep(1000);
bool isBoss = (currentLevel % 10 == 0); // 每十关是头目战
Monster monster(player.level, isBoss);
battle(player, monster, currentLevel); // 与怪物战斗
if (player.health > 0) {
if (rand() % 2 == 0) {
Equipment* loot = generateLoot();
cout << "怪物掉落了: " << loot->name << " (攻击: " << loot->attack << ", 防御: " << loot->defense << ")\n";
player.equip(loot); // 装备掉落物品
}
player.health = 100 + (player.level - 1) * 10; // 每次战斗后恢复生命值
currentLevel++; // 进入下一关
// 等待用户按键
cout << "按任意键继续...\n";
system("pause>nul");
} else {
cout << "游戏结束!你达到了 " << player.level << " 级, 并通过了 " << currentLevel-1 << " 关.\n";
break;
}
}
}
// 进入游戏主界面
void zjm() {
clearScreen();
cout << "你好," << username << endl << endl << endl;
cout << " (1) (2)" << endl;
cout << " 进入游戏 退出" << endl;
char p;
cin >> p;
if (p == '1') {
yx(); // 开始游戏
}
return;
}
// 隐藏输入密码函数,支持退格删除
string inputPassword() {
string password;
char s;
s = getch(); // 获取用户输入的字符
while (s != '\r') { // 回车键结束输入
if (s == '\b' && !password.empty()) { // 处理退格
password = password.substr(0, password.size() - 1); // 删除最后一个字符
cout << "\b \b"; // 在控制台删除最后一个字符显示
} else if (s != '\b') {
password += s;
cout << "·"; // 输出星号代替实际字符
}
s = getch(); // 获取下一个字符
}
return password;
}
// 登录函数
void dl() {
clearScreen();
cout << " 用户登录" << endl;
cout << " ----------------------------" << endl;
cout << " 请输入用户名:";
cin >> username;
clearScreen();
cout << " 请输入密码:";
password = inputPassword();
clearScreen();
// 验证用户名和密码
if (m.count(username) && m[username] == password) {
cout << " 登录成功!" << endl;
Sleep(1000); // 显示登录成功信息1秒
zjm(); // 进入游戏主界面
} else {
cout << " 密码或用户名错误,请重试" << endl;
cout << " (1) 重试登录 (2) 返回主菜单" << endl;
char choice;
cin >> choice;
if (choice == '1') {
dl(); // 重新尝试登录
}
}
}
// 注册函数
void zc() {
clearScreen();
string username, password, confirmPassword;
cout << " 用户注册" << endl;
cout << " ----------------------------" << endl;
cout << " 请输入用户名:";
cin >> username;
clearScreen();
cout << " 请输入密码:";
password = inputPassword();
clearScreen();
cout << " 请再次输入密码:";
confirmPassword = inputPassword();
clearScreen();
// 检查两次输入的密码是否一致
if (password == confirmPassword) {
m[username] = password; // 将新用户的信息存储到map中
cout << " 注册成功!请登录" << endl;
Sleep(1000); // 显示注册成功信息1秒
dl(); // 进入登录流程
} else {
cout << " 密码不一致,请重试" << endl;
cout << " (1) 重试注册 (2) 返回主菜单" << endl;
char choice;
cin >> choice;
if (choice == '1') {
zc(); // 重新尝试注册
}
}
}
// 主函数
int main() {
clearScreen();
cout << " 欢迎来到我的小游戏" << endl;
cout << " (1) 登录 (2) 注册 (3) 退出" << endl;
char t;
cin >> t;
if (t == '1') {
dl(); // 调用登录函数
} else if (t == '2') {
zc(); // 调用注册函数
} else if (t == '3') {
return 0; // 退出程序
}
return 0;
}