[Sarlug] Игра для Linux

Саша Смирнов aforeve2001 на mail.ru
Вс Июл 2 11:01:14 MSD 2006


Продолжаю тему.
Почти написал уже логическую игру для Linux - Ice Block.
По крайней мере играть уже можно.
Подробнее со скринами на emu-machine.narod.ru

Еще подробнее:

Ice Block - логическая игра - самый сложный проект из всех когда либо созданных мной, то есть Infinity. Это смесь маджонга и игр аркадного типа. Выбрав три одинаковых элемента мы можем уничтожить их (расколоть). На их места падают новые ледяные блоки. Мы не можем двигать блоки. Хотя было желание это осуществить, но тогда бы это превратилось совсем в другую игру. В любом случае эта задумка будет отнесена на ICE BLOCK 2.
На практике игра, для своего воплощения потребовала серьезно пошевелить мозгами. Кое какие вещи пришлось оставить для продолжения, если оно конечно когда нибудь выйдет.
Игра имеет два исполнительных файла, один для среды Windows, другой - для Linux.
Это с одной стороны, а с другой - первое что мной двигало в начале этой работы - создать игру типа собираем по три одинаковых объекта - они уничтожаются для Linux, так как под Windows они весьма популярны. В Linux же подобных игр я просто не нашел.
Следует отметить, что Ice Block великолепно работает и под Wine, причем даже быстрее, чем в нативном коде - в чем тут дело - мне не понять, так как я в программировании лишь любитель и создание игр - мое хобби в свободное время, а не основное занятие! Я так же программированию учился самостоятельно, ни в каком институте никто меня не тыкал носом в Си или Дельфи - были книжки, ночь, компьютер и желание создать свое.
Игра распространяется по лицензии GPL, что дает возможность любому использовать и модифицировать мой код, но не удалять информации об авторе (подробнее см. лицензию GPL).
За несколько лет программирования я выработал определенные критерии использования тех или иных функций и пришел к такой схеме, что код создаваемый мной без изменений компилируется под большинством современных систем, таких как Linux, Windows, MacOS X, AMIGA Pegassos и возможно других.
Если в одной из операционных систем нет каких то функций я не использую эти функции заменяя их существующими во всех системах.
Простейший пример вышесказанного - функция преобразования числа типа integer в строку символов - itoa. Она есть в среде Windows, но отсутствует в Linux. Это легко обойти используя родственные функции конвертации:

char a[25];
int i=10;
sprintf(a,"%i",i);

Мне не очень понятен стиль других программистов создающие для себя же грабли, привязываясь к проприетарным системам, к таким вещам, как DirectX или WinAPI - они лишь ограничивают себя же. 
Если мне необходима какая либо библиотека - в первую очередь меня интересует ее кроссплатформенность. Стандартная связка SDL+OpenGL способна решить большинство затруднений, а громадное количество дополнительных библиотек выпущенных для них поражает. 
Ice Block - достаточно симпатичная игра. Конечно она смотрится несколько бледно против моего же Ping Pong GOLD (уж не говоря о коммерческих разработках других авторов под Windows) - но разработка его прекращена по техническим причинам. Она смотрится так же не так ярко и против Rabbit Adventure - разработка которой, будем считать, что - временно заморожена. Но Ice Block единственная (насколько мне известно) представительница подобных игр в Linux.
В создании игры использовались следующие инструменты:

Dev-C++ для Windows (бесплатен)
Kdevelop 3 для Linux   (бесплатен)
GIMP 2.11 для Windows (бесплатен)
GIMP 2.10 для Linux (бесплатен)
ALT Linux 3.0 + KDE/GNOME

Этого вполне достаточно для написания качественной игры.

История

28.06.06

Не хотел изменятся тип объекта вылетающего из расколотого блока. Выяснил, что чуть ниже в этой же функции он обнуляется и исправил  баг.

Сделал так, чтобы верхние блоки после взрыва падали на место исчезнувших. Пока есть ошибки в коде.

29.06.2006

Исправил код содержащий самый злобный глюк  , который меня несколько тревожил. Блоки иногда падали вниз, когда раскололись блоки вовсе не под ними. Кстати перед этим я планировал их падение сделать колизией, но потом пошел по пути типов, строк и колонок. Так сложнее, но я раньше такого не писал, поэтому и интереснее. Все перепроверил в коде - а все равно блоки не всегда верно смещались вниз.
Оказалось, что ошибка в инициализации. Только сделав курсор мыши коллизионным я смог увидеть наводя им на блок, какая колонка ему присвоена и оказалось, что нижний ряд начинается с  0-ой колонки, а остальные с первой! Разумеется все сразу было исправлено.
Теперь необходимо создать код, который считает количество выделенных блоков и если их больше трех - обнуляет все. Я его уже пробовал создать - но почему то пока он не работает, странно...
Да , добавил жизни и надпись GAME OVER.
Кажется теперь уже можно играть. 
Добавлен звук раскалывающегося льда при взрыве в стерео!


30.06.2006

Увеличена скорость падения фигур - прибавило игре динамизма.
Теперь разлетается столько осколков, сколько было разбито.
Блоки теперь можно раскалывать в любых сочетаниях, но только горизонтально по три.
Нельзя было выделить блок, пока по экрану летели осколки - теперь исправлено.
Настало время составить план - так как без него могут начаться тормоза в создании кода.
План:

Добавить новые объекты.
Сделать выбор по горизонтали
Сделать падающий снег.
Добавить бонус "БОМБА" - для безнадежных случаев - когда далее не продвинуться.

Просьба - если вас интересует эта игра - написать пару строк на сайте emu-machine.narod.ru в Гостевой.



Подробная информация о списке рассылки Sarlug