Comments 52
у нокии есть змейка покруче, в 3d, интересно есть ли она под андроид?
https://m.youtube.com/watch?v=iUVPmWPzfqk
Интересно, но хотелось бы больше технических деталей, конечно.
Макнейл: это идеальная мобильная игра, потому что в неё играли все, и особенно люди, в жизни не игравшие больше ни в одну игру.
Это была идеальная мобильная игра, потому что она не подталкивала вас к совершению внутриигровых покупок, оплате премиум аккаунта и т.п. Все мобильные игры того времени были идеальными, ведь они были созданы для удовольствия игрока.
В 91м году один из компьютерных журналов напечатал листинг Nibbles на QBasic. На то время у меня был ЕС1840 с GW-Basic на дискете с MS DOS, катастрофическая нехватка игр и неуемный оптимизм 8-летнего ребенка. Несколько дней я кропотливо перебивал код из журнала и исправлял опечатки, чтобы в итоге узнать, что инструкции QBasic и GW-Basic не полностью совместимы и код в принципе не запустится — обязательно нужны номера строк, отличаются некоторые операторы, а команда PLAY почему-то не издает звук и ее пришлось комментировать. Так я сделал первый в своей жизни порт. И понеслось :)
В змейку я еще на СМ-4 играл. В 1985 году.
Написано действительно чудно.
Но он не был бы таким быстрым, если бы вызывал сбои в телефоне, происходящие из-за утечек памяти. Поэтому я реализовал его так, чтобы утечек памяти не было.
Интересно, он был первый в подобных подвигах, что аж без ликов реализовать столь сложный проект?
Невыясненным остался один вопрос: как, чёрт побери, он собирался сделать «Змейку» быстрее, допустив утечки памяти?
Вот это меня как бы больше волнует — я себе этого даже представить не могу…
"как создавалась «Змейка» для телефонов Nokia":
-Хотели сначала тетрис, но оказалось, что у тетриса был владелец, поэтому решили делать змейку.
-Это феномен.
-Моя самая любимая игра.
-А ещё я добавил задержки и не стал добавлять утечки памяти.
-Сначала я нарисовал круг, и вот уже получилась сова, т.е. змейка!
Арманто сдержан и скромен, когда рассказывает о своей карьере. «Очень многие приходят в восторг, когда узнают, что это я написал Snake», — говорит он
… поэтому я скромно умалчиваю, что я её не писал, а просто перенёс на новую платформу, — думает про себя Арманто при этом, но вслух не говорит.
Но змейка, как бы, настолько простая вещь, что её проще написать, чем портировать… Особенно если писать нужно на ассемблере под нестандартную платформу…
Поэтому я реализовал его так, чтобы утечек памяти не было.
То ли баг перевода, то ли человек и правда гордится тем, что реализовал код так, как и надо писать программы — без утечек памяти!
А в змейке всегда поражало, что у нее этакая красивая графическая заставка, и совершенно неграфический, аскетичный геймплей. Прямо стоило подогнать стили заставки и игры — впрочем, кого это из программистов волновало?
А в змейке всегда поражало, что у нее этакая красивая графическая заставка, и совершенно неграфический, аскетичный геймплей. Прямо стоило подогнать стили заставки и игры
Как вы себе эту подгонку представляете?
Разрешение экрана у 6110 всего 84x48, для украшательств банально нет пикселей.
Не рисовать красоты (заставку) там, где их в игре не будет.
По сути, вы предлагаете отказаться от рекламных материалов.
Следуя вашей логике, нужно убрать с обёртки шоколадных конфет «Мишка косолапый» репродукцию, ведь внутри нет никаких мишек в сосновом бору.
С обложек художественных книг убираем фантазии художника на тему сюжета, ведь под обложкой тысячи букв и почти совсем нет картинок.
Да и дизайн коробок с настольными играми тоже переделать, а то непорядок: на обложке яркая картинка с героями, а в коробке невзрачные пластмассовые фишки.
Вряд ли это можно счесть здравым предложением.
Играл в эту змейку на тетрисе на батарейках еще когда телефоны были с проводами!
Или давно умер уже.
Недавно была статья История алгоритмов рандомизации «Тетриса», вот бы и про рандомизацию в Змейке почитать.
Кто-нибудь релизовывал Змейку сам? Там используется массив из координат каждого пикселя змейки или у вас другое решение? И чему соответствует размер массива? Размеру количества пикселей экрана?
Просто подумал, что можно хранить не координаты, а длину отрезка и поворот — одной цифрой со знаком. Допустим, -7 — это поворот против часовой и до этого поворота позади остаётся отрезок в семь пикселей. По памяти выигрыш должен быть в два раза, зато значительно возрастут вычисления?
И вместо внутреннего массива используется массив пикселей экрана, значит? Ещё, чтобы реализовать неоднородный фон, понадобится рисовать змейку на отдельном слое.
Про вектор хвоста я подзабыл, да, важный момент в том, что он хранится прямо в сетке. Это похоже на волновой алгоритм — пишем вектор головы в сетку, и, зная начальную позицию, читая значения из сетки, можем восстановить весь путь, пройденный головой, т.е. всю длину змейки. Если тело змейки не анимировано, достаточно перерисовывать только голову и хвост.
В классических реализациях ещё добавляют растущий массив элементов в памяти, и вот как раз он реально не нужен.А где эта «классическая реализация» существует??? Змейка — была одной из первых программ, которые я реализовал в школе (Turbo Pascal, вот это вот всё, SegB000/SegB800, вот это вот всё), и никогда не задумывался над тем, что это может быть реализовано иначе чем для каждого знакоместа хранить направление…
Интересно всё же увидеть — что я пропустил…
А насчёт своей идеи выигрыша по памяти в два раза я поторопился — он ещё больше, т.к. поворотов бывает меньше даже чем самый длинный отрезок Змейки.
А насчёт своей идеи выигрыша по памяти в два раза я поторопился — он ещё больше, т.к. поворотов бывает меньше даже чем самый длинный отрезок Змейки.Вы считаете максимальный возможный выигрыш? А зачем? Чтобы игра упала, если кто-то будет играть «неправильно»? Понятно же, что если кто-то устроит из Питона кривую Гильберта, то вам потребуется больше памяти, чем с тривиальным решением…
Но «Змейка» на поле 2x2 — это какая-то ну исключительно грустная «Змейка»…
А если поле будет хоть чуть-чуть больше, скажем 3x3, то вам уже потребуется на каждый отрезок три бита: один на длину, два на направление.
Отрезков на поле 3x3 может быть до шести — это уже 18 бит.
А «наивная реализация» — это чётко два бита на каждый элемент, только направление и всё. То есть те 18 бит, только манипулировать проще.
Начиная же с размера 4x4 там уже получается 12 отрезков по 4 бита (2 на направление, 2 на длину), итого 48.
А с наивной реализацией — 32 бита.
Ну и так далее — чем больше будет поле, тем больше вы будете проигрывать в наихудшем случае…
Выходит тогда, что мой способ больше подходит цветным Змейкам с неоднородным фоном.
var
GoTop : array[1..25] of set of 1..80;
GoLeft : array[1..25] of set of 1..80;
Сейчас, когда вы заговорили об экономии при использовании явно не слишком эффективного метода (ну то есть он сходу кажется неэффективным: данные неоднородны, манипуляции сложные) — пошёл, посмотрел на кривую Гильберта, посчитал… Всё равно тот вариант, что у меня — проще и быстрее… хотя сегодня я, наверное, сделал бы по другому (уж как минимум использовал числа от 0 до 79, а не от 1 до 80)… но идея та же, всё равно.
P.S. Для чего подходит ваш способ я, если честно, затрудняюсь сказать. Навскидку не вижу никаких вариантов, когда он был бы эффективнее… В худшем случае, когда ресурсов не хватает, конечно…
Интересно, что в интернете до сих пор нет видео прохождения оригинальной змейки на нокиа.
Самая популярная мобильная игра: как создавалась «Змейка» для телефонов Nokia