#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
// 解决min/max和Windows宏冲突(Dev C++必备)
#undef min
#undef max
// 玩家结构体(新增附魔相关属性)
struct Player{
int blood=100;
int Max_blood=100;
int Attack=50;
int Defence=20;
int money=100;
int level=1;
bool Die=false;
// 升级相关属性
int currentExp=0;
int expToNextLevel=50;
// 附魔相关:记录当前装备的附魔等级
int weaponEnchantLevel=0; // 武器附魔等级(0-3)
int defenceEnchantLevel=0; // 护符附魔等级(0-3)
// 道具持有量(附魔石)
int lowEnchantStone=0; // 低级附魔石
int midEnchantStone=0; // 中级附魔石
int highEnchantStone=0; // 高级附魔石
};
// 史莱姆怪物结构体
struct Slime{
string name;
int blood;
int Attack;
int Defence;
int colorCode;
};
// 道具/武器结构体(新增附魔相关字段)
struct Item{
string name;
string type; // weapon/prop/enchant(附魔石)
int price;
int effectValue; // 基础效果值
int unlockLevel; // 解锁等级
string desc;
int maxEnchant; // 最大附魔等级
};
// 颜色常量定义
#define COLOR_BLUE 1
#define COLOR_GREEN 2
#define COLOR_SKY 3
#define COLOR_RED 4
#define COLOR_PURPLE 5
#define COLOR_YELLOW 6
#define COLOR_WHITE 7
#define COLOR_GRAY 8
#define COLOR_WATER 9
// 设置控制台文字颜色
void setConsoleColor(int color) {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
// 隐藏控制台光标
void hideCursor() {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cursorInfo;
GetConsoleCursorInfo(hConsole, &cursorInfo);
cursorInfo.bVisible = false;
SetConsoleCursorInfo(hConsole, &cursorInfo);
}
// 清理cin输入缓冲区(解决无效输入导致的卡死问题)
void clearCinBuffer() {
cin.clear(); // 重置输入状态
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区
}
// 计算伤害的核心函数
int calculateDamage(int attackerAtk, int defenderDef) {
int damage = attackerAtk - defenderDef;
return (damage > 1) ? damage : 1;
}
// 初始化不同类型的史莱姆
Slime initSlime(int type) {
Slime slime;
switch(type) {
case 1:
slime.name = "蓝色史莱姆";
slime.blood = 50 + (rand() % 10);
slime.Attack = 10;
slime.Defence = 10;
slime.colorCode = COLOR_BLUE;
break;
case 2:
slime.name = "紫色史莱姆";
slime.blood = 75 + (rand() % 15);
slime.Attack = 5;
slime.Defence = 15;
slime.colorCode = COLOR_PURPLE;
break;
case 3:
slime.name = "红色史莱姆";
slime.blood = 45 + (rand() % 10);
slime.Attack = 15;
slime.Defence = 8;
slime.colorCode = COLOR_RED;
break;
case 4:
slime.name = "冰史莱姆";
slime.blood = 50 + (rand() % 10);
slime.Attack = 10;
slime.Defence = 5;
slime.colorCode = COLOR_SKY;
break;
default:
slime.name = "蓝色史莱姆";
slime.blood = 50;
slime.Attack = 10;
slime.Defence = 10;
slime.colorCode = COLOR_BLUE;
break;
}
return slime;
}
// 初始化商店物品列表(新增更多装备+附魔道具)
vector<Item> initShopItems() {
vector<Item> items;
// 武器类(新增更多等级武器)
items.push_back({"青铜剑", "weapon", 50, 10, 1, "攻击力+10", 3});
items.push_back({"铁剑", "weapon", 100, 20, 2, "攻击力+20", 3});
items.push_back({"钻石剑", "weapon", 200, 35, 3, "攻击力+35", 3});
items.push_back({"王者之剑", "weapon", 500, 60, 5, "攻击力+60(等级5解锁)", 3});
items.push_back({"屠龙刀", "weapon", 800, 80, 7, "攻击力+80(等级7解锁)", 3});
}
// 附魔功能函数(核心:给武器/护符附魔)
void enchantSystem(Player &player) {
system("cls");
hideCursor();
setConsoleColor(COLOR_YELLOW);
cout << "==================== 附魔工坊 " << endl;
setConsoleColor(COLOR_GREEN);
cout << "当前金币:" << player.money << " | 玩家等级:Lv." << player.level << endl;
setConsoleColor(COLOR_PURPLE);
cout << "附魔石持有:低级x" << player.lowEnchantStone
<< " | 中级x" << player.midEnchantStone
<< " | 高级x" << player.highEnchantStone << endl;
setConsoleColor(COLOR_WHITE);
cout << "" << endl;
setConsoleColor(COLOR_SKY);
cout << "【当前附魔状态】" << endl;
cout << "武器附魔等级:Lv." << player.weaponEnchantLevel
<< "(攻击力加成:+" << player.weaponEnchantLevel * 5 + (player.weaponEnchantLevel>1?5:0) + (player.weaponEnchantLevel>2?10:0) << ")" << endl;
cout << "护符附魔等级:Lv." << player.defenceEnchantLevel
<< "(防御力加成:+" << player.defenceEnchantLevel * 5 + (player.defenceEnchantLevel>1?5:0) + (player.defenceEnchantLevel>2?10:0) << ")" << endl;
setConsoleColor(COLOR_WHITE);
cout << "====================" << endl;
cout << "1. 武器附魔(当前Lv." << player.weaponEnchantLevel << "/3)" << endl;
cout << "2. 护符附魔(当前Lv." << player.defenceEnchantLevel << "/3)" << endl;
cout << "0. 返回商店" << endl;
cout << "请选择附魔类型(输入数字,按回车确认):";
}
// 升级处理函数
void levelUp(Player &player) {
player.level++;
setConsoleColor(COLOR_RED);
cout << "\n=====================================" << endl;
cout << " 升级成功! " << endl;
cout << " 当前等级:Lv." << player.level << endl;
cout << "=====================================" << endl;
}
// 商店系统函数(新增附魔选项+更多装备)
void shopSystem(Player &player) {
vector<Item> items = initShopItems();
while(true) {
system("cls");
hideCursor();
setConsoleColor(COLOR_YELLOW);
cout << "==================== 史莱姆商店 " << endl;
setConsoleColor(COLOR_GREEN);
cout << "当前金币:" << player.money << " | 玩家等级:Lv." << player.level << endl;
setConsoleColor(COLOR_WHITE);
cout << "================================" << endl;
}
// 战斗流程函数
void battle(Player &player, Slime &slime) {
system("cls");
hideCursor();
cout << "==================== 战斗开始 " << endl;
setConsoleColor(COLOR_GREEN);
cout << "玩家状态:血量 " << player.blood << "/" << player.Max_blood
<< " | 攻击力 " << player.Attack << " | 防御力 " << player.Defence << " | 等级 Lv." << player.level << endl;
setConsoleColor(slime.colorCode);
cout << slime.name << " 状态:血量 " << slime.blood
<< " | 攻击力 " << slime.Attack << " | 防御力 " << slime.Defence << endl;
setConsoleColor(COLOR_WHITE);
cout << "==============================" << endl;
cout << "按任意键开始攻击...(退出按ESC)" << endl;
_getch();
}
// 游戏主菜单(优化玩家状态显示,增加附魔信息)
void mainMenu(Player &player) {
while(!player.Die) {
system("cls");
hideCursor();
setConsoleColor(COLOR_YELLOW);
cout << "==================== 史莱姆大作战 " << endl;
setConsoleColor(COLOR_WHITE);
cout << "1. 挑战史莱姆" << endl;
cout << "2. 查看玩家状态" << endl;
cout << "3. 商店(购买武器/道具/附魔石)" << endl;
cout << "4. 退出游戏" << endl;
cout << "==================================" << endl;
cout << "请选择操作(输入数字,按回车确认):";
}
int main(){
SetConsoleTitleA("史莱姆大作战 - 控制台版");
Player player;
}