Utwórz Simona Clone! [Zamknięte]

18

Scenariusz: podczas programowania odczuwasz nagłą nostalgię za latami 80. i tandetnymi grami.

Wymagania: Stwórz program GUI (tekst prawdopodobnie nie będzie działał) dla Simona, gry. Dane wejściowe można klikać lub naciskać klawisz. Powinieneś podzielić ekran na 4 regiony: żółty, niebieski, czerwony, zielony. Kiedy gra się rozpoczyna, losowy kolor zapala się i aktywujesz go. Następnie zapalają się dwie lampki, jedna po drugiej, i musisz je aktywować w kolejności itp. Gra kończy się, gdy naciśniesz niewłaściwy kolor.

Bonusy:

-100, jeśli dołączasz dźwięk (inna nuta grana po naciśnięciu każdego regionu i gdy gra pokazuje kolory)

-25, jeśli uwzględnisz licznik punktów.

qwr
źródło
13
GUI i code-golf zazwyczaj nie działają razem.
user80551
3
Powinno to być wykonalne w Minecraft. Nie zaskoczyłby mnie, gdyby ktoś już to zrobił. Nie wiem jednak, jak to tutaj zgłosić ...
Kninnug
@Kninnug ilość bloków * bajtów na blok;)
Liam McInroy
@Liam McInroy AFAIK blok ma 2 bajty na identyfikator bloku i 4 bajty do przechowywania swojej pozycji na świecie.
Pavel

Odpowiedzi:

12

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

Jest to przede wszystkim odpowiedź na „Tekst prawdopodobnie nie zadziała”; następujący tekst oparte skrypt bash działa dobrze w Konsole, gnome-terminalitp na moim Ubuntu 14.04 maszynie. Aby utworzyć regiony koloru, ustawia kolor tła tekstu. W rzeczywistości dodanie tekstu sprawia, że ​​gra jest bardziej dostępna dla niedowidzących kolorów. Aby gra była jeszcze bardziej dostępna, odczytuje postacie, które gracz musi nacisnąć (zakłada, że espeakjest zainstalowany). Zakłada również, że jedynym dopasowaniem pliku /d*/ur*/jest /dev/urandom. Aby regiony koloru miały nietrywialny rozmiar, prawdopodobnie chcesz ustawić rozmiar tekstu na dość duży. Również jeśli chcesz, aby regiony koloru były ćwiartkami, musisz uruchomić go w terminalu o szerokości dwóch znaków.

Aby odtworzyć, naciśnij odpowiednio y, r, g lub b.

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

To rozwiązanie zawiera dwa niedrukowalne znaki ESC. Chociaż te znaki ESC pojawiają się w podglądzie, wydają się być usuwane po przesłaniu, więc powyższy kod jest opakowaniem, które generuje i uruchamia grę w golfa simon_golf.sh.

Zobacz także oryginalną wersję bez golfa i nieco bardziej grywalną wersję 256-bajtową .

Poniższe zrzuty ekranu przedstawiają, kiedy świeci się żółte światło, a wynik gracza wynosi 7. Zrzut ekranu po prawej stronie został nasycony, aby symulować ślepotę kolorów.

zrzut ekranuCzarny i biały

gmatht
źródło
Za duży na golfa kodowego ...
John Dvorak
3
Prawdziwe. Jestem tu bardziej dla „Programming Puzzle” niż dla „Code Golf”.
gmatht
Teraz trochę to grałem.
gmatht
24

Scratch, 1604 - 125 = 1479

Jestem tu dla zabawy, nie dla golfa.

Edycja: zaktualizowana metoda punktacji oparta na konsensusie społeczności .

Główny program:

Główny

Pojedyncze duszki:

krasnoludek

To jest duszek z liczbą 0. Pozostałe duszki mają ten sam skrypt, z wyjątkiem numeru.

Graj z nim online .

Kod używany do zliczania bajtów: (Użycie fragmentu kodu do ukrycia kodu)

Uwaga: Kod generowany automatycznie przy użyciu generatora scratchblocks , zmodyfikowany, ponieważ generator nie obsługuje poprawnie liczb dziesiętnych (traktując 0,3 jako 0).

Zrzut ekranu:

zrzut ekranu

Uwaga: Proszę nie naciskać dwóch przycisków w ciągu 0,3 sekundy.

