Создайте Саймона Клона! [закрыто]


18

Сценарий: во время программирования у вас внезапно возникает ностальгическое желание 80-х и сырных игр.

Требования: создайте программу с графическим интерфейсом (текст, вероятно, не будет работать) для игры Simon. Ввод может быть нажатием или нажатием клавиши. Вы должны разделить экран на 4 региона: желтый, синий, красный, зеленый. Когда игра начинается, загорается случайный цвет, и вы активируете его. Затем загораются два индикатора один за другим, и вам нужно активировать их по порядку и т. Д. Игра заканчивается, когда вы нажимаете не тот цвет.

Бонусы:

-100, если вы включаете звук (разные ноты играют при нажатии каждой области и когда игра показывает вам цвета)

-25 если вы включите счетчик очков.


13
GUI и code-golf обычно не работают вместе.
user80551

3
Это должно быть выполнимо в Minecraft. Не удивил бы меня, если кто-то уже есть. Не знаю, как можно представить это здесь ...
Kninnug

@Kninnug количество блоков * байт на блок;)
Лиам Макинрой

@Liam McInroy AFAIK Блок имеет 2 байта для идентификатора блока и 4 байта для хранения своей позиции в мире.
Павел

Ответы:


12

Баш 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.

См. Также оригинальную версию без гольфа и чуть более воспроизводимую 256-байтовую версию .

Приведенные ниже снимки экрана показывают, когда горит желтый индикатор, а счет игрока равен 7. На приведенном ниже снимке экрана справа показано ненасыщенное изображение для имитации дальтонизма.

СкриншотЧерное и белое


Слишком большой для гольф-кода ...
Джон Дворжак,

3
Правда. Я здесь больше для «Программирования головоломок», чем для «Code Golf».
Gmatht

Я немного поиграл в это сейчас.
Gmatht

24

Царапина, 1604 - 125 = 1479

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

Редактировать: обновленный метод оценки, основанный на согласии сообщества .

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

основной

Индивидуальные спрайты:

фея

Это спрайт с номером 0. Другие спрайты имеют тот же сценарий, кроме номера.

Играть с этим онлайн .

Код, используемый для подсчета байтов: (Использование фрагмента для скрытия кода)

Примечание. Код, автоматически сгенерированный с помощью генератора блокнотных блоков , измененный как-то так, что генератор неправильно обрабатывает десятичные числа (трактует 0.3 как 0).

Скриншот:

Скриншот

Примечание: пожалуйста, не нажимайте две кнопки в течение 0,3 секунд.


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

1
Царапины? Srs? Кроме того, количество байтов imo должно быть общим размером SB2.
cjfaure

1
@Trimsty Тогда это будет 126833 байта (включая звуковые файлы wav и т. Д.), Поэтому я сказал: «Я здесь для удовольствия, а не для игры в гольф».
user12205

В соответствии с предложенной здесь оценкой, оценка составляет 60 (27 блоков, 20 символов / цифр в константах, 8 операторов, 5 вариантов использования). С бонусами вы получаете -65.
Угорен

@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 для загрузки в эмулятор 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.

Воспроизводит звуки через API Web Audio .

Частоты нот должны быть такими же, как у Симона, цвета и расположение цветов.

Здесь есть онлайн-демонстрация: 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 (я довольно плох в этой игре). Что твое?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.