《冰征之旅》v0.2.3-Alpha
2025-08-13 20:50:25
发布于:辽宁
求赞回血!!!!!!(1013行)
解决:技能树无法升级问题(原因,md技能树的存储写成bool了...)
更新:"下达指令"部分的“颁布法令”操作,目前的基础功能基本完善,还差大规模复制,继续肝代码
#include <bits/stdc++.h>
#include <windows.h>
#include <ctime>
#include <cstdlib>
using namespace std;
#define white SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
#define red SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
#define green SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
#define blue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
#define yellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
#define pink SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
#define pause system("pause")
#define cls system("cls")
int Win = 0; // 是否胜利
int Day = 1, trt = -20; // 游戏天数,温度
int people = 20, food = 20, wood = 0, mei = 0, Tie = 0, fangwu = 0, yizhu = 0, mianji = 5000; // 人数、食物、煤炭、铁矿、可居住人数、已居住人数、可用面积
double Manyi = 50; // 人民满意度
int People_health[1500], People_Food[1500]; // 人民状态
int People_Job[1500]; // 职业( 0,平民;1, 教师; 2,机械师)
int rand_people_health = 1, rand_people_food = 1, rand_people_job;
int Talent = 100; // 技能点
bool Rand(int n){ // 概率随机
int init = 1 + rand() % 100;
if(init <= n) return true;
else return false;
}
// 随机新人身体状态
void Rand_People_Health(int b){ // 0 为 健康, 1 为 生病
int init = rand_people_health;
for(init; init <= rand_people_health + b; init ++){
if(Rand(75) == true) People_health[init] = 0;
else People_health[init] = 1;
}
}
// 随机新人进食状态
void Rand_People_Food(int b){ // 0 为 饱腹, 1 为 饥饿
int init = rand_people_food;
for(init; init <= rand_people_food + b; init ++){
if(People_health[init] == 0){
if(Rand(50) == true) People_Food[init] = 0;
else People_Food[init] = 1;
}else{
if(Rand(25) == true) People_Food[init] = 0;
else People_Food[init] = 1;
}
}
}
// 随机新人职业
void Rand_People_Job(int b){ // 0 为 健康, 1 为 生病
int init = rand_people_job;
for(init; init <= rand_people_job + b; init ++){
if(Rand(95) == true) People_Job[init] = 0;
else People_Job[init] = 1;
}
}
void Xinxi(){ // 信息
cls; blue;
cout << "========================= 冰征之旅 ========================= \n";
cout << "== 当前天数 :";
if(Day < 10) cout << " " << Day;
else cout << Day;
cout << " == \n";
cout << "== 当前温度 :" << trt << endl;
cout << "==舒适温度区间: 25℃ - 30℃ == \n";
cout << "============================================================ \n";
cout << "== 当前拥有资源:\n";
cout << "== 1. 食 物 :" << food << endl;
cout << "== 2. 木 头 :" << wood << endl;
cout << "== 3. 煤 炭 :" << mei << endl;
cout << "== 4. 铁 矿 :" << Tie << endl;
cout << "== 5. 房屋可居住人数 :" << fangwu << endl;
cout << "== 6. 房屋已居住人数 :" << yizhu << endl;
cout << "== 7. 可用建造面积 :" << mianji << endl;
cout << "============================================================ \n";
cout << "== 所有居民情况:\n";
for(int i = 1; i <= people; i ++){
cout << "== 居民" << i << " : ";
if(People_health[i] == 0){
green;
cout << "健康";
blue;
}else{
red;
cout << "生病";
blue;
}
cout << " ";
if(People_Food[i] == 0){
green;
cout << "饱腹";
blue;
}else{
red;
cout << "饥饿";
blue;
}
cout << " ";
if(People_Job[i] == 0){
white;
cout << "工人";
blue;
}else if(People_Job[i] == 1){
yellow;
cout << "教师";
blue;
}
cout << endl;
}
cout << "============================================================ \n";
pause;
}
int Is_Falv[5] = {1, 1, 1, 1, 1}, Is_Jixie[5], Is_Tanxian[5] = {1, 1, 1, 1, 1}, Is_Houqin[5] = {1, 1, 1, 1, 1};
void Falv(){ // 科技分支——法律分支
cls; red;
cout << "=======================科技分支:法律======================= \n";
for(int i = 1; i <= 4; i ++){
int x;
cout << "== ";
if(Is_Falv[i] >= 1){
green;
x = Is_Falv[i];
}else{
red;
x = Is_Falv[i] + 1;
}
if(i == 1) cout << "1 可颁布至多 " << x * 5 << " 条法令";
else if(i == 2) cout << "2 法令颁布后有 " << x * 20 + 5 << "% 的概率提升人民的幸福度";
else if(i == 3) cout << "3 法令种类增加至" << x;
else if(i == 4) cout << "4 每次颁布法令后有" << x * 1 + 5 << "% 的概率获得“人民的爱戴”";
cout << "\n";
red;
}
cout << "============================================================ \n";
cout << "== 请选择要学习的技能(请勿乱输, -1 退出): \n";
cout << " ";
int init;
cin >> init;
cls;
if(init == -1) return ;
if(Is_Falv[init] == 4){
white;
cout << "当前技能已满级!";
Sleep(2000);
return ;
}
cout << "升级此技能需要花费 5 点技能点 \n";
cout << "当前拥有 " << Talent << " 点技能点 \n";
if(Talent >= 5){
cout << "可以升级,请问你的选择是?(1 是 / 2 否)";
int Y_es;
cin >> Y_es;
if(Y_es == 1){
cls;
blue;
Is_Falv[init] += 1;
cout << "升级成功!";
Talent = Talent - 5;
Sleep(1000);
return ;
}else{
cout << "已退出";
Sleep(1000);
return ;
}
}else{
cout << "你无法升级此技能!请以后再来!\n";
Sleep(1000);
return ;
}
}
void Jixie(){ // 科技分支——机械分支
cls; yellow;
int x;
cout << "=======================科技分支:机械======================= \n";
for(int i = 1; i <= 4; i ++){
cout << "== ";
if(i == 1){
cout << "当前解锁燃气建筑:";
if(Is_Jixie[i] == 0){
cout << "天然矿场 \n ";
}else if(Is_Jixie[i] == 1){
cout << "燃烧炉 \n ";
}else if(Is_Jixie[i] == 2){
cout << "半自动煤燃烧室 \n ";
}else if(Is_Jixie[i] == 3){
cout << "蒸汽炉 \n ";
}
cout << "工作效率:";
if(Is_Jixie[i] == 0){
cout << " 5 煤炭 / 工人(可提升 0.4℃,维持 1 天)\n ";
}else if(Is_Jixie[i] == 1){
cout << " 10 煤炭 / 工人(可提升 0.8℃,维持 2 天)\n ";
}else if(Is_Jixie[i] == 2){
cout << " 15 煤炭 / 工人(可提升 1.2℃,维持 3 天)\n ";
}else if(Is_Jixie[i] == 3){
cout << " 30 煤炭 / 工人(可提升 2.4℃,维持 5 天)\n ";
}
cout << "最大工作人数:";
if(Is_Jixie[i] == 0){
cout << "无 \n";
}else if(Is_Jixie[i] == 1){
cout << "10 \n";
}else if(Is_Jixie[i] == 2){
cout << "20 \n";
}else if(Is_Jixie[i] == 3){
cout << "20 \n";
}
cout << " ";
cout << "占地面积:";
if(Is_Jixie[i] == 0){
cout << "无 \n";
}else if(Is_Jixie[i] == 1){
cout << "10 \n";
}else if(Is_Jixie[i] == 2){
cout << "25 \n";
}else if(Is_Jixie[i] == 3){
cout << "20 (是的你没看错,就是 20) \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] == 0){
cout << "无";
}else if(Is_Jixie[i] == 1){
cout << " 5 木头 2 铁 \n";
}else if(Is_Jixie[i] == 2){
cout << " 10 木头 5 铁 \n";
}else if(Is_Jixie[i] == 3){
cout << " 20 木头 8 铁 \n";
}
}else if(i == 2){
cout << "当前解锁房屋建筑:";
if(Is_Jixie[i] == 0){
cout << "帐篷 \n ";
}else if(Is_Jixie[i] == 1){
cout << "平屋 \n ";
}else if(Is_Jixie[i] == 2){
cout << "小居民楼 \n ";
}else if(Is_Jixie[i] == 3){
cout << "大居民楼 \n ";
}
cout << "可住人数:";
if(Is_Jixie[i] == 0){
cout << " 2 人 \n ";
}else if(Is_Jixie[i] == 1){
cout << " 5 人 \n ";
}else if(Is_Jixie[i] == 2){
cout << " 10 人 \n ";
}else if(Is_Jixie[i] == 3){
cout << " 25 人 \n ";
}
cout << "占地面积:";
if(Is_Jixie[i] == 0){
cout << "15 \n";
}else if(Is_Jixie[i] == 1){
cout << "30 \n";
}else if(Is_Jixie[i] == 2){
cout << "50 \n";
}else if(Is_Jixie[i] == 3){
cout << "100 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] == 0){
cout << " 5 木头 \n";
}else if(Is_Jixie[i] == 1){
cout << " 10 木头 5 铁 \n";
}else if(Is_Jixie[i] == 2){
cout << " 20 木头 15 铁 \n";
}else if(Is_Jixie[i] == 3){
cout << " 50 木头 25 铁 \n";
}
}else if(i == 3){
cout << "当前解锁法律建筑:";
if(Is_Jixie[i] == 0){
cout << "民事部 \n ";
}else if(Is_Jixie[i] == 1){
cout << "法庭 \n ";
}else if(Is_Jixie[i] == 2){
cout << "监狱 \n ";
}else if(Is_Jixie[i] == 3){
cout << "行政庭 \n ";
}
cout << "可执行操作:";
if(Is_Jixie[i] == 0){
cout << " 处理人民日常意见和矛盾(处理初级事物) \n ";
}else if(Is_Jixie[i] == 1){
cout << " 处理人民的犯罪时间和颁布初级法令 \n ";
}else if(Is_Jixie[i] == 2){
cout << " 关押犯人 \n ";
}else if(Is_Jixie[i] == 3){
cout << " 公布高级法令 \n ";
}
cout << "占地面积:";
if(Is_Jixie[i] == 0){
cout << "50 \n";
}else if(Is_Jixie[i] == 1){
cout << "100 \n";
}else if(Is_Jixie[i] == 2){
cout << "500 \n";
}else if(Is_Jixie[i] == 3){
cout << "1000 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] == 0){
cout << " 50 木头 \n";
}else if(Is_Jixie[i] == 1){
cout << " 100 木头 20 铁 \n";
}else if(Is_Jixie[i] == 2){
cout << " 300 木头 50 铁 \n";
}else if(Is_Jixie[i] == 3){
cout << " 500 木头 100 铁 \n";
}
}else if(i == 4){
cout << "当前解锁木材建筑:";
if(Is_Jixie[i] == 0){
cout << "天然树林 \n ";
}else if(Is_Jixie[i] == 1){
cout << "小型人工树场 \n ";
}else if(Is_Jixie[i] == 2){
cout << "中型人工树场 \n ";
}else if(Is_Jixie[i] == 3){
cout << "大型人工树场 \n ";
}
cout << "可执行操作:";
if(Is_Jixie[i] == 0){
cout << " 提供木材: 20 木头 / 人 (第一次暴风雪或采伐 200 木头后天然树林消失)\n ";
}else if(Is_Jixie[i] == 1){
cout << " 提供木材: 20 木头 / 人 (可抵挡 2 次暴风雪) \n ";
}else if(Is_Jixie[i] == 2){
cout << " 提供木材: 30 木头 / 人 (可抵挡 5 次暴风雪) \n ";
}else if(Is_Jixie[i] == 3){
cout << " 提供木材: 30 木头 / 人 (不可被暴风雪摧毁)\n ";
}
cout << "占地面积:";
if(Is_Jixie[i] == 0){
cout << "无 \n";
}else if(Is_Jixie[i] == 1){
cout << "100 \n";
}else if(Is_Jixie[i] == 2){
cout << "300 \n";
}else if(Is_Jixie[i] == 3){
cout << "700 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] == 0){
cout << " 无 \n";
}else if(Is_Jixie[i] == 1){
cout << " 100 木头 10 铁 \n";
}else if(Is_Jixie[i] == 2){
cout << " 250 木头 30 铁 \n";
}else if(Is_Jixie[i] == 3){
cout << " 400 木头 75 铁 \n";
}
}
cout << "\n";
cout << "============================================================ \n";
}
red;
cout << "== 下一等级: \n";
for(int i = 1; i <= 4; i ++){
cout << "============================================================ \n";
if(Is_Jixie[i] + 1 == 4) continue;
if(i == 1){
cout << "燃气建筑:";
if(Is_Jixie[i] + 1 == 1){
cout << "燃烧炉 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << "半自动煤燃烧室 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << "蒸汽炉 \n ";
}
cout << "工作效率:";
if(Is_Jixie[i] + 1 == 1){
cout << " 10 煤炭 / 工人(可提升 0.8℃,维持 2 天)\n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 15 煤炭 / 工人(可提升 1.2℃,维持 3 天)\n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 30 煤炭 / 工人(可提升 2.4℃,维持 5 天)\n ";
}
cout << "最大工作人数:";
if(Is_Jixie[i] + 1 == 1){
cout << "10 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << "20 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << "20 \n";
}
cout << " ";
cout << "占地面积:";
if(Is_Jixie[i] + 1 == 1){
cout << "10 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << "25 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << "20 (是的你没看错,就是 20) \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] + 1 == 1){
cout << " 5 木头 2 铁 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 10 木头 5 铁 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 20 木头 8 铁 \n";
}
}else if(i == 2){
cout << "房屋建筑:";
if(Is_Jixie[i] + 1 == 1){
cout << "平屋 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << "小居民楼 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << "大居民楼 \n ";
}
cout << "可住人数:";
if(Is_Jixie[i] + 1 == 1){
cout << " 5 人 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 10 人 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 25 人 \n ";
}
cout << "占地面积:";
if(Is_Jixie[i] + 1 == 1){
cout << "30 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << "50 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << "100 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] + 1 == 1){
cout << " 10 木头 5 铁 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 20 木头 15 铁 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 50 木头 25 铁 \n";
}
}else if(i == 3){
cout << "法律建筑:";
if(Is_Jixie[i] + 1 == 1){
cout << "法庭 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << "监狱 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << "行政庭 \n ";
}
cout << "可执行操作:";
if(Is_Jixie[i] + 1 == 1){
cout << " 处理人民的犯罪时间和颁布初级法令 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 关押犯人 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 公布高级法令 \n ";
}
cout << "占地面积:";
if(Is_Jixie[i] + 1 == 1){
cout << "100 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << "500 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << "1000 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] + 1 == 1){
cout << " 100 木头 20 铁 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 300 木头 50 铁 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 500 木头 100 铁 \n";
}
}else if(i == 4){
cout << "木材建筑:";
if(Is_Jixie[i] + 1 == 1){
cout << "小型人工树场 \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << "中型人工树场 \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << "大型人工树场 \n ";
}
cout << "可执行操作:";
if(Is_Jixie[i] + 1 == 1){
cout << " 提供木材: 20 木头 / 人 (可抵挡 2 次暴风雪) \n ";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 提供木材: 30 木头 / 人 (可抵挡 5 次暴风雪) \n ";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 提供木材: 30 木头 / 人 (不可被暴风雪摧毁)\n ";
}
cout << "占地面积:";
if(Is_Jixie[i] + 1 == 1){
cout << "100 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << "300 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << "700 \n";
}
cout << " ";
cout << "耗材:";
if(Is_Jixie[i] + 1 == 1){
cout << " 100 木头 10 铁 \n";
}else if(Is_Jixie[i] + 1 == 2){
cout << " 250 木头 30 铁 \n";
}else if(Is_Jixie[i] + 1 == 3){
cout << " 400 木头 75 铁 \n";
}
}
cout << "\n";
}
yellow;
cout << "============================================================ \n";
cout << "== 请选择要升级的建筑(请勿乱输, -1 退出): \n";
cout << " ";
int init;
cin >> init;
cls;
if(Is_Falv[init] == 4){
white;
cout << "当前技能已满级!";
Sleep(2000);
return ;
}
cout << "升级此建筑需要花费 3 点技能点 \n";
cout << "当前拥有 " << Talent << " 点技能点 \n";
if(init == -1) return ;
if(Talent >= 3){
cout << "可以升级,请问你的选择是?(1 是 / 2 否)";
int Y_es;
cin >> Y_es;
if(Y_es == 1){
cls;
blue;
cout << "升级成功!";
Talent -= 3;
Is_Jixie[init] += 1;
Sleep(2000);
}else{
cout << "已退出";
Sleep(1000);
}
}else{
cout << "你无法升级此技能!请以后再来!\n";
}
pause;
}
void Tanxian(){ // 科技分支——探险分支
cls; green;
int x;
cout << "=======================科技分支:探险======================= \n";
for(int i = 1; i <= 4; i ++){
if(Is_Tanxian[i] >= 1){
green;
x = Is_Tanxian[i];
}else{
red;
x = Is_Tanxian[i] + 1;
}
cout << "== ";
if(i == 1) cout << "1 瞭望塔探测距离为 : " << x * 100;
else if(i == 2) cout << "2 每支探险队可派遣 " << x * 2 << " 人";
else if(i == 3) cout << "3 探险区域扩大至" << x * 200 + 50;
else if(i == 4) cout << "4 探险成功率提升到 " << x * 20 + 5 << "% ";
green;
cout << "\n";
red;
}
green;
cout << "============================================================ \n";
cout << "== 请选择要学习的技能(请勿乱输, -1 退出): \n";
cout << " ";
int init;
cin >> init;
cls;
if(Is_Falv[init] == 4){
white;
cout << "当前技能已满级!";
Sleep(2000);
return ;
}
cout << "升级此技能需要花费 5 点技能点 \n";
cout << "当前拥有 " << Talent << " 点技能点 \n";
if(init == -1) return ;
if(Talent >= 5){
cout << "可以升级,请问你的选择是?(1 是 / 2 否)";
int Y_es;
cin >> Y_es;
if(init == 1){
cls;
blue;
cout << "升级成功!";
Talent -= 5;
Is_Tanxian[init] += 1;
Sleep(2000);
}else{
cout << "已退出";
Sleep(1000);
}
}else{
cout << "你无法升级此技能!请以后再来!\n";
}
pause;
}
void Houqin(){ // 科技分支——后勤分支
cls; pink;
int x;
cout << "=======================科技分支:后勤======================= \n";
for(int i = 1; i <= 4; i ++){
if(Is_Houqin[i] >= 1){
green;
x = Is_Houqin[i];
}else{
red;
x = Is_Houqin[i] + 1;
}
cout << "== ";
if(i == 1) cout << "1 人民有 " << x * 1 + 1 << "% 的概率当天无需粮食(工人触发的概率降低)";
else if(i == 2) cout << "2 当粮食充足时,每天增加 " << x * 0.2 + Manyi * 0.01 << " 的满意度";
else if(i == 3) cout << "3 每次建筑时,有 " << x * 3 << "% 的概率减少一定的耗材(质量不变)";
else if(i == 4) cout << "4 每天行动点数增加 " << x * 1;
green;
cout << "\n";
red;
}
green;
cout << "============================================================ \n";
cout << "== 请选择要学习的技能(请勿乱输, -1 退出): \n";
cout << " ";
int init;
cin >> init;
cls;
if(Is_Falv[init] == 4){
white;
cout << "当前技能已满级!";
Sleep(2000);
return ;
}
cout << "升级此技能需要花费 3 点技能点 \n";
cout << "当前拥有 " << Talent << " 点技能点 \n";
if(init == -1) return ;
if(Talent >= 3){
cout << "可以升级,请问你的选择是?(1 是 / 2 否)";
int Y_es;
cin >> Y_es;
if(init == 1){
cls;
blue;
cout << "升级成功!";
Talent -= 3;
Is_Houqin[init] += 1;
Sleep(2000);
}else{
cout << "已退出";
Sleep(1000);
}
}else{
cout << "你无法升级此技能!请以后再来!\n";
}
pause;
}
void Keji(){ // 科技树( md 这个函数给我写崩溃了)
cls; blue;
cout << "========================= 冰征之旅 ========================= \n";
cout << "== 请选择要查看的科技分支: == \n";
cout << "== 1. 法律分支(用于颁布法令) == \n";
cout << "== 2. 机械分支(用于制造高级机器) == \n";
cout << "== 3. 探险分支(用于探险行动) == \n";
cout << "== 4. 后勤分支(用于为人民提供物品) == \n";
cout << "============================================================ \n";
cout << "== 请选择(请勿乱输, -1退出): \n";
cout << " ";
int init;
cin >> init;
if(init == 1){
Falv();
}else if(init == 2){
Jixie();
}else if(init == 3){
Tanxian();
}else if(init == 4){
Houqin();
}else if(init == -1){
return ;
}
Keji();
}
pair<int, pair<string, int>> work[10];
// 以下为法律相关变量
int FalvCnt; // 最多可颁布法令数
int FalvAdd; // 法律提升满意度概率
int FalvType; // 可颁布法律类型
// 劳动类
int NotWorkerwork; // 是否让非工人工作
int WorkerTime; // 工人工作时间
int TeacherTime; // 教师工作时间
int EngineerTime; // 机械师工作时间
int DoctorTime; // 医生工作时间
// 起居类
int WhoLive; // 工人 / 教师 / 机械师 / 医生优先入住
int LiveWhat_1; // 1 级房屋优先入住
int LiveWhat_2; // 2 级房屋优先入住
int LiveWhat_3; // 3 级房屋优先入住
int Livewhat_4; // 4 级房屋优先入住
// 饮食类
int WorkerEat; // 工人拥有双份口粮
int TeacherEat; // 教师拥有双份口粮
int EngineerEat; // 工程师拥有双份口粮
int DoctorEat; // 医生拥有更多口粮
int EatBetter; // 吃更好的饭
// 安全类
int SaveWho; // 谁优先救治
int CanFight; // 是否可以打架
int CanOut; // 是否可以随意离开安全区
int CanSteal; // 是否可以随意偷窃
int CanIn; // 是否可以未经允许进入难民
string Talk[20];
int OK;
void Choose(){
cls;
cout << "法律已公布,难民中选出的 5 位执政官正在评审.....\n";
for(int i = 1; i <= 10; i ++){
Sleep(rand() % 2000 + 500);
int x = rand() % 19 + 0;
if(x < 10){
green;
OK ++;
blue;
}else{
red;
OK --;
blue;
}
cout << Talk[x] << endl;
}
cls;
}
void Banbu(int Do){ // 颁布法令操作
blue; cls;
cout << "========================= 冰征之旅 ========================= \n";
cout << "== 请选择颁布法令类型: == \n";
if(FalvType == 0) cout << "== 法律分支技能未解锁,请解锁后继续 ~ == \n";
else{
if(FalvType >= 1) cout << "== 1. 劳动类 == \n";
if(FalvType >= 2) cout << "== 2. 起居类 == \n";
if(FalvType >= 3) cout << "== 3. 饮食类 == \n";
if(FalvType >= 4) cout << "== 4. 安全类 == \n";
}
cout << "============================================================ \n";
cout << "== 请选择颁布的法律类型(-1退出): == \n";
cout << "== ";
int init;
cin >> init;
if(init > FalvType){
cout << "当前未解锁此类法律!";
return ;
}
if(init == 1){
cls; blue;
cout << "============================================================ \n";
cout << "== 劳动类法令 == \n";
cout << "============================================================ \n";
cout << "== 1. 非工人应该上岗工作。 == \n";
cout << "== 2. 工人是否应该工作 12 小时 == \n";
cout << "== 3. 教师是否应该工作 12 小时 == \n";
cout << "== 4. 机械师是否应该工作 12 小时 == \n";
cout << "== 5. 医生是否应该工作 12 小时 == \n";
cout << "============================================================ \n";
cout << "== 请选择(-1退出): == \n";
cout << "== ";
int x;
cin >> x;
if(x == -1){
Banbu(Do);
}
if(x == 1){
if(Do >= 1){
cout << "可以颁布法令! \n";
cout << "注意:该法令颁布后有概率被驳回!\n";
cout << "输入 1 确定, 2 取消:";
int y;
cin >> y;
if(y == 1){
Choose();
Do --;
if(OK <= 0){ cout << "法律未通过!人民对你的决定感到愤怒!"; Manyi -= 5; }
else { cout << "法律通过!你做了一个正确的决定!"; Manyi += 5; WorkerTime == 1; NotWorkerwork = 1;}
}else Banbu(Do);
}else{
cout << "行动点不足! \n";
Sleep(2000);
return ;
}
}
if(x == 2){
if(Do >= 1){
cout << "可以颁布法令! \n";
cout << "注意:该法令颁布后有概率被驳回!\n";
cout << "输入 1 确定, 2 取消:";
int y;
cin >> y;
if(y == 1){
Choose();
Do --;
if(OK <= 0){ cout << "法律未通过!人民对你的决定感到愤怒!"; Manyi -= 5; }
else { cout << "法律通过!你做了一个正确的决定!"; Manyi += 5; WorkerTime = 1;}
}else Banbu(Do);
}else{
cout << "行动点不足! \n";
Sleep(2000);
return ;
}
}
if(x == 3){
if(Do >= 1){
cout << "可以颁布法令! \n";
cout << "注意:该法令颁布后有概率被驳回!\n";
cout << "输入 1 确定, 2 取消:";
int y;
cin >> y;
if(y == 1){
Choose();
Do --;
if(OK <= 0){ cout << "法律未通过!人民对你的决定感到愤怒!"; Manyi -= 5; }
else { cout << "法律通过!你做了一个正确的决定!"; Manyi += 5; TeacherTime = 1;}
}else Banbu(Do);
}else{
cout << "行动点不足! \n";
Sleep(2000);
return ;
}
}
if(x == 4){
if(Do >= 1){
cout << "可以颁布法令! \n";
cout << "注意:该法令颁布后有概率被驳回!\n";
cout << "输入 1 确定, 2 取消:";
int y;
cin >> y;
if(y == 1){
Choose();
Do --;
if(OK <= 0){ cout << "法律未通过!人民对你的决定感到愤怒!"; Manyi -= 5; }
else { cout << "法律通过!你做了一个正确的决定!"; Manyi += 5; EngineerTime = 1;}
}else Banbu(Do);
}else{
cout << "行动点不足! \n";
Sleep(2000);
return ;
}
}
if(x == 5){
if(Do >= 1){
cout << "可以颁布法令! \n";
cout << "注意:该法令颁布后有概率被驳回!\n";
cout << "输入 1 确定, 2 取消:";
int y;
cin >> y;
if(y == 1){
Choose();
Do --;
if(OK <= 0){ cout << "法律未通过!人民对你的决定感到愤怒!"; Manyi -= 5; }
else { cout << "法律通过!你做了一个正确的决定!"; Manyi += 5; DoctorTime = 1;}
}else Banbu(Do);
}else{
cout << "行动点不足! \n";
Sleep(2000);
return ;
}
}
if(Rand(FalvAdd) == true){
Manyi += 5;
cout << "你学的神奇小技能发力了,满意度 + 5!" << endl;
}
}
pause;
}
void Zhiling(int Do){
blue; cls;
cout << "========================= 冰征之旅 ========================= \n";
cout << "== 请选择你的行动: == \n";
cout << "== 1. 颁布法令 == \n";
cout << "== 2. 派遣人员 == \n";
cout << "== 3. 建造设施 == \n";
cout << "== 4. 发明科技 == \n";
cout << "== 5. 外出探险 == \n";
cout << "== 6. 结束一天 == \n";
cout << "============================================================ \n";
cout << "== 当前正在进行的操作: == \n";
for(auto p : work){
if(p.first == 0) continue;
cout << "== ";
if(p.first == 1) cout << "建造:";
else if(p. first == 2) cout << "发明:";
else if(p. first == 3) cout << "探险:";
cout << p.second.first << " 剩余时间:" << p.second.second;
}
cout << "============================================================ \n";
cout << "== 请选择进行的操作(-1退出): == \n";
cout << "== 当前行动点:" << Do << endl;
cout << "== ";
int init;
cin >> init;
if(init == 1){
Banbu(Do);
}else if(init == 2){
//Paiqian(Do);
}else if(init == 3){
//Jianzao(Do);
}else if(init == 4){
//Faming(Do);
}else if(init == 5){
//Waichu(Do);
}else if(init == 6){
//Jieshu(Do);
}else if(init == -1){
return ;
}
Zhiling(Do);
}
//void Fangzhu();
//void Cundang();
int Do;
void Menu(){ // 菜单界面
cls; blue;
FalvCnt = Is_Falv[1] * 5;
FalvAdd = Is_Falv[2] * 20 + 5;
FalvType = Is_Falv[3];
if(Day == 1) Do = 7;
cout << "========================= 冰征之旅 ========================= \n";
cout << "== 请选择你的行动: == \n";
cout << "== 1. 查看信息 == \n";
cout << "== 2. 查看科技 == \n";
cout << "== 3. 下达指令 == \n";
cout << "== 4. 自我放逐 == \n";
cout << "== 5. 提取 / 输入存档码 == \n";
cout << "============================================================ \n";
cout << "== 请输入(请勿乱输): == \n";
cout << " ";
int init;
cin >> init;
if(init == 1){
Xinxi();
}else if(init == 2){
Keji();
}else if(init == 3){
Zhiling(Do);
}else if(init == 4){
//Fangzhu();
}else if(init == 5){
//Cundang();
}
}
int main(){ // 主函数
Talk[0] = "我觉得我们需要这个法律!";
Talk[1] = "这项规定很重要!";
Talk[2] = "是的,也许我们需要他!";
Talk[3] = "人们会很愿意接受的!";
Talk[4] = "这对我们会有好处的!";
Talk[5] = "这是个明智的决定!";
Talk[6] = "我们需要它,这很重要!";
Talk[7] = "也许这对我们是一个很大的改变!";
Talk[8] = "我觉得这已经很好了,我同意!";
Talk[9] = "谢谢,你真是一个很好的领袖!";
Talk[10] = "这也许不太好";
Talk[11] = "不,我们没有能力完成它...";
Talk[12] = "也会是一个错误的决定...至少目前";
Talk[13] = "人民不会同意的,他们已经够苦了";
Talk[14] = "我们不能只为了自己,我们还要照顾那些难民!";
Talk[15] = "我反对,这不是个好的决定!";
Talk[16] = "停止你的暴行!";
Talk[17] = "我不同意这么做!";
Talk[18] = "我们应该那考虑一下...说不定会有更好的办法!";
Talk[19] = "我反对,无论如何!";
srand(time(0));
Rand_People_Health(20);
Rand_People_Food(20);
Rand_People_Job(20);
for(int i = 1; i <= 4; i ++){
Is_Tanxian[i] = Is_Jixie[i] = Is_Tanxian[i] = Is_Houqin[i] = 0;
}
while( Win == 0 ){
Menu();
}
return 0;
}
个人主观推测写完得小 3000 行,所以......点赞!!!!!球球啦!!!!!
全部评论 18
灵感来源于《冰汽时代》
2025-08-05 来自 辽宁
2点赞!!!!!!!!球球啦!!!!!
2025-08-05 来自 辽宁
2dddd
2025-08-05 来自 辽宁
2
饿死鬼一群没头脑
2025-09-06 来自 浙江
0666
2025-09-06 来自 辽宁
0首次刷新三个教师那很欧了
2025-09-06 来自 辽宁
0
2025-09-06 来自 上海
0666这个入是桂
2025-09-06 来自 上海
0报错?
2025-08-25 来自 浙江
0ddd
2025-08-13 来自 浙江
0#include <iostream>
#include <vector>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <algorithm>
#include <map>
#include <iomanip>
using namespace std;// 居民类
class Resident {
public:
int id;
string name;
string profession;
int health;
int hunger;
int warmth;
bool assigned;
bool alive;Resident(int _id, string _name, string _prof) : id(_id), name(_name), profession(_prof), health(100), hunger(50), warmth(70), assigned(false), alive(true) {}
};
// 建筑类
class Building {
public:
string name;
int level;
int capacity;
vector<int> workers;Building(string _name, int _cap) : name(_name), level(1), capacity(_cap) {}
};
// 游戏主类
class IceSettlementGame {
private:
int day;
int temperature;
vector<Resident> residents;
map<string, int> resources;
vector<Building> buildings;void initResources() { resources = { {"food", 50}, {"wood", 30}, {"coal", 20}, {"medicine", 5}, {"tools", 10} }; } void initBuildings() { buildings = { Building("冰屋", 8), Building("厨房", 2), Building("医务室", 1), Building("采冰站", 3) }; } void initResidents() { vector<pair<string,string>> people = { {"张队长","领导"}, {"李厨师","厨师"}, {"王木匠","木工"}, {"赵矿工","矿工"}, {"钱猎人","猎人"}, {"孙医生","医生"} }; for(int i=0; i<people.size(); i++) { residents.push_back(Resident( i+1, people[i].first, people[i].second )); } } void displayHeader() { system("cls"); cout << "============== 冰征之旅 - 极地聚集区 ==============\n"; cout << "第 " << day << " 天 | 气温: " << temperature << "°C\n\n"; }
2025-08-06 来自 上海
0void displayResources() { cout << "【资源储备】\n"; cout << "食物: " << resources["food"] << " | 木材: " << resources["wood"] << " | 煤炭: " << resources["coal"] << "\n"; cout << "药品: " << resources["medicine"] << " | 工具: " << resources["tools"] << "\n\n"; } void displayResidents() { cout << "【居民状态】\n"; cout << left << setw(4) << "ID" << setw(8) << "姓名" << setw(8) << "职业" << setw(8) << "健康" << setw(8) << "饥饿" << setw(8) << "体温" << "工作地点\n"; for(auto& r : residents) { if(r.alive) { cout << setw(4) << r.id << setw(8) << r.name << setw(8) << r.profession << setw(8) << r.health << setw(8) << r.hunger << setw(8) << r.warmth; bool working = false; for(auto& b : buildings) { if(find(b.workers.begin(), b.workers.end(), r.id) != b.workers.end()) { cout << b.name; working = true; break; } } if(!working) cout << "无"; cout << "\n"; } else { cout << setw(4) << r.id << setw(8) << r.name << " (已死亡)\n"; } } cout << "\n"; } void displayBuildings() { cout << "【建筑设施】\n"; for(auto& b : buildings) { cout << b.name << " Lv." << b.level << " (" << b.workers.size() << "/" << b.capacity << "人)"; if(!b.workers.empty()) { cout << " - 工人: "; for(int id : b.workers) { cout << id << " "; } } cout << "\n"; } }
2025-08-06 来自 上海
0void processDay() { // 温度变化 temperature += (rand()%7)-3; temperature = max(-50, min(-10, temperature)); // 居民状态更新 for(auto& r : residents) { if(r.alive) { r.hunger += 10 + (temperature < -35 ? 5 : 0); r.warmth -= 5 + (temperature < -30 ? 10 : 0); if(r.hunger > 80) r.health -= 15; if(r.warmth < 40) r.health -= 20; if(r.health <= 0) { r.alive = false; cout << r.name << " 因恶劣环境去世了...\n"; Sleep(1500); } } } // 资源生产 for(auto& b : buildings) { if(b.name == "采冰站" && !b.workers.empty()) { resources["food"] += b.workers.size() * 2; } if(b.name == "厨房" && !b.workers.empty()) { for(auto& r : residents) { if(r.alive) r.hunger = max(0, r.hunger-15); } } } day++; randomEvent(); }
2025-08-06 来自 上海
0void randomEvent() {
int event = rand()%100;if(event < 15) { // 暴风雪 cout << "★ 遭遇暴风雪!\n"; temperature -= 15; for(auto& r : residents) { if(r.alive) r.warmth -= 20; } Sleep(1500); } else if(event < 25) { // 发现物资 int type = rand()%5; int amount = rand()%15 + 5; string resName; switch(type) { case 0: resName = "food"; break; case 1: resName = "wood"; break; case 2: resName = "coal"; break; case 3: resName = "medicine"; amount/=2; break; case 4: resName = "tools"; amount/=3; break; } resources[resName] += amount; cout << "★ 发现物资!获得 " << amount << " " << (resName=="food"?"食物":resName=="wood"?"木材": resName=="coal"?"煤炭":resName=="medicine"?"药品":"工具") << "\n"; Sleep(1500); } } void assignWorker() { cout << "\n分配工人到建筑:\n"; for(int i=0; i<buildings.size(); i++) { cout << i+1 << ". " << buildings[i].name << " (" << buildings[i].workers.size() << "/" << buildings[i].capacity << ")\n"; } cout << "选择建筑(0取消): "; int bChoice; cin >> bChoice; if(bChoice < 1 || bChoice > buildings.size()) return; Building& b = buildings[bChoice-1]; if(b.workers.size() >= b.capacity) { cout << "该建筑已满员!\n"; Sleep(1000); return; }
2025-08-06 来自 上海
0
顶
2025-08-06 来自 湖北
0想玩
2025-08-06 来自 上海
0孩子们这 200 行我写了一个小时....
孩子们这并不好笑2025-08-06 来自 辽宁
0200行才一个小时?
2025-08-06 来自 上海
0有的地方就复制粘贴然后改一个变量名就行了,比如果随机新人健康状态和进食状态,就先写完一个然后复制另一个就行了
2025-08-06 来自 辽宁
0
催更
2025-08-06 来自 上海
0这可由不得你
2025-08-06 来自 辽宁
0催更
2025-08-08 来自 浙江
0实不相瞒,我现在在找bug
2025-08-08 来自 辽宁
0
ddddd
2025-08-06 来自 浙江
0找出来啦!(喜)开心再多写一点(已经840行了)
2025-08-12 来自 辽宁
02025-08-13 来自 浙江
0
d
2025-08-06 来自 浙江
0ddd
2025-08-06 来自 浙江
02025-08-06 来自 广东
02025-08-06 来自 上海
0666
2025-08-06 来自 上海
02025-08-06 来自 辽宁
1
有帮助,赞一个