我的控制台菜单

时间:2018-03-09 23:46:43

标签: c++ colors menu console

我正在尝试用键盘箭头驱动菜单。为此,我更改了所选项目的背景,如下所示:The menu

但是一旦我转到最后一个项目并再次上升,就会发生这种情况:enter image description here

我的代码包含所选项目:

void Print::Select(int pos, int realpos)
{
  if (pos == realpos)
    SetconsoleTextAttribute(handle, 112);
  else
    SetConsoleTextAttribute(handle, m_white);
}

整个代码:

#include <Windows.h>
#include <iostream>
#include <conio.h>
#include "Options.hpp"
#include <math.h>
#define left_arrow  75
#define right_arrow 77
#define down_arrow  80
#define up_arrow    72
#define page_up     73
#define page_down   81
Config g_options;

class Print
{
public:

    void                Infos();
    void                State(bool state);
    void                Select(int pos, int realpos);
    void                Loop();
    void                CheckInput();
    int                 m_red = 0xC;
    int                 m_green = 0xA;
    int                 m_white = 0x7;
    int                 m_selection_color = 70;
    char                m_input;
    int                 m_min = 1;
    int                 m_max = 0;
    unsigned int        m_selection_pos = 1;
    HANDLE              handle = GetStdHandle(STD_OUTPUT_HANDLE);

}; extern Print g_print;

void Print::CheckInput()
{
    m_input = _getch();
    Sleep(30);
    if (m_input == page_up && g_options.current_tab != g_options.tabs[3])
        g_options.current_tab = g_options.tabs[rand() % 3];
    else if (m_input == page_down && g_options.current_tab != g_options.tabs[0])
        g_options.current_tab = g_options.tabs[rand() % 3];

    if (m_input == up_arrow && m_selection_pos != m_min)
        m_selection_pos -= 1;
    else if (m_input == down_arrow && m_selection_pos != m_max)
        m_selection_pos += 1;

    else if (m_input == left_arrow || m_input == right_arrow)
    {
        if (g_options.current_tab == g_options.tabs[0])
        {
            switch (m_selection_pos)
            {
            case 1:
                g_options.aim_enabled = !g_options.aim_enabled; break;
            case 2:
                g_options.aim_autoconfig = !g_options.aim_autoconfig; break;
            case 3:
                g_options.aim_rcs = !g_options.aim_rcs; break;
            case 4:
                if (m_input == right_arrow) { g_options.aim_smooth++; break; }
                else if (m_input == left_arrow) { g_options.aim_smooth--; break; }
            }
        }

        if (g_options.current_tab == g_options.tabs[1])
        {
            switch (m_selection_pos)
            {
            case 1:
                g_options.esp_enabled = !g_options.esp_enabled; break;
            case 2:
                g_options.esp_ennemies = !g_options.esp_ennemies; break;
            case 3:
                g_options.esp_friends = !g_options.esp_friends; break;
            }
        }

        if (g_options.current_tab == g_options.tabs[2])
        {
            switch (m_selection_pos)
            {
            case 1:
                g_options.trigger_enabled = !g_options.trigger_enabled;
            case 2:
                g_options.triggerbot_ennemies = !g_options.esp_ennemies;
            case 3:
                g_options.trigger_team = g_options.trigger_team;
            case 4:
                if (m_input == left_arrow) { g_options.trigger_delay -= 1; break; }
                else if (m_input == right_arrow) { g_options.trigger_delay += 1; break; }
            }
        }

        if (g_options.current_tab == g_options.tabs[3])
            g_options.noflash_enabled = !g_options.noflash_enabled;
    }
}

void Print::Select(int pos, int realpos)
{
    if (pos == realpos)
    {
        SetConsoleTextAttribute(handle, 112);
    }

    else if (pos != realpos)
        SetConsoleTextAttribute(handle, m_white);
}

void Print::State(bool state)
{
    if (state)
    {
        SetConsoleTextAttribute(handle, m_green);
        printf("[ON]\n");
        SetConsoleTextAttribute(handle, m_white);
    }
    else if (!state)
    {
        SetConsoleTextAttribute(handle, m_red);
        printf("[OFF]\n");
        SetConsoleTextAttribute(handle, m_white);
    }
}

void Print::Infos()
{
    system("cls");
    std::cout << "========= " << g_options.current_tab << " =========" << std::endl << std::endl;
    if (g_options.current_tab == g_options.tabs[0])
    {
        Select(1, m_selection_pos); std::cout << "Enabled: "; State(g_options.aim_enabled);
        Select(2, m_selection_pos); std::cout << "Autoconfig: "; State(g_options.aim_autoconfig);
        Select(3, m_selection_pos); std::cout << "Recoil control: "; State(g_options.aim_rcs);
        Select(4, m_selection_pos); std::cout << "Smooth: " << g_options.aim_smooth;
    }
    else if (g_options.current_tab == g_options.tabs[1])
    {
        Select(1, m_selection_pos); std::cout << "Enabled: "; State(g_options.esp_enabled);
        Select(2, m_selection_pos); std::cout << "Glow ennemy: "; State(g_options.esp_ennemies);
        Select(3, m_selection_pos); std::cout << "Glow team: "; State(g_options.esp_friends);
    }
    else if (g_options.current_tab == g_options.tabs[2])
    {
        Select(1, m_selection_pos); std::cout << "Enabled: "; State(g_options.trigger_enabled);
        Select(2, m_selection_pos); std::cout << "Shoot ennemy: "; State(g_options.triggerbot_ennemies);
        Select(3, m_selection_pos); std::cout << "Shoot team: "; State(g_options.trigger_team);
        Select(4, m_selection_pos); std::cout << "Delay: " << g_options.trigger_delay;

    }
    else if (g_options.current_tab == g_options.tabs[3])
    {
        Select(1, m_selection_pos); std::cout << "Noflash: "; State(g_options.noflash_enabled);
    }
}

void Print::Loop()
{
    while (true)
    {
        Infos();
        if (g_options.current_tab == g_options.tabs[0] || g_options.current_tab == g_options.tabs[2])
            m_max = 4;
        else if (g_options.current_tab == g_options.tabs[1])
            m_max = 3;
        else if (g_options.current_tab == g_options.tabs[3])
            m_max = 1;

        CheckInput();


    }
}

我刚注意到只有平滑选项

才会出现错误

0 个答案:

没有答案