本游戏时作者耗时7天编辑而成的rpg游戏,在这5天之内本作者测试了很多遍,诞生了很多的测试版本,而本次上传的是最新的正式版(测试版太多上传不过来),本游戏是作者原创,如有问题请私信作者进行改善。
本版本为1.9.5.5版本(开始界面的图案是“浮空岛屿”,只是作者首次正式使用符号制作图标,该技术不是很成熟,不要在意这些细节),拥有存档功能,请不要删除,如果删除则存档丢失(存档文件名为savegame.txt),目前共有十几件装备,等级上限为200(当等级为200时,进入地图“传说之海”,等级上限提升为1000,离开“传说之海”等级上限恢复为200,但当前等级不会改变),击败2个怪物提升一级,玩家基础血量为20000,攻击力为2100,每提升一级血量和攻击力都会提升一些;目前共有3个地图,基础地图为“使命之地”,当等级提升为50级后解锁地图“虚空领域”,当等级为200级后解锁地图“传说之海”,这两个地图的怪物很强,玩家很容易被击败。
注意:玩家被击败后删除存档!
下载链接:https://2010829.lanzoue.com/iwfJk2nxes7i
密码:d7br
代码如下:
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <vector>
#include <string>
#include <ctime>
#include <fstream>
#include <algorithm>
#include <sstream>
// 设置控制台颜色和背景
void setConsoleColorAndBackground(int color, int background) {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, background | color);
}
// 开始界面
void startMenu() {
setConsoleColorAndBackground(6, 0); // 金黄色文字,黑色背景
std::string floatingIsland[] = {
" __..--''``---....___ _.._",
" __..-' `-. ``---...__.-' `-_",
" .' `. : `-.",
" : ``.__. : `.",
" : _..---... `-.; :",
" : _..-'' `-.: :",
" `._..-' `: :",
" `-.__.-'``---...__..-' :",
" ``---..__..-' :",
" ``---..__.-'``---...___..-'"
};
for (const auto& line : floatingIsland) {
std::cout << line << std::endl;
}
std::cout << "\t\t传说1.9.5.5" << std::endl;
std::cout << "主要制作人:山岚 制作团队:喵星人工作室" << std::endl;
std::cout << "\t\t按回车进入游戏" << std::endl;
while (_getch() != 13); // 等待回车键
}
// 加载界面
void loadingScreen() {
setConsoleColorAndBackground(6, 0); // 金黄色文字,黑色背景
for (int i = 0; i <= 100; ++i) {
system("cls");
std::cout << i << "/100" << std::endl;
Sleep(50); // 5 秒内从 0 到 100
}
system("cls");
}
// 敌人类
class Enemy {
public:
std::string name;
int hp;
int attack;
Enemy(const std::string& n, int h, int a) : name(n), hp(h), attack(a) {}
};
// 生成随机敌人
Enemy generateRandomEnemy(const std::string& currentMap) {
std::vector<Enemy> enemies;
if (currentMap == "虚空领域") {
enemies = {
Enemy("虚空令使", 40000, 2500),
Enemy("虚空凋零", 2800000, 8000),
Enemy("虚空", 3450000, 50000),
Enemy("神之使徒", 500000, 24000)
};
}
else if (currentMap == "传说之海") {
int randNum = rand() % 100;
if (randNum < 1) {
enemies.push_back(Enemy("神之海王", 50000000, 50000));
}
else if (randNum < 11) {
enemies.push_back(Enemy("海洋领主", 29800000, 32000));
}
else if (randNum < 31) {
enemies.push_back(Enemy("海怪", 15000000, 28000));
}
else if (randNum < 61) {
enemies.push_back(Enemy("变异海盗王", 10000000, 28000));
}
else {
enemies.push_back(Enemy("海盗王", 5800000, 20000));
}
}
else {
enemies = {
Enemy("神之令使", 15000, 2300),
Enemy("毁灭者", 15000, 12000),
Enemy("神之雕塑", 32000, 4500),
Enemy("地狱使徒", 18000, 2300),
Enemy("地狱魔神", 45000, 9800),
Enemy("神之地狱亚魔", 230000, 17200)
};
int index = rand() % enemies.size();
if (enemies[index].name == "神之地狱亚魔" && rand() % 100 != 0) { // 1% 的概率遇到神之地狱亚魔
index = rand() % (enemies.size() - 1); // 重新随机选择其他敌人
}
return enemies[index];
}
int index = rand() % enemies.size();
return enemies[index];
}
// 玩家类
class Player {
public:
int level = 1;
int hp = 20000; // 当前生命值
int maxHp = 20000; // 生命值上限
int attack = 2100; // 当前攻击力
int magicDamage = 0; // 魔法附加伤害
int physicalDamage = 0; // 物理附加伤害
std::string armor; // 当前护甲
std::string weapon; // 当前武器
std::vector<std::string> backpack; // 背包
int healthPotions = 0; // 回血药数量
int bigHealthPotions = 0; // 大补药数量
int legendCoins = 0; // 传说币数量
std::string currentMap = "使命之地"; // 当前地图
int normalAttackLevel = 1; // 普通攻击等级
int heavyAttackLevel = 1; // 重击攻击等级
int ultimateSkillLevel = 1; // 终极技能等级
int normalAttackCost = 500; // 普通攻击升级费用
int heavyAttackCost = 500; // 重击攻击升级费用
int ultimateSkillCost = 500; // 终极技能升级费用
int defeatedEnemies = 0; // 击败敌人数量
int maxLevel = 200; // 当前等级上限,默认为200
// 装备护甲
void equipArmor(const std::string& armorName) {
if (!armor.empty()) {
// 脱掉旧护甲并放回背包
removeStatsFromArmor(armor);
backpack.push_back(armor);
}
armor = armorName;
addStatsFromArmor(armorName);
std::cout << "你装备了 " << armor << std::endl;
}
// 装备武器
void equipWeapon(const std::string& weaponName) {
if (!weapon.empty()) {
// 脱掉旧武器并放回背包
removeStatsFromWeapon(weapon);
backpack.push_back(weapon);
}
weapon = weaponName;
addStatsFromWeapon(weaponName);
std::cout << "你装备了 " << weapon << std::endl;
}
// 根据护甲添加属性
void addStatsFromArmor(const std::string& armorName) {
if (armorName == "创世铠甲") {
maxHp += 50000;
physicalDamage += 1000;
}
else if (armorName == "战神圣衣") {
maxHp += 48000;
magicDamage += 1000;
}
else if (armorName == "青铜法袍") {
maxHp += 28000;
magicDamage += 430;
}
else if (armorName == "朱红护甲") {
maxHp += 20000;
physicalDamage += 250;
}
else if (armorName == "灭世战甲") {
maxHp += 80000;
physicalDamage += 5000;
magicDamage += 5000;
}
else if (armorName == "虚空魔神铠") {
maxHp += 100000;
magicDamage += 10000;
physicalDamage += 10000;
}
else if (armorName == "神圣之护铠") {
maxHp += 1000000;
physicalDamage += 25000;
magicDamage += 25000;
if (weapon == "神圣之神剑") {
maxHp += 500000;
attack += 50000;
physicalDamage += 25000;
magicDamage += 25000;
}
}
if (hp > maxHp) {
hp = maxHp;
}
}
// 移除护甲属性
void removeStatsFromArmor(const std::string& armorName) {
if (armorName == "创世铠甲") {
maxHp -= 50000;
physicalDamage -= 1000;
}
else if (armorName == "战神圣衣") {
maxHp -= 48000;
magicDamage -= 1000;
}
else if (armorName == "青铜法袍") {
maxHp -= 28000;
magicDamage -= 430;
}
else if (armorName == "朱红护甲") {
maxHp -= 20000;
physicalDamage -= 250;
}
else if (armorName == "灭世战甲") {
maxHp -= 80000;
physicalDamage -= 5000;
magicDamage -= 5000;
}
else if (armorName == "虚空魔神铠") {
maxHp -= 100000;
magicDamage -= 10000;
physicalDamage -= 10000;
}
else if (armorName == "神圣之护铠") {
maxHp -= 1000000;
physicalDamage -= 25000;
magicDamage -= 25000;
if (weapon == "神圣之神剑") {
maxHp -= 500000;
attack -= 50000;
physicalDamage -= 25000;
magicDamage -= 25000;
}
}
if (hp > maxHp) {
hp = maxHp;
}
}
// 根据武器添加属性
void addStatsFromWeapon(const std::string& weaponName) {
if (weaponName == "创世神剑") {
attack += 5000;
}
else if (weaponName == "天顶法杖") {
attack += 4500;
magicDamage += 1000;
}
else if (weaponName == "青铜法器") {
attack += 2700;
magicDamage += 500;
}
else if (weaponName == "赤红魔剑") {
attack += 2700;
}
else if (weaponName == "灭世神剑") {
attack += 8000;
physicalDamage += 5000;
magicDamage += 5000;
}
else if (weaponName == "虚空魔神剑") {
attack += 20000;
magicDamage += 20000;
physicalDamage += 20000;
}
else if (weaponName == "神圣之神剑") {
attack += 50000;
physicalDamage += 25000;
magicDamage += 25000;
if (armor == "神圣之护铠") {
maxHp += 500000;
attack += 50000;
physicalDamage += 25000;
magicDamage += 25000;
}
}
}
// 移除武器属性
void removeStatsFromWeapon(const std::string& weaponName) {
if (weaponName == "创世神剑") {
attack -= 5000;
}
else if (weaponName == "天顶法杖") {
attack -= 4500;
magicDamage -= 1000;
}
else if (weaponName == "青铜法器") {
attack -= 2700;
magicDamage -= 500;
}
else if (weaponName == "赤红魔剑") {
attack -= 2700;
}
else if (weaponName == "灭世神剑") {
attack -= 8000;
physicalDamage -= 5000;
magicDamage -= 5000;
}
else if (weaponName == "虚空魔神剑") {
attack -= 20000;
magicDamage -= 20000;
physicalDamage -= 20000;
}
else if (weaponName == "神圣之神剑") {
attack -= 50000;
physicalDamage -= 25000;
magicDamage -= 25000;
if (armor == "神圣之护铠") {
maxHp -= 500000;
attack -= 50000;
physicalDamage -= 25000;
magicDamage -= 25000;
}
}
}
// 自动存档
void autoSave() {
std::ofstream saveFile("savegame.txt");
if (saveFile.is_open()) {
saveFile << level << " " << hp << " " << maxHp << " " << attack << " "
<< physicalDamage << " " << magicDamage << " "
<< armor << " " << weapon << " "
<< legendCoins << " " << healthPotions << " "
<< bigHealthPotions << " " << currentMap << " "
<< normalAttackLevel << " " << heavyAttackLevel << " "
<< ultimateSkillLevel << " " << defeatedEnemies << " " << maxLevel << std::endl;
for (const auto& item : backpack) {
saveFile << item << std::endl;
}
saveFile.close();
}
}
// 删除存档
void deleteSave() {
std::remove("savegame.txt");
std::cout << "已删除存档" << std::endl;
Sleep(3000);
exit(0);
}
// 使用回血药
void useHealthPotion() {
if (healthPotions > 0) {
hp += 2000;
if (hp > maxHp) {
hp = maxHp;
}
healthPotions--;
std::cout << "你使用了一个回血药,恢复了 2000 生命值。当前生命值: " << hp << "/" << maxHp << std::endl;
}
else {
std::cout << "你没有回血药。" << std::endl;
}
}
// 使用大补药
void useBigHealthPotion() {
if (bigHealthPotions > 0) {
hp = maxHp;
bigHealthPotions--;
std::cout << "你使用了一个大补药,恢复了全部生命值。当前生命值: " << hp << "/" << maxHp << std::endl;
}
else {
std::cout << "你没有大补药。" << std::endl;
}
}
// 商店
void tradeEquipment() {
std::cout << "1. 贩卖装备 2. 购买装备 3. 购买道具" << std::endl;
int choice;
std::cin >> choice;
if (choice == 1) {
std::cout << "你的背包:" << std::endl;
for (size_t i = 0; i < backpack.size(); ++i) {
std::cout << i + 1 << ". " << backpack[i] << std::endl;
}
std::cout << "输入要贩卖的装备编号 (0退出): ";
int sellChoice;
std::cin >> sellChoice;
if (sellChoice > 0 && sellChoice <= static_cast<int>(backpack.size())) {
std::string item = backpack[sellChoice - 1];
int price = 0;
if (item == "灭世战甲" || item == "灭世神剑") {
price = 15000;
}
else if (item == "虚空魔神铠" || item == "虚空魔神剑") {
price = 20000;
}
else {
price = 500;
}
legendCoins += price;
backpack.erase(backpack.begin() + sellChoice - 1);
std::cout << "你卖出了 " << item << ",获得了 " << price << " 传说币。当前传说币: " << legendCoins << std::endl;
}
}
else if (choice == 2) {
std::vector<std::string> availableItems = { "创世铠甲", "战神圣衣", "青铜法袍", "朱红护甲", "创世神剑", "天顶法杖", "青铜法器", "赤红魔剑" };
std::cout << "可购买的装备:" << std::endl;
for (size_t i = 0; i < availableItems.size(); ++i) {
std::cout << i + 1 << ". " << availableItems[i] << " (1500 传说币)" << std::endl;
}
std::cout << "输入要购买的装备编号 (0退出): ";
int buyChoice;
std::cin >> buyChoice;
if (buyChoice > 0 && buyChoice <= static_cast<int>(availableItems.size())) {
std::string item = availableItems[buyChoice - 1];
if (legendCoins >= 1500) {
legendCoins -= 1500;
backpack.push_back(item);
std::cout << "你购买了 " << item << ",花费了 1500 传说币。当前传说币: " << legendCoins << std::endl;
}
else {
std::cout << "传说币不足,无法购买。" << std::endl;
}
}
}
else if (choice == 3) {
std::cout << "可购买的道具:" << std::endl;
std::cout << "1. 回血药 (5传说币)" << std::endl;
std::cout << "2. 大补药 (10传说币)" << std::endl;
std::cout << "输入要购买的道具编号 (0退出): ";
int buyChoice;
std::cin >> buyChoice;
if (buyChoice == 1) {
if (legendCoins >= 5) {
legendCoins -= 5;
healthPotions += 1;
std::cout << "你购买了 1 个回血药,花费了 5 传说币。当前回血药数量: " << healthPotions << std::endl;
}
else {
std::cout << "传说币不足,无法购买。" << std::endl;
}
}
else if (buyChoice == 2) {
if (legendCoins >= 10) {
legendCoins -= 10;
bigHealthPotions += 1;
std::cout << "你购买了 1 个大补药,花费了 10 传说币。当前大补药数量: " << bigHealthPotions << std::endl;
}
else {
std::cout << "传说币不足,无法购买。" << std::endl;
}
}
}
}
// 升级技能
void upgradeSkill() {
setConsoleColorAndBackground(6, 0); // 金黄色文字,黑色背景
std::cout << "升级技能:" << std::endl;
std::cout << "1. 普通攻击 (" << normalAttackLevel << "/20) 升级费用: " << normalAttackCost << " 传说币" << std::endl;
std::cout << "2. 重击攻击 (" << heavyAttackLevel << "/20) 升级费用: " << heavyAttackCost << " 传说币" << std::endl;
std::cout << "3. 终极技能 (" << ultimateSkillLevel << "/20) 升级费用: " << ultimateSkillCost << " 传说币" << std::endl;
std::cout << "4. 返回" << std::endl;
std::cout << "选择要升级的技能 (输入编号): ";
int choice;
std::cin >> choice;
switch (choice) {
case 1:
if (legendCoins >= normalAttackCost && normalAttackLevel < 20) {
legendCoins -= normalAttackCost;
normalAttackLevel++;
normalAttackCost += 50;
std::cout << "普通攻击升级成功!当前等级: " << normalAttackLevel << std::endl;
}
else {
std::cout << "传说币不足或已达到最大等级!" << std::endl;
}
break;
case 2:
if (legendCoins >= heavyAttackCost && heavyAttackLevel < 20) {
legendCoins -= heavyAttackCost;
heavyAttackLevel++;
heavyAttackCost += 50;
std::cout << "重击攻击升级成功!当前等级: " << heavyAttackLevel << std::endl;
}
else {
std::cout << "传说币不足或已达到最大等级!" << std::endl;
}
break;
case 3:
if (legendCoins >= ultimateSkillCost && ultimateSkillLevel < 20) {
legendCoins -= ultimateSkillCost;
ultimateSkillLevel++;
ultimateSkillCost += 50;
std::cout << "终极技能升级成功!当前等级: " << ultimateSkillLevel << std::endl;
}
else {
std::cout << "传说币不足或已达到最大等级!" << std::endl;
}
break;
case 4:
std::cout << "返回游戏主界面。" << std::endl;
break;
default:
std::cout << "无效的选择,请重新输入。" << std::endl;
}
Sleep(1500); // 等待 1.5 秒
system("cls"); // 刷新窗口
}
// 提升等级
void levelUp() {
defeatedEnemies++;
if (defeatedEnemies % 2 == 0 && level < maxLevel) {
level++;
maxHp += 5000;
attack += 3000;
if (hp > maxHp) {
hp = maxHp;
}
std::cout << "你击败了 2 个怪物,提升到了 " << level << " 级!" << std::endl;
}
}
};
// 击败敌人后获得装备和传说币
void getEquipmentAndCoins(Player& player, const std::string& enemyName) {
int num = (enemyName == "虚空" || enemyName == "虚空凋零" || enemyName == "神之使徒") ? 5 : rand() % 5 + 1; // 1~5 个装备
int potions = (enemyName == "虚空" || enemyName == "虚空凋零" || enemyName == "神之使徒") ? 50 : 10; // 回血药数量
player.healthPotions += potions;
player.legendCoins += 10; // 每击败一个怪物获得10个传说币
std::cout << "你获得了 " << potions << " 个回血药,当前回血药数量: " << player.healthPotions << std::endl;
std::cout << "你获得了 10 传说币,当前传说币: " << player.legendCoins << std::endl;
for (int i = 0; i < num; ++i) {
int randNum = rand() % 10000; // 使用10000作为基数,方便调整爆率
if (randNum < 100) { // 1% 爆率
player.backpack.push_back("创世铠甲");
std::cout << "你获得了创世铠甲!" << std::endl;
}
else if (randNum < 200) { // 1% 爆率
player.backpack.push_back("战神圣衣");
std::cout << "你获得了战神圣衣!" << std::endl;
}
else if (randNum < 700) { // 5% 爆率
player.backpack.push_back("青铜法袍");
std::cout << "你获得了青铜法袍!" << std::endl;
}
else if (randNum < 1000) { // 3% 爆率
player.backpack.push_back("朱红护甲");
std::cout << "你获得了朱红护甲!" << std::endl;
}
else if (randNum < 1100) { // 0.1% 爆率
player.backpack.push_back("灭世战甲");
std::cout << "你获得了灭世战甲!" << std::endl;
}
randNum = rand() % 10000; // 使用10000作为基数,方便调整爆率
if (randNum < 100) { // 1% 爆率
player.backpack.push_back("创世神剑");
std::cout << "你获得了创世神剑!" << std::endl;
}
else if (randNum < 200) { // 1% 爆率
player.backpack.push_back("天顶法杖");
std::cout << "你获得了天顶法杖!" << std::endl;
}
else if (randNum < 700) { // 5% 爆率
player.backpack.push_back("青铜法器");
std::cout << "你获得了青铜法器!" << std::endl;
}
else if (randNum < 1000) { // 3% 爆率
player.backpack.push_back("赤红魔剑");
std::cout << "你获得了赤红魔剑!" << std::endl;
}
else if (randNum < 1100) { // 0.1% 爆率
player.backpack.push_back("灭世神剑");
std::cout << "你获得了灭世神剑!" << std::endl;
}
else if (randNum < 1200) { // 0.1% 爆率
player.backpack.push_back("虚空魔神剑");
std::cout << "你获得了虚空魔神剑!" << std::endl;
}
else if (randNum < 1300) { // 0.1% 爆率
player.backpack.push_back("虚空魔神铠");
std::cout << "你获得了虚空魔神铠!" << std::endl;
}
if (player.currentMap == "传说之海" &&
(enemyName == "海洋领主" || enemyName == "神之海王" || enemyName == "海怪" || enemyName == "变异海盗王")) {
randNum = rand() % 100;
if (randNum < 10) { // 10% 爆率
player.backpack.push_back("神圣之护铠");
std::cout << "你获得了神圣之护铠!" << std::endl;
}
else if (randNum < 20) { // 10% 爆率
player.backpack.push_back("神圣之神剑");
std::cout << "你获得了神圣之神剑!" << std::endl;
}
}
}
player.levelUp();
player.autoSave(); // 自动存档
}
// 战斗界面
bool battle(Player& player, const std::string& currentMap) {
setConsoleColorAndBackground(4, 0); // 血红色文字,黑色背景
system("cls"); // 刷新窗口
Enemy enemy = generateRandomEnemy(currentMap);
std::cout << "你遭遇了 " << enemy.name << "!" << std::endl;
while (player.hp > 0 && enemy.hp > 0) {
std::cout << "你的生命值: " << player.hp << "/" << player.maxHp << " 敌人生命值: " << enemy.hp << std::endl;
std::cout << "1. 攻击 2. 使用物品 3. 查看装备 4. 逃跑" << std::endl;
int choice;
std::cin >> choice;
switch (choice) {
case 1: {
std::cout << "选择攻击方式:" << std::endl;
std::cout << "1. 普通攻击" << std::endl;
std::cout << "2. 重击攻击" << std::endl;
std::cout << "3. 终极技能" << std::endl;
int attackChoice;
std::cin >> attackChoice;
int playerDamage = player.attack + player.magicDamage + player.physicalDamage;
switch (attackChoice) {
case 1:
enemy.hp -= playerDamage * player.normalAttackLevel;
std::cout << "你对 " << enemy.name << " 造成了 " << playerDamage * player.normalAttackLevel << " 点伤害!" << std::endl;
break;
case 2:
enemy.hp -= playerDamage * player.heavyAttackLevel * 2;
std::cout << "你对 " << enemy.name << " 造成了 " << playerDamage * player.heavyAttackLevel * 2 << " 点伤害!" << std::endl;
break;
case 3:
enemy.hp -= playerDamage * player.ultimateSkillLevel * 10;
std::cout << "你对 " << enemy.name << " 造成了 " << playerDamage * player.ultimateSkillLevel * 10 << " 点伤害!" << std::endl;
break;
default:
std::cout << "无效的攻击选择。" << std::endl;
break;
}
if (enemy.hp > 0) {
player.hp -= enemy.attack;
std::cout << enemy.name << " 对你造成了 " << enemy.attack << " 点伤害!" << std::endl;
}
Sleep(1500); // 等待 1.5 秒
system("cls"); // 刷新窗口
break;
}
case 2: {
std::cout << "选择使用物品:" << std::endl;
std::cout << "1. 回血药" << std::endl;
std::cout << "2. 大补药" << std::endl;
int itemChoice;
std::cin >> itemChoice;
if (itemChoice == 1) {
player.useHealthPotion();
}
else if (itemChoice == 2) {
player.useBigHealthPotion();
}
break;
}
case 3:
std::cout << "当前护甲: " << player.armor << std::endl;
std::cout << "当前武器: " << player.weapon << std::endl;
break;
case 4: {
int escapeChance = rand() % 100;
if (escapeChance < 50) {
std::cout << "你成功逃跑了!" << std::endl;
setConsoleColorAndBackground(6, 0); // 变回金黄色文字
return false;
}
else {
std::cout << "你逃跑失败!" << std::endl;
player.hp -= enemy.attack;
std::cout << enemy.name << " 对你造成了 " << enemy.attack << " 点伤害!" << std::endl;
}
break;
}
default:
std::cout << "无效的选择,请重新输入。" << std::endl;
}
}
if (player.hp > 0) {
std::cout << "你击败了 " << enemy.name << "!" << std::endl;
getEquipmentAndCoins(player, enemy.name);
}
else {
std::cout << "你被 " << enemy.name << " 击败了!" << std::endl;
player.deleteSave(); // 删除存档
}
setConsoleColorAndBackground(6, 0); // 变回金黄色文字
system("cls"); // 刷新窗口
return player.hp > 0;
}
// 地图选择
void selectMap(Player& player) {
std::cout << "选择地图:" << std::endl;
std::cout << "1. 使命之地" << std::endl;
if (player.level >= 50) {
std::cout << "2. 虚空领域" << std::endl;
}
if (player.level >= 200) {
std::cout << "3. 传说之海" << std::endl;
}
int choice;
std::cin >> choice;
if (choice == 1) {
player.currentMap = "使命之地";
player.maxLevel = 200; // 使命之地的等级上限为200
}
else if (choice == 2 && player.level >= 50) {
player.currentMap = "虚空领域";
player.maxLevel = 200; // 虚空领域的等级上限为200
}
else if (choice == 3 && player.level >= 200) {
player.currentMap = "传说之海";
player.maxLevel = 1000; // 传说之海的等级上限为1000
}
else {
std::cout << "无效的选择,已自动选择使命之地。" << std::endl;
player.currentMap = "使命之地";
player.maxLevel = 200; // 默认选择使命之地,等级上限为200
}
std::cout << "当前地图:" << player.currentMap << ",等级上限:" << player.maxLevel << std::endl;
player.autoSave(); // 自动存档
}
// 背包系统
void backpackSystem(Player& player) {
setConsoleColorAndBackground(6, 0); // 金黄色文字,黑色背景
std::cout << "你的背包:" << std::endl;
for (size_t i = 0; i < player.backpack.size(); ++i) {
std::cout << i + 1 << ". " << player.backpack[i] << std::endl;
}
std::cout << "选择要装备的物品 (输入编号, 0 退出): ";
int choice;
std::cin >> choice;
if (choice > 0 && choice <= static_cast<int>(player.backpack.size())) {
std::string item = player.backpack[choice - 1];
if (item == "创世铠甲" || item == "战神圣衣" || item == "青铜法袍" || item == "朱红护甲" || item == "灭世战甲" || item == "虚空魔神铠" || item == "神圣之护铠") {
player.equipArmor(item);
}
else if (item == "创世神剑" || item == "天顶法杖" || item == "青铜法器" || item == "赤红魔剑" || item == "灭世神剑" || item == "虚空魔神剑" || item == "神圣之神剑") {
player.equipWeapon(item);
}
player.backpack.erase(player.backpack.begin() + choice - 1);
}
}
// 加载存档
bool loadSave(Player& player) {
std::ifstream saveFile("savegame.txt");
if (!saveFile) {
return false;
}
try {
saveFile >> player.level >> player.hp >> player.maxHp >> player.attack
>> player.physicalDamage >> player.magicDamage
>> player.armor >> player.weapon
>> player.legendCoins >> player.healthPotions
>> player.bigHealthPotions >> player.currentMap
>> player.normalAttackLevel >> player.heavyAttackLevel
>> player.ultimateSkillLevel >> player.defeatedEnemies >> player.maxLevel;
if (saveFile.fail()) {
throw std::runtime_error("存档文件读取错误");
}
std::string item;
player.backpack.clear();
while (std::getline(saveFile >> std::ws, item) && !item.empty()) {
player.backpack.push_back(item);
}
// 重新应用装备属性
player.addStatsFromArmor(player.armor);
player.addStatsFromWeapon(player.weapon);
}
catch (const std::exception& e) {
std::cerr << "存档加载错误: " << e.what() << std::endl;
return false;
}
return true;
}
// 游戏主循环
void gameLoop(Player& player) {
setConsoleColorAndBackground(6, 0); // 金黄色文字,黑色背景
// 加载存档
if (loadSave(player)) {
std::cout << "存档加载成功!" << std::endl;
}
else {
std::cout << "未找到存档,将创建新游戏。" << std::endl;
}
system("cls"); // 刷新窗口
while (true) {
std::cout << "当前等级: " << player.level << "/" << player.maxLevel << std::endl;
std::cout << "当前生命值: " << player.hp << "/" << player.maxHp << std::endl;
std::cout << "当前攻击力: " << player.attack << std::endl;
std::cout << "当前魔法附加伤害: " << player.magicDamage << std::endl;
std::cout << "当前物理附加伤害: " << player.physicalDamage << std::endl;
std::cout << "当前护甲: " << player.armor << std::endl;
std::cout << "当前武器: " << player.weapon << std::endl;
std::cout << "当前回血药数量: " << player.healthPotions << std::endl;
std::cout << "当前大补药数量: " << player.bigHealthPotions << std::endl;
std::cout << "当前传说币数量: " << player.legendCoins << std::endl;
std::cout << "当前地图:" << player.currentMap << std::endl;
std::cout << "1. 战斗 2. 背包 3. 选择地图 4. 商店 5. 升级技能 6. 退出游戏" << std::endl;
int choice;
std::cin >> choice;
switch (choice) {
case 1:
battle(player, player.currentMap);
break;
case 2:
backpackSystem(player);
break;
case 3:
selectMap(player);
break;
case 4:
player.tradeEquipment();
break;
case 5:
player.upgradeSkill();
break;
case 6:
player.autoSave(); // 自动存档
return;
default:
std::cout << "无效的选择,请重新输入。" << std::endl;
}
// 检查护甲和武器显示是否正确
bool needRefresh = false;
std::vector<std::string> armors = { "创世铠甲", "战神圣衣", "青铜法袍", "朱红护甲", "灭世战甲", "虚空魔神铠", "神圣之护铠" };
std::vector<std::string> weapons = { "创世神剑", "天顶法杖", "青铜法器", "赤红魔剑", "灭世神剑", "虚空魔神剑", "神圣之神剑" };
if (std::find(armors.begin(), armors.end(), player.weapon) != armors.end()) {
player.backpack.push_back(player.weapon);
player.weapon.clear();
needRefresh = true;
}
if (std::find(weapons.begin(), weapons.end(), player.armor) != weapons.end()) {
player.backpack.push_back(player.armor);
player.armor.clear();
needRefresh = true;
}
if (needRefresh) {
system("cls");
}
Sleep(1500); // 等待 1.5 秒
system("cls"); // 刷新窗口
}
}
int main() {
srand(static_cast<unsigned int>(time(nullptr)));
setConsoleColorAndBackground(6, 0); // 设置控制台默认颜色和背景
startMenu();
loadingScreen();
Player player;
gameLoop(player);
return 0;
}