Créez un clone Simon! [fermé]


18

Scénario: lors de la programmation, vous avez une soudaine envie nostalgique des jeux des années 80 et du fromage.

Exigences: Créez un programme GUI (le texte ne fonctionnera probablement pas) pour Simon, le jeu. L'entrée peut être en cliquant ou en appuyant sur une touche. Vous devez diviser l'écran en 4 régions: jaune, bleu, rouge, vert. Lorsque le jeu démarre, une couleur aléatoire s'allume et vous l'activez. Ensuite, deux lumières s'allument, l'une après l'autre, et vous devez les activer dans l'ordre, etc. Le jeu se termine lorsque vous appuyez sur la mauvaise couleur.

Bonus:

-100 si vous incluez le son (une note différente jouée lorsque vous appuyez sur chaque région et lorsque le jeu vous montre les couleurs)

-25 si vous incluez un compteur de score.


13
L'interface graphique et le code-golf ne fonctionnent généralement pas ensemble.
user80551

3
Cela devrait être faisable dans Minecraft. Ne me surprendrait pas si quelqu'un l'a déjà fait. Je ne sais pas comment on soumet ça ici ...
Kninnug

@Kninnug le nombre de blocs * octets par bloc;)
Liam McInroy

@Liam McInroy AFAIK un bloc est de 2 octets pour l'ID de bloc et 4 octets pour stocker sa position dans le monde.
Pavel

Réponses:


12

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

Il s'agit principalement d'une réponse à "Le texte ne fonctionnera probablement pas"; le script bash basé sur du texte suivant fonctionne correctement dans Konsole, gnome-terminaletc. sur ma machine Ubuntu 14.04. Pour créer les régions de couleur, il définit la couleur d'arrière-plan du texte. En fait, l'ajout de texte rend le jeu plus accessible aux joueurs daltoniens. Pour rendre le jeu encore plus accessible, il lit les caractères sur lesquels le joueur doit appuyer (il suppose qu'il espeakest installé). Il suppose également que la seule correspondance de fichier /d*/ur*/est /dev/urandom. Pour que les régions de couleur soient de taille non triviale, vous souhaiterez probablement définir une taille de texte assez grande. De plus, si vous souhaitez que les régions de couleur soient des quadrants, vous devez l'exécuter dans un terminal de deux caractères de large.

Pour jouer, appuyez sur y, r, g ou b selon le cas.

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

Cette solution contient deux caractères ESC non imprimables. Bien que ces caractères ESC apparaissent dans l'aperçu, ils semblent être supprimés après la soumission, donc le code ci-dessus est un wrapper qui génère et exécute le golfé simon_golf.sh.

Voir aussi la version originale non golfée et la version 256 octets légèrement plus jouable .

Les captures d'écran ci-dessous sont lorsque la lumière jaune est allumée et que le score du joueur est de 7. La capture d'écran à droite a été désaturée pour simuler le daltonisme.

capture d'écranNoir et blanc


Beaucoup trop gros pour un golf de code ...
John Dvorak

3
Vrai. Je suis ici plus pour les "Puzzles de programmation" que pour le "Code Golf".
gmatht

Je l'ai légèrement joué au golf maintenant.
gmatht

24

Scratch, 1604-125 = 1479

Je suis ici pour le plaisir, pas pour le golf.

Edit: mise à jour de la méthode de notation basée sur le consensus de la communauté .

Programme principal:

principale

Sprites individuels:

lutin

C'est le sprite avec le numéro 0. Les autres sprites ont le même script, sauf le nombre.

Jouez avec en ligne .

Code utilisé pour le comptage d'octets: (Utilisation d'extraits de code pour masquer le code)

Remarque: Code généré automatiquement à l'aide du générateur de blocs de travail , modifié car le générateur ne gère pas correctement les nombres décimaux (en traitant 0,3 comme 0).

Capture d'écran:

capture d'écran

Remarque: veuillez ne pas appuyer sur deux boutons dans les 0,3 secondes.


