¿Puede escribir un programa que muestre un grupo de píxeles que explotan (como en un motor de partículas simple) y puede hacerlo en cualquier número notablemente pequeño de caracteres (pulsaciones de teclas)? (Recordemos los lemmings del juego, cuando esos pequeños muchachos explotaban y sus pequeñas piezas de píxeles se separaban).
Alguien programó un sistema de partículas simple aquí como un boceto de procesamiento y es bastante considerable en comparación con lo que creo que otros deberían poder lograr si lo intentaran. Pero estaría mucho más impresionado si alguien pudiera hacer lo mismo en c ++ y sdl, o incluso en java o c #.
Respuestas:
Python, 245 caracteres
fuente
C #, WPF - 1523
No terriblemente serio; esto fue principalmente un intento de si realmente funcionó.
Lo que estoy haciendo aquí es usar un ItemsControl (Menú, ya que es más corto) en WPF para mostrar partículas a través de la vinculación de datos y la plantilla. Una plantilla de datos controla el aspecto de las partículas (en este caso, un círculo simple) y el enlace de datos controla el color y la posición de las partículas.
Cada partícula tiene una posición, un color y una dirección que se actualizan mediante un temporizador. Inicialmente, se generan un montón de partículas en el centro de la ventana con direcciones aleatorias (distribuidas normalmente). Esa colección se enlaza con los datos al ItemsControl que luego maneja la visualización de las partículas automáticamente, cada vez que se actualizan las propiedades. Las partículas se arrastran un poco hacia abajo debido a la gravedad.
Se hizo un poco largo, lo admito. Pero al menos se ve bien:
Seguramente se puede acortar omitiendo:
Opté por no hacerlo en interés de la estética. Sin embargo, esta solución es mucho más larga que casi cualquier otra cosa. El enfoque de vinculación de datos y plantillas puede ser elegante, pero también es bastante detallado en comparación con la simple actualización de un mapa de bits. (Nota: lo bajé a 1356 dejando todo lo anterior, pero se ve horrible entonces).
El código se distribuye en tres archivos, que se dan aquí en forma formateada para su legibilidad:
App.xaml
W.xaml
W.xaml.cs
fuente
posdata -
287244 caracterescorre con
gs -dNOPAUSE asplode.ps
Incluso podría imprimirlo y hacer un flipbook
fuente
Javascript - 268 caracteres
Aquí hay una explosión de 1 dimensión, 2 partículas:
Para ejecutarlo, abra una página acerca de: en blanco en un buen navegador web, péguelo en la barra de direcciones y presione Entrar. Puede modificar la explosión editando los valores al final en
s(10,5,1,0)
. El primer valor es el tamaño de la partícula que explota. El segundo valor es el tamaño de la partícula que se explota fuera de ella. El tercer valor es la velocidad de la partícula explotada. Deje el '0' como está.fuente
APL (
120118)Tiene el mismo tipo de salida que la entrada de Python (es decir, solo muestra los estados en una cuadrícula de caracteres). Solo la cuadrícula es de 30x15 y el origen de la partícula es de 15x7.
fuente
JavaScript
502500496Esta es una combinación de las respuestas de Joey y david4dev (es una copia descarada del algoritmo de Joey implementado usando Javascript / canvas ☺):
Vista previa de JSFiddle: http://jsfiddle.net/GVqFr/60/ (puede presionar el botón TidyUp para formatear bien el código)
fuente
500
mucho la constante . Si puede definir una variable globala=500
, puede guardar algunos caracteres reemplazando todos500
cona
.250
también.Bash 380
Llame e como explotar.
actualización: coloreada
t = texto, c = cls, g = gotoxi, f = volar, C = COLOR
fuente
C con SDL, 423 caracteres
Como la descripción original del problema mencionaba explícitamente SDL, sentí que ya era hora de que se presentara una solución SDL. Desafortunadamente, los nombres de las funciones y estructuras SDL no son particularmente concisos, por lo que este programa es un poco largo. De hecho, ni siquiera puedo dejar de lado el
#include
.(Dado que el código ya es tan grande, dejé algunos bits adicionales para que se compilara sin advertencias. A veces extraño compilar sin advertencias. Eliminarlos ahorraría aproximadamente 30 caracteres).
La animación se ejecuta en un bucle infinito. Cierre la ventana para salir del programa. Cada explosión usa un nuevo conjunto de partículas aleatorias.
También me gustaría señalar el número
67372036
en el código. Aparece en la expresión para el último argumento en la segunda llamada aSDL_FillRect()
. Tal como está el código, la explosión se representa completamente en grises. Cambiar este número ligeramente agregará un efecto de color muy sutil pero agradable a la explosión. El número67372032
colorea las partículas al comienzo de la explosión, mientras que el número67372034
proporciona un efecto de color a medida que se desvanecen al final. Otros números pueden producir efectos de ciclo de color menos sutiles. Te animo a que las pruebes.fuente
Después de ver algunos de los otros excelentes ejemplos aquí, decidí probarlo y crear una función de partícula que encaje probarlo 140byt.es
Javascript, 282 caracteres
( 138 caracteres de función de partículas y 150 caracteres de diseño básico de lienzo)
Ejemplo de JSFiddle en vivo aquí
Al hacer que el código fuera completamente procesal, ya no necesitaba ningún código de matriz o asignación de objeto, lo que reduce mucho el tamaño. Hacer un efecto de procedimiento también tiene algunos otros efectos secundarios agradables.
El código podría hacerse más pequeño omitiendo Gravity, Seeds, Number of Particles, etc., pero creo que estas características son demasiado buenas para eliminarlas;).
Caracteristicas
También échale un vistazo en GitHub , para una versión anotada.
fuente
Python con PyGame, 240 caracteres
Me doy cuenta de que ya hay una solución en Python, pero como esa solo imprime caracteres, pensé que valdría la pena hacer una que dibuje una buena animación.
Ungolfed, con lo que comencé:
Después de mucha piratería. Pantalla completa para guardar algunos personajes. No uso sonido ni fuentes, así que creo que
init()
es innecesario (funciona para mí).fuente
Python - 327 caracteres
Cosas interesantes:
(v * cos(a), v * sin(a))
implementado comov*e**(1j*a)
.
fuente
dwitter 112
pruébelo copiando / pegando el código en dwitter.net
fuente