¡Crea un Simon Clone! [cerrado]

18

Escenario: mientras programa tiene una repentina necesidad nostálgica de los juegos de los 80 y cursi.

Requisitos: crea un programa GUI (el texto probablemente no funcionará) para Simon, el juego. La entrada puede ser hacer clic o presionar una tecla. Debe dividir la pantalla en 4 regiones: amarillo, azul, rojo, verde. Cuando comienza el juego, se ilumina un color aleatorio y lo activas. Luego, se encienden dos luces, una tras otra, y debes activarlas en orden, etc. El juego termina cuando presionas el color incorrecto.

Bonificaciones:

-100 si incluye sonido (se toca una nota diferente al presionar cada región y cuando el juego le muestra los colores)

-25 si incluye un contador de puntuación.

qwr
fuente
13
GUI y code-golf generalmente no funcionan juntos.
user80551
3
Esto debería ser factible en Minecraft. No me sorprendería si alguien ya lo ha hecho. Sin embargo, no sé cómo enviar eso aquí ...
Kninnug
@Kninnug la cantidad de bloques * bytes por bloque;)
Liam McInroy
@Liam McInroy AFAIK un bloque es de 2 bytes para la ID del bloque y 4 bytes para almacenar su posición en el mundo.
Pavel

Respuestas:

12

Bash 318 297 281 273 268 244 240-125 = 115

Esto es principalmente una respuesta a "El texto probablemente no funcionará"; El siguiente script bash basado en texto funciona bien Konsole, gnome-terminaletc. en mi máquina Ubuntu 14.04. Para crear las regiones de color, establece el color de fondo del texto. De hecho, agregar texto hace que el juego sea más accesible para los jugadores daltónicos. Para que el juego sea aún más accesible, lee los personajes que el jugador necesita presionar (se supone que espeakestá instalado). También supone que la única coincidencia de archivos /d*/ur*/es /dev/urandom. Para que las regiones de color tengan un tamaño no trivial, probablemente desee establecer que el tamaño del texto sea bastante grande. Además, si desea que las regiones de color sean cuadrantes, debe ejecutarlo en un terminal que tenga dos caracteres de ancho.

Para jugar presione y, r, g o b según corresponda.

