สร้าง Simon Clone! [ปิด]


18

สถานการณ์สมมติ:ในขณะที่การเขียนโปรแกรมคุณมีความคิดถึงอย่างฉับพลันสำหรับเกม '80s และ cheesy

ข้อกำหนด:สร้างโปรแกรม GUI (ข้อความอาจไม่ทำงาน) สำหรับ Simon เกม อินพุตสามารถคลิกหรือกดปุ่ม คุณควรแบ่งหน้าจอออกเป็น 4 ภูมิภาค: สีเหลืองสีน้ำเงินสีแดงสีเขียว เมื่อเกมเริ่มขึ้นสีแบบสุ่มจะสว่างขึ้นและคุณเปิดใช้งาน จากนั้นไฟสองดวงจะสว่างขึ้นเรื่อย ๆ และคุณต้องเปิดใช้งานตามลำดับและอื่น ๆ เกมจะจบลงเมื่อคุณกดผิดสี

โบนัส:

-100 ถ้าคุณใส่เสียง (โน้ตตัวอื่นเล่นเมื่อกดแต่ละภูมิภาคและเมื่อเกมแสดงสีให้คุณ)

-25 ถ้าคุณใส่เคาน์เตอร์คะแนน


13
GUI และโค้ดกอล์ฟมักไม่ทำงานร่วมกัน
user80551

3
สิ่งนี้ควรทำได้ใน Minecraft จะไม่ทำให้ฉันประหลาดใจถ้ามีคนอยู่แล้ว ไม่ทราบว่าจะส่งเรื่องนี้ได้อย่างไรที่นี่ ...
Kninnug

@Kninnug ปริมาณของบล็อก * ไบต์ต่อบล็อก;)
เลียม McInroy

@Liam McInroy AFAIK บล็อกคือ 2 ไบต์สำหรับ ID บล็อกและ 4 ไบต์เพื่อจัดเก็บตำแหน่งในโลก
Pavel

คำตอบ:


12

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

