Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Kolorowe pisanie w konsoli


Rekomendowane odpowiedzi

Opublikowano

Moja prosta funkcja na kolorowe pisanie w konsoli

void consoleWrite(char * text, bool newLine = true)
{
   HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   int len = strlen(text);
   for (int i = 0; i < len; i++)
   {
       if ((len - i) > 2 && text[i] == '&')
       {
           if (text[i+1] == '0') SetConsoleTextAttribute(stdOut, FOREGROUND_RED);
           if (text[i+1] == '1') SetConsoleTextAttribute(stdOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
           if (text[i+1] == '2') SetConsoleTextAttribute(stdOut, FOREGROUND_RED | FOREGROUND_GREEN);
           if (text[i+1] == '3') SetConsoleTextAttribute(stdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
           if (text[i+1] == '4') SetConsoleTextAttribute(stdOut, FOREGROUND_GREEN);
           if (text[i+1] == '5') SetConsoleTextAttribute(stdOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
           if (text[i+1] == '6') SetConsoleTextAttribute(stdOut, FOREGROUND_GREEN | FOREGROUND_BLUE);
           if (text[i+1] == '7') SetConsoleTextAttribute(stdOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
           if (text[i+1] == '8') SetConsoleTextAttribute(stdOut, FOREGROUND_BLUE);
           if (text[i+1] == '9') SetConsoleTextAttribute(stdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
           i += 2;
       }
       cout << text[i];
       SetConsoleTextAttribute(stdOut, 7);
   }
   if (newLine) cout << endl;
}

//Przykład użycia consoleWrite("&3T&3e&3s&3t &7T&7e&7s&7t");

 

Używać i przerabiać możecie, ale nie obrażę się jak umieścicie info o "twórcy" w credits'ach ;)

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

szczerze? beznadziejne rozplanowanie i wykonanie. Już nie mówiąc o strasznie nieczytelnym formacie tekstu. Nigdy bym tego nie użył w żadnym swoim programie.

Lepiej użyć biblioteki curses.

Opublikowano

Wiem, że w C# to wystarczy, ale to jest C++ :)

 

2x@up

Właśnie widzę lekkie komplikacje, ale na nic innego nie mogę wpaść

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

no to po

1. Format powinien być całkowicie oddzielony od tekstu

2. najlepiej struktura, w której by się ustawiło wszystkie opcje kolorów (tzn, background, tekst...). Potem się to przekazuje do funkcji.

2.1. Dane opcje byłyby aplikowane do calego tekstu.

2.2*. Możliwość użycia innej funkcji, która przyjmowała by dowolną ilość argumentów dotyczących opcji kolorów, wraz z informacją dla ilu znaków ma być odpowiedni kolor przydzielony

3*. jeśli jest taka możliwość to użycie koloru w formacie RGB

 

odnośnie kodu to

1. powinieneś zamiast używać strlen to sprawdzać znaki do napotkania \0

2. użycie endl w tym wypadku jest złe. Powinieneś użyć \n

2.1. w ogóle argument dotyczący tego czy wstawić nową linię czy nie, i samo jej wstawianie w taki sposób nie powinno mieć miejsca. Znaki nowej linii tak jak wszystkie inne powinny być zawarte w tekście i po prostu wysyłane do strumienia (ew. jeśli jest taka potrzeba to wyłączenie kolorowania tła białych znaków jeśli to następuje)

3. wydaje mi się, że lepiej byłoby jeśli handle przekazywałoby się przez argument, najlepiej przez const & (co najwyżej jako domyślny argument)

4. lepiej byłoby zamiast char* użyć const char* i odpowienio przeciążyć tą funkcję również innych często używanych typów danych takich jak int, float etc.

5. Napisać ten kod ładnie i zgodnie z zasadami OOP

Opublikowano

co do 3* to nie ma takiej możliwości.

Jak tylko będą jakieś postępy - pojawi się info :)

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...