cat <<"EOF"|sed s/E/`echo -e '\E'`/>simon_golf.sh;bash simon_golf.sh;wc simon_golf.sh
d(){ echo Ecx1r09mRx2g10mGx3y11mYx4b14mBx0m$s|sed s/.$1"//
s/[rgyb]..//g
s/x/E[48;5;/g";};x(){ d $c;espeak $c;d j;};l(){
for c in $o;{ eval $1;x;};};f(){ o=$o\ `tr -dc yrgb</d*/ur*|head -c1`
l;l 'read -n1 i;[ $c = $i ]||exit;let s++';f;};f
EOF

Esta solución contiene dos caracteres ESC no imprimibles. Aunque estos caracteres ESC aparecen en la vista previa, parecen eliminarse después del envío, por lo que el código anterior es un contenedor que genera y ejecuta el campo de golf simon_golf.sh.

Vea también la versión original sin golf y la versión un poco más jugable de 256 bytes .

Las capturas de pantalla a continuación son cuando la luz amarilla está encendida y la puntuación del jugador es 7. La captura de pantalla a la derecha se ha desaturado para simular el daltonismo.

captura de pantallaBlanco y negro

gmatht
fuente
Demasiado grande para un código de golf ...
John Dvorak
3
Cierto. Estoy más aquí por los "Puzzles de programación" que por el "Código de golf".
gmatht
Lo he jugado un poco ahora.
Gmatht
24

Rasguño, 1604-125 = 1479

Estoy aquí por diversión, no por el golf.

Editar: método de puntuación actualizado basado en el consenso de la comunidad .

Programa principal:

principal

Sprites individuales:

duende

Este es el sprite con número 0. Los otros sprites tienen el mismo script, excepto el número.

Juega con él en línea .

Código utilizado para el recuento de bytes: (Uso del fragmento para ocultar el código)

Nota: El código generado automáticamente usando el generador de bloques de rasguño , modificado de alguna manera, el generador no maneja correctamente los números decimales (tratando 0.3 como 0).

Captura de pantalla:

captura de pantalla

Nota: No presione dos botones en 0.3 segundos.

usuario12205
fuente
Ja, eso es genial. Sin embargo, una pausa después de una respuesta correcta sería buena, o algún sonido de felicitación. Parece que mi último movimiento es parte del patrón. Además, reproduciría los sonidos más lentamente que el límite de entrada, ya que la combinación de ritmo y tono es la forma en que las personas (yo, al menos) tocan ... aún así, me gusta. +1
krs013
1
¿Rasguño? Srs? Además, el recuento de bytes imo debe ser el tamaño total de SB2.
cjfaure
1
@Trimsty Entonces serían 126833 bytes (incluidos los archivos de sonido wav, etc.), por eso dije "Estoy aquí por diversión, no por el golf".
usuario12205
De acuerdo con la puntuación que sugerí aquí , la puntuación es 60 (27 bloques, 20 caracteres / dígitos en constantes, 8 operadores, 5 usos variables). Con bonos, obtienes -65.
Ugoren
@ugoren Esto en realidad es solo una respuesta parcial. Hay 4 sprites, y solo se muestra el script para uno, ya que los otros sprites tienen scripts casi idénticos, excepto el número. Actualizaré la respuesta en función de su puntuación. Gracias.
user12205
3

Mathematica, 409-125 = 284

k = 2;
p = Tuples[{0, 1}, 2];
f[c_, p_] := 
 EventHandler[{c, Rectangle[p]}, 
  "MouseClicked" :> (AppendTo[x, p]; Beep[]; g)]
h[R_] := (i = 1; 
  RunScheduledTask[
   H = If[OddQ@i, 
     Beep[]; {EdgeForm[{Thickness[0.02], Black}], FaceForm[], 
      Rectangle@R[[Ceiling[i/2]]]}, {}]; i++, {.3, 2 Length@R}])
s := (m = 0; x = {}; h[R = RandomChoice[p, k]];)
g := (m++; If[Take[R, m] != x, k = 2; s, If[m == k, k++; s]])
Dynamic@Graphics[{MapThread[f, {{Yellow, Red, Blue, Green}, p}], H}, 
  PlotLabel -> k]
s

ingrese la descripción de la imagen aquí

silbido
fuente
2

Windows PowerShell (CLI), 272-100-25 = 147

$d={param($c)cls;sleep -m 99;'R','Y','Blu','Gre'|
%{Write-Host '#' -N -F "$(if($i%4-ne $c){'Dark'})$_";
$i++}};$b={param($c)&$d $c;[console]::Beep(($c+1)*99,700);&$d};
$m=@();$s=0;for(){$m+=0..3|Get-Random;$m|%{&$b $_};$m|%{
if((read-host)-ne $_){$s;exit}&$b $_};$s++;sleep 1}

He agregado líneas nuevas aquí para evitar el desplazamiento lateral, pero funciona como una línea, por lo que el recuento de caracteres no tiene líneas nuevas.

Captura de pantalla: Captura de pantalla del juego

Para jugar:

  • Abra PowerShell ISE (v3), pegue el script en el editor de texto, presione F5 para ejecutar.
  • El juego iluminará un color, reproducirá un sonido y luego esperará la entrada
  • Presione un número (0 = rojo, 1 = amarillo, 2 = azul, 3 = verde) y luego Intro.
  • Si está equivocado, imprime el puntaje y se cierra. (Nota: puede salir de tu consola).
  • Si tiene razón, va por dos notas.
  • Debe presionar Enter entre cada nota cuando reproduzca la secuencia.

Comentarios:

  • "divide la pantalla en 4 regiones": no dijiste que tenían que ser cuartos, así que no lo son.
  • Es difícil ver la luz azul en el fondo azul, pero lo hace.
  • Ejecútelo en PowerShell ISE: en el mensaje normal "DarkYellow" se muestra en blanco.
  • Podría decirse que puede jugar a otros 28 personajes eliminando algunos de los tiempos (aún haciendo que el juego sea jugable) e interpretando la regla "sonido (una nota que se toca al presionar y cuando el juego le muestra los colores)" significa "que pueden todos serán el mismo sonido: error predeterminado DING ", pero creo que eso está muy lejos del espíritu.
TessellatingHeckler
fuente
0

ZXBasic: 422-100-25 = 297

Esto definitivamente cuenta como un impulso nostálgico para los años 80 ...

ZXBasic utiliza una combinación de comandos de tipo FreeBASIC y ZX Spectrum BASIC para permitir bucles y repeticiones que luego se convierten en formato TZX para cargar en un emulador Spectrum.

Esta versión cambia el borde (aunque una leyenda en la pantalla dice qué tecla presionar). Juega las mismas notas que el juego original de Simon ( http://en.wikipedia.org/wiki/Simon_%28game%29 ).

d=0.5:s=0:l=1:t=1:n$="4261":dim m(4)=>{-8,9,1,4}
border 7
while l>0
 cls:a$="":print at 1,1;"Level: ";t;at 2,1;"Score:";s::for i=1 to 4:print at 0,i;paper val(n$(i));ink 0;i:next
 for i=1 to t
  c=1+int(rnd*4)
  border val(n$(c)):beep d,m(c):border 7
  a$=a$+str(c)
 next
 print at 10,1;"your turn"
 p$="":i=1
 do
  pause 100:k$=inkey:print at 6,i;k$
  if k$=a$(i) then s=s+1:print at 2,7;s:beep d,m(val(k$)):i=i+1
  else l=l-1:i=t+1:print "bad luck!"
  end if
 loop until i>t 
 t=t+1:pause 25
end while

Mejor puntuación En juego

Brian
fuente
0

HTML5 y Javascript, 1118-100-25 = 993 bytes

ingrese la descripción de la imagen aquí

Versión HTML + Js demasiado hinchada.

Reproduce sonidos a través de la API de audio web .

Las frecuencias de las notas deben ser las originales de Simon, los colores y la ubicación del color también.

Hay una demostración en línea aquí: http://www.dantonag.it/miniSimon.html . Funciona en navegadores compatibles con Web Audio (al menos Chrome y Firefox, IE no lo admite, AFAIK).

<html><script>
var hc=["#0f0","red","#ff3","blue"],lc=["#090","#930","#cc0","#33c"],nt=[391,329,261,195],ln=[],qpos=0,pm=0,x,ct=new AudioContext;function ps(a,d){var b=ct.createOscillator();b.frequency.value=d;b.connect(ct.destination);var c=ct.createGain();b.connect(c);c.connect(ct.destination);c.gain.value=-.5;x[a].style.backgroundColor=hc[a];b.start(0);setTimeout(function(a,b){a.stop(0);x[b].style.backgroundColor=lc[b]},500,b,a)}
function w(a){2==pm&&(a!=ln[qpos]?(pm=3,document.getElementsByTagName("span")[0].innerHTML="game over!",ps(a,156)):(qpos++,ps(a,nt[a]),qpos>=ln.length&&(pm=qpos=0)))}function ml(){if(0==pm)document.getElementsByTagName("div")[0].innerHTML=ln.length,ln.push(Math.floor(4*Math.random())),pm=1;else if(1==pm){var a=ln[qpos];qpos<ln.length?(ps(a,nt[a]),qpos++):(qpos=0,pm=2)}setTimeout(ml,500)}window.onload=function(){setTimeout(ml,1);x=document.getElementsByTagName("td")};</script><div>0</div><table cellpadding=40><tr><td bgcolor=#090 onmousedown=w(0)><td bgcolor=#930 onmousedown=w(1)><tr><td bgcolor=#cc0 onmousedown=w(2)><td bgcolor=#33c onmousedown=w(3)></table><span></span>

Mi récord es 15 (soy bastante malo en este juego). ¿Lo que es tuyo?

Gabriele D'Antona
fuente