#include<bits/stdc++.h> /*#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <stdbool.h> #include <unistd.h>*/ // 定义难度枚举 typedef enum { EASY, NORMAL, HARD } Difficulty; // 定义游戏模式枚举 typedef enum { TIME_LIMITED, // 限时模式(30天) UNLIMITED_TIME // 无限时间模式 } GameMode; // 定义职业结构体 typedef struct { char name[20]; // 职业名称 int unlockIntel; // 解锁智力要求 int unlockDay; // 解锁天数要求 int minIncome; // 最低收入 int maxIncome; // 最高收入 int energyCost; // 体力消耗 int happyCost; // 幸福感消耗 int isUnlocked; // 是否已解锁(0/1) } Job; // 定义物品结构体 typedef struct { char name[30]; // 物品名称 int price; // 价格 int energyGain; // 体力增加 int intelGain; // 智力增加 int happyGain; // 幸福感增加 } Item; // 定义成就结构体 typedef struct { char name[30]; // 成就名称 char desc[100]; // 成就描述 int isCompleted; // 是否完成(0/1) int rewardMoney; // 奖励金钱 int rewardIntel; // 奖励智力 } Achievement; // 定义店铺结构体 typedef struct { char name[30]; // 店铺名称 int unlockMoney; // 解锁资金要求 int unlockIntel; // 解锁智力要求 int operateCost; // 每日运营成本 int minProfit; // 最低日利润 int maxProfit; // 最高日利润 int energyCost; // 经营体力消耗 int isUnlocked; // 是否解锁(0/1) int isOpened; // 是否已开店(0/1) } Shop; // 定义玩家结构体 typedef struct { char name[20]; // 玩家名字 int money; // 金钱 int energy; // 体力 int intelligence; // 智力 int happiness; // 幸福感 int day; // 天数 Difficulty difficulty;// 游戏难度 GameMode gameMode; // 游戏模式 Job jobs[5]; // 职业列表 Item items[3]; // 商店物品列表 Achievement achievements[6]; // 成就列表(新增创业成就) Shop shops[4]; // 店铺列表 } Player; // 函数声明 void showMainMenu(); void showGameInstructions(); Difficulty selectDifficulty(); GameMode selectGameMode(); void initJobs(Job jobs[]); void initItems(Item items[]); void initAchievements(Achievement achievements[]); void initShops(Shop shops[]); void initPlayer(Player *player); void showStatus(Player *player); void workJob(Player *player, int jobIndex); void study(Player *player); void rest(Player *player); void randomEvent(Player *player); void gameLoop(Player *player); void clearInputBuffer(); void saveGame(Player *player); int loadGame(Player *player); void deleteSaveGame(); void showShop(Player *player); void checkAchievements(Player *player); void showAchievements(Player *player); void printSeparator(); // 优化界面用分隔符函数 void showBusinessMenu(Player *player); void operateShop(Player *player, int shopIndex); void openShop(Player *player, int shopIndex); void randomShopEvent(Player *player); int main() { srand((unsigned int)time(NULL)); int mainChoice; while (1) { showMainMenu(); printf("请输入你的选择(1-5):"); while (scanf("%d", &mainChoice) != 1 || mainChoice < 1 || mainChoice > 5) { clearInputBuffer(); printf("输入无效,请重新输入(1-5):"); } clearInputBuffer(); switch (mainChoice) { case 1: { Player player; initPlayer(&player); gameLoop(&player); break; } case 2: { Player player; if (loadGame(&player)) { printf("存档加载成功!\n"); gameLoop(&player); } else { printf("存档加载失败,请先创建新游戏!\n"); system("pause"); } break; } case 3: deleteSaveGame(); break; case 4: showGameInstructions(); break; case 5: printf("\n感谢游玩打工模拟器!再见!\n"); exit(0); default: printf("输入错误,请重新选择!\n"); break; } } return 0; } // 清空输入缓冲区 void clearInputBuffer() { while (getchar() != '\n'); } // 打印分隔符(优化界面) void printSeparator() { printf("======================================================\n"); } // 显示主菜单 void showMainMenu() { system("cls"); // Windows清屏,Linux/Mac用system("clear") printf("\n"); printSeparator(); printf("| 打工模拟器(简单版) V 4.0 |\n"); printSeparator(); printf("| 1. 开始新游戏 |\n"); printf("| 2. 加载存档 |\n"); printf("| 3. 删除存档 |\n"); printf("| 4. 游戏说明 |\n"); printf("| 5. 退出游戏 |\n"); printSeparator(); printf("| 作者:程烯峻 |\n"); printf("| 感谢支持 |\n"); printSeparator(); } // 显示游戏说明 void showGameInstructions() { system("cls"); printf("\n"); printSeparator(); printf("| 游戏说明 |\n"); printSeparator(); printf("1. 游戏目标:合理安排工作、学习、休息、购物和创业,积累财富和智力,解锁成就。\n"); printf("2. 模式选择:\n"); printf(" - 限时模式:30天内达成目标,有结算评价\n"); printf(" - 无限时间模式:无天数限制,可自由发展创业\n"); printf("3. 难度选择:简单(初始金钱多,事件友好)、普通(平衡)、困难(初始资源少)。\n"); printf("4. 职业系统:智力或天数达标可解锁更高薪职业(程序员、设计师等)。\n"); printf("5. 商店系统:可购买体力药水、智力书籍等道具提升属性。\n"); printf("6. 成就系统:完成特定目标可获得奖励,新增创业相关成就。\n"); printf("7. 创业系统:资金和智力达标可解锁开店(小吃店、奶茶店、便利店、连锁超市),\n"); printf(" 店铺有每日运营成本和利润,也有随机经营事件。\n"); printf("8. 存档管理:支持保存、加载、删除游戏进度。\n"); printf("9. 结束条件:\n"); printf(" - 限时模式:幸福感降为0(失败)或达到30天(结算评价)\n"); printf(" - 无限模式:仅幸福感降为0时失败\n"); printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); } // 选择游戏难度 Difficulty selectDifficulty() { int diffChoice; printf("\n"); printSeparator(); printf("| 选择难度 |\n"); printSeparator(); printf("1. 简单(初始金钱1500,体力120,事件概率友好)\n"); printf("2. 普通(初始金钱1000,体力100,事件概率平衡)\n"); printf("3. 困难(初始金钱500,体力80,事件概率苛刻)\n"); printf("请输入难度选择(1-3):"); while (scanf("%d", &diffChoice) != 1 || diffChoice < 1 || diffChoice > 3) { clearInputBuffer(); printf("输入无效,请重新输入(1-3):"); } clearInputBuffer(); switch (diffChoice) { case 1: return EASY; case 2: return NORMAL; case 3: return HARD; default: return NORMAL; } } // 选择游戏模式 GameMode selectGameMode() { int modeChoice; printf("\n"); printSeparator(); printf("| 选择模式 |\n"); printSeparator(); printf("1. 限时模式(30天,有结算评价)\n"); printf("2. 无限时间模式(无天数限制,自由创业)\n"); printf("请输入模式选择(1-2):"); while (scanf("%d", &modeChoice) != 1 || modeChoice < 1 || modeChoice > 2) { clearInputBuffer(); printf("输入无效,请重新输入(1-2):"); } clearInputBuffer(); switch (modeChoice) { case 1: return TIME_LIMITED; case 2: return UNLIMITED_TIME; default: return TIME_LIMITED; } } // 初始化职业列表 void initJobs(Job jobs[]) { // 0: 兼职(初始解锁) strcpy(jobs[0].name, "兼职服务员"); jobs[0].unlockIntel = 0; jobs[0].unlockDay = 0; jobs[0].minIncome = 100; jobs[0].maxIncome = 200; jobs[0].energyCost = 20; jobs[0].happyCost = 5; jobs[0].isUnlocked = 1; // 1: 全职(初始解锁) strcpy(jobs[1].name, "全职文员"); jobs[1].unlockIntel = 0; jobs[1].unlockDay = 0; jobs[1].minIncome = 300; jobs[1].maxIncome = 500; jobs[1].energyCost = 50; jobs[1].happyCost = 10; jobs[1].isUnlocked = 1; // 2: 设计师(智力80或天数10解锁) strcpy(jobs[2].name, "UI设计师"); jobs[2].unlockIntel = 80; jobs[2].unlockDay = 10; jobs[2].minIncome = 500; jobs[2].maxIncome = 800; jobs[2].energyCost = 40; jobs[2].happyCost = 8; jobs[2].isUnlocked = 0; // 3: 程序员(智力100或天数15解锁) strcpy(jobs[3].name, "程序员"); jobs[3].unlockIntel = 100; jobs[3].unlockDay = 15; jobs[3].minIncome = 800; jobs[3].maxIncome = 1200; jobs[3].energyCost = 60; jobs[3].happyCost = 12; jobs[3].isUnlocked = 0; // 4: 项目经理(智力150或天数20解锁) strcpy(jobs[4].name, "项目经理"); jobs[4].unlockIntel = 150; jobs[4].unlockDay = 20; jobs[4].minIncome = 1200; jobs[4].maxIncome = 2000; jobs[4].energyCost = 50; jobs[4].happyCost = 5; jobs[4].isUnlocked = 0; } // 初始化商店物品 void initItems(Item items[]) { // 0: 体力药水 strcpy(items[0].name, "体力药水"); items[0].price = 100; items[0].energyGain = 120; items[0].intelGain = 0; items[0].happyGain = 5; // 1: 智力书籍 strcpy(items[1].name, "编程书籍"); items[1].price = 200; items[1].energyGain = 10; items[1].intelGain = 300; items[1].happyGain = 50; // 2: 幸福蛋糕 strcpy(items[2].name, "幸福蛋糕"); items[2].price = 150; items[2].energyGain = 10; items[2].intelGain = 5; items[2].happyGain = 100; } // 初始化成就列表(新增创业成就) void initAchievements(Achievement achievements[]) { // 0: 首次中奖 strcpy(achievements[0].name, "首次中奖"); strcpy(achievements[0].desc, "第一次买彩票中奖"); achievements[0].isCompleted = 0; achievements[0].rewardMoney = 200; achievements[0].rewardIntel = 5; // 1: 智力破百 strcpy(achievements[1].name, "智力破百"); strcpy(achievements[1].desc, "智力达到100点"); achievements[1].isCompleted = 0; achievements[1].rewardMoney = 500; achievements[1].rewardIntel = 10; // 2: 月入五千 strcpy(achievements[2].name, "月入五千"); strcpy(achievements[2].desc, "总金钱达到5000元"); achievements[2].isCompleted = 0; achievements[2].rewardMoney = 1000; achievements[2].rewardIntel = 20; // 3: 职业解锁 strcpy(achievements[3].name, "职业解锁"); strcpy(achievements[3].desc, "解锁第一个高级职业(UI设计师)"); achievements[3].isCompleted = 0; achievements[3].rewardMoney = 300; achievements[3].rewardIntel = 15; // 4: 幸运之星 strcpy(achievements[4].name, "幸运之星"); strcpy(achievements[4].desc, "一天内触发两次幸运事件"); achievements[4].isCompleted = 0; achievements[4].rewardMoney = 800; achievements[4].rewardIntel = 25; // 5: 创业先锋(新增) strcpy(achievements[5].name, "创业先锋"); strcpy(achievements[5].desc, "成功开设第一家店铺"); achievements[5].isCompleted = 0; achievements[5].rewardMoney = 1000; achievements[5].rewardIntel = 30; } // 初始化店铺列表 void initShops(Shop shops[]) { // 0: 小吃店(入门级) strcpy(shops[0].name, "小吃店"); shops[0].unlockMoney = 3000; shops[0].unlockIntel = 60; shops[0].operateCost = 200; shops[0].minProfit = 100; shops[0].maxProfit = 400; shops[0].energyCost = 0; shops[0].isUnlocked = 0; shops[0].isOpened = 0; // 1: 奶茶店 strcpy(shops[1].name, "奶茶店"); shops[1].unlockMoney = 8000; shops[1].unlockIntel = 90; shops[1].operateCost = 500; shops[1].minProfit = 300; shops[1].maxProfit = 800; shops[1].energyCost = 0; shops[1].isUnlocked = 0; shops[1].isOpened = 0; // 2: 便利店 strcpy(shops[2].name, "便利店"); shops[2].unlockMoney = 15000; shops[2].unlockIntel = 120; shops[2].operateCost = 800; shops[2].minProfit = 500; shops[2].maxProfit = 1200; shops[2].energyCost = 0; shops[2].isUnlocked = 0; shops[2].isOpened = 0; // 3: 连锁超市 strcpy(shops[3].name, "连锁超市"); shops[3].unlockMoney = 50000; shops[3].unlockIntel = 200; shops[3].operateCost = 2000; shops[3].minProfit = 1500; shops[3].maxProfit = 3000; shops[3].energyCost = 0; shops[3].isUnlocked = 0; shops[3].isOpened = 0; } // 初始化玩家信息 void initPlayer(Player *player) { system("cls"); printf("\n"); printSeparator(); printf("| 新游戏 |\n"); printSeparator(); printf("请输入你的名字:"); scanf("%s", player->name); clearInputBuffer(); // 选择难度和模式 player->difficulty = selectDifficulty(); player->gameMode = selectGameMode(); // 根据难度初始化属性 switch (player->difficulty) { case EASY: player->money = 1500; player->energy = 120; player->intelligence = 60; player->happiness = 90; break; case NORMAL: player->money = 1000; player->energy = 100; player->intelligence = 50; player->happiness = 80; break; case HARD: player->money = 500; player->energy = 80; player->intelligence = 40; player->happiness = 70; break; } player->day = 1; // 初始化职业、物品、成就、店铺 initJobs(player->jobs); initItems(player->items); initAchievements(player->achievements); initShops(player->shops); // 解锁初始店铺(小吃店)如果难度简单且初始资金足够 if (player->difficulty == EASY && player->money >= player->shops[0].unlockMoney) { player->shops[0].isUnlocked = 1; } printf("\n欢迎你,%s!你的打工创业生涯开始了!\n", player->name); printf("游戏模式:%s\n", player->gameMode == TIME_LIMITED ? "限时模式(30天)" : "无限时间模式"); printf("初始状态:金钱%d元,体力%d/%d,智力%d点,幸福感%d/100\n", player->money, player->energy, player->difficulty == EASY ? 120 : 100, player->intelligence, player->happiness); printf("按回车键开始第一天的生活..."); getchar(); clearInputBuffer(); } // 显示玩家状态 void showStatus(Player *player) { printf("\n"); printSeparator(); printf("| 当前状态 |\n"); printSeparator(); printf("姓名:%s\n", player->name); printf("难度:%s\n", player->difficulty == EASY ? "简单" : (player->difficulty == NORMAL ? "普通" : "困难")); printf("模式:%s\n", player->gameMode == TIME_LIMITED ? "限时模式(30天)" : "无限时间模式"); printf("天数:第%d天\n", player->day); printf("金钱:%d元\n", player->money); printf("体力:%d/%d\n", player->energy, player->difficulty == EASY ? 120 : 100); printf("智力:%d点\n", player->intelligence); printf("幸福感:%d/100\n", player->happiness); // 显示已解锁职业 printf("已解锁职业:"); int first = 1; for (int i = 0; i < 5; i++) { if (player->jobs[i].isUnlocked) { if (!first) printf(", "); printf("%s", player->jobs[i].name); first = 0; } } printf("\n"); // 显示已开设店铺 printf("已开设店铺:"); first = 1; int hasShop = 0; for (int i = 0; i < 4; i++) { if (player->shops[i].isOpened) { hasShop = 1; if (!first) printf(", "); printf("%s", player->shops[i].name); first = 0; } } if (!hasShop) printf("无"); printf("\n"); printSeparator(); } // 执行职业工作 void workJob(Player *player, int jobIndex) { if (jobIndex < 0 || jobIndex >= 5 || !player->jobs[jobIndex].isUnlocked) { printf("\n【错误】该职业未解锁或不存在!\n"); return; } Job *job = &player->jobs[jobIndex]; if (player->energy < job->energyCost) { printf("\n【提示】体力不足%d点,无法进行%s工作!\n", job->energyCost, job->name); return; } // 修复:使用浮点型计算倍率,避免整数截断 float incomeMulti = 1.0f; if (player->difficulty == EASY) incomeMulti = 1.2f; else if (player->difficulty == HARD) incomeMulti = 0.8f; int baseIncome = rand() % (job->maxIncome - job->minIncome + 1) + job->minIncome; int income = (int)(baseIncome * incomeMulti); // 智力加成(每10点智力+5%收入) income += (int)(income * (player->intelligence / 10.0f) * 0.05f); player->money += income; player->energy -= job->energyCost; player->happiness -= job->happyCost; printf("\n【工作完成】你完成了一天的%s工作,获得%d元收入!\n", job->name, income); // 边界检查 if (player->energy < 0) player->energy = 0; if (player->happiness < 0) player->happiness = 0; // 检查成就 checkAchievements(player); // 检查店铺解锁 for (int i = 0; i < 4; i++) { if (!player->shops[i].isUnlocked && player->money >= player->shops[i].unlockMoney && player->intelligence >= player->shops[i].unlockIntel) { player->shops[i].isUnlocked = 1; printf("\n【店铺解锁】恭喜你解锁了%s开店资格!\n", player->shops[i].name); } } } // 学习提升 void study(Player *player) { int energyCost = player->difficulty == EASY ? 25 : (player->difficulty == NORMAL ? 30 : 35); int moneyCost = player->difficulty == EASY ? 40 : (player->difficulty == NORMAL ? 50 : 60); if (player->energy < energyCost) { printf("\n【提示】体力不足%d点,无法学习!\n", energyCost); return; } if (player->money < moneyCost) { printf("\n【提示】金钱不足%d元,无法支付学习费用!\n", moneyCost); return; } int intelGain = rand() % 10 + 5; // 难度加成 if (player->difficulty == EASY) intelGain += 3; else if (player->difficulty == HARD) intelGain -= 2; player->intelligence += intelGain; player->energy -= energyCost; player->money -= moneyCost; player->happiness += 5; printf("\n【学习提升】你完成了一天的学习,智力增加%d点!\n", intelGain); // 边界检查 if (player->energy < 0) player->energy = 0; if (player->happiness > 100) player->happiness = 100; // 检查职业解锁 for (int i = 2; i < 5; i++) { if (!player->jobs[i].isUnlocked && (player->intelligence >= player->jobs[i].unlockIntel || player->day >= player->jobs[i].unlockDay)) { player->jobs[i].isUnlocked = 1; printf("\n【职业解锁】恭喜你解锁了新职业:%s!\n", player->jobs[i].name); // 解锁UI设计师成就 if (i == 2) player->achievements[3].isCompleted = 1; } } // 检查店铺解锁 for (int i = 0; i < 4; i++) { if (!player->shops[i].isUnlocked && player->money >= player->shops[i].unlockMoney && player->intelligence >= player->shops[i].unlockIntel) { player->shops[i].isUnlocked = 1; printf("\n【店铺解锁】恭喜你解锁了%s开店资格!\n", player->shops[i].name); } } // 检查成就 checkAchievements(player); } // 休息恢复 void rest(Player *player) { int restCost = rand() % 50 + 50; // 难度调整(修复浮点计算) float costMulti = 1.0f; if (player->difficulty == EASY) costMulti = 0.8f; else if (player->difficulty == HARD) costMulti = 1.2f; restCost = (int)(restCost * costMulti); if (player->money < restCost) { printf("\n【提示】金钱不足%d元,无法好好休息!\n", restCost); return; } int energyGain = rand() % 30 + 20; int happyGain = rand() % 20 + 10; // 难度加成 if (player->difficulty == EASY) { energyGain += 10; happyGain += 5; } else if (player->difficulty == HARD) { energyGain -= 5; happyGain -= 3; } player->energy += energyGain; player->happiness += happyGain; player->money -= restCost; // 体力上限 int energyMax = player->difficulty == EASY ? 120 : 100; if (player->energy > energyMax) player->energy = energyMax; if (player->happiness > 100) player->happiness = 100; printf("\n【休息恢复】你好好休息了一天,花费%d元,体力恢复%d点,幸福感恢复%d点!\n", restCost, energyGain, happyGain); } // 随机事件 void randomEvent(Player *player) { static int luckyCount = 0; // 记录当天幸运事件数 int eventType = rand() % 20; // 增加事件类型数量 int difficultyFactor = player->difficulty == EASY ? -2 : (player->difficulty == HARD ? 2 : 0); eventType += difficultyFactor; if (eventType < 0) eventType = 0; if (eventType >= 20) eventType = 19; printf("\n"); printSeparator(); printf("| 随机事件 |\n"); printSeparator(); switch(eventType) { case 0: case 1: { int money = rand() % 200 + 100; printf("【幸运】捡到了%d元!\n", money); player->money += money; luckyCount++; break; } case 2: printf("【好运】买彩票中了500元!\n"); player->money += 500; player->happiness += 20; player->achievements[0].isCompleted = 1; // 首次中奖成就 luckyCount++; break; case 3: case 4: { int money = rand() % 300 + 100; printf("【倒霉】钱包丢了,损失了%d元!\n", money); player->money -= money; if (player->money < 0) player->money = 0; player->happiness -= 15; break; } case 5: { int money = rand() % 400 + 200; printf("【生病】生病了,花费%d元看病!\n", money); player->money -= money; if (player->money < 0) player->money = 0; player->energy -= 20; player->happiness -= 25; break; } case 6: case 7: { int happy = rand() % 15 + 5; printf("【社交】朋友请客吃饭,幸福感增加%d点!\n", happy); player->happiness += happy; break; } case 8: { int money = rand() % 100 + 50; printf("【善举】在路上帮助了别人,获得了%d元感谢费!\n", money); player->money += money; player->happiness += 5; break; } case 9: { int money = rand() % 300 + 100; int energy = rand() % 40 + 20; printf("【加班】加班了,获得了%d元加班费,但体力减少%d点!\n", money, energy); player->money += money; player->energy -= energy; player->happiness -= 10; break; } case 10: case 11: { int intel = rand() % 10 + 5; printf("【成长】参加了一个讲座,智力增加%d点!\n", intel); player->intelligence += intel; break; } case 12: { int energy = rand() % 20 + 10; printf("【意外】不小心摔了一跤,体力减少%d点!\n", energy); player->energy -= energy; player->happiness -= 5; break; } case 13: case 14: printf("【顺意】今天运气好,所有状态小幅提升!\n"); player->energy += rand() % 10 + 5; player->happiness += rand() % 10 + 5; player->intelligence += rand() % 5 + 2; luckyCount++; break; case 15: { int money = rand() % 500 + 200; printf("【投资】小额投资获利%d元!\n", money); player->money += money; luckyCount++; break; } case 16: { int money = rand() % 200 + 100; printf("【罚款】违反交通规则,罚款%d元!\n", money); player->money -= money; if (player->money < 0) player->money = 0; break; } case 17: { int money = rand() % 1000 + 500; printf("【礼物】收到家人汇款%d元!\n", money); player->money += money; luckyCount++; break; } case 18: { int money = rand() % 800 + 300; printf("【被盗】家中被盗,损失%d元!\n", money); player->money -= money; if (player->money < 0) player->money = 0; player->happiness -= 30; break; } case 19: { int money = rand() % 1000 + 500; printf("【中奖】刮刮乐中了%d元!\n", money); player->money += money; player->happiness += 30; luckyCount++; break; } } printSeparator(); // 检查幸运之星成就 if (luckyCount >= 2) { player->achievements[4].isCompleted = 1; // 立即触发成就检查 checkAchievements(player); } luckyCount = 0; // 重置当天计数 // 边界检查 int energyMax = player->difficulty == EASY ? 120 : 100; if (player->energy < 0) player->energy = 0; else if (player->energy > energyMax) player->energy = energyMax; if (player->happiness < 0) player->happiness = 0; else if (player->happiness > 100) player->happiness = 100; if (player->money < 0) player->money = 0; } // 店铺随机经营事件 void randomShopEvent(Player *player) { int eventType = rand() % 10; int difficultyFactor = player->difficulty == EASY ? -1 : (player->difficulty == HARD ? 1 : 0); eventType += difficultyFactor; if (eventType < 0) eventType = 0; if (eventType >= 10) eventType = 9; printf("\n"); printSeparator(); printf("| 店铺经营事件 |\n"); printSeparator(); switch(eventType) { case 0: case 1: { int bonus = rand() % 500 + 200; printf("【生意火爆】店铺客流量大增,额外盈利%d元!\n", bonus); player->money += bonus; player->happiness += 15; break; } case 2: { int discount = rand() % 300 + 100; printf("【促销活动】举办促销活动,盈利减少%d元,但幸福感提升!\n", discount); player->money -= discount; if (player->money < 0) player->money = 0; player->happiness += 10; break; } case 3: case 4: { int loss = rand() % 400 + 200; printf("【经营不善】店铺客流量减少,亏损%d元!\n", loss); player->money -= loss; if (player->money < 0) player->money = 0; player->happiness -= 10; break; } case 5: { int repair = rand() % 600 + 300; printf("【设备维修】店铺设备故障,维修花费%d元!\n", repair); player->money -= repair; if (player->money < 0) player->money = 0; player->energy -= 15; break; } case 6: case 7: { int praise = rand() % 200 + 100; printf("【好评如潮】获得顾客好评,口碑提升,额外盈利%d元!\n", praise); player->money += praise; player->intelligence += 5; break; } case 8: { int tax = rand() % 500 + 200; printf("【缴纳税费】按时缴纳税费%d元,诚信经营!\n", tax); player->money -= tax; if (player->money < 0) player->money = 0; player->happiness += 5; break; } case 9: { int upgrade = rand() % 800 + 400; printf("【店铺升级】花费%d元升级店铺,后续利润提升!\n", upgrade); player->money -= upgrade; if (player->money < 0) player->money = 0; player->intelligence += 10; break; } } printSeparator(); // 边界检查 int energyMax = player->difficulty == EASY ? 120 : 100; if (player->energy < 0) player->energy = 0; else if (player->energy > energyMax) player->energy = energyMax; if (player->happiness < 0) player->happiness = 0; else if (player->happiness > 100) player->happiness = 100; } // 开店操作 void openShop(Player *player, int shopIndex) { if (shopIndex < 0 || shopIndex >= 4 || !player->shops[shopIndex].isUnlocked) { printf("\n【错误】该店铺未解锁或不存在!\n"); return; } Shop *shop = &player->shops[shopIndex]; if (shop->isOpened) { printf("\n【提示】你已经开设了%s,无需重复开设!\n", shop->name); return; } // 检查启动资金(解锁资金的2倍作为启动成本) int startCost = shop->unlockMoney * 2; if (player->money < startCost) { printf("\n【提示】启动资金不足%d元,无法开设%s!\n", startCost, shop->name); return; } player->money -= startCost; shop->isOpened = 1; player->achievements[5].isCompleted = 1; // 创业先锋成就 printf("\n【开店成功】恭喜你成功开设%s!\n", shop->name); printf("花费启动资金%d元,现在可以开始经营了!\n", startCost); // 检查成就 checkAchievements(player); } // 经营店铺 void operateShop(Player *player, int shopIndex) { if (shopIndex < 0 || shopIndex >= 4 || !player->shops[shopIndex].isOpened) { printf("\n【错误】该店铺未开设或不存在!\n"); return; } Shop *shop = &player->shops[shopIndex]; if (player->energy < shop->energyCost) { printf("\n【提示】体力不足%d点,无法经营%s!\n", shop->energyCost, shop->name); return; } // 扣除运营成本 if (player->money < shop->operateCost) { printf("\n【提示】资金不足%d元,无法支付%s运营成本!\n", shop->operateCost, shop->name); player->happiness -= 20; if (player->happiness < 0) player->happiness = 0; return; } player->money -= shop->operateCost; player->energy -= shop->energyCost; // 计算利润 float profitMulti = 1.0f; if (player->difficulty == EASY) profitMulti = 1.3f; else if (player->difficulty == HARD) profitMulti = 0.8f; int baseProfit = rand() % (shop->maxProfit - shop->minProfit + 1) + shop->minProfit; int profit = (int)(baseProfit * profitMulti); // 智力加成(每20点智力+10%利润) profit += (int)(profit * (player->intelligence / 20.0f) * 0.1f); player->money += profit; player->happiness += 5; printf("\n【经营完成】你经营了一天的%s,\n", shop->name); printf("运营成本:%d元,获得利润:%d元,净收入:%d元!\n", shop->operateCost, profit, profit - shop->operateCost); // 边界检查 if (player->energy < 0) player->energy = 0; if (player->happiness > 100) player->happiness = 100; // 触发店铺随机事件(50%概率) if (rand() % 100 < 50) { randomShopEvent(player); } } // 创业菜单 void showBusinessMenu(Player *player) { system("cls"); printf("\n"); printSeparator(); printf("| 创业系统 |\n"); printSeparator(); printf("当前资金:%d元,智力:%d点\n", player->money, player->intelligence); printf("\n可解锁店铺列表:\n"); int count = 0; int shopIndices[4]; for (int i = 0; i < 4; i++) { if (player->shops[i].isUnlocked) { shopIndices[count++] = i; printf("%d. %s - 启动资金%d元(运营成本%d/天,利润%d-%d/天)%s\n", count, player->shops[i].name, player->shops[i].unlockMoney * 2, player->shops[i].operateCost, player->shops[i].minProfit, player->shops[i].maxProfit, player->shops[i].isOpened ? "【已开设】" : "【未开设】"); } } if (count == 0) { printf("暂无解锁店铺!请先积累资金和提升智力。\n"); printSeparator(); printf("按回车键返回..."); getchar(); clearInputBuffer(); return; } printf("%d. 返回主操作\n", count + 1); printSeparator(); printf("请输入选择(1-%d):", count + 1); int choice; while (scanf("%d", &choice) != 1 || choice < 1 || choice > count + 1) { clearInputBuffer(); printf("输入无效,请重新输入(1-%d):", count + 1); } clearInputBuffer(); if (choice == count + 1) { return; } int shopIndex = shopIndices[choice - 1]; if (!player->shops[shopIndex].isOpened) { // 未开设,执行开店操作 openShop(player, shopIndex); } else { // 已开设,执行经营操作 operateShop(player, shopIndex); } printf("按回车键继续..."); getchar(); clearInputBuffer(); } // 显示商店 void showShop(Player *player) { system("cls"); printf("\n"); printSeparator(); printf("| 商店 |\n"); printSeparator(); printf("当前金钱:%d元\n", player->money); printf("1. %s - %d元(体力+%d,幸福感+%d)\n", player->items[0].name, player->items[0].price, player->items[0].energyGain, player->items[0].happyGain); printf("2. %s - %d元(智力+%d,幸福感+%d)\n", player->items[1].name, player->items[1].price, player->items[1].intelGain, player->items[1].happyGain); printf("3. %s - %d元(体力+%d,智力+%d,幸福感+%d)\n", player->items[2].name, player->items[2].price, player->items[2].energyGain, player->items[2].intelGain, player->items[2].happyGain); printf("4. 返回主操作\n"); printSeparator(); printf("请输入选择(1-4):"); int choice; while (scanf("%d", &choice) != 1 || choice < 1 || choice > 4) { clearInputBuffer(); printf("输入无效,请重新输入(1-4):"); } clearInputBuffer(); if (choice >= 1 && choice <= 3) { Item *item = &player->items[choice-1]; if (player->money >= item->price) { player->money -= item->price; player->energy += item->energyGain; player->intelligence += item->intelGain; player->happiness += item->happyGain; // 边界检查 int energyMax = player->difficulty == EASY ? 120 : 100; if (player->energy > energyMax) player->energy = energyMax; if (player->happiness > 100) player->happiness = 100; printf("\n【购买成功】你购买了%s,属性已更新!\n", item->name); } else { printf("\n【购买失败】金钱不足,无法购买%s!\n", item->name); } printf("按回车键继续..."); getchar(); clearInputBuffer(); } } // 检查成就完成情况(修复所有漏洞) void checkAchievements(Player *player) { // 首次中奖(在随机事件中标记,这里发放奖励) if (player->achievements[0].isCompleted && player->achievements[0].rewardMoney > 0) { printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[0].name, player->achievements[0].rewardMoney, player->achievements[0].rewardIntel); player->money += player->achievements[0].rewardMoney; player->intelligence += player->achievements[0].rewardIntel; // 标记奖励已发放,避免重复 player->achievements[0].rewardMoney = 0; player->achievements[0].rewardIntel = 0; } // 智力破百 if (player->intelligence >= 100 && !player->achievements[1].isCompleted) { player->achievements[1].isCompleted = 1; printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[1].name, player->achievements[1].rewardMoney, player->achievements[1].rewardIntel); player->money += player->achievements[1].rewardMoney; player->intelligence += player->achievements[1].rewardIntel; } // 月入五千 if (player->money >= 5000 && !player->achievements[2].isCompleted) { player->achievements[2].isCompleted = 1; printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[2].name, player->achievements[2].rewardMoney, player->achievements[2].rewardIntel); player->money += player->achievements[2].rewardMoney; player->intelligence += player->achievements[2].rewardIntel; } // 职业解锁(UI设计师) if (player->jobs[2].isUnlocked && !player->achievements[3].isCompleted) { player->achievements[3].isCompleted = 1; printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[3].name, player->achievements[3].rewardMoney, player->achievements[3].rewardIntel); player->money += player->achievements[3].rewardMoney; player->intelligence += player->achievements[3].rewardIntel; } // 幸运之星 if (player->achievements[4].isCompleted && player->achievements[4].rewardMoney != 0) { printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[4].name, player->achievements[4].rewardMoney, player->achievements[4].rewardIntel); player->money += player->achievements[4].rewardMoney; player->intelligence += player->achievements[4].rewardIntel; // 标记奖励已发放 player->achievements[4].rewardMoney = 0; player->achievements[4].rewardIntel = 0; } // 创业先锋 if (player->achievements[5].isCompleted && !player->achievements[5].rewardMoney == 0) { printf("\n【成就达成】%s!获得奖励:金钱+%d,智力+%d\n", player->achievements[5].name, player->achievements[5].rewardMoney, player->achievements[5].rewardIntel); player->money += player->achievements[5].rewardMoney; player->intelligence += player->achievements[5].rewardIntel; // 标记奖励已发放 player->achievements[5].rewardMoney = 0; player->achievements[5].rewardIntel = 0; } } // 显示成就列表 void showAchievements(Player *player) { printf("\n"); printSeparator(); printf("| 成就列表 |\n"); printSeparator(); for (int i = 0; i < 6; i++) { printf("%d. %-8s - %-30s [%s]\n", i+1, player->achievements[i].name, player->achievements[i].desc, player->achievements[i].isCompleted ? "已完成" : "未完成"); } printSeparator(); printf("按回车键继续..."); getchar(); clearInputBuffer(); } // 保存游戏存档 void saveGame(Player *player) { FILE *fp = fopen("savegame.dat", "wb"); if (fp == NULL) { printf("\n【错误】存档保存失败!\n"); return; } fwrite(player, sizeof(Player), 1, fp); fclose(fp); printf("\n【成功】游戏存档已保存!\n"); printf("按回车键继续..."); getchar(); clearInputBuffer(); } // 加载游戏存档 int loadGame(Player *player) { FILE *fp = fopen("savegame.dat", "rb"); if (fp == NULL) { return 0; } // 检查文件大小是否正确 fseek(fp, 0, SEEK_END); long fileSize = ftell(fp); fseek(fp, 0, SEEK_SET); if (fileSize != sizeof(Player)) { fclose(fp); return 0; } fread(player, sizeof(Player), 1, fp); fclose(fp); return 1; } // 删除存档功能 void deleteSaveGame() { system("cls"); printf("\n"); printSeparator(); printf("| 删除存档 |\n"); printSeparator(); // 检查存档是否存在 FILE *fp = fopen("savegame.dat", "rb"); if (fp == NULL) { printf("当前没有可删除的存档!\n"); printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); return; } fclose(fp); printf("确定要删除存档吗?(1-确认 删除 / 2-取消):"); int choice; while (scanf("%d", &choice) != 1 || choice < 1 || choice > 2) { clearInputBuffer(); printf("输入无效,请重新输入(1-确认 / 2-取消):"); } clearInputBuffer(); if (choice == 1) { if (remove("savegame.dat") == 0) { printf("\n【成功】存档已成功删除!\n"); } else { printf("\n【错误】存档删除失败!\n"); } } else { printf("\n【取消】存档删除操作已取消!\n"); } printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); } // 游戏主循环 void gameLoop(Player *player) { int choice; while (1) { system("cls"); printf("\n"); printSeparator(); printf("| 第%d天 |\n", player->day); printSeparator(); printf("请选择你要进行的操作:\n"); printf("1. 查看状态\n"); printf("2. 进行工作(选择职业)\n"); printf("3. 学习提升\n"); printf("4. 休息恢复\n"); printf("5. 商店购物\n"); printf("6. 创业开店\n"); // 新增创业选项 printf("7. 查看成就\n"); printf("8. 保存存档\n"); printf("9. 结束游戏\n"); printSeparator(); printf("请输入选择(1-9):"); while (scanf("%d", &choice) != 1 || choice < 1 || choice > 9) { clearInputBuffer(); printf("输入无效,请重新输入(1-9):"); } clearInputBuffer(); int dayPass = 0; switch(choice) { case 1: showStatus(player); printf("按回车键继续..."); getchar(); clearInputBuffer(); break; case 2: { printf("\n"); printSeparator(); printf("| 选择职业 |\n"); printSeparator(); int jobChoice; int count = 0; int jobIndices[5]; // 存储已解锁职业索引 for (int i = 0; i < 5; i++) { if (player->jobs[i].isUnlocked) { jobIndices[count++] = i; printf("%d. %s(体力%d,收入%d-%d)\n", count, player->jobs[i].name, player->jobs[i].energyCost, player->jobs[i].minIncome, player->jobs[i].maxIncome); } } if (count == 0) { printf("暂无解锁职业!\n"); printSeparator(); break; } printf("请选择职业(1-%d):", count); while (scanf("%d", &jobChoice) != 1 || jobChoice < 1 || jobChoice > count) { clearInputBuffer(); printf("输入无效,请重新输入(1-%d):", count); } clearInputBuffer(); workJob(player, jobIndices[jobChoice-1]); dayPass = 1; printf("按回车键继续..."); getchar(); clearInputBuffer(); break; } case 3: study(player); dayPass = 1; printf("按回车键继续..."); getchar(); clearInputBuffer(); break; case 4: rest(player); dayPass = 1; printf("按回车键继续..."); getchar(); clearInputBuffer(); break; case 5: showShop(player); break; case 6: // 创业开店 showBusinessMenu(player); dayPass = 1; break; case 7: showAchievements(player); break; case 8: saveGame(player); break; case 9: printf("\n"); printSeparator(); printf("| 游戏结束 |\n"); printSeparator(); printf("你的打工创业生涯持续了%d天,最终状态:\n", player->day-1); printf("金钱:%d元\n智力:%d点\n幸福感:%d/100\n", player->money, player->intelligence, player->happiness); int completed = 0; for(int i=0; i<6; i++) { if(player->achievements[i].isCompleted) completed++; } printf("已完成成就:%d/6\n", completed); // 统计已开设店铺 int shopCount = 0; for(int i=0; i<4; i++) { if(player->shops[i].isOpened) shopCount++; } printf("已开设店铺:%d/4\n", shopCount); printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); /*default: printf("输入错误,请重新选择!\n"); break;*/ } if (dayPass) { // 随机事件概率(难度调整) int eventProb = player->difficulty == EASY ? 60 : (player->difficulty == HARD ? 40 : 50); if (rand() % 100 < eventProb) { randomEvent(player); // 暂停让玩家看清事件 printf("按回车键继续..."); getchar(); clearInputBuffer(); } player->day++; // 检查结束条件 if (player->happiness <= 0) { printf("\n"); printSeparator(); printf("| 游戏失败 |\n"); printSeparator(); printf("你的幸福感降为0,打工创业生涯被迫结束!\n"); printf("生涯时长:%d天\n最终金钱:%d元\n最终智力:%d点\n", player->day-1, player->money, player->intelligence); int completed = 0; for(int i=0; i<6; i++) { if(player->achievements[i].isCompleted) completed++; } printf("已完成成就:%d/6\n", completed); // 统计已开设店铺 int shopCount = 0; for(int i=0; i<4; i++) { if(player->shops[i].isOpened) shopCount++; } printf("已开设店铺:%d/4\n", shopCount); printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); return; } // 限时模式检查30天结束 if (player->gameMode == TIME_LIMITED && player->day > 30) { printf("\n"); printSeparator(); printf("| 打工结束 |\n"); printSeparator(); printf("30天打工创业生涯圆满结束!最终状态:\n"); printf("金钱:%d元\n智力:%d点\n幸福感:%d/100\n", player->money, player->intelligence, player->happiness); int completed = 0; for(int i=0; i<6; i++) { if(player->achievements[i].isCompleted) completed++; } printf("已完成成就:%d/6\n", completed); // 统计已开设店铺 int shopCount = 0; for(int i=0; i<4; i++) { if(player->shops[i].isOpened) shopCount++; } printf("已开设店铺:%d/4\n", shopCount); // 综合评价 int totalScore = player->money / 100 + player->intelligence + player->happiness + completed * 20 + shopCount * 50; printf("综合评分:%d\n", totalScore); if (totalScore >= 600) printf("评价:★★★★★ 人生赢家!\n"); else if (totalScore >= 450) printf("评价:★★★★ 优秀!\n"); else if (totalScore >= 300) printf("评价:★★★ 良好!\n"); else if (totalScore >= 150) printf("评价:★★ 及格!\n"); else printf("评价:★ 再接再厉!\n"); printSeparator(); printf("按回车键返回主菜单..."); getchar(); clearInputBuffer(); return; } } } }打工模拟器4.0(简单版)
张小明
前端开发工程师
【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构
文章目录相关教程C#Python相关文献遍历 Entity获取 ModelSpace 中所有实体数量📌 补充说明🔁 如果你想统计整个数据库中的所有 Entity(包括块定义中的)🧱 AutoCAD 核心对象层级结构(简化版)&…
YOLOv5模型压缩终极指南:剪枝、量化、蒸馏三合一实战
YOLOv5模型压缩终极指南:剪枝、量化、蒸馏三合一实战 【免费下载链接】yolov5 yolov5 - Ultralytics YOLOv8的前身,是一个用于目标检测、图像分割和图像分类任务的先进模型。 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov5 你是否正在…
Phar反序列化-NSSCTF-prize_z1
一、环境描述1、打开环境,是一段PHP代码。<META http-equiv"Content-Type" content"text/html; charsetutf-8" /> <?php highlight_file(__FILE__); class getflag {function __destruct() {echo getenv("FLAG");} }class …
运放新手全流程教学:从添加工艺库到后仿真的实战指南
运放新手教程,全流程教学,从添加工艺库到原理图,前仿真,版图步骤,后仿真 GPDK45nm,二级弥勒补偿运放 文档141页电路版图testbench 第一步,教初始环境怎么配置,怎么添加工艺库 第二步…
08章 向量内存操作 - “Vega“ 7nm Instruction Set ArchitectureReference Guide
向量内存(VMEM)指令将每个工作项的数据分别读取或写入VGPR中。这与标量内存指令形成对比,标量内存指令移动的是波前中所有线程共享的单个数据块。所有向量内存(VM)操作都由纹理缓存系统(一级和二级缓存&…
数据洪流时代的存储革命:从磁带到云原生的进化之路
数据洪流时代的存储革命:从磁带到云原生的进化之路在数字化浪潮席卷全球的今天,存储数据已从简单的信息保存升华为驱动社会运转的核心基础设施。从企业核心业务系统到个人手机相册,从科学研究的海量实验数据到人工智能训练的庞大数据集&#…