乱世争霸c++代码游戏4.0
2026-06-06 15:21:06
发布于:北京
复制到DEVc++就能玩了。可以***,如果有更改建议可以随时评论!
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
struct City
{
string name;
int own;
int defense;
int incomeMoney;
int incomeFood;
};
struct ForeignCountry
{
string nationName;
int totalDef;
int conquered;
};
struct Player
{
int hp;
int money;
int food;
int attack;
int soldier;
int worker;
int maxWorker;
int godMode;
float recruitRate;
float workEff;
float hurtDef;
float siegeAtk;
int enemyDamageRate;
int worldUnify;
int allForeignClear;
};
vector<City> initCities()
{
vector<City> c;
City t;
t.name = "长安"; t.own=0; t.defense=820; t.incomeMoney=320; t.incomeFood=90; c.push_back(t);
t.name = "洛阳"; t.own=0; t.defense=760; t.incomeMoney=290; t.incomeFood=82; c.push_back(t);
t.name = "燕京"; t.own=0; t.defense=720; t.incomeMoney=270; t.incomeFood=78; c.push_back(t);
t.name = "金陵"; t.own=0; t.defense=700; t.incomeMoney=260; t.incomeFood=75; c.push_back(t);
t.name = "邺城"; t.own=0; t.defense=580; t.incomeMoney=210; t.incomeFood=62; c.push_back(t);
t.name = "冀州"; t.own=0; t.defense=550; t.incomeMoney=200; t.incomeFood=60; c.push_back(t);
t.name = "汴梁"; t.own=0; t.defense=680; t.incomeMoney=255; t.incomeFood=72; c.push_back(t);
t.name = "临淄"; t.own=0; t.defense=480; t.incomeMoney=175; t.incomeFood=52; c.push_back(t);
t.name = "琅琊"; t.own=0; t.defense=450; t.incomeMoney=165; t.incomeFood=48; c.push_back(t);
t.name = "蓬莱"; t.own=0; t.defense=420; t.incomeMoney=150; t.incomeFood=45; c.push_back(t);
t.name = "苏州"; t.own=0; t.defense=620; t.incomeMoney=230; t.incomeFood=66; c.push_back(t);
t.name = "武昌"; t.own=0; t.defense=600; t.incomeMoney=220; t.incomeFood=64; c.push_back(t);
t.name = "临安"; t.own=0; t.defense=690; t.incomeMoney=258; t.incomeFood=73; c.push_back(t);
t.name = "成都"; t.own=0; t.defense=740; t.incomeMoney=280; t.incomeFood=80; c.push_back(t);
t.name = "汉中"; t.own=0; t.defense=520; t.incomeMoney=190; t.incomeFood=56; c.push_back(t);
t.name = "渝州"; t.own=0; t.defense=500; t.incomeMoney=182; t.incomeFood=53; c.push_back(t);
return c;
}
vector<ForeignCountry> initNations()
{
vector<ForeignCountry> n;
ForeignCountry t;
t.nationName = "琉球"; t.totalDef=1200; t.conquered=0; n.push_back(t);
t.nationName = "高丽"; t.totalDef=2200; t.conquered=0; n.push_back(t);
t.nationName = "吕宋"; t.totalDef=1500; t.conquered=0; n.push_back(t);
t.nationName = "突厥汗国"; t.totalDef=2600; t.conquered=0; n.push_back(t);
t.nationName = "匈奴王庭"; t.totalDef=2800; t.conquered=0; n.push_back(t);
t.nationName = "吐蕃"; t.totalDef=3000; t.conquered=0; n.push_back(t);
return n;
}
string getRandNation()
{
string s[] = {"北雪原部落","西荒蛮","南疆越国","东海孤岛","西域游牧","深山越族","滨海藩国","戈壁联盟"};
return s[rand()%8];
}
int main()
{
srand((unsigned)time(NULL));
system("color 0B");
Player p;
p.hp = 800;
p.money = 700;
p.food = 150;
p.attack = 20;
p.soldier = 100;
p.worker = 25;
p.maxWorker = 20;
p.godMode = 0;
p.recruitRate = 1.0;
p.workEff = 1.0;
p.hurtDef = 1.0;
p.siegeAtk = 1.0;
p.worldUnify = 0;
p.allForeignClear = 0;
vector<City> cities = initCities();
vector<ForeignCountry> nations = initNations();
int diff;
cout << "==========================\n";
cout << " 乱世群雄争霸天下\n";
cout << "==========================\n";
cout << "1.简单 2.普通 3.困难 4.地狱 5.无敌模式\n请选择难度:";
cin >> diff;
if(diff == 1) p.enemyDamageRate = 6;
if(diff == 2) p.enemyDamageRate = 10;
if(diff == 3) p.enemyDamageRate = 13;
if(diff == 4) p.enemyDamageRate = 17;
if(diff == 5) p.godMode = 1;
system("cls");
cout << "===== 选择你的出生都城(1~16)=====\n";
for(int i=0; i<16; i++)
{
cout << i+1 << "." << cities[i].name << endl;
}
int st;
cin >> st;
cities[st-1].own = 1;
system("cls");
cout << "你以【" << cities[st-1].name << "】为基业,统一天下!\n";
system("pause");
while(1)
{
if(p.godMode == 1)
{
p.hp = 99999;
p.money = 99999;
p.food = 99999;
}
system("cls");
int ownCnt = 0;
int totalMon = 0;
int totalFoo = 0;
for(int i=0; i<cities.size(); i++)
{
if(cities[i].own == 1)
{
ownCnt++;
totalMon += cities[i].incomeMoney;
totalFoo += cities[i].incomeFood;
}
}
p.money += totalMon;
p.food += totalFoo;
int allCity = 1;
for(int i=0; i<cities.size(); i++)
{
if(cities[i].own == 0) allCity = 0;
}
p.worldUnify = allCity;
int allNat = 1;
for(int i=0; i<nations.size(); i++)
{
if(nations[i].conquered == 0) allNat = 0;
}
p.allForeignClear = allNat;
cout << "已占城池:" << ownCnt << "/16 生命:" << p.hp << endl;
cout << "银两:" << p.money << " 粮草:" << p.food << endl;
cout << "==========================================\n";
cout << "1.进攻 2.休整 3.撤退 4.征兵 5.经商\n";
cout << "6.招工人 7.搜粮 8.查看未占城 9.攻城 10.远征\n";
cout << "==========================================\n";
cout << "请输入指令:";
int op;
cin >> op;
if(op == 1)
{
int dmg = p.attack + rand()%20;
cout << "你造成了 " << dmg << " 点伤害!\n";
p.food -= 5;
}
if(op == 2)
{
int h = 40 + rand()%25;
p.hp += h;
p.food -= 3;
cout << "休整成功,生命+" << h << "!\n";
}
if(op == 3)
{
p.hp += rand()%50;
cout << "撤退成功,恢复生命!\n";
}
if(op == 4)
{
p.money -= 150;
p.soldier += 5;
cout << "征兵成功!士兵+5\n";
}
if(op == 5)
{
int gain = p.worker * 10;
p.money += gain;
p.food -= 2;
cout << "经商成功!银两+" << gain << "\n";
}
if(op == 6)
{
p.money -= 90;
p.worker +=7;
cout << "招募工人成功!工人+7\n";
}
if(op == 7)
{
int f = 20 + rand()%18;
p.food += f;
cout << "野外搜粮成功!粮草+" << f << "\n";
}
if(op == 8)
{
cout << "未占领城池:\n";
for(int i=0; i<16; i++)
{
if(cities[i].own == 0)
{
cout << i+1 << "." << cities[i].name << endl;
}
}
}
if(op == 9)
{
int id;
cout << "请输入要攻打的城池编号:";
cin >> id;
id--;
cities[id].defense -= 150;
if(cities[id].defense <= 0)
{
cities[id].own = 1;
cout << "成功攻占【" << cities[id].name << "】!\n";
}else{
cout << "城池受损,继续进攻!\n";
}
p.food -= 18;
}
if(op == 10)
{
if(p.worldUnify == 0)
{
cout << "必须先统一中原!\n";
system("pause");
continue;
}
if(p.allForeignClear == 0)
{
cout << "===== 可远征域外国家 =====\n";
for(int i=0; i<nations.size(); i++)
{
if(nations[i].conquered == 0)
{
cout << i+1 << "." << nations[i].nationName << endl;
}
}
int nid;
cout << "选择要远征的国家:";
cin >> nid;
nid--;
nations[nid].totalDef -= 300;
if(nations[nid].totalDef <= 0)
{
nations[nid].conquered = 1;
cout << "成功征服【" << nations[nid].nationName << "】!\n";
}else{
cout << "重创敌军!\n";
}
}else{
string rn = getRandNation();
cout << "远征随机势力:" << rn << endl;
cout << "讨伐成功!获得大量资源!\n";
p.money += 500;
p.food += 300;
}
p.food -= 25;
}
if(p.godMode == 0)
{
int damage = p.enemyDamageRate;
p.hp -= damage;
cout << "\n敌军反击,损失生命 " << damage << " 点!\n";
}else{
cout << "\n无敌模式:敌方攻击无效!\n";
}
system("pause");
}
return 0;
}
全部评论 9
突然发现作者的英文名和我一样诶,我也是
2026-06-05 来自 山东
2真巧
2026-06-06 来自 北京
1哈哈
2026-06-06 来自 山东
1
(已认真阅读代码)
我想提一些不太成熟的小建议:
1.增加中原城市数量:在本游戏中,中原城市仅“玩家开始的城市”“中原重镇”“皇城”等极少数城市。玩家可能会过快统一全国导致体验感较低。建议您增多并细化城市。下面是我给您的例子(如果您满意的话就不用找再城市素材了):
长安 洛阳 燕京(宋朝古称,今北京) 金陵(唐宋古称,今南京) 邺城 冀州 汴梁(宋朝古称,今开封) 临淄 琅琊(晋至明古称,今青岛) 蓬莱 苏州 武昌(今武汉) 临安(南宋古称,今杭州) 成都 汉中 渝州(唐宋古称,今重庆)2.开局城市自选:在本游戏中,并没有明确开局城市。可以让玩家选一个城市开局增加代入感。
3.增加并细化小国:您应该能看到并体会到,小国的数量较少,需要增加。结合建议1的城市细化建议,建议您在增加小国的同时增加小国的城市数或者标明小国的城市名,增加代入感。下面是我给您的例子(如果您满意的话就不用再找城市素材了):
琉球(今中国台湾),首都台湾城 高丽(今韩国),首都汉城,其他城市仁川、光州、釜山、平壤 吕宋(今菲律宾),首都岷里拉(今马尼拉) 突厥(这个我不太了解) 匈奴(这个我也不太了解)//主要是这俩没有主要城市,建议作者编个城市名字 吐蕃(今中国西藏),首都逻些(今拉萨),其他城市沙洲(今敦煌)希望作者能看到并采纳我的建议。若我的建议被采纳,请作者在帖子或后续的帖子标明一下谢谢
2026-06-05 来自 山东
2谢谢您的建议
2026-06-05 来自 北京
1我的代码会在明天更新
2026-06-05 来自 北京
1嗯嗯
2026-06-05 来自 山东
2
(已点赞)
2026-06-05 来自 山东
2感谢您采纳我之前的建议,鉴于新版本已发布,我进行了游玩,并提出一下建议:
1.攻城时添加快捷数字对应城市:每次要攻城都要回主页看一遍快捷数字对应城市,不如在攻城的选择城市时先输出一遍快捷数字对应城市
2.显示士兵数量并消耗:士兵招募后看不到,没有用,这些都需要改进
2026-06-06 来自 山东
1ok
2026-06-06 来自 北京
0
把四周小国打完之后还有吗
2026-05-17 来自 内蒙古
1额,那我改成无限小国数量
2026-05-17 来自 北京
0感谢您宝贵的建议!
2026-05-17 来自 北京
0OK了
2026-05-17 来自 北京
0
写个无敌版本

2026-05-17 来自 广东
1啥意思?
2026-05-17 来自 北京
0就是开挂
2026-05-17 来自 广东
1ok
2026-05-17 来自 北京
0
玩法有点单一
2026-06-06 来自 广东
0额,能给一点思路么。我的大脑一片空白……不过我马上要出一个摸金游戏了
2026-06-06 来自 北京
0
支持出搜打车2026-06-08 来自 广东
0



2026-06-05 来自 上海
0ai吗
2026-06-04 来自 广东
0😁
2026-06-05 来自 北京
0

































有帮助,赞一个