Ha, c'est cool. Une pause après une réponse correcte serait bien, cependant, ou un son de félicitations. Il semble que mon dernier mouvement fasse partie du schéma. De plus, je jouerais les sons plus lentement que le plafond d'entrée, car la correspondance de rythme et de tonalité est la façon dont les gens (moi-même, au moins) jouent ... tout de même, j'aime ça. +1
krs013

1
Rayure? Srs? En outre, le nombre d'octets imo doit être la taille totale du SB2.
cjfaure

1
@Trimsty Ensuite, ce serait 126833 octets (y compris les fichiers audio wav, etc.), c'est pourquoi j'ai dit "Je suis ici pour le plaisir, pas pour le golf".
user12205

Selon le score que j'ai suggéré ici , le score est de 60 (27 blocs, 20 caractères / chiffres en constantes, 8 opérateurs, 5 utilisations variables). Avec les bonus, vous obtenez -65.
ugoren

@ugoren Ce n'est en fait qu'une réponse partielle. Il y a 4 sprites, et seul le script pour l'un est affiché, car les autres sprites ont des scripts presque identiques à l'exception du nombre. Je mettrai à jour la réponse en fonction de votre score. Merci.
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

entrez la description de l'image ici


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}

J'ai ajouté des retours à la ligne ici pour éviter le défilement latéral, mais cela fonctionne comme une seule ligne, donc le nombre de caractères est sans retour à la ligne.

Capture d'écran: Capture d'écran du jeu

Jouer:

  • Ouvrez PowerShell ISE (v3), collez le script dans l'éditeur de texte, appuyez sur F5 pour exécuter.
  • Le jeu allume une couleur, émet un son, puis attend l'entrée
  • Appuyez sur un chiffre (0 = rouge, 1 = jaune, 2 = bleu, 3 = vert) puis sur Entrée.
  • Si vous vous trompez, il imprime le score et quitte. (NB: cela pourrait quitter votre console).
  • Si vous avez raison, cela vaut pour deux notes.
  • Vous devez appuyer sur Entrée entre chaque note lors de la lecture de la séquence.

Commentaires:

  • "divisez l'écran en 4 régions" - vous n'avez pas dit que ce devait être des quartiers, donc ils ne le sont pas.
  • Il est difficile de voir la lumière bleue s'allumer sur le fond bleu, mais c'est le cas.
  • Veuillez exécuter dans PowerShell ISE - dans l'invite normale "DarkYellow" s'affiche en blanc.
  • Vous pourriez sans doute jouer au golf avec 28 autres personnages en supprimant une partie du timing (rendant le jeu jouable) et en interprétant la règle "son (une note jouée en appuyant et lorsque le jeu vous montre les couleurs)" pour signifier "ils peuvent tout sera le même son - erreur par défaut DING ", mais je pense que c'est trop loin contre l'esprit de celui-ci.

0

ZXBasic: 422 - 100 - 25 = 297

Cela compte certainement comme une envie nostalgique des années 80 ...

ZXBasic utilise une combinaison de commandes de type FreeBASIC et ZX Spectrum BASIC pour permettre aux boucles et aux répétitions qui se transforment ensuite au format TZX de se charger dans un émulateur Spectrum.

Cette version change la bordure (bien qu'une légende à l'écran indique sur quelle touche appuyer). Il joue les mêmes notes que le jeu Simon original ( 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

Meilleur score En jeu


0

HTML5 et Javascript, 1118-100-25 = 993 octets

entrez la description de l'image ici

Version bien trop gonflée HTML + Js.

Lit les sons via l' API Web Audio .

Les fréquences des notes doivent également être celles de Simon, les couleurs et le placement des couleurs.

Il y a une démo en ligne ici: http://www.dantonag.it/miniSimon.html . Fonctionne dans les navigateurs compatibles Web Audio (au moins Chrome et Firefox, IE ne le prend pas en charge, 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>

Mon record est de 15 (je suis assez mauvais à ce match). Quel est ton?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.