Bir Simon Clone oluşturun! [kapalı]


18

Senaryo: Programlama sırasında 80'ler ve sevimsiz oyunlar için ani bir nostaljik dürtü var.

Gereksinimler: Simon, oyun için bir GUI programı (metin muhtemelen işe yaramaz) yapın. Giriş tıklanabilir veya bir tuşa basılabilir. Ekranı 4 bölgeye ayırmalısınız: sarı, mavi, kırmızı, yeşil. Oyun başladığında rastgele bir renk yanar ve siz onu etkinleştirirsiniz. Sonra, birbiri ardına iki ışık yanar ve bunları sırayla etkinleştirmeniz gerekir, vb. Oyun yanlış renge bastığınızda sona erer.

Bonuslar:

-100 ses eklerseniz (her bölgeye basıldığında ve oyun renkleri gösterdiğinde farklı bir nota çalınır)

Bir skor sayacı eklerseniz -25.


13
GUI ve kod golf genellikle birlikte çalışmaz.
user80551

3
Bu Minecraft'ta yapılabilir olmalıdır. Birisi zaten varsa beni şaşırtmaz. Bunu buraya nasıl göndereceğini bilmiyorum ...
Kninnug

@Kninnug blok başına * bayt miktarı;)
Liam McInroy

@Liam McInroy AFAIK bir blok, blok kimliği için 2 bayt ve dünyadaki konumunu saklamak için 4 bayttır.
Pavel

Yanıtlar:


12

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

Bu öncelikle "Metin muhtemelen çalışmaz" cevabıdır; Aşağıdaki metin tabanlı bash komut dosyası içinde cezası çalışır Konsole, gnome-terminalbenim Ubuntu 14.04 makinede vb. Renk bölgeleri oluşturmak için metin arka plan rengini ayarlar. Aslında, metin eklemek oyunu renk körü oyuncular için daha erişilebilir hale getirir. Oyunu daha erişilebilir hale getirmek için, oyuncunun basması gereken karakterleri okur ( espeakyüklü olduğunu varsayar ). Ayrıca, tek dosya eşleşmesinin /d*/ur*/olduğunu varsayar /dev/urandom. Renk bölgelerinin önemsiz boyutta olması için, muhtemelen metin boyutunu oldukça büyük olarak ayarlamak istersiniz. Ayrıca renk bölgelerinin çeyrek daire olmasını istiyorsanız, onu iki karakter genişliğinde bir terminalde çalıştırmanız gerekir.

Oynatmak için y, r, g veya b tuşuna basın.

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

Bu çözüm yazdırılamaz iki ESC karakteri içerir. Bu ESC karakteri önizlemede görünse de, gönderildikten sonra silinmiş gibi görünüyor, bu nedenle yukarıdaki kod, golf oynayansimon_golf.sh .

Ayrıca orijinal ungolfed versiyona ve biraz daha oynanabilir 256 bayt versiyona bakın .

Aşağıdaki ekran görüntüleri sarı ışığın yandığı ve oyuncunun puanı 7 olduğu zaman.

ekran görüntüsüSiyah ve beyaz


Bir kod golf için çok büyük ...
John Dvorak

3
Doğru. Burada "Programlama Bulmacaları" için daha fazla "Kod Golf" daha fazla.
Mart'ta gmatht

Şimdi biraz golf oynadım.
Mart'ta gmatht

24

Çizik, 1604-125 = 1479

Eğlenmek için buradayım, golf için değil.

Düzenleme: topluluk mutabakatına dayalı güncellenmiş puanlama yöntemi .

Ana program:

ana

Bireysel spritelar:

peri

Bu rakamlı hareketli grafik 0. Diğer spritelar sayı dışında aynı betiğe sahiptir.

Çevrimiçi oynayın .

Bayt sayımı için kullanılan kod: (Kodu gizlemek için snippet kullanma)

Not: Scratchblocks jeneratörü kullanılarak otomatik olarak oluşturulan kod , jeneratör bir şekilde ondalık sayıları doğru şekilde işlemez (0,3 0 olarak kabul edilir).

Ekran görüntüsü:

ekran görüntüsü

Not: Lütfen 0,3 saniye içinde iki düğmeye basmayın.


