114514
2026-08-04 15:17:07
发布于:浙江
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
// 属性枚举
enum Type {
FIRE, GRASS, WATER
};
// 咕噜球类型
enum BallType {
BALL_NORMAL, // 普通咕噜球
BALL_MEDIUM, // 中级咕噜球
BALL_HIGH // 高级咕噜球
};
// 宠物结构体
struct Pet {
string name;
Type type;
int hp;
int maxHp;
int attack;
int level;
string getTypeName() const {
if (type == FIRE) return "火系";
if (type == GRASS) return "草系";
return "水系";
}
// 属性克制伤害计算
double getRate(const Pet& enemy) const {
if (type == FIRE && enemy.type == GRASS) return 2.0;
if (type == GRASS && enemy.type == WATER) return 2.0;
if (type == WATER && enemy.type == FIRE) return 2.0;
if (type == GRASS && enemy.type == FIRE) return 0.5;
if (type == WATER && enemy.type == GRASS) return 0.5;
if (type == FIRE && enemy.type == WATER) return 0.5;
return 1.0;
}
int attackEnemy(Pet& enemy) {
double rate = getRate(enemy);
int damage = static_cast<int>(attack * rate * (0.8 + (rand() % 5) / 10.0));
enemy.hp -= damage;
if (enemy.hp < 0) enemy.hp = 0;
return damage;
}
};
// 玩家背包
struct Bag {
int normalBall; // 普通咕噜球
int mediumBall; // 中级咕噜球
int highBall; // 高级咕噜球
Bag() {
normalBall = 10;
mediumBall = 3;
highBall = 1;
}
};
// 创建初始宠物
Pet createPet(int select) {
Pet p;
p.level = 5;
if (select == 1) {
p.name = "火花";
p.type = FIRE;
p.maxHp = 65;
p.attack = 18;
} else if (select == 2) {
p.name = "喵喵";
p.type = GRASS;
p.maxHp = 68;
p.attack = 16;
} else {
p.name = "水蓝蓝";
p.type = WATER;
p.maxHp = 72;
p.attack = 15;
}
p.hp = p.maxHp;
return p;
}
// 捕捉系统核心函数
bool tryCapture(Pet& target, BallType ball, Bag& bag)
{
// 检查咕噜球数量
if (ball == BALL_NORMAL) {
if (bag.normalBall <= 0) {
cout << "普通咕噜球不足!\n";
return false;
}
bag.normalBall--;
} else if (ball == BALL_MEDIUM) {
if (bag.mediumBall <= 0) {
cout << "中级咕噜球不足!\n";
return false;
}
bag.mediumBall--;
} else {
if (bag.highBall <= 0) {
cout << "高级咕噜球不足!\n";
return false;
}
bag.highBall--;
}
cout << "\n抛出咕噜球......\n";
// 基础捕捉概率
double baseRate = 0.0;
if (ball == BALL_NORMAL) baseRate = 0.20;
if (ball == BALL_MEDIUM) baseRate = 0.35;
if (ball == BALL_HIGH) baseRate = 0.55;
// 血量越低捕捉概率越高
double hpPercent = static_cast<double>(target.hp) / target.maxHp;
double hpBonus = 1.0 - hpPercent; // 残血加成
double finalRate = baseRate + hpBonus * 0.35;
if (finalRate > 0.95) finalRate = 0.95; // 上限95%
// 模拟摇晃
cout << "摇一下......\n";
cout << "摇两下......\n";
cout << "摇三下......\n";
double randVal = static_cast<double>(rand()) / RAND_MAX;
if (randVal < finalRate) {
cout << "✅捕捉成功!" << target.name << "成为你的伙伴!\n";
return true;
} else {
cout << "❌捕捉失败!宠物挣脱了咕噜球!\n";
return false;
}
}
void showBag(const Bag& bag)
{
cout << "\n===== 背包咕噜球 =====" << endl;
cout << "普通咕噜球:" << bag.normalBall << endl;
cout << "中级咕噜球:" << bag.mediumBall << endl;
cout << "高级咕噜球:" << bag.highBall << endl;
}
// 战斗界面
void battle(Pet& player, Pet& wild, Bag& bag) {
cout << "\n===== 野生" << wild.name << "出现了!=====\n";
while (player.hp > 0 && wild.hp > 0) {
cout << "\n【你的" << player.name << " HP:" << player.hp << "/" << player.maxHp << "】\n";
cout << "【野生" << wild.name << " HP:" << wild.hp << "/" << wild.maxHp << "】\n";
cout << "1.攻击 2.使用咕噜球捕捉 3.查看背包 4.逃跑\n";
int op;
cin >> op;
if (op == 4) {
if (rand() % 2 == 0) {
cout << "逃跑成功!\n";
return;
} else {
cout << "逃跑失败!\n";
}
}
else if (op == 3) {
showBag(bag);
continue;
}
else if (op == 2) {
cout << "选择咕噜球:1普通 2中级 3高级\n";
int ballSel;
cin >> ballSel;
BallType bt;
if (ballSel == 1) bt = BALL_NORMAL;
else if (ballSel == 2) bt = BALL_MEDIUM;
else bt = BALL_HIGH;
tryCapture(wild, bt, bag);
// 捕捉成功直接结束战斗
if (wild.hp <= 0) break;
}
else if (op == 1) {
int dmg = player.attackEnemy(wild);
cout << player.name << "发起攻击,造成 " << dmg << " 点伤害!\n";
if (wild.hp <= 0) {
cout << wild.name << "被打倒了,无法捕捉!\n";
break;
}
// 野怪反击
dmg = wild.attackEnemy(player);
cout << wild.name << "发起攻击,造成 " << dmg << " 点伤害!\n";
}
}
if (player.hp <= 0) {
cout << "\n❌战斗失败!\n";
}
}
int main() {
srand((unsigned)time(nullptr));
Bag playerBag;
cout << "========== 洛克王国(C++控制台版)==========\n";
cout << "请选择你的初始宠物:\n";
cout << "1.火花(火系) 2.喵喵(草系) 3.水蓝蓝(水系)\n";
int choice;
cin >> choice;
Pet myPet = createPet(choice);
cout << "你选择了:" << myPet.name << "【" << myPet.getTypeName() << "】\n";
// 生成野怪
int r = rand() % 3 + 1;
Pet wildPet = createPet(r);
wildPet.name = "野生" + wildPet.name;
battle(myPet, wildPet, playerBag);
cout << "\n游戏结束!\n";
return 0;
}
这里空空如也





















有帮助,赞一个