Tạo một bản sao Simon! [đóng cửa]


18

Kịch bản: trong khi lập trình, bạn có một sự thôi thúc bất chợt về những trò chơi thập niên 80 và vui nhộn.

Yêu cầu: Tạo chương trình GUI (văn bản có thể sẽ không hoạt động) cho Simon, trò chơi. Đầu vào có thể được bấm, hoặc nhấn một phím. Bạn nên chia màn hình thành 4 vùng: vàng, xanh dương, đỏ, xanh lá cây. Khi trò chơi bắt đầu, một màu ngẫu nhiên sáng lên và bạn kích hoạt nó. Sau đó, hai đèn bật sáng, lần lượt từng cái một và bạn cần kích hoạt chúng theo thứ tự, v.v ... Trò chơi kết thúc khi bạn nhấn sai màu.

Tiền thưởng:

-100 nếu bạn bao gồm âm thanh (một ghi chú khác được phát khi nhấn từng vùng và khi trò chơi hiển thị cho bạn màu sắc)

-25 nếu bạn bao gồm một bộ đếm điểm.


13
GUI và golf-code thường không hoạt động cùng nhau.
dùng80551

3
Điều này nên được thực hiện trong Minecraft. Sẽ không làm tôi ngạc nhiên nếu ai đó đã có. Không biết làm thế nào một người gửi nó ở đây mặc dù ...
Kninnug

@Kninnug số lượng khối * byte mỗi khối;)
Liam McInroy

@Liam McInroy AFAIK một khối là 2 byte cho ID khối và 4 byte để lưu trữ vị trí của nó trên thế giới.
Pavel

Câu trả lời:


12

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

Đây chủ yếu là một phản hồi cho "Văn bản có thể sẽ không hoạt động"; tập lệnh bash dựa trên văn bản sau đây chạy tốt Konsole, gnome-terminalv.v. trên máy Ubuntu 14.04 của tôi. Để tạo các vùng màu, nó đặt màu nền văn bản. Trong thực tế, việc thêm văn bản làm cho trò chơi dễ tiếp cận hơn với những người chơi mù màu. Để làm cho trò chơi dễ tiếp cận hơn, nó đọc các ký tự mà người chơi cần nhấn (nó giả định đã espeakđược cài đặt). Nó cũng giả định rằng phù hợp với tập tin duy nhất /d*/ur*//dev/urandom. Đối với các vùng màu có kích thước không tầm thường, có lẽ bạn muốn đặt kích thước văn bản là khá lớn. Ngoài ra nếu bạn muốn các vùng màu là góc phần tư, bạn phải chạy nó trong một thiết bị đầu cuối có hai ký tự.

Để chơi nhấn y, r, g hoặc b cho phù hợp.

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

Giải pháp này chứa hai ký tự ESC không in được. Mặc dù các ký tự ESC này xuất hiện trong bản xem trước, chúng dường như bị xóa sau khi gửi, do đó, mã ở trên là một trình bao bọc tạo và chạy golf simon_golf.sh.

Xem thêm phiên bản không có bản gốc và phiên bản 256 byte dễ chơi hơn một chút .

Ảnh chụp màn hình bên dưới là khi đèn vàng bật và điểm của người chơi là 7. Ảnh chụp màn hình bên phải đã được khử bão hòa để mô phỏng mù màu.

ảnh chụp màn hìnhĐen và trắng


Cách quá lớn cho một golf mã ...
John Dvorak

3
Thật. Tôi ở đây nhiều hơn cho "Câu đố lập trình" hơn là "Code Golf".
gmatht

Tôi đã chơi golf một chút bây giờ.
gmatht

24

Cào, 1604 - 125 = 1479

Tôi ở đây để giải trí chứ không phải chơi gôn.

Chỉnh sửa: phương pháp cho điểm cập nhật dựa trên sự đồng thuận của cộng đồng .

Chương trình chính:

chủ yếu

Sprite cá nhân:

ma

Đây là sprite với số lượng 0. Các sprite khác có cùng một kịch bản, ngoại trừ số lượng.

Chơi với nó trực tuyến .

Mã được sử dụng để đếm byte: (Sử dụng đoạn mã để ẩn mã)

Lưu ý: Mã được tạo tự động bằng cách sử dụng trình tạo mã vạch , được sửa đổi vì bằng cách nào đó, trình tạo không xử lý chính xác các số thập phân (coi 0,3 là 0).

Ảnh chụp màn hình:

ảnh chụp màn hình

Lưu ý: Vui lòng không nhấn hai nút trong vòng 0,3 giây.


