사이먼 클론을 만드십시오! [닫은]


18

시나리오 : 프로그래밍하는 동안 80 년대와 치즈 게임에 대한 갑작스러운 향수가 있습니다.

요구 사항 : 게임 Simon에게 GUI 프로그램 (텍스트가 작동하지 않을 수 있음)을 만드십시오. 클릭하거나 키를 눌러 입력 할 수 있습니다. 화면을 노랑, 파랑, 빨강, 녹색의 4 개 영역으로 나누어야합니다. 게임이 시작되면 임의의 색상이 켜지고 활성화됩니다. 그런 다음 차례로 두 개의 표시등이 켜지고 순서대로 활성화해야합니다. 잘못된 색상을 누르면 게임이 종료됩니다.

보너스 :

소리를 포함하면 -100 (각 지역을 누를 때와 게임에 색상이 표시 될 때 다른 음표가 연주 됨)

점수 카운터를 포함하면 -25입니다.


13
GUI와 코드 골프는 일반적으로 함께 작동하지 않습니다.
user80551

3
이것은 Minecraft에서 할 수 있어야합니다. 누군가 이미 가지고 있다면 놀라지 않을 것입니다. 여기에 어떻게 제출했는지 모릅니다 ...
Kninnug

@Kninnug 블록의 양 * 블록 당 바이트;)
Liam McInroy

@Liam McInroy AFAIK 블록 ID는 2 바이트이며, 세계에서 위치를 저장하기 위해 4 바이트입니다.
Pavel

답변:


12

배시 318 297 268 273 268 244 240-125 = 115

이것은 주로 "텍스트가 작동하지 않습니다"에 대한 응답입니다. 다음 텍스트 기반 bash 스크립트는 Ubuntu 14.04 시스템 Konsole에서 gnome-terminal등에서 잘 실행됩니다 . 색상 영역을 만들려면 텍스트 배경색을 설정합니다. 실제로 텍스트를 추가하면 색맹 인 플레이어가 게임을보다 쉽게 ​​이용할 수 있습니다. 게임의 접근성을 높이기 위해 플레이어가 눌러야하는 문자를 읽습니다 ( espeak설치된 것으로 가정 ). 또한 유일한 파일 일치 /d*/ur*/는 이라고 가정합니다 /dev/urandom. 색상 영역이 사소한 크기가되도록하려면 텍스트 크기를 상당히 크게 설정하려고합니다. 또한 색상 영역을 사분면으로하려면 두 문자 너비의 터미널에서 색상 영역을 실행해야합니다.

재생하려면 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 문자가 포함되어 있습니다. 이러한 ESC 문자는 미리보기에 표시되지만 제출 후 삭제 된 것처럼 보이므로 위 코드는 golfed를 생성하고 실행하는 래퍼입니다 simon_golf.sh.

원래 ungolfed 버전 과 약간 더 재생 가능한 256 바이트 버전 도 참조하십시오 .

아래 스크린 샷은 노란색 표시등이 켜져 있고 플레이어의 점수가 7 일 때입니다. 오른쪽의 스크린 샷은 채도를 시뮬레이션하기 위해 채도를 떨어 뜨 렸습니다.

스크린 샷검정색과 흰색


코드 골프를하기에는 너무 큰 길 ...
John Dvorak

3
진실. 나는 "코드 골프"보다 "프로그래밍 퍼즐"에 더 많이 있습니다.
gmatht

나는 지금 약간 골프를 쳤다.
gmatht

24

스크래치, 1604 – 125 = 1479

나는 골프가 아닌 재미를 위해 여기 있습니다.

편집 : 커뮤니티 합의에 따라 업데이트 된 점수 방식 .

메인 프로그램 :

본관

개별 스프라이트 :

스프라이트

이것은 숫자를 가진 스프라이트입니다 0. 다른 스프라이트는 숫자를 제외하고 동일한 스크립트를 갖습니다.

그와 함께 플레이 온라인 .

바이트 계산에 사용되는 코드 : (스 니펫을 사용하여 코드 숨기기)

참고 : scratchblocks generator를 사용하여 자동으로 생성 된 코드. 어떻게 생성기가 십진수를 올바르게 처리하지 못하도록 수정되었습니다 (0.3을 0으로 처리).

스크린 샷 :

스크린 샷

참고 : 0.3 초 ​​이내에 두 개의 버튼을 누르지 마십시오.


