Los juegos son divertidos
Este codegolf aquí fue tan divertido que tuve que hacer una versión para otros juegos clásicos de complejidad similar. La forma más corta de crear un juego básico de Space Invaders en Python
Esta vez, sin embargo, trata de recrear el clásico juego 'Snake', en el que comienzas como una pequeña figura, moviéndote constantemente para recolectar piezas para aumentar tu puntaje. Cuando recoges una pieza, tu 'cola' crece, que sigue el camino que has hecho. El objetivo es durar más tiempo sin chocar contra su propia cola o contra las paredes.
Calificaciones:
- Usted, los personajes que forman la cola, las paredes y las piezas que recolecta deben ser personajes diferentes.
- muestra un HUD con el puntaje. La puntuación aumenta en 1 punto por cada pieza que recojas
- El jugador pierde cuando choca con su propia cola o la pared.
- una pieza se genera en un área aleatoria inmediatamente después de que se recolecta una pieza, por no mencionar al comienzo del juego
- La velocidad del juego no importa, siempre que sea consistente
Las 'celdas' deben tener 2x1 caracteres, ya que la altura de los caracteres de bloque es ~ dos veces el anchoPuede ser 1x1, porque 2x1 es simplemente feo y realmente no pensé en eso- Las teclas para cambiar la dirección deben ser
awsd
, izquierda, arriba, abajo, derecha respectivamente - la dirección de inicio siempre debe estar arriba
- Debes mostrar los bordes de la pared. La puntuación puede superponerse a la pared.
El código más corto que cumpla con los criterios anteriores gana. Puntos de bonificación imaginarios para la creatividad
awsd
y losstarting direction should always be up
requisitos,M-x snake
funcionaríaM-: (progn(define-key snake-mode-map"a"'snake-move-left)...(setq snake-initial-velocity-x 0 snake-initial-velocity-y 1)(snake))
haría el truco entonces.Respuestas:
JavaScript (
553512 bytes)Enlace a la versión jugable
Al principio intenté que saliera a la consola real (con
console.log
yconsole.clear
), pero parpadeaba demasiado, así que lo puse en HTML similar a una consola. Funcionará con esto:También lo implementé primero con celdas 2x1, pero se veía peor que 1x1. Sin embargo, eso sería un cambio menor.
Utiliza
awsd
teclas en el teclado.Actualizar:
Pude reducirlo a 512 bytes (exactamente 0x200) mejorando la búsqueda de cola y haciendo algo más de magia.
Ahora obtienes 2 puntos cuando aparece una pieza en tu cola (es una característica). También arreglé la superposición cuando la serpiente se muerde.
fuente
awsd
Código de máquina x86 (128 bytes)
Al igual que mi presentación para Generar un Fractal de Mandlebrot , escribí un producto para el juego de la serpiente en 128 bytes. No cumple completamente con los requisitos del desafío (comienza a moverse hacia la derecha, no todos los muros están dibujados), pero lo estoy publicando porque creo que es una solución interesante y creativa. El puntaje se muestra en binario a la derecha, las teclas de flecha controlan la dirección del movimiento, la 'comida' se suelta al azar y termina si te golpeas a ti mismo, a la pared o al borde de la pantalla.
Enlace para ejecutable y código fuente
Además, en lo que respecta al comentario anterior sobre si dosbox está haciendo trampa, creo que es perfectamente aceptable siempre que esté en un modo de visualización basado en texto, ya que es solo un terminal de dos.
fuente
16 bits 8086
526 bytes / 390 bytes
Decodifique esto utilizando un decodificador Base64 y llámelo "snake.com" y luego ejecútelo desde el símbolo del sistema de Windows. Probado en WinXP, es posible que deba usar DosBox para obtener el modo de video correcto. Las teclas de control son 'wasd' y espacio para salir. Presione 'w' para comenzar.
Aquí hay una versión en modo de caracteres que tiene 390 bytes de longitud:
Este modo de personaje tiene tres bytes más (pero la serpiente es mejor):
fuente
cáscara / sh, 578 caracteres
Intenté cumplir con POSIX (ser lo más portátil posible y evitar los bashismos, incluso el generador de números aleatorios no necesita / proc). Puede, por ejemplo, jugarlo en su terminal nativa o mediante una sesión SSH: ejecutar con 'dash -c ./snake' También hay una variante no legible / legible en ~ 2800 bytes, que se puede ver aquí .
Algunas notas: el script de shell no es adecuado para codificar juegos 8-)
fuente
a
se detiene. Extraño.echo -n
Definitivamente no es portátil. Si el primer operando es -n, o si alguno de los operandos contiene un carácter de barra diagonal inversa ('\'), los resultados están definidos por la implementación. Usar echo para cualquier cosa que no sea texto literal sin ningún interruptor no es portátil. pubs.opengroup.org/onlinepubs/009604599/utilities/echo.htmlRuby 1.9 / Solo Windows / (
354 337 355346 bytes)Juega en un tablero de 20x40 en la consola de Windows. La puntuación se muestra debajo del tablero. Use
WASD
para controlar la serpiente, cualquier otra tecla para salir (¡con fuerza!). Edite el tiempo de suspensión al final de la línea 5 para controlar la velocidad. (¡O guarde 10 caracteres y haga que sea casi imposible de jugar eliminando el sueño por completo!)Función de bonificación: no se inicia aleatoriamente (cuando se genera la pieza inicial en la ubicación de la serpiente).
Necesitaba ~ 100 caracteres para solucionar la falta de un getchar sin bloqueo. Aparentemente, Ruby 1.9.3 incluye una biblioteca "io / console" que habría salvado aproximadamente la mitad de ellas. Y esta solución es específica de Windows. Hay soluciones publicadas para hacer el mismo tipo de cosas en los sistemas * nix, pero no las he probado para comparar el recuento de caracteres.
Editar:
Tuve que agregar 18 bytes después de darme cuenta de que la cola solo crece después de comer, no después de cada paso.
Edición 2: (Posiblemente) se solucionó el problema del bloqueo, se guardaron los 9 bytes al restringirlos a un artículo de comida.
fuente
9.times{}
, guardando 9 caracteres.Applesoft Basic - 478 (462)
Este fue mi primer código de golf, pero fue escrito en 1989, y principalmente implementa el juego de la serpiente según lo solicitado (pero sin comida, las serpientes crecen continuamente, y en realidad son dos jugadores, no uno) usando solo dos líneas de Applesoft Basic.
Hubo una serie de concursos de programas de dos líneas en ese momento, como en el diario Dr. Dobbs. Pasé 6 meses descubriendo cómo encajar esto en dos líneas que tienen un límite de 255 caracteres (y solo una rama)
Más información en: http://davesource.com/Projects/SpeedWaller/
El programa escrito es exactamente dos líneas:
El listado cuando está formateado se ve así:
El juego es en realidad dos jugadores e incluye "instrucciones" en la parte inferior de la página que muestran las teclas y un contador para que puedas ver cuántos pasos sobreviviste. Son 478 caracteres, 16 de ellos son las instrucciones y la salida del contador, por lo que 462 si quieres afeitarlos.
fuente
Consola C # .NET Framework 4.7.2 (
2,4562,4402,4242,4082,0521,9731,7471,686 bytes)Esto fue divertido, pero realmente tuve que pensar qué variables eran qué, porque son solo una letra.
Algunas capturas de pantalla:
Binario: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/v1.0.0.0
Repositorio de GitHub: https://github.com/wooden-utensil/snakeCodeGolf
Registro de cambios: https://github.com/wooden-utensil/snakeCodeGolf/releases
fuente
Console.Write("Score:"+l);Console.WriteLine()
->Console.WriteLine("Score:"+l)
(int X,int Y)d; ...; d=(0,-1)
? Eso podría ahorrar bytes. Tampoco puedo ver por qué estás haciendo enVector2 d;Vector2 c;Vector2 a;
lugar deVector2 d,c,a
. Creo que también puede almacenar la función Console.SetCursorPosition como unaAction<...>
variable de una sola letra. Puede restar DateTime con el operador -. También puede declarar variables de bucle globalmente y simplemente ponerlas a cero cuando sea necesario, sin declararlas.1>0
o almacenartrue
en una variable en lugar de usar la palabra clave. Es posible que pueda utilizar el glorioso operador -> en los bucles. En laDateTime b = DateTime.Now
parte,b
puede servar
. Es posible que pueda o no guardar algunos bytes usandodynamic
(a menudo le permite combinar declaraciones de tipo diferente).m.write(String)
en su propia función de una sola letra probablemente ahorraría una toneladab.width
yb.height
muchos que probablemente podrían guardarse en otra var local con 1 letraPython 3 - 644
No deja de fumar limpiamente. La pieza podría desaparecer si se genera encima de la serpiente.
fuente
Bash (demasiados caracteres: ca. 1522)
fuente