Czy potrafisz napisać program, który renderuje ekran rozbijającej się grupy pikseli (jak w prostym silniku cząstek) i czy możesz to zrobić przy dowolnej wyjątkowo małej liczbie znaków (naciśnięcia klawiszy)? (Przypomnij sobie lemingi z gry, kiedy ci mali faceci eksplodują, a ich małe piksele rozpadną się).
Ktoś zaprogramował tutaj prosty układ cząstek jako szkic przetwarzania i jest on dość potężny w porównaniu z tym, co moim zdaniem inni powinni być w stanie osiągnąć, jeśli spróbują. Byłbym jednak pod większym wrażeniem, gdyby ktoś mógł zrobić to samo w c ++ i sdl, a nawet java lub c #.
Odpowiedzi:
Python, 245 znaków
źródło
C #, WPF - 1523
Niezbyt poważnie; była to głównie próba tego, czy rzeczywiście zadziałało.
To, co robię tutaj, to używanie ItemsControl (menu, ponieważ jest krótszy) w WPF do wyświetlania cząstek poprzez wiązanie danych i tworzenie szablonów. Szablon danych kontroluje wygląd cząstek (w tym przypadku proste kółko), a wiązanie danych steruje kolorem i położeniem cząstek.
Każda cząstka ma pozycję, kolor i kierunek, które są aktualizowane przez timer. Początkowo w środku okna generowana jest wiązka cząstek o losowych kierunkach (o rozkładzie normalnym). Ta kolekcja jest powiązana z danymi w ItemsControl, który następnie automatycznie wyświetla cząstki za każdym razem, gdy właściwości są aktualizowane. Cząstki są nieco przeciągane w dół z powodu grawitacji.
Trzeba przyznać, że trochę się wydłużyło. Ale przynajmniej ładnie wygląda:
Można go z pewnością skrócić, pomijając:
Zdecydowałem się tego nie robić w interesie estetyki. To rozwiązanie jest znacznie dłuższe niż prawie wszystko inne. Wiązanie danych i tworzenie szablonów może być eleganckie, ale jest również dość szczegółowe w porównaniu z prostą aktualizacją mapy bitowej. (Uwaga: obniżyłem to wszystko do 1356 roku , ale wtedy wygląda to okropnie.)
Kod jest rozpowszechniany w trzech plikach, które są tutaj sformatowane w celu zapewnienia czytelności:
App.xaml
W.xaml
W.xaml.cs
źródło
PostScript -
287244 znakówBiegnij z
gs -dNOPAUSE asplode.ps
Możesz nawet wydrukować i zrobić flipbook
źródło
JavaScript - 268 znaków
Oto 1-wymiarowa, 2-cząstkowa eksplozja:
Aby go uruchomić, otwórz pustą stronę about: w dobrej przeglądarce internetowej, wklej do paska adresu i naciśnij enter. Możesz zmodyfikować eksplozję, edytując wartości na końcu w
s(10,5,1,0)
. Pierwsza wartość to rozmiar eksplodowanej cząstki. Druga wartość to rozmiar cząstki, która z niej eksploduje. Trzecią wartością jest prędkość wybuchającej z niej cząstki. Pozostaw „0” bez zmian.źródło
APL (
120118)Ma ten sam rodzaj danych wyjściowych co pozycja Python (tzn. Po prostu wyświetla stany na siatce znaków). Tylko siatka ma wymiary 30 x 15, a źródło cząstek ma wymiary 15 x 7.
źródło
JavaScript
502500496Jest to kombinacja odpowiedzi Joeya i david4dev (to bezwstydna kopia algorytmu Joeya zaimplementowana przy użyciu Javascript / canvas ☺):
Podgląd JSFiddle: http://jsfiddle.net/GVqFr/60/ (możesz nacisnąć przycisk TidyUp, aby ładnie sformatować kod)
źródło
500
często używasz stałej . Jeśli można zdefiniować zmienną globalnąa=500
, można zaoszczędzić kilka znaków zastępując wszystko500
za
.250
.Bash 380
Zadzwoń jak wybuch.
aktualizacja: pokolorowana
t = tekst, c = cls, g = gotoksy, f = mucha, C = KOLOR
źródło
C z SDL, 423 znaków
Ponieważ w oryginalnym opisie problemu wyraźnie wspomniano o SDL, czułem, że nadszedł czas na przesłanie rozwiązania SDL. Niestety, nazwy funkcji i struktur SDL nie są szczególnie zwięzłe, więc ten program jest trochę długi. W rzeczywistości nie mogę nawet pominąć
#include
.(Ponieważ kod jest już tak duży, zostawiłem kilka dodatkowych bitów, aby skompilować bez ostrzeżeń. Czasami brakuje mi kompilacji bez ostrzeżeń. Usunięcie ich pozwoliłoby zaoszczędzić około 30 znaków).
Animacja działa w nieskończonej pętli. Zamknij okno, aby wyjść z programu. Każda eksplozja wykorzystuje nowy zestaw przypadkowych cząstek.
Chciałbym również wskazać liczbę
67372036
w kodzie. Pojawia się w wyrażeniu ostatniego argumentu w drugim wywołaniu doSDL_FillRect()
. W obecnym kodzie eksplozja jest renderowana w całości w odcieniach szarości. Lekka zmiana tej liczby doda bardzo subtelny, ale przyjemny efekt kolorystyczny do eksplozji. Liczba zabarwia67372032
cząsteczki na początku eksplozji, a liczba67372034
zapewnia efekt kolorystyczny, gdy znikają na końcu. Inne liczby mogą powodować mniej subtelne efekty zmiany kolorów. Zachęcam do wypróbowania ich.źródło
Po obejrzeniu innych świetnych przykładów tutaj postanowiłem spróbować i stworzyć funkcję cząstki, która mieści się w 140byt.es
JavaScript, 282 znaków
( 138 cząstek funkcja cząstki i 150 znaków podstawowa tablica rysunkowa płótna)
Przykład JSFiddle na żywo tutaj
Dzięki temu, że kod jest w pełni proceduralny, nie potrzebuję już kodu tablicy ani przypisania obiektu, co znacznie zmniejsza rozmiar. Wykonywanie efektu proceduralnego ma również inne fajne skutki uboczne.
Kod może zostać zmniejszony przez zwolnienie grawitacji, nasion, liczby cząstek itp., Ale myślę, że te funkcje są zbyt ładne, aby je usunąć;).
cechy
Sprawdź także w GitHub , aby uzyskać wersję z adnotacjami.
źródło
Python z PyGame, 240 znaków
Zdaję sobie sprawę, że w Pythonie jest już rozwiązanie, ale ponieważ ten drukuje tylko postacie, pomyślałem, że warto stworzyć taką, która rysuje fajną animację.
Niegolfowany, od czego zacząłem:
Po wielu włamaniach. Pełny ekran, aby zapisać niektóre znaki. Nie używam dźwięku ani czcionek, więc myślę, że nie
init()
jest to konieczne (działa dla mnie).źródło
Python - 327 znaków
Interesujące rzeczy:
(v * cos(a), v * sin(a))
realizowane jakov*e**(1j*a)
.
źródło
mieszkaniec 112
wypróbuj to, kopiując / wklejając kod do dwitter.net
źródło