- 分享
起风了
- @ 2025-11-23 20:50:15
打开项目 → 工具 → 编译选项 → 切换到 “连接器” 标签页 → 在 “连接器命令行” 输入框中:-static-libgcc -lwinmm
#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;
}
2 条评论
-
-
#include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std; int wolf_kill = -1; // 存储狼人击杀的目标座位号 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); Sleep(sleep); } midiOutClose(handle); } const int DAY = 0, NIGHT = 1; enum Color { BLUE, YELLOW, RED, GREEN, PURPLE, WHITE }; enum Role { WITCH = 0, VILLAGER = 1, SEER = 2, WEREWOLF = 3, HUNTER = 4, GUARD = 5, GOOD = 6 }; enum Status { DEAD = 1, ALIVE = 2 }; int day = 0; int 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; struct Player { Role role = (Role)-1; Status status = ALIVE; bool known = false; int killer = INT_MAX; }; Player players[100]; 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); } 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; 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; } } } 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--; 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) { 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 { 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) { if(!witch_healed && rand() % 10 == 0) { heal_target = wolf_kill; witch_healed = true; } if(!witch_poisoned && rand() % 4 == 0) { 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) { seer_check_target = rand_alive_player(); if(players[seer_check_target].role == WEREWOLF) { seer_check_target = seer_check_target; } } 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); if(player_count == 12) { guard_action(); Sleep(2000); } int 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 { 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); } 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 { 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"; } 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 { 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 { 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; } 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() { for(int i=0;i<=1;i++){ Wind(); pre_game(); int round = 0; while(!check_game_end()) { night_phase(); announce_night_result(); if(check_game_end()) break; system("cls"); print_ui(); 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"); } return 0; } -
新代码:
#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() { for(;;){ Wind(); } return 0; }
- 1