Ha, bu harika. Doğru bir cevaptan sonraki bir duraklama, iyi ya da bir tebrik sesi olabilir. Son hareketim desenin bir parçası gibi görünüyor. Ayrıca, sesleri giriş kapağından daha yavaş çalacaktım, çünkü ritim ve ton eşleşmesi insanların (en azından kendim) nasıl çaldığıdır ... yine de beğendim. +1
krs013

1
Kaşımak? Srs? Ayrıca, bayt sayısı imo değeri SB2'nin toplam boyutu olmalıdır.
cjfaure

1
@Trimsty O zaman 126833 bayt (wav ses dosyaları dahil olmak üzere) olurdu, bu yüzden "eğlence için buradayım, golf için değilim" dedim.
user12205

Burada önerdiğim puanlamaya göre puan 60'tır (27 blok, sabitlerde 20 karakter / rakam, 8 operatör, 5 değişken kullanım). Bonuslarla, -65 alırsınız.
ugoren

@ugoren Bu aslında sadece kısmi bir cevaptır. 4 sprite vardır ve diğer spritelar sayı dışında neredeyse aynı komut dosyalarına sahip olduğu için sadece biri için komut dosyası gösterilir. Cevabı puanınıza göre güncelleyeceğim. Teşekkürler.
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

resim açıklamasını buraya girin


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}

Yan kaydırmayı önlemek için buraya yeni satırlar ekledim, ancak bir satır olarak çalışıyor, bu nedenle karakter sayısı yeni satırlar olmadan.

Ekran görüntüsü: Oyun oynama ekran görüntüsü

Oynamak:

  • PowerShell ISE'yi (v3) açın, komut dosyasını metin düzenleyicisine yapıştırın, çalıştırmak için F5 tuşuna basın.
  • Oyun bir renk aydınlatacak, bir ses çalacak, sonra girişi bekleyecek
  • Bir sayıya basın (0 = kırmızı, 1 = sarı, 2 = mavi, 3 = yeşil) ve ardından Enter tuşuna basın.
  • Eğer yanılıyorsanız skoru yazdırır ve kapanır. (Not: konsolunuzdan çıkabilir).
  • Eğer haklıysan, iki not için gidiyor.
  • Sekansı oynatırken her nota arasında Enter tuşuna basmanız gerekir.

Yorumlar:

  • "ekranı 4 bölgeye ayırın" - çeyrek olmaları gerektiğini söylemediniz, öyle değiller.
  • Mavi arka plan üzerinde mavi ışığı görmek zor ama oluyor.
  • Lütfen PowerShell ISE'de çalıştırın - "DarkYellow" normal bilgi isteminde beyaz olarak gösterilir.
  • Zamanlamanın bir kısmını kaldırarak (yine de oyunu oynanabilir hale getirerek) ve "ses (basarken ve oyun renkleri gösterdiğinde çalınan bir not)" hepsi aynı ses olmalı - varsayılan hata DING ", ama bunun ruhuna karşı çok uzak olduğunu düşünüyorum.

0

ZXBasic: 422-100-25 = 297

Bu kesinlikle 80'ler için nostaljik bir dürtü olarak sayılıyor ...

ZXBasic, döngülerin ve tekrarların bir Spectrum öykünücüsüne yüklenmek üzere TZX biçimine dönüşmesine izin vermek için FreeBASIC tipi komutların ve ZX Spectrum BASIC'in bir kombinasyonunu kullanır.

Bu sürüm kenarlığı değiştirir (ekrandaki efsane hangi tuşa basılacağını söylese de). Orijinal Simon oyunu ile aynı notları çalar ( 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

En iyi puan Oyunda


0

HTML5 ve Javascript, 1118-100-25 = 993 bayt

resim açıklamasını buraya girin

Yol çok şişirilmiş HTML + Js sürümü.

Web Audio API'sı üzerinden ses çalar .

Notların frekansları da orijinal Simon'un renkleri, renkleri ve renk yerleşimi olmalıdır.

Burada çevrimiçi bir demo var: http://www.dantonag.it/miniSimon.html . Web Audio uyumlu tarayıcılarda çalışır (en azından Chrome ve Firefox, IE desteklemez, 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>

Benim kaydım 15 (bu oyunda oldukça kötüyüm). Seninki nedir?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.