-
个人简介
W W EEEEE L L CCCC OOOOO M M W W E L L C C O O M M M M W W W EEEE L L C O O M M M W W W W E L L C O O M M W W EEEEE LLLLLLL L CCCC OOOOO M M CCCC H H EEEEE N N ZZZZZZZ H H AAAAA N N C C H H E N N N Z H H A A N N N C H H EEEE N N N Z HHHHHHH AAAAAAA N N N C H H E N N N Z Z Z Z H H A A N N N C C H H E N NN Z Z H H A A N NN CCCC HHHHH EEEEE N N ZZZZZZZ H H AAAAA N N_ _ _ / / / / / / / / / / / / / __\ / __\ / __\ ||_| | ||_| | ||_| | \___/ \___/ \___/
小程序
狼人杀:#include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std; // 1. 补充缺失的枚举定义(核心修复) enum Phase { DAY = 0, NIGHT = 1 }; // 昼夜阶段 enum Role { VILLAGER = 0, // 村民 WEREWOLF = 1, // 狼人 SEER = 2, // 预言家 WITCH = 3, // 女巫 HUNTER = 4, // 猎人 GUARD = 5, // 守卫 GOOD = 6 // 好人投票(用于标记死因) }; enum Color { RED, GREEN, YELLOW, BLUE, WHITE, PURPLE // 控制台颜色 }; enum Status { DEAD = 1, ALIVE = 2 }; // 玩家状态 // 全局变量 int wolf_kill = -1; // 狼人击杀目标 int day = 0; // 当前天数 Phase current_phase = DAY; // 当前阶段(修复:用定义的枚举) int player_count; // 玩家总数 int my_seat; // 自己的座位号 HWND hwnd = GetForegroundWindow(); int police_seat = -1; // 警长座位号 int wolf_count = 0; // 狼人数量 int witch_seat = -1, guard_seat = -1, seer_seat = -1, hunter_seat = -1; int wolf_seats[4] = {-1, -1, -1, -1}; // 狼人座位号 bool witch_healed = false; // 女巫是否用过解药 bool witch_poisoned = false;// 女巫是否用过毒药 int heal_target = -1; // 解药目标 int poison_target = -1; // 毒药目标 int guard_protect = -1; // 守卫守护目标 int seer_check_target = -1;// 预言家查验目标 // 玩家结构体(修复:Role枚举已定义) struct Player { Role role = (Role)-1; Status status = ALIVE; bool known = false; int killer = INT_MAX; }; Player players[100]; // 控制台颜色设置(修复:Color枚举已定义) void set_color(Color c) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); switch(c) { case RED: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED); break; case GREEN: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; case YELLOW: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); break; case BLUE: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_BLUE); break; case WHITE: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); break; case PURPLE: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); break; } } // 控制台光标定位 void gotoxy(int x, int y) { COORD pos = { (SHORT)x, (SHORT)y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } // 初始化窗口 void init_window() { system("mode con lines=60 cols=188"); ShowWindow(hwnd, SW_MAXIMIZE); DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND); DrawMenuBar(GetConsoleWindow()); } // 检查数组是否包含指定值 bool array_contains(int arr[], int val, int len) { for(int i = 0; i < len; i++) { if(arr[i] == val) return true; } return false; } // 随机选一个存活玩家(可排除指定身份) int rand_alive_player(Role exclude_role = (Role)-1) { int target = -1; while(true) { target = rand() % player_count; if(players[target].status == ALIVE && players[target].role != exclude_role) { break; } } return target; } // 初始化玩家身份 void init_players() { // 确定狼人数量 if(player_count == 12) wolf_count = 4; else if(player_count >= 10) wolf_count = 3; else wolf_count = 2; // 初始化所有玩家 for(int i = 0; i < player_count; i++) { players[i].status = ALIVE; players[i].known = false; players[i].killer = INT_MAX; players[i].role = (Role)-1; } // 分配狼人身份 int wolf_idx = 0; while(wolf_idx < wolf_count) { int seat = rand() % player_count; if(!array_contains(wolf_seats, seat, 4)) { wolf_seats[wolf_idx++] = seat; players[seat].role = WEREWOLF; } Sleep(rand() % 80 + 100); } // 分配守卫(仅12人局) if(player_count == 12) { do { guard_seat = rand() % player_count; } while(players[guard_seat].role != (Role)-1); players[guard_seat].role = GUARD; } // 分配女巫 do { witch_seat = rand() % player_count; } while(players[witch_seat].role != (Role)-1); players[witch_seat].role = WITCH; // 分配猎人(≥10人局) if(player_count >= 10) { do { hunter_seat = rand() % player_count; } while(players[hunter_seat].role != (Role)-1); players[hunter_seat].role = HUNTER; } // 分配预言家 do { seer_seat = rand() % player_count; } while(players[seer_seat].role != (Role)-1); players[seer_seat].role = SEER; // 剩余玩家为村民 for(int i = 0; i < player_count; i++) { if(players[i].role == (Role)-1) { players[i].role = VILLAGER; } } // 随机分配自己的座位,并标记已知身份 my_seat = rand() % player_count; players[my_seat].known = true; if(players[my_seat].role == WEREWOLF) { // 狼人可见所有狼队友 for(int i = 0; i < wolf_count; i++) { players[wolf_seats[i]].known = true; } } } // 绘制游戏UI void print_ui() { gotoxy(0, 0); set_color(WHITE); cout << "作者:chenzhan"; gotoxy(90, 0); if(current_phase == NIGHT) set_color(RED); else set_color(BLUE); printf("第%d天 | %s\n", day, current_phase == NIGHT ? "黑夜" : "白天"); gotoxy(0, 3); set_color(BLUE); cout << " 我的号位:" << my_seat + 1; // 绘制所有玩家状态 for(int i = 0; i < player_count; i++) { gotoxy(i * 8 + 1, 4); if(i == police_seat) set_color(YELLOW); else set_color(BLUE); cout << i + 1 << "号位"; gotoxy(i * 8 + 1, 5); if(players[i].status == DEAD) { set_color(RED); cout << "死 亡"; } else { set_color(GREEN); cout << "存 活"; } gotoxy(i * 8 + 1, 6); set_color(BLUE); if(players[i].known) { switch(players[i].role) { case WITCH: cout << "女 巫"; break; case SEER: cout << "预言家"; break; case VILLAGER: cout << "村 民"; break; case WEREWOLF: cout << "狼 人"; break; case HUNTER: cout << "猎 人"; break; case GUARD: cout << "守 卫"; break; default: cout << "好人"; } } else { cout << "未知"; } } set_color(WHITE); } // 检查游戏是否结束 int check_game_end() { int dead_wolf = 0, dead_villager = 0, dead_god = 0; int alive_wolf = 0, alive_good = 0; for(int i = 0; i < player_count; i++) { if(players[i].status == DEAD) { if(players[i].role == WEREWOLF) dead_wolf++; else if(players[i].role == VILLAGER) dead_villager++; else dead_god++; // 神牌(女巫/预言家/猎人/守卫) } else { if(players[i].role == WEREWOLF) alive_wolf++; else alive_good++; } } // 狼人全灭 → 好人胜利 if(alive_wolf == 0) return 1; // 计算神牌总数和村民总数 int god_total = (witch_seat != -1) + (seer_seat != -1) + (hunter_seat != -1) + (guard_seat != -1); int villager_total = player_count - god_total - wolf_count; // 神牌全灭 或 村民全灭 → 狼人胜利 if(dead_god >= god_total || dead_villager >= villager_total) return 2; // 狼人数 = 好人数 → 平局 if(alive_wolf == alive_good) return 3; // 游戏继续 return 0; } // 游戏初始化阶段 void pre_game() { srand(time(NULL)); init_window(); set_color(GREEN); cout << "欢迎来到狼人杀游戏\t\t\t注:10/11/12人局开设猎人 12人局开设守卫/警长\n"; cout << "----------------------------------------\n"; cout << "请输入玩家人数(8-12人): "; cin >> player_count; while(player_count < 8 || player_count > 12) { cout << "人数不符合要求,请重新输入(8-12): "; cin >> player_count; } system("cls"); cout << "初始化身份中,请稍等."; for(int i = 0; i < 6; i++) { for(int j = 0; j < 12; j++) { cout << "."; Sleep(50); } cout << "\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b"; } system("cls"); init_players(); cout << "我的号位: " << my_seat + 1 << endl; cout << "我的身份: "; switch(players[my_seat].role) { case WITCH: cout << "女巫\n"; break; case SEER: cout << "预言家\n"; break; case VILLAGER: cout << "村民\n"; break; case WEREWOLF: cout << "狼人\n"; break; case HUNTER: cout << "猎人\n"; break; case GUARD: cout << "守卫\n"; break; } current_phase = DAY; day = 1; system("pause"); system("cls"); cout << "游戏加载中."; int load_times = rand() % 3 + 2; for(int i = 0; i < load_times; i++) { for(int j = 0; j < 6; j++) { cout << "."; Sleep(rand() % 100 + 150); } cout << "\b\b\b\b\b\b \b\b\b\b\b\b"; } system("cls"); print_ui(); } // 守卫行动阶段 void guard_action() { set_color(BLUE); cout << "守卫~请睁眼~~\n"; Sleep(1500); guard_protect = -1; if(players[my_seat].role == GUARD && players[my_seat].status == ALIVE) { cout << "你要守护的是? (输入座位号1-" << player_count << "): "; cin >> guard_protect; guard_protect--; // 转成0索引 while(guard_protect < 0 || guard_protect >= player_count || players[guard_protect].status == DEAD) { cout << "输入无效,请重新输入存活玩家的座位号: "; cin >> guard_protect; guard_protect--; } cout << "你今晚要守护的是" << guard_protect + 1 << "号\n"; } else if(guard_seat != -1 && players[guard_seat].status == ALIVE) { // AI守卫随机守护 guard_protect = rand_alive_player(); } Sleep(2000); cout << "守卫请闭眼\n\n"; } // 狼人行动阶段(返回击杀目标) int wolf_action() { set_color(RED); cout << "狼人~请睁眼~~~\n"; Sleep(1500); int kill_target = -1; if(players[my_seat].role == WEREWOLF && players[my_seat].status == ALIVE) { cout << "你们今晚要杀谁?(输入座位号1-" << player_count << "): "; cin >> kill_target; kill_target--; while(kill_target < 0 || kill_target >= player_count || players[kill_target].status == DEAD || players[kill_target].role == WEREWOLF) { cout << "输入无效,请重新输入非狼人存活玩家的座位号: "; cin >> kill_target; kill_target--; } cout << "你们今晚要杀的是" << kill_target + 1 << "号\n"; } else { // AI狼人随机击杀(排除狼人) kill_target = rand_alive_player(WEREWOLF); } Sleep(3500); cout << "狼人请~闭眼~~\n\n"; return kill_target; } // 女巫行动阶段 void witch_action(int wolf_kill) { set_color(PURPLE); cout << "女巫~~请睁眼~~\n"; Sleep(2000); heal_target = -1; poison_target = -1; if(players[my_seat].role == WITCH && players[my_seat].status == ALIVE) { // 解药环节 if(!witch_healed) { cout << "今晚" << wolf_kill + 1 << "号被狼人杀死,你想用解药吗?(1=想 / 2=不想): "; int choice; cin >> choice; while(choice != 1 && choice != 2) { cout << "输入无效,请输入1或2: "; cin >> choice; } if(choice == 1) { heal_target = wolf_kill; witch_healed = true; cout << "已解救" << wolf_kill + 1 << "号\n"; } } else { cout << "你已经用过解药\n"; Sleep(1500); } Sleep(1500); // 毒药环节 if(!witch_poisoned) { cout << "你想用毒药吗?(1=想 / 2=不想): "; int choice; cin >> choice; while(choice != 1 && choice != 2) { cout << "输入无效,请输入1或2: "; cin >> choice; } if(choice == 1) { cout << "你想毒谁?(输入座位号1-" << player_count << "): "; cin >> poison_target; poison_target--; while(poison_target < 0 || poison_target >= player_count || players[poison_target].status == DEAD) { cout << "输入无效,请重新输入存活玩家的座位号: "; cin >> poison_target; poison_target--; } witch_poisoned = true; cout << "已毒死" << poison_target + 1 << "号\n"; } } else { cout << "你已经用过毒药\n"; Sleep(1500); } } else if(players[witch_seat].status == ALIVE) { // AI女巫随机使用解药/毒药 if(!witch_healed && rand() % 10 == 0) { // 10%概率用解药 heal_target = wolf_kill; witch_healed = true; } if(!witch_poisoned && rand() % 4 == 0) { // 25%概率用毒药 poison_target = rand_alive_player(); witch_poisoned = true; } } Sleep(1500); cout << "女巫~请闭眼~~\n\n"; } // 预言家行动阶段 void seer_action() { set_color(GREEN); cout << "预言家~请睁眼~~\n"; Sleep(2000); seer_check_target = -1; if(players[my_seat].role == SEER && players[my_seat].status == ALIVE) { cout << "你想查验谁的身份?(输入座位号1-" << player_count << "): "; int check; cin >> check; check--; while(check < 0 || check >= player_count || players[check].status == DEAD) { cout << "输入无效,请重新输入存活玩家的座位号: "; cin >> check; check--; } Sleep(2000); cout << check + 1 << "号的身份是——"; Sleep(1000); if(players[check].role == WEREWOLF) { cout << "狼人\n"; players[check].known = true; } else { cout << "好人\n"; players[check].known = true; } } else if(players[seer_seat].status == ALIVE) { // AI预言家随机查验 seer_check_target = rand_alive_player(); } Sleep(1000); cout << "预言家~~请闭眼~~\n\n"; } // 黑夜阶段总流程 void night_phase() { current_phase = NIGHT; system("cls"); print_ui(); gotoxy(0, 7); cout << "----------------------------------------\n"; set_color(WHITE); cout << "天黑~请闭眼~~~\n"; Sleep(1500); // 守卫行动(仅12人局) if(player_count == 12) { guard_action(); Sleep(2000); } // 狼人行动 wolf_kill = wolf_action(); Sleep(3500); // 女巫行动 witch_action(wolf_kill); Sleep(3000); // 预言家行动 seer_action(); Sleep(2000); current_phase = DAY; } // 猎人技能触发 void hunter_skill(int dead_seat) { if(players[dead_seat].role != HUNTER || players[dead_seat].status == ALIVE) return; set_color(RED); cout << dead_seat + 1 << "号是猎人,触发技能!\n"; Sleep(1000); int take_seat = -1; if(dead_seat == my_seat) { cout << "你想带走几号?(输入座位号1-" << player_count << "): "; cin >> take_seat; take_seat--; while(take_seat < 0 || take_seat >= player_count || players[take_seat].status == DEAD) { cout << "输入无效,请重新输入存活玩家的座位号: "; cin >> take_seat; take_seat--; } } else { // AI猎人随机带走 take_seat = rand_alive_player(); } Sleep(2000); cout << "猎人选择带走" << take_seat + 1 << "号\n"; players[take_seat].status = DEAD; players[take_seat].killer = HUNTER; Sleep(3000); } // 公布夜晚结果 void announce_night_result() { system("cls"); print_ui(); gotoxy(0, 7); cout << "----------------------------------------\n"; Sleep(3000); set_color(WHITE); cout << "天亮了\n"; Sleep(2000); vector<int> dead_players; // 处理狼人击杀(未被守卫守护且未被女巫救) if(wolf_kill != -1 && wolf_kill != guard_protect && wolf_kill != heal_target) { players[wolf_kill].status = DEAD; players[wolf_kill].killer = WEREWOLF; dead_players.push_back(wolf_kill); } // 处理女巫毒药 if(poison_target != -1) { players[poison_target].status = DEAD; players[poison_target].killer = WITCH; dead_players.push_back(poison_target); } // 公布死亡信息 cout << "昨晚"; if(dead_players.empty()) { cout << "是平安夜\n"; } else { for(int i = 0; i < dead_players.size(); i++) { if(i > 0) cout << "和"; cout << dead_players[i] + 1 << "号"; if(dead_players[i] == police_seat) { cout << "(警长)"; } } cout << "死了\n"; // 触发猎人技能 for(int seat : dead_players) { hunter_skill(seat); } } Sleep(3000); } // 选举警长(仅12人局第一天) void elect_police() { system("cls"); print_ui(); gotoxy(0, 7); cout << "----------------------------------------\n"; set_color(YELLOW); cout << "开始选举警长,不能选举自己!\n"; Sleep(2000); int votes[100] = {0}; int cannot_vote[100] = {-1}; int cannot_len = 0; while(true) { memset(votes, 0, sizeof(votes)); // 投票流程 for(int i = 0; i < player_count; i++) { if(players[i].status == DEAD || array_contains(cannot_vote, i, cannot_len)) { continue; } int vote_target = -1; if(i == my_seat) { cout << "你要选举谁当警长?(输入座位号1-" << player_count << "): "; cin >> vote_target; vote_target--; while(vote_target < 0 || vote_target >= player_count || vote_target == i || players[vote_target].status == DEAD || array_contains(cannot_vote, vote_target, cannot_len)) { cout << "输入无效,请重新输入: "; cin >> vote_target; vote_target--; } cout << i + 1 << "号选举" << vote_target + 1 << "号\n"; } else { // AI投票(排除自己、死亡、平票者) do { vote_target = rand() % player_count; } while(vote_target == i || players[vote_target].status == DEAD || array_contains(cannot_vote, vote_target, cannot_len)); cout << i + 1 << "号选举" << vote_target + 1 << "号\n"; } // 警长票权重2倍(首次选举无警长,此逻辑为后续重选) votes[vote_target] += (i == police_seat) ? 2 : 1; Sleep(1500); } // 统计最高票 int max_vote = -1; vector<int> max_seats; for(int i = 0; i < player_count; i++) { if(votes[i] > max_vote) { max_vote = votes[i]; max_seats.clear(); max_seats.push_back(i); } else if(votes[i] == max_vote) { max_seats.push_back(i); } } // 唯一最高票 → 当选警长 if(max_seats.size() == 1) { police_seat = max_seats[0]; cout << "恭喜" << police_seat + 1 << "号当选警长!\n"; Sleep(3000); break; } else { // 平票 → 重选(平票者不能参与) cout << "平票:"; cannot_len = 0; for(int seat : max_seats) { cout << seat + 1 << "号 "; cannot_vote[cannot_len++] = seat; } cout << "进入重选,平票者不能参与\n"; Sleep(2000); } } } // 警长死亡处理(撕毁/移交) void police_death() { set_color(YELLOW); cout << "警长死亡,处理警徽!\n"; Sleep(1500); int choice = 1; // 1=撕毁,2=移交 if(police_seat == my_seat) { cout << "你想撕毁警徽还是移交警徽?(1=撕毁 / 2=移交): "; cin >> choice; while(choice != 1 && choice != 2) { cout << "输入无效,请输入1或2: "; cin >> choice; } } else { // AI随机选择 choice = rand() % 2 + 1; } if(choice == 1) { cout << "警长选择撕毁警徽\n"; police_seat = -1; } else { // 移交给随机存活玩家 int new_police = rand_alive_player(); cout << "警长选择把警徽移交给" << new_police + 1 << "号\n"; police_seat = new_police; } Sleep(2000); } // 白天投票放逐阶段 int vote_phase() { system("cls"); print_ui(); gotoxy(0, 7); cout << "----------------------------------------\n"; set_color(WHITE); cout << "进入投票环节,选出要放逐的玩家!\n"; Sleep(2000); int votes[100] = {0}; int cannot_vote[100] = {-1}; int cannot_len = 0; while(true) { memset(votes, 0, sizeof(votes)); // 投票流程 for(int i = 0; i < player_count; i++) { if(players[i].status == DEAD || array_contains(cannot_vote, i, cannot_len)) { continue; } int vote_target = -1; if(i == my_seat) { cout << "你要投谁出局?(输入座位号1-" << player_count << "): "; cin >> vote_target; vote_target--; while(vote_target < 0 || vote_target >= player_count || players[vote_target].status == DEAD) { cout << "输入无效,请重新输入: "; cin >> vote_target; vote_target--; } cout << i + 1 << "号投了" << vote_target + 1 << "号"; if(i == police_seat) cout << "(警长,2票)"; cout << endl; } else { // AI投票逻辑 do { vote_target = rand() % player_count; // 预言家会投自己查验出的狼人 if(i == seer_seat && seer_check_target != -1 && players[seer_check_target].role == WEREWOLF) { vote_target = seer_check_target; seer_check_target = -1; break; } // 狼人不会投狼队友 if(array_contains(wolf_seats, i, wolf_count) && players[vote_target].role == WEREWOLF) { vote_target = -1; continue; } } while(vote_target == -1 || players[vote_target].status == DEAD); cout << i + 1 << "号投了" << vote_target + 1 << "号"; if(i == police_seat) cout << "(警长,2票)"; cout << endl; } // 警长票权重2倍 votes[vote_target] += (i == police_seat) ? 2 : 1; Sleep(rand() % 1000 + 1000); } // 统计最高票 int max_vote = -1; vector<int> max_seats; for(int i = 0; i < player_count; i++) { if(votes[i] > max_vote) { max_vote = votes[i]; max_seats.clear(); max_seats.push_back(i); } else if(votes[i] == max_vote) { max_seats.push_back(i); } } // 唯一最高票 → 出局 if(max_seats.size() == 1) { int out_seat = max_seats[0]; cout << out_seat + 1 << "号获得最高票,出局!\n"; players[out_seat].status = DEAD; players[out_seat].killer = GOOD; Sleep(4000); // 处理警长出局 if(out_seat == police_seat) { police_death(); } // 触发猎人技能 hunter_skill(out_seat); return out_seat; } else { // 平票 → 重选(平票者不能参与) cout << "平票:"; cannot_len = 0; for(int seat : max_seats) { cout << seat + 1 << "号 "; cannot_vote[cannot_len++] = seat; } cout << "进入重选!\n"; Sleep(3000); } } } // 游戏结束结算 void game_over() { system("cls"); set_color(WHITE); int result = check_game_end(); switch(result) { case 1: cout << "🎉 好人阵营胜利!🎉\n\n"; break; case 2: cout << "🐺 狼人阵营胜利!🐺\n\n"; break; case 3: cout << "🤝 本局平局!🤝\n\n"; break; } cout << "===== 最终结算 =====\n"; for(int i = 0; i < player_count; i++) { cout << i + 1 << "号位: \t"; switch(players[i].role) { case WITCH: cout << "女巫\t"; break; case SEER: cout << "预言家\t"; break; case VILLAGER: cout << "村民\t"; break; case WEREWOLF: cout << "狼人\t"; break; case HUNTER: cout << "猎人\t"; break; case GUARD: cout << "守卫\t"; break; } cout << "最终: "; if(players[i].status == ALIVE) { cout << "存活\n"; } else { switch(players[i].killer) { case WEREWOLF: cout << "被狼人杀死\n"; break; case WITCH: cout << "被女巫毒死\n"; break; case GOOD: cout << "被投票出局\n"; break; case HUNTER: cout << "被猎人带走\n"; break; default: cout << "死亡(未知原因)\n"; } } } set_color(WHITE); } // 主函数 int main() { // 循环2局游戏(可修改次数) for(int i=0; i<=1; i++) { // 重置全局变量(避免多局数据污染) wolf_kill = -1; day = 0; current_phase = DAY; police_seat = -1; wolf_count = 0; witch_seat = -1; guard_seat = -1; seer_seat = -1; hunter_seat = -1; memset(wolf_seats, -1, sizeof(wolf_seats)); witch_healed = false; witch_poisoned = false; heal_target = -1; poison_target = -1; guard_protect = -1; seer_check_target = -1; memset(players, 0, sizeof(players)); pre_game(); int round = 0; while(!check_game_end()) { night_phase(); // 黑夜行动 announce_night_result();// 公布夜晚结果 if(check_game_end()) break; system("cls"); print_ui(); // 12人局第一天选举警长 if(round == 0 && player_count == 12 && police_seat == -1) { elect_police(); system("cls"); print_ui(); } vote_phase(); // 白天投票 if(check_game_end()) break; day++; round++; system("cls"); print_ui(); } game_over(); system("pause"); system("cls"); } return 0; }打开项目 → 工具 → 编译选项 → 切换到 “连接器” 标签页 → 在 “连接器命令行” 输入框中:-static-libgcc -lwinmm -std=c++11 起风了:
#include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale { Rest = 0, C8 = 108, B7 = 107, A7s = 106, A7 = 105, G7s = 104, G7 = 103, F7s = 102, F7 = 101, E7 = 100, D7s = 99, D7 = 98, C7s = 97, C7 = 96, B6 = 95, A6s = 94, A6 = 93, G6s = 92, G6 = 91, F6s = 90, F6 = 89, E6 = 88, D6s = 87, D6 = 86, C6s = 85, C6 = 84, B5 = 83, A5s = 82, A5 = 81, G5s = 80, G5 = 79, F5s = 78, F5 = 77, E5 = 76, D5s = 75, D5 = 74, C5s = 73, C5 = 72, B4 = 71, A4s = 70, A4 = 69, G4s = 68, G4 = 67, F4s = 66, F4 = 65, E4 = 64, D4s = 63, D4 = 62, C4s = 61, C4 = 60, B3 = 59, A3s = 58, A3 = 57, G3s = 56, G3 = 55, F3s = 54, F3 = 53, E3 = 52, D3s = 51, D3 = 50, C3s = 49, C3 = 48, B2 = 47, A2s = 46, A2 = 45, G2s = 44, G2 = 43, F2s = 42, F2 = 41, E2 = 40, D2s = 39, D2 = 38, C2s = 37, C2 = 36, B1 = 35, A1s = 34, A1 = 33, G1s = 32, G1 = 31, F1s = 30, F1 = 29, E1 = 28, D1s = 27, D1 = 26, C1s = 25, C1 = 24, B0 = 23, A0s = 22, A0 = 21 }; enum Voice { X1 = C2, X2 = D2, X3 = E2, X4 = F2, X5 = G2, X6 = A2, X7 = B2, L1 = C3, L2 = D3, L3 = E3, L4 = F3, L5 = G3, L6 = A3, L7 = B3, M1 = C4, M2 = D4, M3 = E4, M4 = F4, M5 = G4, M6 = A4, M7 = B4, H1 = C5, H2 = D5, H3 = E5, H4 = F5, H5 = G5, H6 = A5, H7 = B5, LOW_SPEED = 500, MIDDLE_SPEED = 400, HIGH_SPEED = 300, _ = 0XFF }; void Wind() { HMIDIOUT handle; midiOutOpen(&handle, 0, 0, 0, CALLBACK_NULL); int volume = 0x7f; int voice = 0x0; int sleep = 350; int wind[] = { 400,0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_,0,L7,M1,M2,M3,300,L2,0,M5,M3,M2,M3,M1,M2,L7,M1,300,L5,0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_,0,L7,M1,M2,M3,300,L2,0,M5,M3,M2,M3,M1,M2,L7,M1,300,L5, 0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_,0,L7,M1,M2,M3,300,L2,0,M5,M3,M2,M3,M1,M2,L7,M1,300,L5,0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_, 0,M6,M3,M2,L6,M3,L6,M2,M3,L6,_,_,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M1,300,M2,700,0,M1,M2,M3,M2,M1,300,L5,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M3,300,M2,0,M1,700,300,M2,_,_,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M3,300,M2,0,M1,700,300,L6,_, 0,M3,M2,M1,M2,300,M1,_,0,M3,M2,M1,M2,300,M1,700,0,L5,M3,M2,M1,M2,300,M1,_,_,_, M1,M2,M3,M1,M6,0,M5,M6,300,_,700,0,M1,300,M7,0,M6,M7,300,_,_,M7,0,M6,M7,300,_,M3,0,H1,H2,H1,M7,300,M6,M5,M6,0,M5,M6,_,M5,M6,M5,300,M6,0,M5,M2,300,_,0,M5,700,300,M3,_,_,_, M1,M2,M3,M1,M6,0,M5,M6,300,_,700,0,M1,300,M7,0,M6,M7,300,_,_,M7,0,M6,M7,300,_,M3,0,H1,H2,H1,M7,300,M6,M5,M6,0,H3,H3,300,_,M5,M6,0,H3,H3,300,_,0,M5,700,300,M6,_,_,_,_,_, H1,H2,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H2,0,H1,M6,300,_,0,H1,H1,300,H2,0,H1,300,M6,700,0,_,300,H1,700,H3,_,0,H3,H4,H3,H2,H3,300,H2,700, H1,H2,H3,0,H6,H5,_,H6,H5,_,H6,H5,300,_,H3,H3,0,H6,H5,_,H6,H5,_,H6,H5,700,300,H3,700,H2,0,H1,M6,700,300, H3,700,H2,0,H1,300,M6,700,H1,H1,_,_,_,_,_, 0,M6,300,H3,700,H2,0,H1,M6,700,300,H3,H2,700,300,0,H1,M6,300,700,H1,H1,_,_, 0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_,0,L7,M1,M2,M3,300,L2,0,M5,M3,M2,M3,M1,M2,L7,M1,300,L5,0,L7,M1,M2,M3,300,L3,0,M5,M3,300,L2,L5,2,_, 0,M6,M3,M2,L6,M3,L6,M2,M3,L6,_,_,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M1,300,M2,700,0,M1,M2,M3,M2,M1,300,L5,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M3,300,M2,0,M1,700,300,M2,_,_,_, M2,700,0,M1,300,M2,700,0,M1,300,M2,M3,M5,0,M3,700,300,M2,700,0,M3,300,M2,0,M1,700,300,L6,_, 0,M3,M2,M1,M2,300,M1,_,0,M3,M2,M1,M2,300,M1,700,0,L5,M3,M2,M1,M2,300,M1,_,_,_, M1,M2,M3,M1,M6,0,M5,M6,300,_,700,0,M1,300,M7,0,M6,M7,300,_,_,M7,0,M6,M7,300,_,M3,0,H1,H2,H1,M7,300,M6,M5,M6,0,M5,M6,_,M5,M6,M5,300,M6,0,M5,M2,300,_,0,M5,700,300,M3,_,_,_, M1,M2,M3,M1,M6,0,M5,M6,300,_,700,0,M1,300,M7,0,M6,M7,300,_,_,M7,0,M6,M7,300,_,M3,0,H1,H2,H1,M7,300,M6,M5,M6,0,H3,H3,300,_,M5,M6,0,H3,H3,300,_,0,M5,700,300,M6,_,_,_,_,_, H1,H2,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H2,0,H1,M6,300,_,0,H1,H1,300,H2,0,H1,300,M6,700,0,_,300,H1,700,H3,_,0,H3,H4,H3,H2,H3,300,H2,700, H1,H2,H3,0,H6,H5,_,H6,H5,_,H6,H5,300,_,H3,H3,0,H6,H5,_,H6,H5,_,H6,H5,700,300,H3,700,H2,0,H1,M6,700,300, H3,700,H2,0,H1,300,M6,700,H1,H1,_,_,_,_,_, H1,H2,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H2,0,H1,M6,300,_,0,H1,H1,300,H2,0,H1,300,M6,700,0,_,300,H1,700,H3,_,0,H3,H4,H3,H2,H3,300,H2,700, H2,H3,0,H6,H5,_,H6,H5,_,H6,H5,300,_,H3,H3,0,H6,H5,_,H6,H5,_,H6,H5,700,300,H3,700,H2,0,H1,M6,700,300, H3,700,H2,0,H1,300,M6,700,H1,H1,_,_,_,_,_, H1,H2,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H3,0,H6,H5,300,_,0,H6,H5,300,_,0,H6,H5,300,_,0,H2,H3,300,H2,0,H1,M6,300,_,0,H1,H1,300,H2,0,H1,300,M6,700,0,_,300,H1,700,H3,_,0,H3,H4,H3,H2,H3,300,H2,700, H1,H2,H3,0,H6,H5,_,H6,H5,_,H6,H5,300,_,H3,H3,0,H6,H5,_,H6,H5,_,H6,H5,700,300,H3,700,H2,0,H1,M6,700,300, H3,700,H2,0,H1,300,M6,700,H1,H1,_,_,_,_,_, 0,M6,300,H3,700,H2,0,H1,M6,700,300,H3,H2,700,300,0,H1,M6,300,700,H1,H1,_,_,_,_,_,_,_, }; int len = sizeof(wind) / sizeof(wind[0]); for (int i = 0; i < len; i++) { int val = wind[i]; if (val == 0) { sleep = 175; continue; } if (val == 700) { Sleep(175); continue; } if (val == 300) { sleep = 350; continue; } if (val == _) { Sleep(350); continue; } voice = (volume << 16) + ((val) << 8) + 0x90; midiOutShortMsg(handle, voice); cout << voice << endl; Sleep(sleep); } midiOutClose(handle); } int main() { Wind(); return 0; }茉莉花:
#include <iostream> #include <Windows.h> #include <vector> #include <stdexcept> #include <algorithm> // 用于数值范围限制 #pragma comment(lib, "winmm.lib") using namespace std; // 音符枚举(MIDI音高值,H=高八度 M=中八度 L=低八度 LL=倍低八度) enum Note { Rest = 0, // 休止符 // 高八度 H1 = 73, H2 = 76, H3 = 77, H4 = 79, H5 = 81, // 中八度(基准) M1 = 60, M2 = 62, M3 = 64, M4 = 65, M5 = 67, M6 = 69, M7 = 71, // 低八度 L1 = 48, L2 = 50, L3 = 52, L4 = 53, L5 = 55, L6 = 57, L7 = 59, // 倍低八度 LL1 = 36, LL2 = 38, LL3 = 40, LL4 = 41, LL5 = 43, LL6 = 45, LL7 = 47 }; // 播放参数枚举(时长/速度,单位:毫秒) enum PlayParam { SpeedSlow = 500, // 慢速 SpeedNormal = 350, // 正常速度 SpeedFast = 250, // 快速 RestShort = 175, // 短休止(半拍) RestLong = 700, // 长休止(两拍) EndMarker = 0xFF // 乐曲结束标记 }; // 音乐演奏类(封装MIDI操作,保证资源安全) class MusicPlayer { private: HMIDIOUT midiHandle = NULL; // MIDI输出句柄 int currentVolume = 100; // 音量(0-127) int currentSpeed = SpeedNormal; // 当前速度(毫秒/拍) // 初始化MIDI设备(私有方法,仅构造函数调用) void initMidi() { MMRESULT result = midiOutOpen(&midiHandle, MIDI_MAPPER, 0, 0, CALLBACK_NULL); if (result != MMSYSERR_NOERROR) { throw runtime_error("MIDI设备初始化失败!错误码:" + to_string(result)); } // 设置乐器:0xC0(程序变更) + 通道0 + 乐器编号0(钢琴) midiOutShortMsg(midiHandle, 0xC00000); // 设置初始音量(控制器7,通道0) setVolume(currentVolume); } // 关闭MIDI设备(保证资源释放) void closeMidi() { if (midiHandle) { midiOutReset(midiHandle); // 停止所有播放中的音符 midiOutClose(midiHandle); midiHandle = NULL; } } public: // 构造函数(初始化MIDI,设置默认音量和速度) MusicPlayer(int volume = 100, int speed = SpeedNormal) { currentVolume = clamp(volume, 0, 127); // 限制音量范围 currentSpeed = max(speed, 50); // 速度不低于50ms initMidi(); } // 析构函数(自动释放MIDI资源) ~MusicPlayer() { closeMidi(); } // 禁用拷贝构造和赋值(避免MIDI句柄重复释放) MusicPlayer(const MusicPlayer&) = delete; MusicPlayer& operator=(const MusicPlayer&) = delete; // 设置音量(0-127,超出范围自动修正) void setVolume(int volume) { currentVolume = clamp(volume, 0, 127); // MIDI控制器消息:0xB0(控制器) + 控制器7(音量) + 音量值 + 通道0 DWORD volMsg = (currentVolume << 8) | 0xB007; midiOutShortMsg(midiHandle, volMsg); } // 设置播放速度(最小50ms/拍) void setSpeed(int speed) { currentSpeed = max(speed, 50); } // 播放单个音符(内部调用,处理音符开关) void playNote(Note note, int duration) { if (note == Rest) { // 休止符直接等待 Sleep(duration); return; } // 音符开启消息:0x90(音符开) + 音高 + 音量 + 通道0 DWORD noteOn = (currentVolume << 16) | (static_cast<int>(note) << 8) | 0x90; midiOutShortMsg(midiHandle, noteOn); // 保持音符时长 Sleep(duration); // 音符关闭消息:0x80(音符关) + 音高 + 0(音量) + 通道0 DWORD noteOff = (0 << 16) | (static_cast<int>(note) << 8) | 0x80; midiOutShortMsg(midiHandle, noteOff); } // 播放完整乐曲(解析音符序列) void playMusic(const vector<int>& musicData) { for (int data : musicData) { switch (data) { case EndMarker: // 结束标记,终止播放 return; case RestShort: // 短休止 playNote(Rest, RestShort); break; case RestLong: // 长休止 playNote(Rest, RestLong); break; case SpeedSlow: // 设置慢速 setSpeed(SpeedSlow); break; case SpeedNormal: // 设置正常速度 setSpeed(SpeedNormal); break; case SpeedFast: // 设置快速 setSpeed(SpeedFast); break; default: // 普通音符 if (data >= LL1 && data <= H5) { // 校验音符范围 playNote(static_cast<Note>(data), currentSpeed); } else { cerr << "警告:无效音符值 " << data << ",已跳过" << endl; } break; } } } }; vector<int> jasmineMusic; void initJasmineMusic() { // 第一段:好一朵美丽的茉莉花 jasmineMusic = { M3, M5, H1, H1, // 好 一 朵 美 H1, H2, H1, M6, // 丽 的 茉 莉 M5, M5, M6, M5, // 花 好 一 朵 M3, M5, M6, M3, // 美 丽 的 茉 莉 RestShort, // 短休止 // 第二段:芬芳美丽满枝桠 M2, M3, M5, M5, // 花 芬 芳 美 M3, M2, M1, M1, // 丽 满 枝 桠 M2, M3, M2, M3, // 又 香 又 白 M5, M3, M1, M1, // 人 人 夸 RestLong, // 长休止 EndMarker // 乐曲结束 }; } int main() { initJasmineMusic(); try { cout << "开始播放《茉莉花》..." << endl; MusicPlayer player(100, SpeedNormal); player.playMusic(jasmineMusic); cout << "播放完成!" << endl; } catch (const exception& e) { cerr << "播放失败:" << e.what() << endl; return 1; } return 0; }我的世界
代表作:
长达5000000の小说
神秘小网页:https://www.bilibili.com/video/BV1bsLBzyESz?spm_id_from=333.788.videopod.sections
小照片:

