Musisz uświadomić sobie przykrą prawdę:
Praktycznie nic w komputerze nie może zostać wykonane jednocześnie.
Jak oglądasz film na YT i "jednocześnie" rozmawiasz z kimś na Skype, to nie oznacza, że oba programy działają w tym samym czasie. Tobie się może wydawać, że tak jest. W rzeczywistości system przekazuje określoną ilość cykli procesora na dany proces jednak dzieje się to tak szybko, że sprawia to wrażenie, że programy działają jednocześnie.
Wracając do Twojego problemu z rysowaniem. Nie da się na raz podnieść wszystkich klocków, ale można to znacząco przyspieszyć. Możesz przykładowo napisać pętlę wypisującą duży zbiór znaków:
for( int i = 0; i < 15; i++ )
cout << "########################################" << endl;
Wypisuje ona 15 linijek po 40 znaków '#' w każdej. I teraz zauważ, że pętla w jednej iteracji wypisuje na raz cała linijkę (Tobie się tak wydaje). Jednak sprawne oko bez problemu zauważy, że po uruchomieniu tego programu, zbiór znaków rysuje się na naszych oczach (a my chcemy, aby się pojawił).
Tak naprawdę, to strumień "cout" jest powolny. Pewnie dlatego, że jest buforowany. Dlatego do szybkiego wypisywania tekstu do konsoli należy korzystać z niskopoziomowych funkcji systemowych. Jedną z nich jest należąca do WinAPI WriteConsole. Oczywiście to działa tylko na Windowsie, a korzystamy z tego tak:
#include <Windows.h>
for( int i = 0; i < 15; i++ )
WriteConsole( GetStdHandle( STD_OUTPUT_HANDLE ), string(50, '#').c_str(), 50, NULL, NULL );
To może dla Ciebie wyglądać niesamowicie skomplikowanie. Szczególnie dlatego, że dopiero jak wspomniałeś zaczynasz naukę programowania. Chciałem Ci tylko uświadomić, że im bardziej niskopoziomowo będziemy pisać, tym szybszy będzie kod. Rezygnujemy wtedy z wielu funkcjonalności. Strumień "cout" poza tym, że jest wolny, jest też niesamowicie rozbudowany. Potrafi przecież wypisywać liczby z dokładnością do danej liczby miejsc po przecinku, potrafi wypisać liczbę w zapisie szesnastkowym i wiele, wiele więcej.
Jeszcze wydajniej moglibyśmy zrezygnować z powyższej pętli for i cały zbiór znaków zapisać w jednym stringu aby następnie jako całość go wypisać. Miej jednak świadomość, że nawet taka niskopoziomowa funkcja jak WriteConsole wypisuje znak po znaku. Musi, bo nie da się na raz wielu wartości przekazać od tak, już, BACH i jest. Niestety :-)
PS. Powyżej zastosowałem zapis: string( 50, '#' ).c_str(). Jest to to samo, jakbym wkleił w to miejsce "######..." 50 takich znaków '#'. Jest to jawne wywołanie konstruktora klasy string. Ktoś może zarzucić, że takie zastosowanie konstruktora jest wolniejsze niż jawne wpisanie w kodzie 50 znaków '#'. Pewnie taka osoba miałaby rację, ale pokalanie swojego kodu takimi długimi tablicami znaków jest nieeleganckie :-P