乱世争霸c++代码游戏3.0
2026-05-17 20:28:07
发布于:北京
复制到DEVc++就能玩了。可以***,如果有更改建议可以随时评论!
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
// 兵种枚举
enum Type
{
INF = 1, // 步兵
CAV = 2, // 骑兵
ARC = 3, // 弓兵
SHIELD = 4, // 盾兵
ASSASS = 5, // 刺客
CAT = 6, // 投石车
MAGIC = 7 // 法师
};
// 城池结构体
struct City
{
string name;
bool own;
int defense;
int income;
};
// 小国势力结构体
struct Country
{
string name;
bool conquer;
int armyHp;
int attack;
int rewardMoney;
int rewardFood;
};
// 领地建筑结构体
struct Build
{
string name;
int num;
int level;
int maxNum;
};
// 玩家势力结构体
struct Army
{
int soldier;
int worker;
int maxWorker;
int inf, cav, arc;
int shield, assass, cat, magic;
int attack;
int hp;
int food;
int money;
int domainNum;
int mainPalaceLv;
float recruitRate;
float workEff;
float hurtDef;
float siegeAtk;
bool worldUnify;
double enemyDamageRate;
double enemyHpRate;
bool godMode; // 无敌开挂模式开关
};
// 兵种克制伤害计算
int getDamage(int myType, int eneType, int baseAtk, float bonus)
{
int dmg = baseAtk + rand() % 18;
dmg *= bonus;
if(myType == INF && eneType == CAV) dmg *= 1.5;
if(myType == CAV && eneType == ARC) dmg *= 1.5;
if(myType == ARC && eneType == INF) dmg *= 1.5;
if(myType == SHIELD && eneType == ASSASS) dmg *= 1.6;
if(myType == ASSASS && eneType == MAGIC) dmg *= 1.7;
if(myType == MAGIC && eneType == SHIELD) dmg *= 1.6;
if(myType == CAT) dmg *= 2.0;
if(myType == CAV && eneType == INF) dmg *= 0.7;
if(myType == ARC && eneType == CAV) dmg *= 0.7;
if(myType == INF && eneType == ARC) dmg *= 0.7;
if(myType == MAGIC && eneType == ASSASS) dmg *= 0.6;
if(myType == SHIELD && eneType == MAGIC) dmg *= 0.6;
return dmg;
}
// 建筑加成计算
void calcBuildBuff(Army &p, Build farm, Build coin, Build barrack, Build wall, Build workShop, Build house)
{
p.recruitRate = 1.0 - barrack.level * 0.08;
p.workEff = 1.0 + house.level * 0.05;
p.hurtDef = 1.0 - wall.level * 0.06;
p.siegeAtk = 1.0 + workShop.level * 0.12;
p.maxWorker = 20 + house.level * 4;
}
int main()
{
srand((unsigned int)time(NULL));
system("color 0B");
Army player, enemy;
// 三大主城
City city1 = {"边城", true, 300, 80};
City city2 = {"中原重镇", false, 500, 150};
City city3 = {"皇城都城", false, 800, 300};
// 众多小国家 一统后可征伐
Country c1 = {"西凉小国",false,300,10,200,80};
Country c2 = {"南疆部落",false,380,13,260,100};
Country c3 = {"北漠蛮族",false,450,16,320,130};
Country c4 = {"东海岛国",false,520,19,400,160};
// 领地建筑初始化
Build mainPalace = {"主殿", 1, 1, 1};
Build farm = {"农田", 2, 1, 8};
Build coinHouse = {"铸币坊", 1, 1, 6};
Build barrack = {"兵营", 1, 1, 4};
Build cityWall = {"城防所", 1, 1, 3};
Build craftShop = {"工坊", 0, 1, 2};
Build house = {"民宅", 1, 1, 5};
// 开局难度选择 新增无敌模式
cout << "=====================================\n";
cout << " 乱世群雄争霸天下 \n";
cout << "=====================================\n";
cout << "请选择游戏难度:\n";
cout << "1.简单模式 敌方战力低,发育轻松\n";
cout << "2.普通模式 标准战局,均衡体验\n";
cout << "3.困难模式 敌方强势,资源紧缺\n";
cout << "4.地狱模式 敌军极强,生存艰难\n";
cout << "5.无敌开挂模式 无限资源满兵力无敌\n";
cout << "输入难度序号:";
int diff;
cin >> diff;
// 根据难度设定属性 + 无敌模式判定
player.godMode = false;
if(diff == 1)
{
player.enemyDamageRate = 0.6;
player.enemyHpRate = 0.7;
}
else if(diff == 2)
{
player.enemyDamageRate = 1.0;
player.enemyHpRate = 1.0;
}
else if(diff == 3)
{
player.enemyDamageRate = 1.3;
player.enemyHpRate = 1.4;
}
else if(diff == 4)
{
player.enemyDamageRate = 1.7;
player.enemyHpRate = 1.8;
}
else if(diff == 5)
{
player.godMode = true;
player.enemyDamageRate = 1.0;
player.enemyHpRate = 1.0;
}
// 开局剧情
system("cls");
cout << "【开篇剧情】\n";
cout << "天下大乱诸侯割据,战火席卷四方\n";
cout << "你执掌边城起家,修建建筑发展领地\n";
cout << "训练七大兵种,积累钱粮招兵买马\n";
cout << "攻**原与皇城一统中原后,还可出兵收服四方小国\n";
cout << "最终建立横跨四海的无上王朝!\n\n";
if(player.godMode)
{
cout << "===== 已开启无敌开挂模式 =====\n";
cout << "无限血量、无限粮草、无限银两、满编全军兵力\n";
cout << "不受任何资源限制,随意征战一统天下!\n\n";
}
system("pause");
system("cls");
// 玩家初始属性
player.soldier = 100;
player.worker = 25;
player.inf = 30;
player.cav = 25;
player.arc = 25;
player.shield = 15;
player.assass = 5;
player.cat = 3;
player.magic = 2;
player.attack = 20;
player.hp = 800;
player.food = 150;
player.money = 700;
player.domainNum = 1;
player.mainPalaceLv = 1;
player.worldUnify = false;
// 敌方初始属性 跟随难度变化
enemy.soldier = 160;
enemy.inf = 55;
enemy.cav = 50;
enemy.arc = 45;
enemy.shield = 20;
enemy.assass = 8;
enemy.cat = 4;
enemy.magic = 3;
enemy.attack = int(18 * player.enemyDamageRate);
enemy.hp = int(750 * player.enemyHpRate);
enemy.food = 110;
// 永久主循环 永不结束
while (true)
{
// 无敌模式实时锁定满资源满兵力
if(player.godMode)
{
player.hp = 99999;
player.food = 99999;
player.money = 99999;
player.inf = 999;
player.cav = 999;
player.arc = 999;
player.shield = 999;
player.assass = 999;
player.cat = 999;
player.magic = 999;
player.worker = 999;
}
system("cls");
calcBuildBuff(player, farm, coinHouse, barrack, cityWall, craftShop, house);
// 城池收益结算
int getMoney = 0, getFood = 0;
if (city1.own) { getMoney += city1.income; getFood += 20; }
if (city2.own) { getMoney += city2.income; getFood += 40; }
if (city3.own) { getMoney += city3.income; getFood += 80; }
getFood += farm.num * farm.level * 12;
getMoney += coinHouse.num * coinHouse.level * 18;
player.money += getMoney;
player.food += getFood;
// 界面标题区分阶段
if(player.worldUnify)
{
cout << "========== 天下一统 · 征伐列国时代 ==========\n";
cout << "中原已定,可练兵出征,攻占四方各路小国家扩充疆域\n\n";
}
else
{
cout << "========== 乱世争霸征战 ==========\n";
cout << "兵种克制:步克骑 骑克弓 弓克步 | 盾克刺 刺克法 法克盾\n";
cout << "领地:已占" << city1.name << " 待攻:" << city2.name << " " << city3.name << "\n";
}
// 无敌模式提示
if(player.godMode)
{
cout << "【当前状态】无敌开挂模式已激活!\n";
}
cout << "全军血量:" << player.hp << " 粮草:" << player.food << " 银两:" << player.money << "\n";
cout << "兵力:步"<<player.inf<<" 骑"<<player.cav<<" 弓"<<player.arc<<" 盾"<<player.shield<<" 刺"<<player.assass<<" 车"<<player.cat<<" 法"<<player.magic<<"\n";
cout << "每回合收成:银两+" << getMoney << " 粮草+" << getFood << "\n\n";
// 行动菜单 新增19征伐小国
cout << "===== 行动指令 =====\n";
cout << "1.步兵出战 2.骑兵出战 3.弓兵出战 4.盾兵结阵\n";
cout << "5.刺客偷袭 6.投石轰击 7.法师施法 8.坚守休整\n";
cout << "9.全军撤退 10.花费征兵 11.工人经商 12.招募工人\n";
cout << "13.搜寻粮草 14.攻打中原 15.进攻皇城 16.建造建筑\n";
cout << "17.升级建筑 18.查看建筑 19.征伐四方小国\n";
cout << "输入行动编号:";
int choose;
cin >> choose;
int hurt = 0;
// 1-7兵种出战
if (choose == 1)
{
hurt = getDamage(INF, rand() % 7 + 1, player.attack, 1);
enemy.hp -= hurt; player.food -= 5;
cout << "步兵冲锋,造成" << hurt << "点伤害!\n";
}
else if (choose == 2)
{
hurt = getDamage(CAV, rand() % 7 + 1, player.attack, 1);
enemy.hp -= hurt; player.food -= 5;
cout << "铁骑奔袭,造成" << hurt << "点伤害!\n";
}
else if (choose == 3)
{
hurt = getDamage(ARC, rand() % 7 + 1, player.attack, 1);
enemy.hp -= hurt; player.food -= 5;
cout << "万箭齐发,造成" << hurt << "点伤害!\n";
}
else if (choose == 4)
{
hurt = getDamage(SHIELD, rand() % 7 + 1, player.attack, 1);
enemy.hp -= hurt; player.food -= 4;
cout << "盾兵结阵反击,造成" << hurt << "点伤害!\n";
}
else if (choose == 5)
{
hurt = getDamage(ASSASS, rand() % 7 + 1, player.attack, 1);
enemy.hp -= hurt; player.food -= 6;
cout << "刺客奇袭,造成" << hurt << "点伤害!\n";
}
else if (choose == 6)
{
hurt = getDamage(CAT, rand() % 7 + 1, player.attack, player.siegeAtk);
enemy.hp -= hurt; player.food -= 10;
cout << "投石车轰击,造成" << hurt << "点伤害!\n";
}
else if (choose == 7)
{
hurt = getDamage(MAGIC, rand() % 7 + 1, player.attack, player.siegeAtk);
enemy.hp -= hurt; player.food -= 7;
cout << "法师施法重创敌军" << hurt << "点伤害!\n";
}
// 8休整
else if (choose == 8)
{
int heal = 40 + rand() % 25;
player.hp += heal; player.food -= 3;
cout << "安营休整,恢复" << heal << "点兵力!\n";
}
// 9撤退
else if (choose == 9)
{
int back = rand() % 50;
player.hp += back;
cout << "全军撤退,恢复" << back << "点兵力!\n";
}
// 10征兵
else if (choose == 10)
{
int cost = int(150 * player.recruitRate);
if (player.money >= cost)
{
player.money -= cost;
player.inf += 5; player.cav += 3; player.arc += 3;
player.shield += 2; player.assass += 1; player.cat += 1; player.magic += 1;
player.hp += 20;
cout << "花费" << cost << "银两招募大批新兵!\n";
}
else cout << "银两不足,无法征兵!\n";
}
// 11工人赚钱
else if (choose == 11)
{
if (player.worker <= 0) cout << "无工人无法经商!\n";
else
{
int baseEarn = player.worker * 10 + rand() % 40;
int finalEarn = int(baseEarn * player.workEff);
player.money += finalEarn; player.food -= 2;
cout << "工人劳作赚取" << finalEarn << "银两!\n";
}
}
// 12招募工人
else if (choose == 12)
{
if (player.money >= 90)
{
if (player.worker >= player.maxWorker)
cout << "工人已满,升级民宅扩容!\n";
else
{
int w = 7 + rand() % 7;
player.worker += w; player.money -= 90;
cout << "招募" << w << "名百姓成为工人!\n";
}
}
else cout << "银两不足!\n";
}
// 13搜粮草
else if (choose == 13)
{
int fd = 20 + rand() % 18;
player.food += fd;
cout << "搜寻获得粮草" << fd << "份!\n";
}
// 14打中原
else if (choose == 14)
{
if (city2.own) cout << "已占领中原重镇!\n";
else if (player.hp < 400 && !player.godMode) cout << "兵力不足不宜攻城!\n";
else
{
int cd = int((player.attack * 4 + rand() % 60) * player.siegeAtk);
city2.defense -= cd; player.food -= 18;
cout << "猛攻中原重镇,击破城防" << cd << "点!\n";
if (city2.defense <= 0)
{
city2.own = true;
cout << "成功入主中原,国力大增!\n";
}
}
}
// 15攻皇城
else if (choose == 15)
{
if (city3.own)
{
cout << "早已一统中原,可征伐四方小国!\n";
player.worldUnify = true;
}
else if (!city2.own)
cout << "必先平定中原才可进攻皇城!\n";
else if (player.hp < 600 && !player.godMode)
cout << "兵力不足暂缓进攻!\n";
else
{
int kd = int((player.attack * 5 + rand() % 70) * player.siegeAtk);
city3.defense -= kd; player.food -= 30;
cout << "大军进军皇城,击破防御" << kd << "点!\n";
if (city3.defense <= 0)
{
city3.own = true;
player.worldUnify = true;
cout << "一统中原大地,开启列国征伐时代!\n";
}
}
}
// 16建造建筑
else if (choose == 16)
{
int bid;
cout << "1.农田 2.铸币坊 3.兵营 4.城防所 5.工坊 6.民宅\n";
cout << "选择建造:"; cin >> bid;
bool ok = false;
if(bid==1&&farm.num<farm.maxNum&&player.money>=100&&player.food>=10)
{farm.num++;player.money-=100;player.food-=10;ok=1;cout<<"农田建造完成!\n";}
if(bid==2&&coinHouse.num<coinHouse.maxNum&&player.money>=120&&player.food>=10)
{coinHouse.num++;player.money-=120;player.food-=10;ok=1;cout<<"铸币坊建造完成!\n";}
if(bid==3&&barrack.num<barrack.maxNum&&player.money>=180&&player.food>=15)
{barrack.num++;player.money-=180;player.food-=15;ok=1;cout<<"兵营建造完成!\n";}
if(bid==4&&cityWall.num<cityWall.maxNum&&player.money>=200&&player.food>=15)
{cityWall.num++;player.money-=200;player.food-=15;ok=1;cout<<"城防所建造完成!\n";}
if(bid==5&&craftShop.num<craftShop.maxNum&&player.money>=220&&player.food>=20)
{craftShop.num++;player.money-=220;player.food-=20;ok=1;cout<<"工坊建造完成!\n";}
if(bid==6&&house.num<house.maxNum&&player.money>=150&&player.food>=12)
{house.num++;player.money-=150;player.food-=12;ok=1;cout<<"民宅建造完成!\n";}
if(!ok)cout<<"建造失败,资源不足或达上限!\n";
}
// 17升级建筑
else if (choose == 17)
{
int uid;
cout << "1.主殿 2.农田 3.铸币坊 4.兵营 5.城防所 6.工坊 7.民宅\n";
cout << "选择升级:"; cin >> uid;
if(player.money<200 && !player.godMode){cout<<"银两不足无法升级!\n";}
else
{
player.money-=200;
if(uid==1)mainPalace.level++;
if(uid==2)farm.level++;
if(uid==3)coinHouse.level++;
if(uid==4)barrack.level++;
if(uid==5)cityWall.level++;
if(uid==6)craftShop.level++;
if(uid==7)house.level++;
cout<<"建筑升级成功!\n";
}
}
// 18查看建筑
else if (choose == 18)
{
cout << "===== 领地建筑详情 =====\n";
cout << "主殿等级:"<<mainPalace.level<<"\n";
cout << "农田 数量:"<<farm.num<<" 等级:"<<farm.level<<"\n";
cout << "铸币坊 数量:"<<coinHouse.num<<" 等级:"<<coinHouse.level<<"\n";
cout << "兵营 数量:"<<barrack.num<<" 等级:"<<barrack.level<<"\n";
cout << "城防所 数量:"<<cityWall.num<<" 等级:"<<cityWall.level<<"\n";
cout << "工坊 数量:"<<craftShop.num<<" 等级:"<<craftShop.level<<"\n";
cout << "民宅 数量:"<<house.num<<" 等级:"<<house.level<<"\n";
}
// 19征伐小国 一统后解锁
else if (choose == 19)
{
if(!player.worldUnify)
{
cout << "尚未一统中原,无法出征征伐小国!\n";
}
else
{
int nc;
cout << "可征伐势力:\n";
cout << "1.西凉小国 2.南疆部落 3.北漠蛮族 4.东海岛国\n";
cout << "选择出征目标:";
cin >> nc;
int fightDmg = player.attack * 3 + rand() % 50;
if(nc == 1 && !c1.conquer)
{
c1.armyHp -= fightDmg;
cout << "大军征讨西凉,造成"<<fightDmg<<"点敌军损伤!\n";
if(c1.armyHp <= 0)
{
c1.conquer = true;
player.money += c1.rewardMoney;
player.food += c1.rewardFood;
cout << "成功收服西凉小国,获得大量钱粮贡品!\n";
}
}
else if(nc == 2 && !c2.conquer)
{
c2.armyHp -= fightDmg;
cout << "征讨南疆部落,造成"<<fightDmg<<"点损伤!\n";
if(c2.armyHp <= 0)
{
c2.conquer = true;
player.money += c2.rewardMoney;
player.food += c2.rewardFood;
cout << "收服南疆全境,收纳丰厚资源!\n";
}
}
else if(nc == 3 && !c3.conquer)
{
c3.armyHp -= fightDmg;
cout << "北伐北漠蛮族,重创敌军!\n";
if(c3.armyHp <= 0)
{
c3.conquer = true;
player.money += c3.rewardMoney;
player.food += c3.rewardFood;
cout << "平定北漠,扩充北方疆域!\n";
}
}
else if(nc == 4 && !c4.conquer)
{
c4.armyHp -= fightDmg;
cout << "跨海出征东海岛国,发起猛攻!\n";
if(c4.armyHp <= 0)
{
c4.conquer = true;
player.money += c4.rewardMoney;
player.food += c4.rewardFood;
cout << "收服海外领地,王朝版图抵达四海!\n";
}
}
else
{
cout << "该势力已归顺我朝,无需再次出兵!\n";
}
if(!player.godMode) player.food -= 20;
}
}
else
{
cout << "输入指令错误,全军原地待命!\n";
}
// 无敌模式免疫所有敌方伤害
if(enemy.hp > 0 && !player.godMode)
{
int eBing = rand() % 7 + 1;
int rawDmg = enemy.attack + rand() % 18;
int finalDmg = int(rawDmg * player.hurtDef);
cout << "\n敌军来犯!";
if(eBing==1)cout<<"敌方步兵来袭";
if(eBing==2)cout<<"敌方铁骑冲锋";
if(eBing==3)cout<<"敌方弓兵齐射";
if(eBing==4)cout<<"敌方盾兵推进";
if(eBing==5)cout<<"敌方刺客偷袭";
if(eBing==6)cout<<"敌方投石轰击";
if(eBing==7)cout<<"敌方法师施法";
cout<<"我军损失"<<finalDmg<<"点兵力!\n";
player.hp -= finalDmg;
}
else if(enemy.hp > 0 && player.godMode)
{
cout << "\n敌军全力进攻,奈何我方无敌毫发无伤!\n";
}
else if(!player.worldUnify)
{
cout << "\n中原强敌已覆灭,安心发展准备一统天下!\n";
}
// 普通模式兜底保护
if(!player.godMode)
{
if(player.hp <= 0) player.hp = 120,cout<<"兵力过低,朝廷紧急募兵支援!\n";
if(player.food <= 0) player.food = 60,cout<<"粮草告急,紧急调拨物资!\n";
}
system("pause");
}
return 0;
}
全部评论 2
把四周小国打完之后还有吗
8小时前 来自 内蒙古
1额,那我改成无限小国数量
8小时前 来自 北京
0感谢您宝贵的建议!
8小时前 来自 北京
0OK了
8小时前 来自 北京
0
写个无敌版本

8小时前 来自 广东
1啥意思?
8小时前 来自 北京
0就是开挂
8小时前 来自 广东
1ok
8小时前 来自 北京
0























有帮助,赞一个