Können Sie ein Programm schreiben, mit dem eine Gruppe von Pixeln, die auseinander explodieren (wie in einer einfachen Partikelmaschine), gerendert werden kann, und können Sie dies in einer bemerkenswert geringen Anzahl von Zeichen (Tastenanschlägen) tun? (Erinnern Sie sich an die Spielelemminge, als diese kleinen Kerle explodierten und ihre kleinen Pixelstücke auseinander flogen.)
Jemand hat hier ein einfaches Partikelsystem als Verarbeitungsskizze programmiert und es ist ziemlich umfangreich im Vergleich zu dem, was meiner Meinung nach andere können sollten, wenn sie es versuchen. Aber ich wäre viel beeindruckter, wenn jemand dasselbe in c ++ und sdl oder sogar in Java oder c # machen könnte.
Antworten:
Python, 245 Zeichen
quelle
C #, WPF - 1523
Nicht sehr ernst; Dies war hauptsächlich ein Versuch, ob es tatsächlich funktionierte.
Ich verwende hier ein ItemsControl (Menü, da es kürzer ist) in WPF, um Partikel über Datenbindung und Vorlagen anzuzeigen. Eine Datenvorlage steuert, wie die Partikel aussehen (in diesem Fall ein einfacher Kreis), und die Datenbindung steuert Farbe und Position der Partikel.
Jedes Partikel hat eine Position, eine Farbe und eine Richtung, die von einem Timer aktualisiert werden. Zunächst wird in der Mitte des Fensters ein Partikelbündel mit (normalverteilten) Zufallsrichtungen erzeugt. Diese Auflistung wird datengebunden an ItemsControl, das die Partikel dann automatisch anzeigt, wenn die Eigenschaften aktualisiert werden. Partikel werden aufgrund der Schwerkraft etwas nach unten gezogen.
Zugegeben, es wurde etwas langwierig. Aber zumindest sieht es gut aus:
Es kann sicherlich kürzer gemacht werden, indem weggelassen wird:
Ich habe mich aus ästhetischen Gründen dagegen entschieden. Diese Lösung ist ungeachtet dessen viel länger als fast alles andere. Der Ansatz für die Datenbindung und das Templating ist zwar elegant, aber im Vergleich zum einfachen Aktualisieren einer Bitmap auch ziemlich ausführlich. (Anmerkung: Ich habe es auf 1356 gebracht, indem ich alle oben genannten Punkte weggelassen habe, aber es sieht dann schrecklich aus.)
Der Code wird in drei Dateien verteilt, die hier aus Gründen der Lesbarkeit in formatierter Form angegeben sind:
App.xaml
W.xaml
W.xaml.cs
quelle
Nachschrift -
287244 Zeichenrenn mit
gs -dNOPAUSE asplode.ps
Sie können es sogar ausdrucken und ein Daumenkino erstellen
quelle
Javascript - 268 Zeichen
Hier ist eine eindimensionale 2-Teilchen-Explosion:
Um es auszuführen, öffne eine leere Seite in einem guten Webbrowser, füge sie in die URL-Leiste ein und drücke die Eingabetaste. Sie können die Auflösung ändern, indem Sie die Werte am Ende von bearbeiten
s(10,5,1,0)
. Der erste Wert ist die Größe des explodierten Partikels. Der zweite Wert ist die Größe des Partikels, das aus ihm herausgesprengt wird. Der dritte Wert ist die Geschwindigkeit des aus ihm herausgesprengten Partikels. Lass die '0' so wie sie ist.quelle
APL (
120118)Es hat die gleiche Ausgabe wie der Python-Eintrag (dh es gibt nur die Zustände in einem Zeichenraster aus). Nur das Raster ist 30x15 und der Partikelursprung ist 15x7.
quelle
JavaScript
502500496Dies ist eine Kombination der Antworten von Joey und david4dev (es ist eine schamlose Kopie von Joeys Algorithmus, der mit Javascript / canvas implementiert wurde):
JSFiddle-Vorschau: http://jsfiddle.net/GVqFr/60/ (Sie können die TidyUp-Taste drücken, um den Code schön zu formatieren)
quelle
500
. Wenn Sie eine globale Variable definieren könnena=500
, können Sie ein paar Zeichen speichern , indem Sie alle ersetzen500
mita
.250
.Bash 380
Rufen Sie e wie explodieren.
Update: eingefärbt
t = text, c = cls, g = gotoxy, f = fly, C = COLOR
quelle
C mit SDL, 423 Zeichen
Da in der ursprünglichen Problembeschreibung SDL ausdrücklich erwähnt wurde, war es meines Erachtens an der Zeit, eine SDL-Lösung einzureichen. Leider sind die Namen der SDL-Funktion und der Strukturen nicht besonders knapp, sodass dieses Programm etwas lang ist. Tatsächlich kann ich das nicht mal auslassen
#include
.(Da der Code bereits so umfangreich ist, habe ich einige zusätzliche Bits übrig gelassen, damit er ohne Warnungen kompiliert werden kann. Ich vermisse es manchmal, ohne Warnungen zu kompilieren. Durch das Entfernen werden etwa 30 Zeichen gespart.)
Die Animation läuft in einer Endlosschleife. Schließen Sie das Fenster, um das Programm zu beenden. Bei jeder Explosion wird ein neuer Satz zufälliger Partikel verwendet.
Ich möchte auch auf die Nummer
67372036
im Code hinweisen . Es erscheint im Ausdruck für das letzte Argument im zweiten Aufruf vonSDL_FillRect()
. Nach dem derzeitigen Stand des Codes wird die Explosion vollständig in Grautönen wiedergegeben. Eine geringfügige Änderung dieser Zahl fügt der Explosion einen sehr subtilen, aber angenehmen Farbeffekt hinzu. Die Zahl67372032
färbt die Partikel zu Beginn der Explosion, während die Zahl67372034
einen Farbeffekt liefert, wenn sie am Ende ausgeblendet werden. Andere Zahlen können zu weniger subtilen Farbwechseleffekten führen. Ich ermutige Sie, sie auszuprobieren.quelle
Nachdem ich einige der anderen großartigen Beispiele hier gesehen hatte, entschloss ich mich, es auszuprobieren und eine Partikelfunktion zu erstellen , die in 140 Byte passt
Javascript, 282 Zeichen
( 138 Zeichen Partikelfunktion und 150 Zeichen Basis-Zeichenfläche Boilerplate)
Live JSFiddle Beispiel hier
Indem ich den Code vollständig prozedural machte, benötigte ich keinen Array- oder Objektzuweisungscode mehr, wodurch sich die Größe erheblich verringerte. Das Erzeugen eines prozeduralen Effekts hat auch einige andere nette Nebenwirkungen.
Der Code könnte kleiner gemacht werden, indem man die Schwerkraft, die Samen, die Anzahl der Partikel usw. weglässt, aber ich denke, diese Merkmale sind zu schön, um sie zu entfernen.
Eigenschaften
Schauen Sie sich auch GitHub an , um eine kommentierte Version zu erhalten.
quelle
Python mit PyGame, 240 Zeichen
Mir ist klar, dass es in Python bereits eine Lösung gibt, aber da hier nur Zeichen gedruckt werden, dachte ich, dass es sich lohnen würde, eine zu erstellen, die eine schöne Animation zeichnet.
Ungolfed, womit ich angefangen habe:
Nach viel hackery. Vollbild, um einige Zeichen zu speichern. Ich benutze weder Sound noch Schriften, deshalb halte ich es für
init()
unnötig (es funktioniert bei mir).quelle
Python - 327 Zeichen
Interessante Dinge:
(v * cos(a), v * sin(a))
umgesetzt alsv*e**(1j*a)
.
quelle
dwitter 112
Probieren Sie es aus, indem Sie den Code auf dwitter.net kopieren / einfügen
quelle