Ha, thật tuyệt. Tuy nhiên, tạm dừng sau một câu trả lời đúng sẽ là tốt, hoặc một số âm thanh chúc mừng. Có vẻ như động thái cuối cùng của tôi là một phần của mô hình. Ngoài ra, tôi sẽ phát âm thanh chậm hơn so với giới hạn đầu vào, vì nhịp điệu và giai điệu phù hợp là cách mọi người (ít nhất là bản thân tôi) chơi ... vẫn vậy, tôi thích nó. +1
krs013

1
Vết trầy? Srs? Ngoài ra, imo đếm byte nên là tổng kích thước của SB2.
cjfaure

1
@Trimsty Sau đó sẽ là 126833 byte (bao gồm các tệp âm thanh wav, v.v.), đó là lý do tại sao tôi nói "Tôi ở đây để giải trí chứ không phải chơi gôn".
dùng12205

Theo cách tính điểm tôi đề xuất ở đây , điểm số là 60 (27 khối, 20 ký tự / chữ số trong các hằng số, 8 toán tử, 5 cách sử dụng biến). Với tiền thưởng, bạn nhận được -65.
ugoren

@ugoren Đây thực sự chỉ là một câu trả lời một phần. Có 4 sprite và chỉ có script được hiển thị, vì các sprite khác có các script gần như giống hệt nhau ngoại trừ số lượng. Tôi sẽ cập nhật câu trả lời dựa trên điểm số của bạn. Cảm ơn.
dùng12205

3

Toán học, 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

nhập mô tả hình ảnh ở đây


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}

Tôi đã thêm các dòng mới ở đây để tránh cuộn bên, nhưng nó hoạt động như một dòng để số lượng ký tự không có dòng mới.

Ảnh chụp màn hình: Ảnh chụp màn hình chơi trò chơi

Chơi:

  • Mở PowerShell ISE (v3), dán tập lệnh vào trình soạn thảo văn bản, nhấn F5 để chạy.
  • Trò chơi sẽ sáng lên một màu, phát âm thanh, sau đó chờ nhập liệu
  • Nhấn một số (0 = đỏ, 1 = vàng, 2 = xanh lam, 3 = xanh lục) rồi Enter.
  • Nếu bạn sai nó sẽ in điểm và thoát. (NB. Nó có thể thoát khỏi bảng điều khiển của bạn).
  • Nếu bạn đúng nó đi cho hai ghi chú.
  • Bạn phải nhấn Enter giữa mỗi ghi chú khi phát lại chuỗi.

Bình luận:

  • "chia màn hình thành 4 vùng" - bạn không nói rằng chúng phải là một phần tư, vì vậy chúng không phải.
  • Thật khó để nhìn thấy ánh sáng màu xanh lam trên nền màu xanh, nhưng nó có.
  • Vui lòng chạy trong PowerShell ISE - trong lời nhắc thông thường "DarkYellow" hiển thị màu trắng.
  • Bạn có thể lập luận loại bỏ 28 ký tự khác bằng cách xóa một số thời gian (vẫn làm cho trò chơi có thể chơi được) và bằng cách giải thích quy tắc "âm thanh (một ghi chú được phát khi nhấn và khi trò chơi hiển thị cho bạn các màu)" có nghĩa là "chúng có thể tất cả đều giống nhau - lỗi mặc định DING ", nhưng tôi nghĩ điều đó quá xa so với tinh thần của nó.

0

ZXBasic: 422 - 100 - 25 = 297

Điều này chắc chắn được tính là một sự thôi thúc hoài cổ cho thập niên 80 ...

ZXBasic sử dụng kết hợp các lệnh loại FreeBASIC và ZX Spectrum BASIC để cho phép các vòng lặp và lặp lại sau đó chuyển sang định dạng TZX để tải vào trình giả lập Spectrum.

Phiên bản này thay đổi đường viền (mặc dù một chú giải trên màn hình cho biết phím nào cần nhấn). Nó chơi các ghi chú tương tự như trò chơi Simon gốc ( 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

Điểm cao nhất Đang chơi


0

HTML5 và Javascript, 1118-100-25 = 993 byte

nhập mô tả hình ảnh ở đây

Cách quá cồng kềnh phiên bản HTML + Js.

Phát âm thanh thông qua API Web Audio .

Tần suất của các ghi chú nên là bản gốc, màu sắc và vị trí màu của Simon.

Có một bản demo trực tuyến tại đây: http://www.dantonag.it/miniSimon.html . Hoạt động trong các trình duyệt tuân thủ Web Audio (ít nhất là Chrome và Firefox, IE không hỗ trợ nó, 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>

Kỷ lục của tôi là 15 (Tôi khá tệ trong trò chơi này). Của bạn là gì

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.