Pouvez-vous écrire un programme qui rend l'écran d'un groupe de pixels éclatant (comme dans un simple moteur de particules) et pouvez-vous le faire en un nombre remarquablement petit de caractères (touches)? (Rappelez-vous les lemmings du jeu, lorsque ces petits gars explosaient et que leurs petits morceaux de pixels se séparaient.)
Quelqu'un a programmé un simple système de particules ici comme une esquisse de traitement et c'est assez lourd par rapport à ce que je pense que d'autres devraient pouvoir accomplir s'ils essayaient. Mais je serais beaucoup plus impressionné si quelqu'un pouvait faire de même en c ++ et sdl, ou même java ou c #.
Réponses:
Python, 245 caractères
la source
C #, WPF - 1523
Pas terriblement sérieux; c'était principalement une tentative pour savoir si cela fonctionnait réellement.
Ce que je fais ici, c'est d'utiliser un ItemsControl (Menu, car il est plus court) dans WPF pour afficher les particules via la liaison de données et les modèles. Un modèle de données contrôle l'apparence des particules (dans ce cas, un simple cercle) et la liaison de données contrôle la couleur et la position des particules.
Chaque particule a une position, une couleur et une direction qui sont mises à jour par une minuterie. Initialement, un tas de particules sont générées au centre de la fenêtre avec des directions aléatoires (réparties normalement). Cette collection est liée aux données à ItemsControl qui gère ensuite l'affichage automatique des particules, chaque fois que les propriétés sont mises à jour. Les particules sont un peu entraînées par la gravité.
Certes, cela a pris un peu de temps. Mais au moins ça a l'air sympa:
Il peut sûrement être raccourci en omettant:
J'ai choisi de ne pas le faire dans un souci d'esthétique. Cette solution est bien plus longue que presque tout le reste. L'approche de liaison de données et de modèles peut être élégante, mais elle est également assez détaillée par rapport à la simple mise à jour d'une image bitmap. (Remarque: je l'ai compris 1356 en omettant tout ce qui précède, mais ça a l'air horrible alors.)
Le code est distribué dans trois fichiers, qui sont donnés ici sous forme formatée pour plus de lisibilité:
App.xaml
W.xaml
W.xaml.cs
la source
postscript -
287244 caractèrescourir avec
gs -dNOPAUSE asplode.ps
Vous pouvez même l'imprimer et faire un flipbook
la source
Javascript - 268 caractères
Voici une explosion à 1 dimension, 2 particules:
Pour l'exécuter, ouvrez une page about: blank dans un bon navigateur Web, collez-la dans la barre d'url et appuyez sur Entrée. Vous pouvez modifier l'explosion en modifiant les valeurs à la fin de
s(10,5,1,0)
. La première valeur est la taille de la particule qui est éclatée. La deuxième valeur est la taille de la particule qui en est éclatée. La troisième valeur est la vitesse de l'explosion de la particule. Laissez le «0» tel quel.la source
APL (
120118)Il a le même type de sortie que l'entrée Python (c'est-à-dire qu'il ne sort que les états sur une grille de caractères). Seule la grille est de 30x15 et l'origine des particules est de 15x7.
la source
JavaScript
502500496Ceci est une combinaison des réponses de Joey et david4dev (c'est une copie éhontée de l'algorithme de Joey implémenté en utilisant Javascript / canvas ☺):
Aperçu de JSFiddle: http://jsfiddle.net/GVqFr/60/ (vous pouvez appuyer sur le bouton TidyUp pour bien formater le code)
la source
500
beaucoup la constante . Si vous pouvez définir une variable globalea=500
, vous pouvez enregistrer quelques caractères en les remplaçant tous500
para
.250
aussi.Bash 380
Appelez e comme exploser.
mise à jour: colorisée
t = texte, c = cls, g = gotoxy, f = fly, C = COLOR
la source
C avec SDL, 423 caractères
Étant donné que la description du problème d'origine mentionnait explicitement SDL, je pensais qu'il était temps qu'une solution SDL soit soumise. Malheureusement, les noms de la fonction et des structures SDL ne sont pas particulièrement concis, donc ce programme est un peu long. En fait, je ne peux même pas laisser de côté
#include
.(Étant donné que le code est déjà si énorme, j'ai laissé quelques bits supplémentaires pour qu'il compile sans avertissements. Parfois, la compilation sans avertissements me manque. Les supprimer ferait économiser environ 30 caractères environ.)
L'animation s'exécute dans une boucle infinie. Fermez la fenêtre pour quitter le programme. Chaque explosion utilise un nouvel ensemble de particules aléatoires.
Je voudrais également signaler le numéro
67372036
dans le code. Il apparaît dans l'expression du dernier argument du deuxième appel àSDL_FillRect()
. En l'état, l'explosion est entièrement rendue en gris. Changer légèrement ce nombre ajoutera un effet de couleur très subtil mais agréable à l'explosion. Le nombre67372032
colore les particules au début de l'explosion, tandis que le nombre67372034
fournit un effet de couleur lorsqu'elles disparaissent à la fin. D'autres nombres peuvent produire des effets de cycle de couleur moins subtils. Je vous encourage à les essayer.la source
Après avoir vu quelques-uns des autres grands exemples ici, j'ai décidé d'essayer et de créer une fonction de particules qui s'intègre dans essayer 140byt.es
Javascript, 282 caractères
( Fonction de particules de 138 caractères et passe- partout de dessin sur toile de base de 150 caractères)
Exemple JSFiddle en direct ici
En rendant le code entièrement procédural, je n'avais plus besoin de tableau ou de code d'affectation d'objet, ce qui réduisait considérablement la taille. Faire un effet procédural a également quelques autres effets secondaires intéressants.
Le code pourrait être réduit en omettant Gravity, Seeds, Number of Particles, etc., mais je pense que ces fonctionnalités sont trop agréables à supprimer;).
traits
Consultez-le également sur GitHub , pour une version annotée.
la source
Python avec PyGame, 240 caractères
Je me rends compte qu'il existe déjà une solution en python, mais comme celui-ci ne fait qu'imprimer des caractères, j'ai pensé qu'il serait utile d'en faire une qui dessine une belle animation.
Ungolfed, ce que j'ai commencé avec:
Après beaucoup de hackery. Plein écran pour enregistrer certains caractères. Ne pas utiliser de son ou de polices, donc je pense que ce
init()
n'est pas nécessaire (ça marche pour moi).la source
Python - 327 caractères
Choses intéressantes:
(v * cos(a), v * sin(a))
mis en œuvre commev*e**(1j*a)
.
la source
habitant 112
essayez-le en copiant / collant le code sur dwitter.net
la source