打开项目 → 工具 → 编译选项 → 切换到 “连接器” 标签页 → 在 “连接器命令行” 输入框中:-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 条评论

  • @ 2025-12-4 16:59:10
    #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;
    }
    
    • @ 2025-11-30 9:01:29

      新代码:

      #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