什么?你居然看到这了!你肯定用了什么骚操作 话说我可用了0.006个世纪啊
-
通过的题目
-
最近活动
- 12月13日国教课后作业 作业
- 12-9运河附小课后练习 作业
- 11-25运河附小课后作业 作业
- 11-20运河附小课后作业 作业
- 11-18运河附小课后作业 作业
- 10-28运河附小课后作业 作业
- 10-23运河附小课后作业 作业
- 10-21运河附小课后练习 作业
- 10月16运河附小课后练习 作业
- 10月14运河附小课后练习 作业
- 10-9运河附小课后练习 作业
- 9月28日运河附小课后练习 作业
- 9月25运河附小课后练习 作业
- 5.08作业 作业
- 4.25作业 作业
- 4月18日周五北京小学通州分校课后练习 作业
- 4.17作业 作业
- 2025运河附小C++三年级 作业
- 运河附小4.5作业 作业
题目标签
- 一本通编程启蒙
- 35
- 模拟算法
- 3
- for循环双重嵌套
- 2
- 多重循环
- 2
- 1
- 1
- 2022
- 1
- 2024
- 1
- 其他
- 1
- 排序
- 1
- 数论
- 1
- 循环
- 1
- 函数
- 1
- bfs
- 1
- 图结构
- 1
- 最短路
- 1
- 归并排序
- 1
- 蓝桥杯省赛
- 1
- 蓝桥杯
- 1
- 省赛
- 1
