别喷
2026-04-23 18:58:38
发布于:浙江
@洛奇亚玩了你做的,挺好玩,也做了一篇
此帖全为AI所做,没有炫耀,张扬的意思,纯属好玩而已,轻点喷
//AI制作
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
enum Type {
NORMAL, FIRE, WATER, GRASS, ELECTRIC,
ICE, FIGHTING, POISON, GROUND, FLYING,
PSYCHIC, BUG, ROCK, GHOST, DARK,
DRAGON, STEEL, FAIRY
};
string typeName(Type t) {
switch(t) {
case NORMAL: return "一般";
case FIRE: return "火";
case WATER: return "水";
case GRASS: return "草";
case ELECTRIC: return "电";
case ICE: return "冰";
case FIGHTING: return "格斗";
case POISON: return "毒";
case GROUND: return "地面";
case FLYING: return "飞行";
case PSYCHIC: return "超能力";
case BUG: return "虫";
case ROCK: return "岩";
case GHOST: return "幽灵";
case DARK: return "恶";
case DRAGON: return "龙";
case STEEL: return "钢";
case FAIRY: return "妖精";
default: return "无";
}
}
double getEffectiveness(Type atk, Type def) {
if (atk == FIRE) {
if (def == GRASS || def == BUG || def == ICE || def == STEEL) return 2.0;
if (def == FIRE || def == WATER || def == ROCK) return 0.5;
}
if (atk == WATER) {
if (def == FIRE || def == GROUND || def == ROCK) return 2.0;
if (def == WATER || def == GRASS || def == DRAGON) return 0.5;
}
if (atk == GRASS) {
if (def == WATER || def == GROUND || def == ROCK) return 2.0;
if (def == FIRE || def == GRASS || def == POISON || def == FLYING || def == BUG || def == DRAGON || def == STEEL) return 0.5;
}
if (atk == ELECTRIC) {
if (def == WATER || def == FLYING) return 2.0;
if (def == ELECTRIC || def == GRASS || def == DRAGON) return 0.5;
if (def == GROUND) return 0.0;
}
if (atk == GROUND) {
if (def == FIRE || def == ELECTRIC || def == POISON || def == ROCK || def == STEEL) return 2.0;
if (def == GRASS || def == BUG) return 0.5;
if (def == FLYING) return 0.0;
}
if (atk == FIGHTING) {
if (def == NORMAL || def == ICE || def == ROCK || def == DARK || def == STEEL) return 2.0;
if (def == POISON || def == FLYING || def == PSYCHIC || def == BUG || def == FAIRY) return 0.5;
if (def == GHOST) return 0.0;
}
if (atk == PSYCHIC) {
if (def == FIGHTING || def == POISON) return 2.0;
if (def == PSYCHIC || def == STEEL) return 0.5;
if (def == DARK) return 0.0;
}
if (atk == ICE) {
if (def == GRASS || def == GROUND || def == FLYING || def == DRAGON) return 2.0;
if (def == FIRE || def == WATER || def == ICE || def == STEEL) return 0.5;
}
if (atk == DRAGON) {
if (def == DRAGON) return 2.0;
if (def == STEEL) return 0.5;
if (def == FAIRY) return 0.0;
}
if (atk == DARK) {
if (def == PSYCHIC || def == GHOST) return 2.0;
if (def == FIGHTING || def == DARK || def == FAIRY) return 0.5;
}
if (atk == GHOST) {
if (def == PSYCHIC || def == GHOST) return 2.0;
if (def == DARK) return 0.5;
if (def == NORMAL) return 0.0;
}
if (atk == STEEL) {
if (def == ICE || def == ROCK || def == FAIRY) return 2.0;
if (def == FIRE || def == WATER || def == ELECTRIC || def == STEEL) return 0.5;
}
if (atk == FAIRY) {
if (def == FIGHTING || def == DRAGON || def == DARK) return 2.0;
if (def == FIRE || def == POISON || def == STEEL) return 0.5;
}
if (atk == POISON) {
if (def == GRASS || def == FAIRY) return 2.0;
if (def == POISON || def == GROUND || def == ROCK || def == GHOST) return 0.5;
if (def == STEEL) return 0.0;
}
if (atk == FLYING) {
if (def == GRASS || def == FIGHTING || def == BUG) return 2.0;
if (def == ELECTRIC || def == ROCK || def == STEEL) return 0.5;
}
if (atk == BUG) {
if (def == GRASS || def == PSYCHIC || def == DARK) return 2.0;
if (def == FIRE || def == FIGHTING || def == POISON || def == FLYING || def == GHOST || def == STEEL || def == FAIRY) return 0.5;
}
if (atk == ROCK) {
if (def == FIRE || def == ICE || def == FLYING || def == BUG) return 2.0;
if (def == FIGHTING || def == GROUND || def == STEEL) return 0.5;
}
return 1.0;
}
double calcTotalEffect(Type atk, Type def1, Type def2) {
return getEffectiveness(atk, def1) * getEffectiveness(atk, def2);
}
struct Skill {
string name;
Type type;
int power;
int hitRate;
int critRate;
// 默认构造函数
Skill() : name(""), type(NORMAL), power(0), hitRate(0), critRate(0) {}
// 带参数的构造函数
Skill(string n, Type t, int p, int h, int c) : name(n), type(t), power(p), hitRate(h), critRate(c) {}
};
struct Pokemon {
string name;
Type type1, type2;
int maxHp, hp;
int atk, def, speed;
string ability;
Skill skill[4];
bool isActive = false;
bool isFainted = false;
// 默认构造函数
Pokemon() : name(""), type1(NORMAL), type2(NORMAL), maxHp(0), hp(0), atk(0), def(0), speed(0), ability("") {
for (int i = 0; i < 4; i++) skill[i] = Skill(); // 初始化技能数组
}
// 带参数的构造函数
Pokemon(string n, Type t1, Type t2, int mH, int curH, int a, int d, int s, string ab, Skill s1, Skill s2, Skill s3, Skill s4) :
name(n), type1(t1), type2(t2), maxHp(mH), hp(curH), atk(a), def(d), speed(s), ability(ab) {
skill[0] = s1;
skill[1] = s2;
skill[2] = s3;
skill[3] = s4;
}
};
// --- 特性相关函数 ---
double applyAbilityEffect(Type atkType, Pokemon& defender, double eff) {
if (defender.ability == "厚脂肪" && (atkType == FIRE || atkType == ICE)) {
return eff * 0.5;
}
if (defender.ability == "沙隐" && atkType == GROUND) {
return eff * 0.8; // 简化版效果
}
// 可继续添加更多特性...
return eff;
}
// --- 伤害计算 ---
int calculateDamage(Pokemon& attacker, Skill& s, Pokemon& defender) {
if (rand() % 100 + 1 > s.hitRate) return -1; // -1 表示未命中
double eff = calcTotalEffect(s.type, defender.type1, defender.type2);
eff = applyAbilityEffect(s.type, defender, eff);
if (eff == 0.0) return 0;
// 基础伤害公式:(攻击 + 技能威力) * 效果 / (防御 + 50)
int base = attacker.atk + s.power;
int damage = (base * 50) / (defender.def + 50);
damage = (int)(damage * eff);
// 暴击
bool crit = (rand() % 100 + 1 <= s.critRate);
if (crit) damage = (int)(damage * 1.5); // 暴击通常为1.5倍
return max(1, damage); // 最少造成1点伤害(除非无效)
}
void printHp(Pokemon &p) {
string fainted = p.isFainted ? " [已倒下]" : "";
cout << "[" << p.name << "] HP: " << p.hp << "/" << p.maxHp
<< " 属性:" << typeName(p.type1);
if (p.type2 != NORMAL) cout << "+" << typeName(p.type2);
cout << " (" << typeName(p.type1);
if (p.type2 != NORMAL) cout << "+" << typeName(p.type2);
cout << ") " << fainted << endl;
}
void printTeam(vector<Pokemon>& team) {
cout << "=== 队伍状态 ===" << endl;
for (int i = 0; i < 3; i++) {
cout << " ";
printHp(team[i]);
}
cout << "================" << endl;
}
int attack(Pokemon &user, Skill &s, Pokemon &target) {
cout << "\n" << user.name << " 使用了 【" << s.name << "】(" << typeName(s.type) << " 威力:" << s.power << ")" << endl;
int dmg = calculateDamage(user, s, target);
if (dmg == -1) {
cout << " → 没有命中!" << endl;
return 0;
}
if (dmg == 0) {
cout << " → ❌ 无效!" << endl;
return 0;
}
double eff = calcTotalEffect(s.type, target.type1, target.type2);
eff = applyAbilityEffect(s.type, target, eff);
bool crit = (rand() % 100 + 1 <= s.critRate);
if (eff >= 2.0) cout << " → ✨ 效果绝佳!";
else if (eff <= 0.5 && eff > 0) cout << " → ☁️ 效果不理想…";
if (crit) cout << " 💥 暴击!";
cout << endl;
cout << " → 对【" << target.name << "】造成【" << dmg << "点伤害】!" << endl;
return dmg;
}
void showSkills(Pokemon &p) {
cout << "\n可用技能:" << endl;
for (int i = 0; i < 4; i++) {
cout << i+1 << ". " << p.skill[i].name
<< " [" << typeName(p.skill[i].type) << "]"
<< " 威力:" << p.skill[i].power
<< " 命中:" << p.skill[i].hitRate << "%" << endl;
}
}
int chooseSkill(Pokemon &p) {
showSkills(p);
int c;
cout << "\n选择技能(1-4):";
cin >> c;
while (c < 1 || c > 4) cin >> c;
return c - 1;
}
bool playerFaster(Pokemon& p1, Pokemon& p2) {
if (p1.speed != p2.speed) return p1.speed > p2.speed;
return rand() % 2 == 0; // 速度相同时随机
}
bool allFainted(vector<Pokemon>& team) {
for (auto& p : team) {
if (!p.isFainted) return false;
}
return true;
}
int getActiveIndex(vector<Pokemon>& team) {
for (int i = 0; i < 3; i++) {
if (team[i].isActive && !team[i].isFainted) return i;
}
return -1; // 不应发生
}
int selectPokemon(vector<Pokemon>& team) {
cout << "\n请选择出战的宝可梦:\n";
vector<int> alive;
for (int i = 0; i < 3; i++) {
if (!team[i].isFainted) {
cout << i+1 << ". " << team[i].name
<< " (HP: " << team[i].hp << "/" << team[i].maxHp << ")\n";
alive.push_back(i);
}
}
if (alive.empty()) return -1; // 全灭
int choice;
do {
cout << "输入序号 (1-" << alive.size() << "): ";
cin >> choice;
} while (choice < 1 || choice > alive.size());
int index = alive[choice - 1];
// 将之前活跃的设为非活跃
for (int i = 0; i < 3; i++) {
if (team[i].isActive) team[i].isActive = false;
}
team[index].isActive = true;
return index;
}
//==============================================================================
// 40 只宝可梦正式开始 (新增 def, speed, ability)
//==============================================================================
void Pikachu(Pokemon &p) {
p = Pokemon("皮卡丘", ELECTRIC, NORMAL, 150,150,32,25,70, "静电",
Skill("撞击",NORMAL,40,95,10),
Skill("电光一闪",NORMAL,40,100,10),
Skill("十万伏特",ELECTRIC,90,90,15),
Skill("打雷",ELECTRIC,110,70,20)
);
}
void Charmander(Pokemon &p) {
p = Pokemon("小火龙", FIRE, NORMAL, 155,155,30,20,65, "猛火",
Skill("抓",NORMAL,40,95,10),
Skill("火花",FIRE,40,100,10),
Skill("火焰漩涡",FIRE,35,85,15),
Skill("喷射火焰",FIRE,90,85,15)
);
}
void Squirtle(Pokemon &p) {
p = Pokemon("杰尼龟", WATER, NORMAL, 158,158,29,30,43, "激流",
Skill("撞击",NORMAL,40,95,10),
Skill("水枪",WATER,40,100,10),
Skill("泡沫光线",WATER,65,85,15),
Skill("水炮",WATER,110,80,15)
);
}
void Bulbasaur(Pokemon &p) {
p = Pokemon("妙蛙种子", GRASS, POISON, 160,160,28,25,45, "茂盛",
Skill("撞击",NORMAL,40,95,10),
Skill("藤鞭",GRASS,45,100,10),
Skill("飞叶快刀",GRASS,55,95,20),
Skill("能量球",GRASS,90,80,15)
);
}
void Eevee(Pokemon &p) {
p = Pokemon("伊布", NORMAL, NORMAL, 140,140,25,25,55, "适应力",
Skill("撞击",NORMAL,40,95,10),
Skill("摇尾巴",NORMAL,0,100,0),
Skill("快速攻击",NORMAL,40,100,20),
Skill("珍藏",NORMAL,130,70,20)
);
}
void Psyduck(Pokemon &p) {
p = Pokemon("可达鸭", WATER, PSYCHIC, 155,155,27,20,52, "湿气",
Skill("抓",NORMAL,40,95,10),
Skill("水枪",WATER,40,100,10),
Skill("念力",PSYCHIC,50,100,10),
Skill("精神强念",PSYCHIC,90,90,15)
);
}
void Meowth(Pokemon &p) {
p = Pokemon("喵喵", NORMAL, NORMAL, 140,140,26,20,58, "技术高手",
Skill("抓",NORMAL,40,95,10),
Skill("叫声",NORMAL,0,100,0),
Skill("聚宝功",NORMAL,40,100,10),
Skill("乱抓",NORMAL,18,85,30)
);
}
void Pidgeot(Pokemon &p) {
p = Pokemon("大比鸟", NORMAL, FLYING, 170,170,33,30,101, "锐利目光",
Skill("电光一闪",NORMAL,40,100,10),
Skill("翅膀攻击",FLYING,60,100,15),
Skill("空气斩",FLYING,75,95,20),
Skill("神鸟猛击",FLYING,140,70,30)
);
}
void Arbok(Pokemon &p) {
p = Pokemon("阿柏怪", POISON, NORMAL, 165,165,32,30,80, "威吓",
Skill("毒针",POISON,30,100,20),
Skill("缠绕",NORMAL,40,100,10),
Skill("毒液牙",POISON,50,100,20),
Skill("污泥炸弹",POISON,90,80,20)
);
}
void Gyarados(Pokemon &p) {
p = Pokemon("暴鲤龙", WATER, FLYING, 210,210,55,50,81, "威吓",
Skill("撞击",NORMAL,40,95,10),
Skill("水之波动",WATER,60,100,15),
Skill("攀瀑",WATER,80,90,20),
Skill("破坏光线",NORMAL,150,70,20)
);
}
void Alakazam(Pokemon &p) {
p = Pokemon("胡地", PSYCHIC, NORMAL, 190,190,50,20,120, "同步",
Skill("念力",PSYCHIC,50,100,10),
Skill("精神利刃",PSYCHIC,70,100,20),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("精神冲击",PSYCHIC,80,90,15)
);
}
void Arcanine(Pokemon &p) {
p = Pokemon("风速狗", FIRE, NORMAL, 200,200,48,40,95, "威吓",
Skill("火焰轮",FIRE,60,95,20),
Skill("咬碎",DARK,80,90,20),
Skill("喷射火焰",FIRE,90,85,15),
Skill("大字爆炎",FIRE,110,85,15)
);
}
void Lapras(Pokemon &p) {
p = Pokemon("乘龙", WATER, ICE, 220,220,45,50,60, "储水",
Skill("水枪",WATER,40,100,10),
Skill("冰冻光束",ICE,90,90,15),
Skill("水炮",WATER,110,80,15),
Skill("暴风雪",ICE,110,70,20)
);
}
void Gengar(Pokemon &p) {
p = Pokemon("耿鬼", GHOST, POISON, 180,180,48,30,110, "危险预知",
Skill("舌舔",GHOST,30,100,30),
Skill("暗影拳",GHOST,60,100,20),
Skill("暗影球",GHOST,80,100,15),
Skill("污泥炸弹",POISON,90,80,20)
);
}
void Dragonite(Pokemon &p) {
p = Pokemon("快龙", DRAGON, FLYING, 230,230,60,50,80, "多龙",
Skill("龙爪",DRAGON,80,100,20),
Skill("翅膀攻击",FLYING,60,100,15),
Skill("龙波动",DRAGON,90,100,15),
Skill("逆鳞",DRAGON,120,85,20)
);
}
void Metagross(Pokemon &p) {
p = Pokemon("巨金怪", STEEL, PSYCHIC, 220,220,62,70,70, "毅力",
Skill("念力",PSYCHIC,50,100,10),
Skill("铁头",STEEL,80,100,15),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("彗星拳",STEEL,100,85,20)
);
}
void Salamence(Pokemon &p) {
p = Pokemon("暴飞龙", DRAGON, FLYING, 225,225,61,50,100, "猛火",
Skill("龙爪",DRAGON,80,100,20),
Skill("燕返",FLYING,60,100,20),
Skill("龙波动",DRAGON,90,100,15),
Skill("逆鳞",DRAGON,120,85,20)
);
}
void Tyranitar(Pokemon &p) {
p = Pokemon("班基拉斯", ROCK, DARK, 240,240,65,60,70, "沙隐",
Skill("咬碎",DARK,80,90,20),
Skill("岩崩",ROCK,75,90,20),
Skill("蛮力",FIGHTING,120,80,10),
Skill("尖石攻击",ROCK,100,80,30)
);
}
void Blaziken(Pokemon &p) {
p = Pokemon("火焰鸡", FIRE, FIGHTING, 200,200,58,30,80, "猛火",
Skill("火花",FIRE,40,100,10),
Skill("上天拳",FIGHTING,85,90,15),
Skill("火焰踢",FIRE,85,90,15),
Skill("喷射火焰",FIRE,90,85,15)
);
}
void Gardevoir(Pokemon &p) {
p = Pokemon("沙奈朵", PSYCHIC, FAIRY, 195,195,55,40,80, "同步",
Skill("念力",PSYCHIC,50,100,10),
Skill("魔法闪耀",FAIRY,80,100,15),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("月亮之力",FAIRY,95,90,15)
);
}
void Mewtwo(Pokemon &p) {
p = Pokemon("超梦", PSYCHIC, NORMAL, 280,280,70,30,130, "压迫感",
Skill("念力",PSYCHIC,50,100,10),
Skill("精神冲击",PSYCHIC,80,90,15),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("精神击破",PSYCHIC,120,75,25)
);
}
void Mew(Pokemon &p) {
p = Pokemon("梦幻", PSYCHIC, NORMAL, 260,260,60,40,100, "同步",
Skill("拍击",NORMAL,40,95,10),
Skill("精神波动",PSYCHIC,70,100,15),
Skill("变身",NORMAL,0,100,0),
Skill("精神强念",PSYCHIC,90,90,15)
);
}
void Rayquaza(Pokemon &p) {
p = Pokemon("烈空坐", DRAGON, FLYING, 300,300,75,50,115, "压迫感",
Skill("逆鳞",DRAGON,120,85,20),
Skill("飞翔",FLYING,90,70,15),
Skill("龙波动",DRAGON,90,100,15),
Skill("画龙点睛",DRAGON,180,70,30)
);
}
void Groudon(Pokemon &p) {
p = Pokemon("固拉多", FIRE, GROUND, 310,310,78,60,90, "干燥皮肤",
Skill("地震",GROUND,100,100,20),
Skill("大字爆炎",FIRE,110,85,15),
Skill("断崖之剑",GROUND,120,85,25),
Skill("日光束",GRASS,120,70,20)
);
}
void Kyogre(Pokemon &p) {
p = Pokemon("盖欧卡", WATER, NORMAL, 310,310,75,60,90, "储水",
Skill("水炮",WATER,110,80,15),
Skill("浊流",WATER,90,85,15),
Skill("根源波动",WATER,130,75,25),
Skill("冰冻光束",ICE,90,90,15)
);
}
void Dialga(Pokemon &p) {
p = Pokemon("帝牙卢卡", STEEL, DRAGON, 290,290,72,70,90, "金属特性",
Skill("龙爪",DRAGON,80,100,20),
Skill("铁头",STEEL,80,100,15),
Skill("龙波动",DRAGON,90,100,15),
Skill("时光咆哮",DRAGON,150,70,30)
);
}
void Palkia(Pokemon &p) {
p = Pokemon("帕路奇亚", WATER, DRAGON, 290,290,72,65,100, "压力",
Skill("龙爪",DRAGON,80,100,20),
Skill("水之波动",WATER,60,100,15),
Skill("水炮",WATER,110,80,15),
Skill("亚空裂斩",DRAGON,150,70,30)
);
}
void Giratina(Pokemon &p) {
p = Pokemon("骑拉帝纳", GHOST, DRAGON, 300,300,70,60,90, "压迫感",
Skill("暗影爪",GHOST,70,100,25),
Skill("龙爪",DRAGON,80,100,20),
Skill("暗影球",GHOST,80,100,15),
Skill("影子突袭",GHOST,120,75,25)
);
}
void Arceus(Pokemon &p) {
p = Pokemon("阿尔宙斯", NORMAL, NORMAL, 320,320,80,60,120, "多型",
Skill("制裁光砾",NORMAL,100,100,15),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("地震",GROUND,100,100,20),
Skill("终极冲击",NORMAL,150,70,30)
);
}
void Lugia(Pokemon &p) {
p = Pokemon("洛奇亚", PSYCHIC, FLYING, 295,295,68,65,91, "压迫感",
Skill("空气斩",FLYING,75,95,20),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("水炮",WATER,110,80,15),
Skill("空中爆破",FLYING,100,75,25)
);
}
void HoOh(Pokemon &p) {
p = Pokemon("凤王", FIRE, FLYING, 295,295,70,50,90, "压迫感",
Skill("火焰放射",FIRE,90,85,15),
Skill("神鸟猛击",FLYING,140,70,30),
Skill("大字爆炎",FIRE,110,85,15),
Skill("晨光",FIRE,0,100,0)
);
}
void Zekrom(Pokemon &p) {
p = Pokemon("捷克罗姆", DRAGON, ELECTRIC, 290,290,75,50,90, "压迫感",
Skill("十字交叉闪电",ELECTRIC,100,100,15),
Skill("龙爪",DRAGON,80,100,20),
Skill("打雷",ELECTRIC,110,70,20),
Skill("雷击",ELECTRIC,130,75,25)
);
}
void Reshiram(Pokemon &p) {
p = Pokemon("莱希拉姆", DRAGON, FIRE, 290,290,75,50,90, "压迫感",
Skill("十字交叉火焰",FIRE,100,100,15),
Skill("龙爪",DRAGON,80,100,20),
Skill("喷射火焰",FIRE,90,85,15),
Skill("青焰",FIRE,130,75,25)
);
}
void Kyurem(Pokemon &p) {
p = Pokemon("酋雷姆", DRAGON, ICE, 285,285,70,50,95, "压迫感",
Skill("冰冻光束",ICE,90,90,15),
Skill("龙波动",DRAGON,90,100,15),
Skill("暴风雪",ICE,110,70,20),
Skill("冰封世界",ICE,90,90,15)
);
}
void Xerneas(Pokemon &p) {
p = Pokemon("哲尔尼亚斯", FAIRY, NORMAL, 290,290,68,60,97, "妖精光环",
Skill("魔法闪耀",FAIRY,80,100,15),
Skill("月亮之力",FAIRY,95,90,15),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("大地掌控",FAIRY,0,100,0)
);
}
void Yveltal(Pokemon &p) {
p = Pokemon("伊裴尔塔尔", DARK, FLYING, 290,290,72,55,99, "压迫感",
Skill("恶之波动",DARK,80,100,15),
Skill("空气斩",FLYING,75,95,20),
Skill("暗影球",GHOST,80,100,15),
Skill("死亡之翼",DARK,120,75,25)
);
}
void Zygarde(Pokemon &p) {
p = Pokemon("基格尔德", DRAGON, GROUND, 290,290,70,60,95, "压迫感",
Skill("碎岩",ROCK,40,100,20),
Skill("龙爪",DRAGON,80,100,20),
Skill("地震",GROUND,100,100,20),
Skill("大地神力",GROUND,120,85,20)
);
}
void Silvally(Pokemon &p) {
p = Pokemon("银伴战兽", NORMAL, NORMAL, 270,270,65,50,95, "多型",
Skill("多重攻击",NORMAL,50,100,15),
Skill("铁头",STEEL,80,100,15),
Skill("火焰牙",FIRE,65,95,20),
Skill("雷电牙",ELECTRIC,65,95,20)
);
}
void Necrozma(Pokemon &p) {
p = Pokemon("奈克洛兹玛", PSYCHIC, NORMAL, 280,280,72,55,97, "压迫感",
Skill("念力",PSYCHIC,50,100,10),
Skill("精神利刃",PSYCHIC,70,100,20),
Skill("精神强念",PSYCHIC,90,90,15),
Skill("光子喷涌",PSYCHIC,100,90,20)
);
}
void Eternatus(Pokemon &p) {
p = Pokemon("无极汰那", POISON, DRAGON, 310,310,76,60,95, "压迫感",
Skill("污泥炸弹",POISON,90,80,20),
Skill("龙爪",DRAGON,80,100,20),
Skill("龙波动",DRAGON,90,100,15),
Skill("无极巨炮",POISON,140,70,30)
);
}
Pokemon getPokemonByID(int id) {
Pokemon p("", NORMAL, NORMAL, 0, 0, 0, 0, 0, "", Skill("", NORMAL, 0, 0, 0), Skill("", NORMAL, 0, 0, 0), Skill("", NORMAL, 0, 0, 0), Skill("", NORMAL, 0, 0, 0)); // 创建一个默认实例
switch(id) {
case 1: Pikachu(p); break;
case 2: Charmander(p); break;
case 3: Squirtle(p); break;
case 4: Bulbasaur(p); break;
case 5: Eevee(p); break;
case 6: Psyduck(p); break;
case 7: Meowth(p); break;
case 8: Pidgeot(p); break;
case 9: Arbok(p); break;
case 10: Gyarados(p); break;
case 11: Alakazam(p); break;
case 12: Arcanine(p); break;
case 13: Lapras(p); break;
case 14: Gengar(p); break;
case 15: Dragonite(p); break;
case 16: Metagross(p); break;
case 17: Salamence(p); break;
case 18: Tyranitar(p); break;
case 19: Blaziken(p); break;
case 20: Gardevoir(p); break;
case 21: Mewtwo(p); break;
case 22: Mew(p); break;
case 23: Rayquaza(p); break;
case 24: Groudon(p); break;
case 25: Kyogre(p); break;
case 26: Dialga(p); break;
case 27: Palkia(p); break;
case 28: Giratina(p); break;
case 29: Arceus(p); break;
case 30: Lugia(p); break;
case 31: HoOh(p); break;
case 32: Zekrom(p); break;
case 33: Reshiram(p); break;
case 34: Kyurem(p); break;
case 35: Xerneas(p); break;
case 36: Yveltal(p); break;
case 37: Zygarde(p); break;
case 38: Silvally(p); break;
case 39: Necrozma(p); break;
case 40: Eternatus(p); break;
default: Pikachu(p);
}
return p;
}
vector<Pokemon> playerSelectTeam() {
vector<Pokemon> team(3);
cout << "\n==================== 请选择你的3只宝可梦 (输入3个ID,空格分隔) ====================\n";
cout << "1皮卡丘 2小火龙 3杰尼龟 4妙蛙种子 5伊布 6可达鸭 7喵喵 8大比鸟\n";
cout << "9阿柏怪 10暴鲤龙 11胡地 12风速狗 13乘龙 14耿鬼 15快龙 16巨金怪\n";
cout << "17暴飞龙 18班基拉斯 19火焰鸡 20沙奈朵 21超梦 22梦幻 23烈空坐 24固拉多\n";
cout << "25盖欧卡 26帝牙卢卡 27帕路奇亚 28骑拉帝纳 29阿尔宙斯 30洛奇亚 31凤王\n";
cout << "32捷克罗姆 33莱希拉姆 34酋雷姆 35哲尔尼亚斯 36伊裴尔塔尔 37基格尔德\n";
cout << "38银伴战兽 39奈克洛兹玛 40无极汰那\n";
cout << "==================================================================\n";
int id1, id2, id3;
cin >> id1 >> id2 >> id3;
team[0] = getPokemonByID(id1);
team[1] = getPokemonByID(id2);
team[2] = getPokemonByID(id3);
team[0].isActive = true;
return team;
}
vector<Pokemon> randomEnemyTeam() {
vector<Pokemon> team(3);
for (int i = 0; i < 3; i++) {
team[i] = getPokemonByID(rand() % 40 + 1);
}
team[0].isActive = true;
return team;
}
//==============================================================================
// 主程序
//==============================================================================
int main() {
srand((unsigned)time(NULL));
cout << "===============================" << endl;
cout << " 宝可梦对战 · 3V3 完整版" << endl;
cout << "===============================" << endl;
vector<Pokemon> player = playerSelectTeam();
vector<Pokemon> enemy = randomEnemyTeam();
cout << "\n对战开始!对手是:【";
for (int i = 0; i < 3; i++) {
cout << enemy[i].name;
if (i < 2) cout << ", ";
}
cout << "】" << endl;
while (true) {
// 检查胜负
if (allFainted(player)) {
cout << "\n💀 你的全部宝可梦都倒下了…你输了!" << endl;
break;
}
if (allFainted(enemy)) {
cout << "\n🎉 对手的全部宝可梦都倒下了!你胜利了!" << endl;
break;
}
int playerActive = getActiveIndex(player);
int enemyActive = getActiveIndex(enemy);
// 检查当前宝可梦是否倒下,若倒下则强制换人
if (player[playerActive].hp <= 0) {
player[playerActive].isFainted = true;
player[playerActive].isActive = false;
cout << "\n【" << player[playerActive].name << "】倒下了!" << endl;
if (allFainted(player)) {
cout << "\n💀 你的全部宝可梦都倒下了…你输了!" << endl;
break;
}
selectPokemon(player);
}
if (enemy[enemyActive].hp <= 0) {
enemy[enemyActive].isFainted = true;
enemy[enemyActive].isActive = false;
cout << "\n【" << enemy[enemyActive].name << "】倒下了!" << endl;
if (allFainted(enemy)) {
cout << "\n🎉 对手的全部宝可梦都倒下了!你胜利了!" << endl;
break;
}
// AI 换人 (随机选择一个存活的)
for (int i = 0; i < 3; i++) {
if (!enemy[i].isFainted) {
for (int j = 0; j < 3; j++) enemy[j].isActive = false;
enemy[i].isActive = true;
cout << "对手换上了 【" << enemy[i].name << "】!" << endl;
break;
}
}
}
playerActive = getActiveIndex(player);
enemyActive = getActiveIndex(enemy);
cout << "\n========================================" << endl;
printTeam(player);
printTeam(enemy);
int sk = chooseSkill(player[playerActive]);
if (playerFaster(player[playerActive], enemy[enemyActive])) {
// 玩家先攻
int dmg = attack(player[playerActive], player[playerActive].skill[sk], enemy[enemyActive]);
enemy[enemyActive].hp -= dmg;
if (enemy[enemyActive].hp <= 0) {
enemy[enemyActive].hp = 0;
continue; // 跳过敌方回合
}
cout << "\n========================================" << endl;
cout << "【" << enemy[enemyActive].name << "】的回合!" << endl;
int esk = rand()%4;
int edmg = attack(enemy[enemyActive], enemy[enemyActive].skill[esk], player[playerActive]);
player[playerActive].hp -= edmg;
} else {
// 敌人先攻
cout << "【" << enemy[enemyActive].name << "】的回合!" << endl;
int esk = rand()%4;
int edmg = attack(enemy[enemyActive], enemy[enemyActive].skill[esk], player[playerActive]);
player[playerActive].hp -= edmg;
if (player[playerActive].hp <= 0) {
player[playerActive].hp = 0;
continue; // 跳过玩家回合
}
cout << "\n========================================" << endl;
int dmg = attack(player[playerActive], player[playerActive].skill[sk], enemy[enemyActive]);
enemy[enemyActive].hp -= dmg;
}
}
cout << "\n游戏结束" << endl;
return 0;
}
全部评论 3
3V3, 我想做超级进化,但是报错
1周前 来自 北京
0666
1周前 来自 北京
0d
1周前 来自 浙江
0



























有帮助,赞一个