Створіть Саймона-клона! [зачинено]


18

Сценарій: під час програмування у вас з’являється раптовий ностальгічний потяг до 80-х і сирних ігор.

Вимоги: Створіть програму GUI (текст, ймовірно, не працюватиме) для Саймона, гри. Введення може бути клацанням або натисканням клавіші. Ви повинні розділити екран на 4 регіони: жовтий, синій, червоний, зелений. Коли гра починається, засвітиться випадковий колір, і ви активуєте його. Потім вмикаються два світла, одне за одним, і вам потрібно активувати порядок тощо. Гра закінчується, коли ви натискаєте неправильний колір.

Бонуси:

-100, якщо ви включаєте звук (інша нота, яку відтворюють при натисканні кожного регіону та коли гра показує вам кольори)

-25, якщо ви включите лічильник балів.


13
GUI і код-гольф зазвичай не працюють разом.
користувач80551

3
Це слід зробити в Minecraft. Не здивував би мене, якщо у когось вже є. Не знаю, як можна це подати, хоча ...
Kninnug,

@Kninnug кількість блоків * байтів на блок;)
Liam McInroy

@Liam McInroy AFAIK для блоку є 2 байти для ідентифікатора блоку та 4 байти для зберігання його позиції у світі.
Павло

Відповіді:


12

Баш 318 297 281 273 268 244 240-125 = 115

Це насамперед відповідь на "Текст, ймовірно, не буде працювати"; На моїй машині Ubuntu 14.04 наступний текстовий сценарій bash працює добре 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 з'являються у попередньому перегляді, вони здаються видаленими після подання, тому код вище - це обгортка, яка генерує та запускає гольф simon_golf.sh.

Дивіться також оригінальну версію без вогків та трохи більш відтворювану 256- байтну версію .

Нижче показані знімки екрана, коли увімкнено жовте світло, а рахунок гравця - 7. Скріншот праворуч знесилений, щоб імітувати кольорову сліпоту.

скріншотЧорний і білий


Шлях занадто великий для кодового гольфу ...
Джон Дворак

3
Правда. Я тут більше для "Пазлів програмування" більше, ніж "Код гольфу".
gmatht

Зараз я трохи покатав його.
gmatht

24

Скретч, 1604 - 125 = 1479

Я тут для розваги, а не для гольфу.

Редагувати: оновлений метод балів на основі консенсусу громади .

Основна програма:

головний

Індивідуальні спрайти:

спрайт

Це спрайт з цифрою 0. Інші спрайти мають той самий скрипт, крім номера.

Пограйте з ним онлайн .

Код, який використовується для підрахунку байтів: (Використання фрагмента для приховування коду)

Примітка: Код автоматично генерується за допомогою генератора скретчблоків , модифікованого так, як генератор неправильно обробляє десяткові числа (трактуючи 0,3 як 0).

Знімок екрана:

скріншот

Примітка. Будь ласка, не натискайте дві кнопки протягом 0,3 секунд.


Ха, це класно. Хоча пауза після правильної відповіді буде корисною, хоч чи якийсь вітальний звук. Здається, мій останній хід - частина візерунка. Крім того, я б відтворював звуки повільніше, ніж вхідний ковпак, оскільки відповідність ритму та тону - це те, як люди (як мінімум) я грають ... все ж мені це подобається. +1
krs013

1
Подряпини? Srs? Крім того, число байтів imo має бути загальним розміром SB2.
cjfaure

1
@Trimsty Тоді це було б 126833 байт (включаючи звукові файли wav і т. Д.), Саме тому я сказав "я тут для розваги, а не для гольфу".
користувач12205

Відповідно до запропонованого тут балу, оцінка складає 60 (27 блоків, 20 символів / цифр в константах, 8 операторів, 5 змінних застосувань). З бонусами ви отримуєте -65.
ugoren

@ugoren Це насправді лише часткова відповідь. Існує 4 спрайти, і показаний лише сценарій для одного, оскільки для інших спрайтів майже однакові сценарії, крім числа. Я оновлю відповідь на основі вашої оцінки. Спасибі.
користувач12205

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 між кожною нотою.

Коментарі:

  • "розділити екран на 4 регіони" - ви не сказали, що вони повинні бути чвертями, тому вони не є.
  • На блакитному тлі важко побачити синє світло, але це так.
  • Будь ласка, запустіть у PowerShell ISE - у звичайному запиті "DarkYellow" відображається як білий.
  • Можна, мабуть, виграти ще 28 символів, видаливши частину часу (все-таки зробивши гру відтворюваною) та інтерпретуючи правило "звук (нота, яку відтворюють при натисканні та коли гра показує вам кольори)" означати "вони можуть все буде однаковий звук - помилка за замовчуванням DING ", але я думаю, це занадто далеко проти духу цього.

0

ZXBasic: 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 та Javascript, 1118-100-25 = 993 байт

введіть тут опис зображення

Занадто роздута версія HTML + Js.

Відтворює звуки через Web Audio API .

Частоти нотаток повинні бути оригінальними, зокрема кольори та розміщення кольорів Саймона.

Тут є демонстрація в Інтернеті: http://www.dantonag.it/miniSimon.html . Працює в браузерах, сумісних з веб-аудіо (принаймні 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 (я досить погано в цій грі). Що твоє?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.