นี่คือการตอบสนองหลัก "ข้อความอาจจะไม่ทำงาน"; สคริปต์ทุบตีแบบข้อความต่อไปนี้ทำงานได้ดีKonsoleและgnome-terminalอื่น ๆ บนเครื่อง Ubuntu 14.04 ของฉัน ในการสร้างพื้นที่สีให้ตั้งค่าสีพื้นหลังข้อความ ในความเป็นจริงการเพิ่มข้อความทำให้ผู้เล่นตาบอดสีสามารถเข้าถึงเกมได้ง่ายขึ้น ในการทำให้เกมเข้าถึงได้มากขึ้นจะอ่านตัวละครที่ผู้เล่นต้องการกด (ถือว่า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 simon_golf.shปรากฏในตัวอย่างให้พวกเขาดูเหมือนจะได้รับการลบหลังจากส่งดังนั้นโค้ดข้างต้นเป็นเสื้อคลุมที่สร้างและวิ่งแข็งแรงเล่นกอล์ฟที่

ดูเพิ่มเติมเดิมรุ่น ungolfedและเล็กน้อยเล่นมากขึ้นรุ่น 256 ไบต์

ภาพหน้าจอด้านล่างคือเมื่อแสงสีเหลืองเปิดและคะแนนของผู้เล่นคือ 7 ภาพหน้าจอทางด้านขวาได้รับการ desaturated เพื่อจำลองตาบอดสี

ภาพหน้าจอดำและขาว


ทางใหญ่เกินไปสำหรับกอล์ฟรหัส ...
จอห์น Dvorak

3
จริง ฉันมาที่นี่เพื่อ "ไขปริศนาการเขียนโปรแกรม" มากกว่า "รหัสกอล์ฟ"
gmatht

ตอนนี้ฉันเล่นกอล์ฟเล็กน้อยแล้ว
gmatht

24

รอยขีดข่วน 1604 - 125 = 1479

ฉันมาที่นี่เพื่อความสนุกไม่ใช่เล่นกอล์ฟ

แก้ไข:การปรับปรุงวิธีการให้คะแนนขึ้นอยู่กับฉันทามติของชุมชน

โปรแกรมหลัก:

หลัก

สไปรต์ส่วนบุคคล:

เทพดา

0นี่คือผีที่มีจำนวน สไปรต์อื่น ๆ มีสคริปต์เดียวกันยกเว้นจำนวน

เล่นกับมันออนไลน์

รหัสที่ใช้สำหรับการนับจำนวนไบต์: (การใช้ข้อมูลโค้ดเพื่อซ่อนรหัส)

หมายเหตุ: โค้ดที่สร้างขึ้นโดยอัตโนมัติโดยใช้ตัวสร้างscratchblockซึ่งแก้ไขเนื่องจากตัวสร้างไม่สามารถจัดการกับเลขทศนิยมได้อย่างถูกต้อง (ถือว่า 0.3 เป็น 0)

ภาพหน้าจอ:

ภาพหน้าจอ

หมายเหตุ: โปรดอย่ากดปุ่มสองปุ่มภายใน 0.3 วินาที


ฮะมันเยี่ยมมาก การหยุดชั่วคราวหลังจากคำตอบที่ถูกต้องน่าจะดีแม้ว่าหรือมีเสียงแสดงความยินดีบ้าง ดูเหมือนว่าการเคลื่อนไหวครั้งสุดท้ายของฉันเป็นส่วนหนึ่งของรูปแบบ นอกจากนี้ฉันจะเล่นเสียงช้ากว่าฝาครอบอินพุตเนื่องจากการจับคู่จังหวะและเสียงเป็นวิธีที่ผู้คน (ตัวเองอย่างน้อย) เล่น ... ยังคงฉันชอบมัน +1
krs013

1
เกา? SRS? นอกจากนี้จำนวนไบต์ imo ควรมีขนาดรวมของ SB2
cjfaure

1
@Trimsty แล้วมันจะเป็น 12,633,334 ไบต์ (รวมถึงไฟล์เสียง wav และอื่น ๆ ) ซึ่งเป็นเหตุผลที่ฉันพูดว่า "ฉันมาที่นี่เพื่อความสนุกไม่ใช่กอล์ฟ"
user12205

ตามคะแนนที่ฉันแนะนำที่นี่คะแนนคือ 60 (27 บล็อก, 20 ตัวอักษร / ตัวเลขในค่าคงที่, 8 ผู้ประกอบการ, 5 ตัวแปรใช้) ด้วยโบนัสคุณจะได้รับ -65
ugoren

@ugoren นี่เป็นเพียงคำตอบบางส่วนเท่านั้น มีสไปรท์ 4 ตัวและจะแสดงเฉพาะสคริปต์สำหรับอันใดอันหนึ่งเนื่องจากสไปรต์อื่นมีสคริปต์ที่เกือบเหมือนกันยกเว้นจำนวน ฉันจะอัปเดตคำตอบตามคะแนนของคุณ ขอบคุณ
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

ป้อนคำอธิบายรูปภาพที่นี่


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 ภูมิภาค" - คุณไม่ได้พูดว่าพวกเขาจะต้องเป็นควอเตอร์ดังนั้นจึงไม่ใช่
  • มันยากที่จะเห็นแสงสีน้ำเงินบนพื้นหลังสีฟ้า แต่มันทำได้
  • โปรดเรียกใช้ใน PowerShell ISE - ในพร้อมท์ปกติ "DarkYellow" แสดงเป็นสีขาว
  • คุณสามารถตีกอล์ฟอีก 28 ตัวอักษรโดยลบเวลา (ยังทำให้เกมเล่นได้) และตีความกฎ "เสียง (โน้ตที่เล่นเมื่อกดและเมื่อเกมแสดงสี)" หมายถึง "พวกเขาสามารถ ทุกอย่างจะเป็นเสียงเดียวกัน - ข้อผิดพลาดเริ่มต้น DING "แต่ฉันคิดว่ามันไกลเกินกว่าที่จะเป็นวิญญาณของมัน

0

ZXBasic: 422 - 100 - 25 = 297

สิ่งนี้นับเป็นการกระตุ้นความคิดถึงในยุค 80 ...

ZXBasic ใช้การรวมกันของคำสั่งประเภท FreeBASIC และ ZX Spectrum BASIC เพื่อให้ลูปและทำซ้ำซึ่งจะเปลี่ยนเป็นรูปแบบ TZX เพื่อโหลดลงในเครื่องจำลองสเปกตรัม

รุ่นนี้เปลี่ยนเส้นขอบ (แม้ว่าคำอธิบายบนหน้าจอจะบอกว่าต้องกดคีย์ใด) มันเล่นโน้ตเหมือนกับเกม 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 และ Javascript, 1118-100-25 = 993 ไบต์

ป้อนคำอธิบายรูปภาพที่นี่

HTML-Js รุ่นที่บวมเกินไป

เล่นเสียงผ่านเว็บ 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.