Задача состоит в том, чтобы создать классическую игру Snake, используя как можно меньше байтов.
Вот требования:
- Игра должна быть реализована в типичном двухмерном макете. Змея должна иметь возможность значительно расти в пределах карты (это действительно означает, что не делайте вашу карту слишком маленькой, используйте ваше усмотрение здесь).
- Пользователь может перемещать змею с помощью клавиш по вашему выбору, однако змея не может сдвинуться назад сама (например, если она идет на запад, она не может идти на восток, не пройдя сначала на север или юг). Змея должна быть в состоянии путешествовать во всех четырех направлениях: вверх, вниз, влево, вправо (север, юг, запад, восток).
- Змея начинается с длины 1, каждый раз, когда она ест «пищевой» объект, она увеличивается на +1 в длину
- Объекты питания случайным образом размещаются в местах, отличных от тех, которые заняты змеей
- Если Змея ударит себя или стену, игра окончена
- Когда игра закончена, отображается буквально «Счет: [счет]», где [счет] - это количество продуктов, съеденных во время игры. Так, например, если к концу игры змея съела 4 «еды» (и, следовательно, имеет длину 5), будет напечатано «Score: 4».
- Нет алгоритмов сжатия, если они явно не определены в вашем коде.
Вот мое решение, 908 байт, Python 2.7
import random as r
import curses as c
def g(s,w,l):
while 1:
p=[r.randrange(0,w),r.randrange(0,l)]
for l in s:
if l==p:continue
return p
s=[]
d=[0,1]
p=k=n=0
e=100
v={65:[-1,0],66:[1,0],68:[0,-1],67:[0,1]}
z=c.initscr()
w,l=z.getmaxyx()[0],z.getmaxyx()[1]
c.noecho()
z.clear()
x=g(s,w,l)
s.append([w/2,l/2])
z.nodelay(1)
q=lambda h,i:range(h,len(i))
while k!=101:
k=z.getch()
if k in v and not (d[0]==(v[k][0]*-1) and d[1]==(v[k][1]*-1)):d=v[k]
f=[0,0]
for i in q(0,s):
if i == 0:
f=[s[i][0],s[i][1]]
s[i][0]+=d[0]
s[i][1]+=d[1]
else:s[i],f=f,s[i]
if s[0]==x:
n+=1
s.append(f)
x=g(s,w,l)
z.clear()
if s[0][0]>=w or s[0][1]>=l or s[0][0]<0 or s[0][1]<0:break
for i in q(1,s):
if s[0] == s[i]: k = 101
for i in q(0,s):z.addch(s[i][0],s[i][1],"X")
z.addch(x[0],x[1],"O")
z.move(0,0)
z.refresh()
if d[1]!=0:c.napms(e/2)
else:c.napms(e)
c.endwin()
print 'Score: %s'%n
Ответы:
Ruby 1.9 + SDL (
341324316)Вот первая попытка версии Ruby с использованием библиотеки SDL. Я могу сохранить 6 символов, если мне разрешено загружать библиотеку SDL с помощью
-rsdl
командной строки вместо оператора require.Сегменты змей и кусочки пищи представлены черными пикселями, размер сетки в настоящее время составляет 32 * 32. Вы можете управлять с помощью клавиш со стрелками (или любых других клавиш, код клавиши mod 4 индексирует массив направлений [ВЛЕВО, ВВЕРХ, ВНИЗ, ВПРАВО]). Я думаю, что здесь определенно есть место для улучшения, особенно в заявлении IF о проверке смерти.
Я значительно улучшил это по сравнению с предыдущей версией, надеюсь, теперь он более соответствует духу вопроса.
Есть одна вещь, которую я должен исправить, чтобы соответствовать спецификации, - это то, что еда в настоящее время может появляться внутри хвоста.Исправлена!Печатает счет в стандартный вывод после завершения игры.
источник
Ява,
23432239Не совсем краткий, но я считаю, что он соответствует всем требованиям.
Змея класс
Доска класс
Снимок экрана
Комментарий
Некоторое время назад я посетил веб-сайт под названием zetcode, на котором были представлены некоторые учебные пособия по созданию классических 2D-игр на Java. На предоставленный код сильно повлияло учебное пособие, которое было предоставлено для игры Snake ... Я думаю, что в то время я только начал писать классические игры и следовал за учебником до буквы «Т».
Позже я сделаю правку и добавлю ссылку на исполняемый файл, чтобы люди могли играть в игру.
редактирует
источник
Bash:
537533507 символовКак он использует
$COLUMNS
и$LINES
переменные оболочки, он должен быть запущен источниками:. snake.sh
. Змеей можно управлять с помощью клавиш w/ a/ s/ d.Я знаю, что его можно легко уменьшить до 493 символов с помощью
clear
очистки экрана, но я предпочитаю держать его в чистотеbash
, не используя никаких внешних инструментов.источник
Python 2.7:
869816818817816 символовЯ взломал это вместе за последние несколько часов. Он должен соответствовать требованиям и на несколько символов короче, чем решение mjgpy3 (попробовал, но не смог сделать его намного короче. Теперь я устал). Удивительно, но использование библиотеки разработки игр, такой как pygame, не сделало Python-Snake намного короче. Предложения и советы, как сделать его короче, высоко ценятся. Я надеюсь, что это не слишком загадочно.
Это результат:
РЕДАКТИРОВАТЬ: Я мог бы уменьшить его до 816 байт, ура! :) Исправлена оценка
EDIT2: случайно вставил неправильную версию
Вот прокомментированная версия:
источник