Simon Cloneを作成します![閉まっている]


18

シナリオ:プログラミング中に、80年代と安っぽいゲームに対する突然のノスタルジックな衝動があります。

要件:ゲームのSimonのGUIプログラムを作成します(テキストはおそらく機能しません)。入力は、クリックするか、キーを押すことです。画面を黄色、青、赤、緑の4つの領域に分割する必要があります。ゲームが開始されると、ランダムな色が点灯し、アクティブにします。次に、2つのライトが順番に点灯し、順番にアクティブにする必要があります。間違った色を押すと、ゲームは終了します。

ボーナス:

サウンドを含む場合は-100(各リージョンを押したときとゲームで色が表示されたときに異なる音が再生されます)

スコアカウンターを含める場合は-25。


13
通常、GUIとcode-golfは一緒に機能しません。
user80551 14年

3
これはMinecraftで実行できるはずです。誰かがすでに持っていても私を驚かさないでしょう。...けれども、ここでそれを提出one'd方法がわからない
Kninnug

@Kninnugブロックの量*ブロックごとのバイト;)
リアムマッキンロイ14年

@Liam McInroy AFAIKブロックは、ブロックIDが2バイトで、世界での位置を格納するために4バイトです。
パベル

回答:


12

バッシュ318 297 281 273 268 244 240から125 115 =

これは主に「テキストはおそらく機能しない」に対する応答です。次のテキストベースのbashスクリプトは、私のUbuntu 14.04マシンKonsolegnome-terminalなどで正常に実行されます。色の領域を作成するために、テキストの背景色を設定します。実際、テキストを追加すると、色盲のプレイヤーがゲームにアクセスしやすくなります。ゲームをさらにアクセスしやすくするために、プレーヤーが押す必要のあるキャラクターを読み取ります(espeakインストールされていると想定しています)。また、専用のファイル整合があることを前提とし/d*/ur*/ています/dev/urandom。色の領域を自明でないサイズにするために、おそらくテキストサイズを非常に大きく設定したいでしょう。また、色の領域を象限にする場合は、2文字幅の端末で実行する必要があります。

再生するには、必要に応じてy、r、g、または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

このソリューションには、印刷できないESC文字が2つ含まれています。これらのESC文字はプレビューに表示されますが、送信後に削除されるように見えるため、上記のコードはgolfedを生成して実行するラッパーですsimon_golf.sh

また、オリジナルのバージョン化されていないバージョン、およびわずかに再生可能な256バイトバージョンも参照してください。

以下のスクリーンショットは、黄色のライトが点灯し、プレーヤーのスコアが7の場合です。右側のスクリーンショットは、色覚異常をシミュレートするために彩度を下げています。

スクリーンショット黒と白


コードゴルフには大きすぎるの道...
ジョン・ドヴォルザーク

3
本当です。「コードゴルフ」よりも「プログラミングパズル」の方が好きです。
gmatht

今、少しゴルフをしました。
gmatht

24

スクラッチ、1604 – 125 = 1479

私はゴルフではなく、楽しみのためにここにいます。

編集:コミュニティの合意に基づいてスコアリング方法を更新しました。

メインプログラム:

メイン

個々のスプライト:

スプライト

これはnumberのスプライト0です。他のスプライトには、番号を除いて同じスクリプトがあります。

オンラインでプレイしてください。

バイトカウントに使用されるコード:(スニペットを使用してコードを非表示にします)

注:scratchblocksジェネレーターを使用して自動的に生成されたコードは、ジェネレーターが10進数を正しく処理しないように変更されています(0.3を0として扱います)。

スクリーンショット:

スクリーンショット

注:0.3秒以内に2つのボタンを押さないでください。


ハ、それはクールです。ただし、正解後の一時停止は良いことでしょう。私の最後の動きはパターンの一部のようです。また、リズムとトーンのマッチングは人々(少なくとも、私自身)の演奏方法なので、入力キャップよりもゆっくりと音を演奏します。+1
krs013 14年

1
スクラッチ?Srs?また、バイト数imoはSB2の合計サイズである必要があります。
cjfaure 14年

1
@Trimstyすると、126833バイト(wavサウンドファイルなどを含む)になるため、「ゴルフではなく、楽しみのためにここにいる」と言いました。
user12205 14年

ここで提案したスコアリングによると、スコアは60(27ブロック、定数で20文字/桁、8演算子、5変数使用)です。ボーナスを使用すると、-65が得られます。
ウゴレン14年

@ugorenこれは実際には部分的な答えにすぎません。4つのスプライトがあり、1つのスクリプトだけが表示されます。これは、他のスプライトには番号を除いてほとんど同じスクリプトがあるためです。得点に基づいて回答を更新します。ありがとう。
user12205 14年

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

ここに画像の説明を入力してください


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}

横スクロールを避けるためにここに改行を追加しましたが、1行として機能するため、文字カウントには改行がありません。

スクリーンショット: ゲームプレイのスクリーンショット

プレイするには:

  • PowerShell ISE(v3)を開き、スクリプトをテキストエディターに貼り付け、F5を押して実行します。
  • ゲームは色を点灯し、サウンドを再生し、入力を待ちます
  • 数字(0 =赤、1 =黄、2 =青、3 =緑)を押してからEnterを押します。
  • 間違っている場合、スコアを出力して終了します。(注:コンソールを終了する場合があります)。
  • あなたが正しい場合、それは2つのノートに行きます。
  • シーケンスを再生するときは、各ノートの間にEnterキーを押す必要があります。

コメント:

  • 「画面を4つのリージョンに分割する」-クォーターである必要があるとは言わなかったので、そうではありません。
  • 青色の背景に青色の光が見えにくいのですが、見えます。
  • PowerShell ISEで実行してください-通常のプロンプトで「DarkYellow」は白で表示されます。
  • おそらく、タイミングの一部を削除し(ゲームをプレイ可能にする)、ルール「サウンド(押すとゲームが色を表示するときに再生されるノート)」を解釈して、すべて同じ音である-デフォルトエラーDING "ですが、それはその精神に反していると思います。

0

ZXBasic:422-100-25 = 297

これは間違いなく80年代のノスタルジックな衝動としてカウントされます...

ZXBasicは、FreeBASICタイプのコマンドとZX Spectrum BASICの組み合わせを使用してループと繰り返しを許可し、TZX形式に変換してSpectrumエミュレーターにロードします。

このバージョンでは、境界線が変更されます(ただし、画面上の凡例には、押すべきキーが示されています)。元のサイモンゲーム(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

最高のスコア 劇中


0

HTML5およびJavascript、1118-100-25 = 993バイト

ここに画像の説明を入力してください

あまりにも肥大化したHTML + Jsバージョン。

Web Audio APIを介してサウンドを再生します

音符の周波数は、元のサイモンのもの、色、色の配置でもあります。

オンラインデモはここにあります:http://www.dantonag.it/miniSimon.html。Web Audioに準拠したブラウザで動作します(少なくともChromeとFirefox、IEはサポートしていません、私の知る限り)。

<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>

私の記録は15です(このゲームはかなり下手です)。君は?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.