hugerth Temat założony przez niniejszego użytkownika |
[C++] Motyw z TheMatrix » 2012-11-23 14:34:53 Witajcie, piszę sobie prosty konsolowy program do tworzenia efektu spadających znaków z matrixa. I mam problem :)
Napisałem funkcję, która tworzy ciąg znaków w danej (lub losowej) kolumnie, następnie ciąg "przejeżdża" na dół okienka konsoli i znika. No dobra, dla jednej kolumny to wygląda fajnie, ale ja potrzebuję na dobrą sprawę 79 takich samych wywołań odpalonych równolegle.
Miałoby to wyglądać tak: w pętli losuję kolumnę i dla tej kolumny wywołuję funkcję Kolumna. Ale nie chcę czekać zanim funkcja dojdzie do końca, tylko np. po wyświetleniu n znaków w kolumnie startuje już druga kolumna (czyli wywołuję tę samą funkcję). |
|
jsc |
» 2012-11-23 14:39:33 Zainteresuj się biblioteką thread. Jest natywna w C++11 lub w boost. |
|
m4tx |
» 2012-11-23 15:14:26 @up ta, nie ma to jak odpalić 79 wątków dla prościutkiej aplikacji... :P @hugerth - napisałeś co chcesz uczynić, napisałeś jak to chcesz uczynić, więc... w czym właściwie masz problem? :) Generalnie ja bym to zrobił tak, że czekam rand() % 100 milisekund, w rand() % 10 losowo wybranych kolumnach dodaję rand() % 3 (dla każdej kolumny inna wartość) znaków. I tak w nieskończoność. :P |
|
jsc |
» 2012-11-23 15:25:47 nie ma to jak odpalić 79 wątków dla prościutkiej aplikacji... |
Jak przyjdzie do trudniutkiej to nie wiadomo się gdzie podziać, więc trzeba się wdrażać, im szybciej tym lepiej. |
|
akwes |
» 2012-11-23 15:29:58 Wiele osób robi konsolę z matriksu i prawie każda jest niezadowolona. Efekt w konsoli nie wyjdzie taki jak w matriksie. Ponieważ konsola w matriksie to animacja, w której literki spadają płynnie co x pikseli a nie o jeden rząd.
Po prostu za każdym razem trzeba by rysować całą konsolę (45x70?) pamiętać gdzie jest jaka literka i tyle... Ja bym zrobił to na klasach... Ale ponieważ to Twój pierwszy post to podpowiem, że przecież można zrobić duży std::string i co "x" czasu przenosić literkę "piętro niżej" pamiętając ile ma piętro (70?) |
|
hugerth Temat założony przez niniejszego użytkownika |
» 2012-11-23 15:32:09 @m4tx - no chciałbym żeby to tak szło - wymyślam, piszę, działa. Ale niestety nie.
Na razie mam tak, że przelatuje jedna kolumna od góry do dołu i dopiero jak zniknie ostatni znak to funkcja się kończy. I jak tu kilka jednocześnie odpalić?
Klasy dopiero przede mną. Jestem uber newbie, dopiero zaczynam.
Mogę niby zrobić tablicę długości 80 (szer. konsoli) i w losowe miejsce wpisywać losowy znak i znowu przechodzić do nowego wiersza itd... ale będzie mizerny efekt. |
|
pekfos |
» 2012-11-23 15:51:59 Zrób bufor 80x25 i na nim operuj. Później wyświetlaj go w konsoli jakąś funkcją (np z WinAPI). Wtedy wystarczy ci do tego jedna prosta pętla. (I nie potrzeba żadnych klas) 79 wątków to najgorsze możliwe rozwiązanie. |
|
akwes |
» 2012-11-23 15:53:01 // szkic // tablica dla całego ekranu o wielkości całego ekranu std::string konsola[70*45];
// jeżeli znajdziesz znaczek, to przesuń go o wiersz niżej for (int i =0; i<konsola.size; i++) { konsola[i] != ' '; konsola[i+45] = konsola[i]; konsola[i] = ' '; }
// rysujemy z podziałem na wiersze for (int i =0; i<konsola.size(); i++) { std::cout << konsola[i];
if (i%75 == 0) std::cout << "\n"; }
@pekfos (I nie potrzeba żadnych klas)
|
Dlatego podałem dwa rozwiązania, co nie zmienia faktu, że jednak na klasach byłoby to wygodniejsze, czytelniejsze i przenośne na bibliotekę 2D przy nie wielkim nakładzie pracy. |
|
« 1 » 2 3 |