Witam ponownie,
Wbrew pozorom proste zagadnienie zabiło mi ćwieka.
Otóż umiem zmienić kolor napisów oraz tła wraz z napisami. Interesuje mnie natomiast zmiana tylko tła. Chcę osiągnąć efekt jak w Doomie podczas otrzymania ciosu.
Ekran na pół sec zapali się na czerwono i zmowu powraca do czarnego.
Tekst mam kolorowy dlatego nie chcę zmieniać jego koloru. Tylko background...
System ("color X X") zmienia na raz obie wartosci. Dziwne, że nie można podać tylko koloru tła itp.
Użyj SetConsoleTextAttribute z windows.h przed wyświetleniem tekstu:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes
Cały czas uzywalem tej komendy do zmiany koloru tekstu
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),06);
Jak to zapisać by zmienić tylko tło?
BACKGROUND_RED
Background color contains red.
http://www.cplusplus.com/forum/beginner/5830/
ahem
Please don't tell people to use system(). If you are going to do something OS-dependant, do it the right way.
#include <iostream>
#include <windows.h>
int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};
HANDLE hstdin = GetStdHandle( STD_INPUT_HANDLE );
HANDLE hstdout = GetStdHandle( STD_OUTPUT_HANDLE );
WORD index = 0;
// Remember how things were when we started
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo( hstdout, &csbi );
// Tell the user how to stop
SetConsoleTextAttribute( hstdout, 0xEC );
std::cout << "Press any key to quit.\n";
// Draw pretty colors until the user presses any key
while (WaitForSingleObject( hstdin, 100 ) == WAIT_TIMEOUT)
{
SetConsoleTextAttribute( hstdout, colors[ index ] );
std::cout << "\t\t\t\t Hello World \t\t\t\t" << std::endl;
if (++index > sizeof(colors)/sizeof(colors[0]))
index = 0;
}
FlushConsoleInputBuffer( hstdin );
// Keep users happy
SetConsoleTextAttribute( hstdout, csbi.wAttributes );
return 0;
}
Edit & Run
Hope this helps.
[edit] Oh, yeah, colors are bit-encoded thus:
bit 0 - foreground blue
bit 1 - foreground green
bit 2 - foreground red
bit 3 - foreground intensitybit 4 - background blue
bit 5 - background green
bit 6 - background red
bit 7 - background intensity:-)
Trafiłem na tę stronę wcześniej ino myślałem, że jedna jakąś komenda starczy ;) a z tego niewiele kumam gdzie tu wstawić " bit 6 " dla przykładu...
@Amiga4ever
dlatego ciagle powatarzam, ze C++ nie jest dobrym jezykiem na poczatek, bo jezeli chcesz zrobic cos wlasnego to wlasnie z czyms takim musisz sobie radzic. Jezeli Cie to przerasta to zaiunteresuj sie C# albo java, sa podobne (chociaz C# wydaje mi sie bardziej podobny) i duzo latwiej robic takie rzeczy ktore Ty chcesz
Jezeli chcesz cos fajnego i widziec wyniki postepu szybko to zobacz sobie pythona (chociaz tez przy nim jest troche konfiguracji, to jest cos pomiedzy c# a c++)
tam na forum dalej osoba tlumaczy co dokladnie zrobila
Dobra jakoś to ogarnę ;) c++ uczę się od 2 tyg i już zrobilem RPG tekstowy w świecie Wiedźmina na 5000 linijek i powiem, że jest mega rozbudowany z craftingiem broni, eliksirow, questow, zdobywaniem poziomów, losowymi zdarzeniami, tawerna, sklepami itd itd itd. A jak widać czasami pierdoła potrafi zagiac ;)
Pozdrawiam
Można jedną linijką. Weź ten kod:
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
FOREGROUND_GREEN |
FOREGROUND_INTENSITY |
BACKGROUND_BLUE
);
printf ("Hello world\n");
Dzięki sprawdzę w chacie. Do głowy wpadło mi jeszcze jedno obejście jak zmiana tla i koloru jednocześnie i przesunięcie kursora wraz z nowym wyświetlaniem kolorowego tekstu itd.
Dzięki za pomoc wszystkim.
Walczę jeszcze z jednym problem jakim jest odtwarzanie dwóch dźwięków jednocześnie PlaySnd niestety z wiadomych przyczyn odtwarzacz jeden. Ale to chyba problem na inny temat..
Tulio napisał(a):
Można jedną linijką. Weź ten kod:
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
FOREGROUND_GREEN |
FOREGROUND_INTENSITY |
BACKGROUND_BLUE
);
printf ("Hello world\n");
Działa ale na tekscie: ) mi chodziło o tło
To ustaw kolor tła i wypełnij całe okno spacjami.
Konsola pod Windows nie ma tła jako takiego. Tło mają znaki.