Привет!
Меня зовут Сашнов Александр и я живу в Новосибирске.
В 2003 году я закончил НГТУ (Новосибирский Государственный Технический Университет), факультет РЭФ (Радиотехника, Электроника и Физика).
Но с программной частью у меня лучше получается, чем с аппаратной, поэтому по окончанию учебы я устроился работать в _LINK(http://swsoft.com/, SWsoft), где и работаю в настоящее время программистом; начинал с инженера отдела контроля качества.
Как и во время учебы, приходя домой с работы стараюсь посвятить свободное время совершенствованию своих навыков путем чтения книг, а также писанием своих или исправлением чужих программ (которые под GPL конечно). Этот аспект своей жизнедейтельности я и освещаю на своей странице, дабы обмениваться опытом и просто общаться с теми, кому это тоже интересно.
Немного истории
Первым компьютером у меня был ZX Spectrum 128 Kb, который мне купили родители в 1993 году. Выбирая между Dendy и Spectrum последний был выбран потому, что на нем можно было написать что-то свое (пусть и что-то не очень крутое) и сохранить на кассете. Поэтому вдоволь наигравшись за первые три месяца, я принялся изучать Basic. У меня мало что получалось, пока в моих руках (спасибо папе за интуицию) не появилась книга “Как написать игру на ZX Spectrum”. Материал в книге изложен настолько просто, что в достаточно быстро освоил программирование на Basic на достаточно высоком уровне. После этого (уже сам) купил вторую книгу из серии “Как написать игру на ассемблере для ZX Spectrum”. Изложение материала там было такое же хорошее, как и в первой части, поэтому я (опять таки же в одиночку) быстро освоил и ее. Как и многие начинающие (да и не только) программисты, я грезил написать свою игру. Но у меня была плохая связь с миром ZX, поэтому софта не хватало. Я написал себе редактор шрифтов и файловый менеджер (до этого я пользовался голым TR-DOS).
Мой font editor одновременно отображал на экране два набора символов (font A и font B), позволяя выделять группы и копировать их из одного набора в другой. Файловый менеджер был достаточно продвинутым: он позволял копировать группы файлов с одной дискеты на другую на одном дисководе (в TR-DOS приходилось копировать по одному, каждый раз передергивая дискету). Над менеджером памяти я ломал голову несколько часов, лежа на траве на даче :-) Следующим на очереди был музыкальный редактор для музыкального сопроцессора AY 8912, которым обладали Spectrum 128 и выше. К его написанию я подошел более серьезно: спроектировал интерфейс (на бумаге в клеточку), почти полностью написал справку, продумал и составил набор библиотечных процедур. Но до реализации дело не дошло.
Осенью 1998 года я поступил в университет. Мое внимание сразу привлекли терминальные классы. В нашем классе стояли бездисковые 486DX4 (100 mHz) под windows 3.11 с Novell 4 в качестве файлового сервера. Первые полгода нам читали лекции по fortran. Закаленные Basic’ом и ассемблером на Spectrum, освоил я его легко, но своего написать на нем у меня ничего не получилось, потому что не было инструментария для работы с графикой и звуками (поисковиками я тогда пользоваться не умел, Google и вовсе не было). Второе полугодие нам читали лекции по С. Он мне сразу понравился. К тому же, в комплекте с Borland C 3.11 была графическая библиотека (bgd кажется), с использованием которой я написал свой tetris
Интернет, хорошие графические и звуковые возможности- все это было очень хорошо, но сколько я не искал на книжных прилавках, таких хороших книг, уровня “Как написать игру на ZX Spectrum” нигде не встречал. Один знакомый дал почитать Andre Lamot, “Написание игр для IBM PC, советы мастеров”, но это было уже не то. Описывалось программирование под DOS, много низкоуровневых деталей и не было таких красочных примеров, как в книге для Spectrum.
Долгое время я рыскал по интернету в поисках книг, статей и исходников. С английским было совсем плохо, поэтому изучал в основном то, что удавалось находить на русском. Конечно, на русском выбор был не очень большой: ведь на английском статьи пишут практически все, включая и русских, как только они становятся более “продвинутыми”. А на русском я находил только руководства от начинающих, которые шагнули чуть дальше меня.
Первым практически полезным примером был _LINK_TO_FILE(ddbasic.zip) (под Visual C++), скачанный с сайта мистера _STRONG(Show) (_LINK(http://www.vvsu.ru/dkcsc/csc/,Choco Snow Creation)). В примере с помощью DirectDraw и DirectInput на экран выводилась картинка а движения мыши перемещали ее. Распечатав пример, я изучал его в течении нескольких дней, пока наконец не понял, что делает в нем каждая строка. Затем скачал DirectX SDK и распечатал из него пример donuts (не весь, а только donuts.c где было самое интересное). Опираясь на полученые знания, я написал первую более-менее серьезную игру- _LINK_TO_PAGE(galaxian).
Но программирование на чистом DirectX API утомительное, в коде трудно разобраться даже после недельного перерыва (много кода, не относящегося непосредственно к игре, перемешано с кодом игры). Я оценил полезность врапперов и взял на вооружение NukeDX. В свое время NukeDX мне так понравился, что я даже написал собственный _LINK_TO_FILE(nukedx-borland-cpp-builder-tutorial.zip, туториал). туториал по нему! Столь большую симпатию к NukeDX у меня вызвали не столько достоинства самой библиотеки (внутри у нее все было просто- использовался DirectX API также, как я уже почти умел сам), а то, что на основе NukeDX была написана игра _LINK(http://bitrush.far.ru/, TankArena) молодой кодерской командой “BitRush games”.
На NukeDX я сам пытался написать две игры. Первая, на тему танков, была пробой сил. Ни о каком более-менее достоверном gameplay в ней даже и не пахло (хотя идеи были неплохие). Вторая попытка чуть более удачная: _LINK_TO_PAGE(ddungeon), но в силу разных причин (недостаток опыта, неудачно выбраная библиотека NukeDX) она обладает множеством технических проблем, а также имеет проблемы с переносимостью.
Одновременно с постиганием основ программирования игр для PC я также изучал Linux. Поначалу это было просто из любопытства, хотелось узнать, что это за OS. Но позже я заметил, что освоение Linux мне дало больше представлений о самом Window, как ни странно. С продолжением изучения этой OS я все чаще стал задумываться о ее возможном применении в качестве основной OS. Я даже изучал книгу “Ядро Linux в комментариях”, правда, ничего особенно в плане приемов программирования там не было: просто реализация операционной системы на языке С (хотя конечно, особенности были, но для прикладного программирования от туда мне подчерпнуть ничего не удалось).
Играя с Linux я заметил, что многие хорошие программы, написаные под Linux, были портированы под Windows и под другие системы (MacOS, FreeBSD). Поэтому я понял, что при определенном подходе к написанию программ их перенос на другие системы не будет сложным.
Свою следующую игру я решил написать с использованием библиотеки _LINK(http://libsdl.org/, SDL). Начиная осваивать ее, я (совместно с _MAILTO(shd@bk.ru, ALakazam)) сделал перевод введения _LINK(http://www.libsdl.org/archives/SDL-1.0-russian-intro.zip, SDL-1.0-russian-intro.zip), но на практике ее применить пока не успел. ALakazam же после перевода into написал хорошую игру- клон арканоида (link to his page in _LINK_TO_PAGE(homepages)). Отныне рекомендую всем, кто хочет написать свою игру использовать эту библиотеку. Для написания 3D игр я рекомендую посмотреть библиотеку _LINK(http://orge.org/, OGRE). Как и SDL, она кросс платформеная, распространяется бесплатно и с исходными текстами под GPL.
В настоящее время (2008)
Долгое время, после просмотра исходных кодов ядра Linux, Quake 2 и 3, tuxracer’а, я считал что C++ и ООП в играх не нужен, но после прочтения книги “Язык программирования C++” Бьерна Страуструпа я изменил свое мнение. C++ ничего не забирает у C: все преимущества C остаются и у C++, но при этом C++ многое добавляет. Все добавления спроектированы в языке так, чтобы не требовать никаких дополнительных затрат во время исполнения программы. Как Страуструп пишет в своей книге, он отметал все предложения, которые бы нарушили совместимость с C или потребовали бы расходов в runtime. По сравнению с C сильно усложнился компилятор и долгое время не было компилятора, который бы правильно реализовывал весь язык C++ (в частности, Visual C++ 6 в черном списке- он много чего не поддерживает или понимает неправильно; об этом можно найти много статей в интернете). Имея нормальный компилятор языка C++ (gcc 4 к примеру, который доступен для Windows, Linux, MacOS и других платформ) можно с меньшими усилиями чем на C написать программу, но которая будет выполняться также быстро. Кроме того, большинству современных игр не так важна скорость выполнения, как скорость графического контроллера, на который возложена прорисовка игровой ситуации.
Не так давно (на состояние 2006 год) открыл для себя еще две платформы, интересных для того, чтобы расширить свой кругозор как программиста. Одна из них- PalmOS (я приобрел себе подержаный _LINK(http://www.palmblvd.com/hardware/Palm-Inc-Palm-m105-2001-3-6-palm-pc.html, Palm m105)). Вторая- MIDP 2.0 (Java mobile edition). В общем-то довольно интересные платформы, хотя они не обладают быстрой графикой и у них не очень много рессурсов.
Links
-
World of Spectrum The official world archive for the Sinclair ZX Spectrum