Jump to content

[C++] Cum faci un "scrollable menu" in consola


Magnum96
 Share

Recommended Posts

Pentru inceput, sa va explic ce inseamna acest lucru: de exemplu, fiecare joc are un meniu. Selectand o operatiune a meniului, intrati in joc, va modificati setarile etc.

 

Eu va voi arata in C++ cum faci un meniu elementar.

#include <iostream> // include-ul #1
#include <windows.h> // include-ul #2
using namespace std;
int menu = 0; // variabila globala
int meniu () // functia meniului
{
    int pointer = 0; // variabila locala mentionata
    string Menu[4] = // numarul 4  reprezinta numarul de aplicatii a meniului
    {
    "Start Game",
    "Credits",
    "Rules",
    "Close Game"
    }; // citirea unui array string prin care retinem partile meniului
    while (true) // intrarea intr-un ciclu infinit
    {
        system("cls"); // stergem ce este scris in consola
        for (int i = 0; i <= 3; i++) // citirea array-ului "Menu" (pornim de la 0 si mergem pana la 3)
        {
            if (i == pointer) // daca i corespunde cu variabila pointer..
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12); // textul e rosu
                cout<<Menu[i]<<endl;
            }
            else //daca nu...
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); // textul e alb
                cout<<Menu[i]<<endl;
            }
        }
        while (true) // intrarea intr-un ciclu infinit nou
        {
            if (GetAsyncKeyState (VK_UP) != 0) // verficam daca sageata "sus" e apasata
            {
                pointer -= 1; // scadem variabila pointer cu 1
                if (pointer == -1) // daca trece de 0, inseamna ca "a iesit din meniu"
                {
                    pointer = 3; // astfel il reinitializam cu 3
                }
                break; // intrerupem ciclul infinit (al doilea while)
            }
            else if (GetAsyncKeyState (VK_DOWN) != 0)
            {
                pointer += 1;
                if (pointer == 4)
                {
                    pointer = 0;
                }
                break;
            }
            else if (GetAsyncKeyState (VK_RETURN) != 0) // verificam daca este apasat "ENTER"
            {
                switch (pointer) // verificam valoarea variabilei "pointer"
                {
                    case 0: // daca e 0...
                    {
                        return 10; // returnam functia cu valoarea 10...
                    }
                    case 1: // daca e 1...
                    {
                        return 20; // returnam functia cu valoarea 20...
                    }
                    case 2:
                    {
                        return 30;
                    }
                    case 3:
                    {
                        return 40;
                    }
                }
            }
            Sleep (500); // incetinim programul ca sa putem manevra meniul
        }
    }
}
int main()
{
    RESTART: // definim acest lant de caracter pentru a putea folosi loop-ul "goto" mai tarziu
    menu = meniu(); // retinem valorea returnata a functiei "meniu" in variabila globala "menu"
    switch (menu) // verificam valorea varibilei "menu"
    {
        case 10: // daca selectam "Start Game"
        {
            system ("CLS"); // stergem ecranul
            cout<<"Start Game selected";
            Sleep(5000); // blocam programul 5 secunde
            goto RESTART; // sarim inapoi la inceputul functiei "main"
        }
        case 20: // daca selectam "Credits"
        {
            system ("CLS"); // stergem ecranul
            cout<<"Credits selected";
            Sleep(5000); // blocam programul 5 secunde
            goto RESTART; // sarim inapoi la inceputul functiei "main"
        }
        case 30: // daca selectam "Rules"
        {
            system ("CLS"); // stergem ecranul
            cout<<"Rules selected";
            Sleep(5000); // blocam programul 5 secunde
            goto RESTART; // sarim inapoi la inceputul functiei "main"
        }
        case 40: // daca selectam "Close Game"
        {
            system ("CLS"); // stergem ecranul
            cout<<"Close Game selected";
            Sleep(5000); // blocam programul 5 secunde
            goto RESTART; // sarim inapoi la inceputul functiei "main"
        }
    }
}

Multumesc pentru atentie, sper ca v-am fost de ajutor.

Edited by AIM Magnum
Link to comment
Share on other sites

@, e un loop. Adica daca eu in script pun undeva "RESTART:" (cum am pus si eu), iar mai jos pun "goto RESTART;" acesta sare la linia in care apare acel "RESTART:". Practic, in cazul nostru, sarim de la locul in care apare instructiunea "goto" la inceputul functiei "main".

 

Nu se preda la scoala, si nici nu se recomanda utilizarea lui la programe mai complexe, insa la programe relativ scurte, cum e si acesta, e ok sa il folosim.

Edited by AIM Magnum
Link to comment
Share on other sites

Felicitari, pare un tutorial foarte bine realizat. L-am testat si e functionabil. Daca mai are cineva intrebari le poate adresa aici si un programator sau autorul va raspunde la nelamuririle voastre.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.