użytkownik12205
źródło
Ha, to spoko. Dobra byłaby przerwa po poprawnej odpowiedzi lub gratulacyjny dźwięk. Wygląda na to, że mój ostatni ruch jest częścią wzoru. Ponadto grałbym dźwięki wolniej niż korek wejściowy, ponieważ dopasowanie rytmu i tonu to sposób, w jaki grają ludzie (przynajmniej ja) ... nadal mi się podoba. +1
krs013,
1
Zadraśnięcie? Pani? Ponadto imo liczby bajtów powinno być całkowitym rozmiarem SB2.
cjfaure
1
@Trimsty Będzie to 126833 bajtów (w tym pliki dźwiękowe wav itp.), Dlatego powiedziałem: „Jestem tu dla zabawy, nie dla golfa”.
user12205
Według punktacji Zasugerowałem tutaj , wynik wynosi 60 (27 bloków, 20 znaków / cyfr w stałych, 8 operatorów, 5 wykorzystuje zmienne). Z bonusami dostajesz -65.
ugoren
@ugoren To właściwie tylko częściowa odpowiedź. Istnieją 4 duszki i pokazany jest tylko skrypt dla jednego duszka, ponieważ inne duszki mają prawie identyczne skrypty oprócz liczby. Zaktualizuję odpowiedź na podstawie twojego wyniku. Dzięki.
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

wprowadź opis zdjęcia tutaj

śmigać
źródło
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}

Dodałem tutaj nowe wiersze, aby uniknąć przewijania w bok, ale działa to jako jedna linia, więc liczba znaków nie zawiera nowych linii.

Zrzut ekranu: Zrzut ekranu z gry

Grać:

  • Otwórz PowerShell ISE (v3), wklej skrypt do edytora tekstu, naciśnij F5, aby uruchomić.
  • Gra podświetli kolor, odtworzy dźwięk, a następnie zaczeka na dane wejściowe
  • Naciśnij cyfrę (0 = czerwony, 1 = żółty, 2 = niebieski, 3 = zielony), a następnie Enter.
  • Jeśli się mylisz, drukuje wynik i kończy pracę. (Uwaga. Może wyjść z konsoli).
  • Jeśli masz rację, chodzi o dwie notatki.
  • Podczas odtwarzania sekwencji należy nacisnąć klawisz Enter między każdą nutą.

Komentarze:

  • „podziel ekran na 4 regiony” - nie mówiłeś, że muszą to być ćwiartki, więc nie są.
  • Ciężko jest zobaczyć niebieskie światło na niebieskim tle, ale tak jest.
  • Uruchom w PowerShell ISE - w normalnym monicie „DarkYellow” pokazuje się jako biały.
  • Możesz prawdopodobnie zagrać w golfa o kolejne 28 znaków, usuwając część timingu (nadal czyniąc grę możliwą do gry) i interpretując zasadę „dźwięk (nuta grana po naciśnięciu i kiedy gra pokazuje kolory)”, co oznacza, że ​​„mogą” wszystko to ten sam dźwięk - domyślny błąd DING ”, ale myślę, że to zbyt daleko wbrew jego duchowi.
TessellatingHeckler
źródło
0

ZXBasic: 422 - 100 - 25 = 297

To zdecydowanie liczy się jako nostalgiczna potrzeba lat 80. ...

ZXBasic używa kombinacji poleceń typu FreeBASIC i ZX Spectrum BASIC, aby umożliwić pętle i powtórzenia, które następnie zamieniają się w format TZX w celu załadowania do emulatora Spectrum.

Ta wersja zmienia ramkę (chociaż legenda na ekranie mówi, który klawisz nacisnąć). Odgrywa te same nuty, co oryginalna gra 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

Najlepszy wynik W grze

Brian
źródło
0

HTML5 i JavaScript, 1118-100-25 = 993 bajtów

wprowadź opis zdjęcia tutaj

Zbyt rozdęta wersja HTML + Js.

Odtwarza dźwięki przez interfejsu API Web Audio .

Częstotliwości notatek powinny być również oryginalnymi, kolorami i rozmieszczeniem kolorów Simona.

Tutaj jest demo online: http://www.dantonag.it/miniSimon.html . Działa w przeglądarkach zgodnych z Web Audio (przynajmniej Chrome i Firefox, IE go nie obsługuje, 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>

Mój rekord to 15 (jestem dość zły w tej grze). Co twoje?

Gabriele D'Antona
źródło