하, 멋지다. 그래도 정답 후에 잠시 멈추는 것이 좋거나 축하의 소리 일 것입니다. 마지막 움직임이 패턴의 일부인 것 같습니다. 또한, 리듬과 톤 매칭은 사람들 (적어도 나 자신)이 연주하는 방식이기 때문에 입력 캡보다 더 느리게 사운드를 재생할 것입니다. +1
krs013

1
할퀴다? Srs? 또한 바이트 수 imo는 SB2의 전체 크기 여야합니다.
cjfaure

1
@Trimsty 그런 다음 126833 바이트 (wav 사운드 파일 등 포함)가 되었기 때문에 "골프가 아닌 재미를 위해 여기에 있습니다."라고 말했습니다.
user12205

내가 여기 에 제안한 점수에 따르면 점수는 60 (27 블록, 상수 20 문자 / 숫자, 8 연산자, 5 변수 사용)입니다. 보너스로 -65를 얻습니다.
ugoren

@ugoren 이것은 실제로 부분적인 답변 일뿐입니다. 4 개의 스프라이트가 있으며 다른 스프라이트는 숫자를 제외하고 거의 동일한 스크립트를 가지기 때문에 하나의 스크립트 만 표시됩니다. 점수에 따라 답변을 업데이트하겠습니다. 감사.
user12205

3

수학, 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}

사이드 스크롤을 피하기 위해 여기에 줄 바꿈을 추가했지만 한 줄로 작동하므로 문자 수에 줄 바꿈이 없습니다.

스크린 샷 : 게임 플레이 스크린 샷

플레이하려면 :

  • PowerShell ISE (v3)를 열고 스크립트를 텍스트 편집기에 붙여 넣은 다음 F5를 눌러 실행합니다.
  • 게임이 색상을 밝히고 소리를 낸 다음 입력을 기다립니다.
  • 숫자 (0 = 빨간색, 1 = 노란색, 2 = 파란색, 3 = 녹색)를 누른 다음 Enter를 누르십시오.
  • 당신이 틀리면 점수를 인쇄하고 종료합니다. (NB. 콘솔을 종료 할 수 있습니다).
  • 당신이 옳다면 그것은 두 개의 노트를 간다.
  • 시퀀스를 재생할 때 각 음 사이에서 Enter를 눌러야합니다.

코멘트:

  • "화면을 4 개의 영역으로 나누십시오"– 당신은 그들이 4 분의 1이되어야한다고 말하지 않았으므로 그렇지 않습니다.
  • 파란색 배경에 파란색 불이 켜지 기는 어렵지만 실제로는 그렇지 않습니다.
  • PowerShell ISE에서 실행하십시오. 일반 프롬프트에서 "DarkYellow"가 흰색으로 표시됩니다.
  • 타이밍 (일부 게임을 재생 가능하게 함)을 제거하고 "사운드 (누를 때와 게임에 색상이 표시 될 때 재생되는 음표)"규칙을 해석하여 다른 28 자에게 골프를 칠 수 있습니다. 모두 같은 소리입니다-기본 오류 DING "라고 생각하지만, 그 정신과는 거리가 멀다고 생각합니다.

0

ZX 기본 : 422-100-25 = 297

이것은 확실히 80 년대에 대한 향수 충동으로 간주됩니다 ...

ZXBasic은 FreeBASIC 유형 명령과 ZX Spectrum BASIC의 조합을 사용하여 루프와 반복을 허용 한 다음 TZX 형식으로 전환하여 Spectrum 에뮬레이터에로드합니다.

이 버전은 테두리를 변경합니다 (화면의 범례에 어떤 키를 눌러야하는지 알려짐). 오리지널 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

최고 점수 플레이 중


0

HTML5 및 자바 스크립트, 1118-100-25 = 993 바이트

여기에 이미지 설명을 입력하십시오

너무 부풀어 오른 HTML + JS 버전.

Web Audio API를 통해 사운드를 재생합니다 .

음표의 주파수는 원래 Simon의 색, 색 및 색 배치 여야합니다.

온라인 데모는 여기에 있습니다 : http://www.dantonag.it/miniSimon.html . Web Audio 호환 브라우저에서 작동합니다 (적어도 Chrome 및 Firefox, IE는 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>

나의 기록은 15 살이다 (나는이 게임에서 꽤 나쁘다). 무엇 당신이야?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.