Разработка игр для горя и радости теория и практика создания реал-тайм стратегий

on июня 30, 2000 - 00:00

Вступление
С тех пор как я написал письмо в уважаемую редакцию "Виртуальных Радостей", прошло немного времени, но от читателей я получил огромную кучу писем. Нужно признать, что я не ожидал такого огромного количества желающих посмотреть (57 человек) на мой старый проект и задать мне вопросы по созданию собственного шедевра. Я рад ответить Вам, и раз Вы не просили конфиденциального подхода, то я решил спросить разрешения у редакции о выпуске в печать моей полноценной статьи, где бы я мог отвечать Вам на все вопросы, тем более, что тему можно развить на более профессиональный уровень.

Должен сказать, что был худшего мнения о белорусском положении с мозгами. Среди писем, порой наивных, есть и такие, которые "замазывают грязью" мое занятие по полной программе, однако, без каких-либо аргументов и встречных предложений. Это дает возможность несколько усомниться в правоте обвинителя.

Итак, мы начинаем все обсуждать с чистого листа. Отвечаю на Ваши вопросы:

1.На каком языке пишут игры под MS Windows сейчас?
На все том же Microsoft Visual C/C++. На других компиляторах пишут редко в силу того, что когда собирается команда программистов, то все они не могут одновременно знать WATCOM C/C++ из-за его непопулярности в массах. Пишите на первых порах на С, т.к. этот язык больше подходит для создания игр, но есть случаи, когда все-таки не мешает воспользоваться конструкциями С++.

2.Какую книжку купить, что бы изучать Си или С++?
Не надо только этого. Вы что - это дикость какая-то. В Беларуси и России нет доктор-программеров, которые могли бы написать нормальную книгу на эту тему. Они запудрят мозги, как это было с моими мозгами, когда я взялся такое читать. Есть нормальные книги о С и о С++ только в одном случае: если они являются первоисточниками на английском языке. Это единственный тот случай, когда меньше всего проблем возникает, если Вы знаете английский язык. Если же не знаете английского языка, то зачем Вам вообще заниматься изучением С или С++. Не дай Вам бог купить книгу "для чайников", потому что, как правило, не тот кто читает "чайник", а тот, кто такое публикует и пишет. Господи, да уехали уже давно те люди, которые могут писать книги, в Канаду или США.

3.Что лучше С или С++?
Лучше уметь писать на том и на другом и пользоваться собственными соображениями. Это тоже полезно.

Давайте только ограничимся двумя характеристиками: скорость написания программы и скорость работы программы.

Если нужна скорость при разработке, когда пихают в спину, - берете на вооружение С++, а если никто не гонит, то берете С и пишите красивый гибкий код (как для потомков). С лучше даже при понимании исходного текста, и этот же исходный текст повысит qjnpnqr| компиляции, нежели завернутые конструкции С++. Про пользу объектно-ориентированного программирования я спорить не стану, но поймите, что С тоже можно наделить некоторыми свойствами объектов. Конечно же, сокращения. Я на своем опыте убедился, что лучше всего писать программы таким образом, чтобы функции и глобальные переменные выделялись в один объект, которому они принадлежат (например, M_Update (), BOOL M_Rbutton для мыши). Как оказалось, не один я такой умный, а даже наоборот, т.к. Michael Taylor, Haruhiro Akumaro (и тот же Carmack) используют их за милую душу. Т.е. есть стандартные описания объектов. Я хотел бы сразу помочь при описании именования их: J_ - Joystick,K_ - Keyboard,M_ - Mouse, DD_ - DirectDraw (графика), D3D_ - Direct3D, DS_ - DirectSound (звук),DI_ - DirectInput (для инициализации мыши, клавиатуры, джойстика, а также проверки на наличие устройств с фидбэком), DP_ - DirectPlay (сетевые игры), G_ - Ядро игры, GC_ - Ядро клиента (Client Core), GS_ - Ядро сервера (Server Core), E_ - Engine и все-все, что нужно для заданного направления игры, W_ - Ядро Winmain (организация цикла и управление приходящими сообщениями), MM_ - Main menu (главное меню, его все чаще делают всплывающим, т.к. когда вы запустили игру, вы не на заставки посмотреть захотели).

Это очень маленький набор основных компонент, которые Вам придется создать, если хотите достичь высот при написании на стильном С. Для того чтобы это не выглядело голословно, я Вам покажу, как это выглядит у меня, тем более, что некоторые (особо наглые) просили дать им исходные тексты. Вот, смотрите:

CPP:

bc.cpp; c_core.cpp; c_keyboard.cpp; c_mouse.cpp; c_ddraw.cpp; c_ggame.cpp; c_bcd.cpp; c_gmap.cpp; c_loop.cpp; c_font.cpp; c_mm.cpp; c_dsound.cpp; c_mq.cpp; c_msp.cpp; c_mmp.cpp; c_mme.cpp; c_mc.cpp; c_mo.cpp; c_mnm.cpp; c_ge.cpp; c_mlm.cpp;

c_gclient.cpp; c_gserver.cpp; c_mng.cpp; c_mlg.cpp.

Headers:

resource.h; c_keyboard.h; bc.h; c_core.h; c_ddraw.h; c_mouse.h; c_bcd.h; c_loop.h; c_font.h; c_mm.h; c_dsound.h; c_mq.h; c_msp.h; c_mmp.h; c_mme.h; c_mc.h; c_mo.h; c_gmap.h; c_mnm.h; c_ge.h; c_mlm.h; c_gserver.h; c_gclient.h; c_ggame.h; c_mng.h; c_mlg.h.

Если Вы заметили, большинство исходных текстов начинаются на "c_", что означает принадлежность исходных текстов к ядру (core) игры.

Следующие дальше обозначения указывают на принадлежность к объектам. Также Вы заметили, что исходные тексты все же на С++. Это объясняется тем, что я использую некоторые конструкции С++, чего и Вам желаю.

4.Какие графические ресурсы использовать для создания игры?
Я настоятельно рекомендую не работать вообще с 8-битными ресурсами, т.е. строго завязанными к Вашей палитре. Так никто никогда не делал из профессионалов. Вам нужно работать с 24-битными ресурсами, потому что они вам позволят делать реалистичные спрайты. Использовать лучше TGA файлы, потому что они весьма просты в использовании и их поддерживает 3D Studio MAX и Photoshop.

Весьма интересное содержимое у этого файла. Заголовок на 17 байт, а дальше - просто Ваши данные один к одному (правда, вверх ногами). Только учтите - не соглашайтесь на компрессию, а то вы не сможете работать с таким форматом, а если и сможете, то достаточно медленно.

Есть, конечно, и другие форматы. Например, BMP - файл, который доступен так же, как и TGA. Если говорить о том, как же быть со скоростью игры, где идет работа полным ходом с 24-битными ресурсами, то это действительно будет выглядеть неприятно даже на быстрых машинках, но избежать этой проблемы можно, используя акселератор либо сделав конвертор всех ваших 24-битных ресурсов в 8-битные под одну палитру. По последнему способу, собственно, и были конвертированы ресурсы Starcraft и Warcraft.

Многие акселераторы не поддерживают акселерацию 24-битной графики, и поэтому важно сделать еще и реал-тайм конвертор 24-битной графики в 16-битную и 32-битную. Кстати, у спрайтов должен быть какой-то цвет "невидимым". Я выбираю черный (Red=0,Green=0,Blue=0), но это вовсе не означает, что яркий фиолетовый, яркий белый не подходят для этих целей. Черный же цвет лучше был для меня, потому что все сцены мои были светлыми.

Я вам насоветовал пользоваться 24-битными ресурсами, но забыл о том, что ведь Вы можете и дальше пойти. К примеру, захотите пользоваться 32-битными ресурсами, и тогда Вам вообще не нужно понятие "невидимый цвет", потому что в системе RGBA есть тот самый Alfa-канал (opacity), который будет и гарантировать прозрачность (или уровень прозрачности) спрайта. Учтите, что такой механизм без акселератора будет работать крайне медленно, и далеко Вам по проекту продвинуться не удастся. Битблиттинг (отображение спрайта) даже на самом лучшем акселераторе проходить будет медленно. Но не расстраивайтесь, потому что 16-битная графика тоже прекрасна и так же, как и 32-битная, может работать в системе RGBA (R=5;G=5;B=5;A=1).

5.Каким ПО пользоваться для создания графических ресурсов?
Здесь совсем просто. Вы берете Adobe Photoshop от 3.0, Kinetix 3D Studio Max от 1.2, Metacreations Poser 3. Kinetix 3D Studio MAX 3.1.

Но учтите, что ввиду несовместимости MAX-моделей последующих версий с предыдущими, вам необходимо остановиться на одной версии 3D MAX'а. Предлагаю, найти Kinetix 3D Studio Max 3.1. В новой версии MAX много исправлено ошибок (кстати, и добавлено) и улучшен пользовательский интерфейс. Главное, чтобы Вы ухватили его принцип работы, а уж это, поверьте, несложно, если Вы желаете этого сами. В 3D Studio MAX настоятельно рекомендую делать модели в формате MAX и 3DS (как общий и транспортируемый), а текстуры - в формате TGA (24 bit, no compession).

Adobe PhotoShop 5.5. Все Вы пользуетесь, конечно, этим средством, хотя и есть в нем много ошибок, но все же ему нет полноценной замены. Естественно, объяснения будут излишними. Все мы когда-нибудь его использовали.

Почему я не обмолвился ни словом о Corel Draw? Я это Вам объясню очень легко. Corel Draw немного не подходит для работы с графическими ресурсами, да и предназначен он больше для издательского дела. С помощью его успешно делают этикетки для селедки, майонезов, горчицы, чипсов "Лявон", а это не одно и то же, что обрабатывать анимированные графические ресурсы.

Metacreations Poser 3. Это очень замечательная программа, которая Вам легко позволит создать за несколько минуты человека при помощи нескольких простых операции: установка пола и возраста человека, его положение в пространстве, волосы, освещение, камера, толщина бедер, величина полушарий мозга.

Все просто, но самое интересное, что Вы можете экспортировать модели в 3DS, который потом уже загрузите (импортируете) в 3D Studio MAX.

Вспомните Медика из StarCraft'а, а точнее, анимацию, где лицо показывается крупным планом и в движении. Такое лицо вы без труда воссоздадите в POSER'е, тем более, что оно такое по умолчанию: правильные губы, брови, глаза, нос (только родинку добавить осталось). Уж очень напоминает лицо Лары Крофт (из Tomb Raider). На свете не бывает таких совпадений, как здесь. При помощи POSER'а очень удобно делать спрайты. И такого уровня ПО - большая редкость в наших краях.

6.Каким ПО пользоваться для создания звуковых ресурсов?
Не могу навязывать, но сам я пользуюсь Sound Forge 4.0, и у меня почти никогда не было проблем с ним. Хочу предупредить, что как-то мне попалась русская версия Sound Forge 4.5, и там PCM WAV, а именно этот формат нам нужен, не правильно сохранялся и его содержимое не было даже и близко похоже на PCM WAV.

В общем, лучше всегда себя спросить: "А нужно ли мне менять шило на мыло?". Качество звуковых ресурсов в игрушках достаточно разнообразно, но чаще всего используется на уровне 22 KHz, 8bit, Mono. Этого вполне достаточно, чтобы монстры стонали и звучали сочные "Yes, sir".

Кстати, CoolEdit тоже неплохое средство, но немного примитивен в том варианте, каком я его увидел.

7. Как написать музыку к своему шедевру?
Очень хороший вопрос. Я увлекаюсь созданием музыки. Иногда, занимаюсь плагиатом, но когда идет речь о своем шедевре, то ставку делаю только на свою музыку, за которую я не "получу по голове". Вопрос из заголовка мне задал один из первых людей, кто побывал на моем сайте и выкачал BlackCore (1.7 Mb). Там была музыка (правда, в WAV), и он удивился, когда заглянул в 'CREDITS', где написано "MUSIC, SFX: PAVEL GORBUNOV". Качество там плохое: 22 Kb, 8 bit, Mono, т.к. эта демо-версия для Интернета.

Объясняю, пользуюсь я только Impulse Tracker 2.14, ModPlug Tracker 1.0, FruityLoop.

Эти три программы хоть и не позволяют написать музыку CD-качества, но зато делают это быстро и красиво. Попробуйте, и Вам понравится. Думаю скоро открыть сайт, где размещу свои музыкальные шедевры в MP3 для потомков. Ну, для примера, как не надо писать музыку. В общем, ди-джеи отдыхают!

8.Какие проекции использовать?
Реал-тайм стратегия в классическом виде всегда представляется как вид сверху. Вспомним, что в Warcraft'е нельзя спрятаться за дерево и за барак, но между тем обе части бестселлера смотрятся прекрасно. Это очень простой путь, но современный геймер, увидев такое, посмеется и вернется к Age of Empires 2.

Такие стратегии, как Age of Empires, делать намного интересней, но сложней. Только не стоит пугаться. Если на чистоту, то ведь их изометрия стоит не больших усилий от программиста. Отношение вертикали к горизонтали у них составляет как один к двум, и, следовательно, текстуры пола могут быть выбраны такими, как 32x16, 64x32, 128x64 и т.д.

9.Как делать графические ресурсы для изометрии?
Это может показаться сначала сложным делом, но если взять на вооружение мой опыт, то вам будет легче. Итак, в 3D Studio MAX нарисуйте лежащий квадрат (как Rectangle) и сделайте ему Extrude (Amount: 0,0). Дальше установите Free Target Camera и направьте ее под углом 60 градусов к Вашему квадрату. Ваш квадрат будет похож на "зажатый" ромб. Если вы выполнили все это правильно, то обратите внимание и на другие трудности. У своей камеры не забудьте поставить "птичку", что она изометрическая, а не перспективная. Не забывайте, что когда делаете Render - размеры не должны быть 640x480, 320x240, 800x600, они должны всегда находиться в пропорции один к одному (т.е 400 на 400, 200 на 200 и так далее).

Так мы получаем кусочек пола, а если на этот квадрат нанесем еще и текстуру земли, воды, травы, песка, то получим и замечательный задний план, как в Age of Empires. По тому же принципу создаем наших юнитов, здания, лес, коряги, камни. Если мы хотим, чтобы юнит не выходил за границы платформы, то ставим его на эту платформу, и когда юнит готов, то обрабатываем его в Photoshop таким образом, чтобы убрать платформу. На практике бывает не всегда легко отделить платформу от юнита, здания и т.д., но если убрать Anti-Aliasing в Рендерере 3D MAX'а, то это получается очень легко в 100% случаев при помоще MagicWand PhotoShop'a.

10.Какими параметрами пользоваться при создании проекта? (и все прилежащие к нему вопросы)
Предположим, что проект создается для MS Windows'98, а значит он будет обязан работать и под MS Windows'95, MS Windows'2000, MS Windows NT 4 Server/Workstation (с SP3 и +). Если мы хотим такой продукт, то берем безальтернативно MS Visual C/C++ 5.0 или 6.0 и MS DirectX 7.0 SDK (5.0 или 6.0 тоже хорошо). Создаем в IDE от MS Visual C/C++ новый Win32-application проект. Вообще, я рассчитываю на то, что Вы знакомы с C/C++.

Стоп! Если Вы не знаете C/C++, то вам стоит им плотно заняться сейчас, потому что этот язык Вам в жизни пригодится, если вы себе добра желаете. Чем лазить без толку в поисках работы и/или игрищ по Интернету, изучите этот язык. Это займет в лучшем случае год, но это, поверьте, стоит того. На Диком Западе, к примеру, давно перестали обращать внимание на HTML-дизайнеров (Дизайнеры? Извините, не могу я назвать их программистами), которые не имеют представления о C или C++.

Это обидно, но в чем же здесь секрет? Знаете ли вы, что JAVA, Perl сильно похож на C++, да и хорошее умение работать с UNIX-серверами это почти одно и то же, что знать хорошо C/C++? Теперь я вас уговорил изучать C/C++?

Кстати, хочу сказать по поводу WATCOM C/C++, как об альтернативе Microsoft Visual C/C++. Да, WATCOM C/C++ 11.0B-release - замечательное средство, но я отказался от использования его после моего предыдущего проекта. Дело в том, что на Западе мало знают о WATCOM, и если бы Вы "метили на Запад", то Вам засмеялись в глаза. Войдите в их положение. К примеру, у них штат в 5 программистов на MS Visual C/C++, а тут каким-то ветром заносит Ваткомщика. Они точно подумают, что ты ругаешься каким-то новым ругательным словом "Ватком" и даже могут security позвать, чтобы тебя выгнали.

Вернемся же к нашему проекту. Теперь я дам пару советов по поводу использования MS DirectX SDK.

11.Чем хорош MS DirectX? (и все прилежащие к нему вопросы)
MS DirectX - замечательное средство всех времен и народов. Именно это средство не дает Linux отобрать рынок игрищ у Microsoft. DirectX, в самых общих понятиях, - это и графика, и звук, и сетевая резня, и обработка разнообразных устройств ввода, и даже готовый движок для 3D-игр.

Какие же из его модулей нужны нам:

1. Для работы с графикой нам нужен будет только DirectDraw (DDraw);
2. Для работы со звуком нужен DirectSound (DSound);
3. Для сетевого варианта - DirectPlay (DPlay);
4. Для слежки за мышкой и клавиатурой можно воспользоваться DirectInput (DInput).

Если Вы уже знакомы с понятием QueryInterface в DirectX, то подумайте о пользователях NT. Чаще всего у них стоят Service Pack 3, а это равносильно DirectX 3, и значит, от некоторых новшеств в стиле DirectX лучше отказаться. Просто следите за общепринятой практикой и сверяйтесь со своим проектом. Ведь ради Вашей игры никто не станет ставить Service Pack 6 на ответственный NT-сервер.

12. Какую книжку купить, чтобы изучить MS DirectX SDK?
Дело в том, что книжек нормальных в природе на эту тему быть не может, т.к. кто знает хорошо Microsoft DirectX, тот уже имеет хорошо оплачиваемую работу (не в пример, конечно же, Я и Беларусь в целом) и уже имеет дела важней, чем писать книги.

Помочь начинающему может только нормальная родная документация к MS DirectX SDK на английском языке. Она идет в виде CHM-файлов (похож на HLP-файл) вместе с SDK 6 и 7. Есть, конечно, и варианты в виде DOC и HLP. CHM-документация очень проста и последовательна в освещении вопроса, и поэтому это лучший путь изучения. Не забудьте и про исходные тексты примеров приложений под MS DirectX, потому что они являются лучшим вариантом для начала изучения. Вообще, MS DirectX компоненты лучше изучать в следующем порядке:

1. DirectDraw;
2. DirectInput;
3. Direct3DIM (Immediate Mode);
4. Direct3DRM (Retained Mode);
5. DirectSound;
6. DirectPlay.

Я не хочу, чтобы Вы обращали внимание на DirectMusic. Пока это очень несерьезный компонент, а проигрывать MID можно и при помощи MCI стринга. CD-музыку тоже можно проигрывать при помощи MCI.

13. Как лучше разобраться с ресурсными файлами?
Лучше всего в директории проекта создать поддиректорию (например, DATA), и туда сбрасывать готовые ресурсы в виде TGA. Почему делать так лучше? Когда вы решите все ресурсы собрать в один файл, то им будет легко создать список, даже при помощи "DIR *.TGA > WAD.LST". Дальше можете крутить своими ресурсами списком. Безусловно, для предания коммерческого вида игре нужно будет обязательно собрать ресурсы в один файл. Сейчас стали все чаще появляться сырые игры, где любой среднестатистический пользователь может без чужой помощи редактировать и заменять графические и звуковые ресурсы игры (пример: "Worms 2: Armageddon"). Не нужно давать лишнего повода пиратским издательствам, типа "7-ой волк", русифицировать и без того почти русскую игру. Об этих издательствах вообще уже много говорилось и без меня в "Виртуальных Радостях", а поэтому я не стану заострять внимание на теме "пользы" русификации.

14.Как стратегически правильно подойти к процессу создания стратегии?
Для работы с графикой Вы должны подготовить свою библиотеку (на C/C++), которая легко бы работала со спрайтами в любой разрядности. Ведь в том-то и смысл, что разному пользователю нравится (и/или подходят) разрешения от 640x480x8 bit до 1600x1200x32 bit. Лучше все с самого начала формировать под минимальное разрешение 640x480, но только не цепляйтесь жестко за координаты внутри этого разрешения, потому что пользователь поставит 800x600, и мы получим тот эффект, который наблюдали в Quake при разрешении 800x600 (смещение в левый-верхний угол (уже маленького) меню). Что ж, этот участок кода самый сложный, и если вы не реализовали как следует, то не отчаивайтесь. Еще нет в мире такой игры, где все было бы прекрасно в подходе к способу изображения (вывода).

Когда Вы научитесь выводить в своем проекте TGA и сделаете свой мультиресурсный формат, то у Вас возникнут вопросы, связанные со звуком. Честно говоря, звук в игре, по моему мнению, это то, о чем стоит заботиться в конце проекта, тем более, что MS Direct SDK содержит все необходимые примеры работы с PCM WAV.

Вам надо сделать несколько модулей, предназначенных для работы с клавиатурой и мышью. Не забывайте, что в процессе создания вам очень понадобится таймер.

15. Как быть с сетевой игрой?
Что касается сетевой игры, так это особый разговор. Стратегия без возможности сетевой резни - это не стратегия, а какая-то Role Playing Game. В общем, сеть в стратегии - это даже тогда, когда вы hcp'ere в нее против компьютера. Почему так? Если вы знаете, что такое Client/Server технологии, то уже догадываетесь, что для режима Single Player Клиентом и Сервером одновременно является Ваша машина. Почему все так?

Очень просто. Ваша система должна работать одинаково, когда игрок один и когда их восемь. Все нормальные стратегии работают именно на этом принципе. Это позволяет легко исправлять ошибки и делать сетевую версию без наличия второго компьютера. Второй компьютер вам понадобится только тогда, когда вы возьметесь за реализацию сетевого модуля на базе DirectPlay.

Естественно, что при использовании Client/Server технологии необходимо помнить о том, что Вы должны научиться создавать минимальные структуры данных для обмена Client-to-Server и Serverto-Client. Как же быть с такой огромной картой, где 1000 юнитов, 1000 зданий и куча без толку слоняющихся роганазавров? На первый взгляд кажется, что задача не для простого смертного, но ведь Blizzard сделала такое, а англоязычные люди по сути своей не самый умный народ, потому что их язык примитивен. Вы со мной можете не соглашаться, но попробуйте учить Биологию на нем, если у слова Body - огромное количество значений. Да и наши люди, которые уехали в USA, жалуются на отупение и на отсутствие в их колледжах инженерных профессий. Когда гуманитариев становится много, это до добра не доводит. Тогда и Американский флаг начинает развиваться под действием ветра на Луне (в условиях, где слово "атмосфера" и "ветер" наталкивает на вопрос: "Какая атмосфера? Ветер? Что такое ветер?"). Убедил? Это я к тому, что задача на самом деле элементарная и знания теологии не требует. Вся она сводится к Системе Идентификации.

16. Что такое "Система Идентификации"?
Система, конечно, не совсем простая, но давайте представим двумерный массив 128x128. Это такой массив, который мы можем увидеть в Warcraft 2, Starcraft. Возьмем за основу эксперимента Warcraft, но только хорошенько вспомните его.

Итак, на заднем плане мы видим землю, траву, песок, воду, лед, снег и т.п. Этот слой называется традиционно BG-layer. Он мало чего характеризует, и в частности, он не позволяет вашим оркам ходить по воде, а вашим кораблям плавать по суше. Это займет 128 x 128 x 1 byte = 16384 byte (16Kb). Этот слой никогда не изменяется, и поэтому серверу и клиенту не нужно ничего обновлять.

Пойдем дальше и возьмем следующий слой. Следующий слой отвечает за ресурсы. Деревья и золото вы видите изображенными поверх заднего плана. Этот слой будет занимать уже 128 x 128 x 2 byte = 32Kb, но у него и другая система. Т.к. этот слой должен иметь пустые места в большинстве своем, то для указания его мы будем использовать значение 65535 (т.е. 0xFFFF). Значения же не равные ему (т.е. [0;65534]) будем использовать для идентификации каждого объекта. Например, дерево должно иметь в массиве структур данных свой ID. Этот ID на карте укажет, к какому структурному элементу массива нужно обращаться. Я попробую привести пример структуры данных для дерева:

1. Флаг изменения (BOOL: 1byte). Он говорит серверу о том, нужно ли отправлять структуру данных клиентам. Клиент же может говорить серверу, что PEON рубит дуб и ресурсная единица у дуба падает. В этом случае сервер должен занести себе в базу эти изменения. Этот флаг и покажет, нужно что-то менять или это дерево никто не трогает.

2. Величина (WORD: 2 bytes). Ресурсная единица, заложенная в это дерево. Она в Warcraft 2 крайне мала, и поэтому вашим крестьянам все дальше приходится тягаться.

3. Флаг состояния (BOOL: 1 bytes). Это могут быть два состояния: "дерево существует" и "пеньки" (дерево вырублено и допускает, чтобы по нему ходили).

4. Резерв. Иногда резервируют немного памяти, чтобы в дальнейшем можно было улучшить возможности игры. Например, если вдруг приспичит раскачивать деревья, то величина будет показывать направление дерева по ветру.

Всего же структура для дерева заняла 4 (1+1+2) байта.

Как видите, структура маленькая и даже наличие деревьев на всей области в 16384 клеток (чего и не может быть) вам понадобится всего 4 x 16384 = 64Kb. Это мало.

Я чуть не забыл о золоте, которое берется из шахты. Структура будет той же, но необходимо, чтобы мы различали - где деревья, а где золото. Для этого разделим идентификаторы на две зоны. 1-ая зона: 0-65000 для деревьев, а остаток до 65534 оставим для золота.

Думаю, что Вам станет еще понятней, когда я опишу следующий слой. Следующий слой отвечает за постройки. Построек может быть больше, чем 255, а поэтому для этого слоя тоже берем 128 x 128 x 2 bytes = 32Kb. На нем, так же как и на слое с деревьями, ставятся ID от 0 до 65534, а 65535 оставляем для обозначения пустот. В соответствии с этими ID ставятся структуры данных для построек.

Вот приведу пример:

1. Флаг изменения (BOOL: 1byte). Он означает почти то, что и в случае с деревьями.
2. Тип здания. Это может быть ферма, барак, кузница и т.д.
3. Хозяин здания. Номер игрока, а визуально - это просто цвет здания.
4. Защита здания. К примеру, если оно спускается до какой-то критической величины, то мы еще должны изобразить пламя огня.

5. Состояние здание. Здание может быть в нескольких состояниях: "строится", "улучшается", "просто стоит" и др.

Я не стану описывать структуру, которая отвечает за тренировку юнитов и улучшения брони, топоров и т.п., но не все так сложно. Вам нужен будет счетчик, который завязан за таймер.

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

17. Как взять комплектующие для тестов и купить все необходимое?
Ну, для того чтобы ознакомиться со списком таких фирм, Вам нужно только открыть новый номер "Компьютерной газеты". Не все, конечно, фирмы одинаково Вам полезны. Ищите те, которые представляют из себя маленький, но милый офис, где работают не покладая рук и все держится на трех китах (менеджер, суппортер и сборщик конфигураций). Их офисы и то, как они одеты, говорит лишь о том, что они не торгуют "левым" брендом, а торгуют техникой, которая на поверку оказывается долговечней того же бренда и дешевле порой процентов на 60%. С такими фирмами легко договориться и всегда можно обсудить будущую покупку. Они легки на подъем и всегда борются за любого клиента.

Дело в том, что если Вам все же хочется видеть малиновые пиджаки и крупные модные надписи на стенах, то можете попробовать сходить и в такое заведение. Здесь нужно платить дважды, но тогда зачем Вам заниматься разработкой игр, если все, кто играет, играет не на их бренде, а на конфигурациях, собранных трудоголиками из малогабаритных фирм. Если Вы захотели поменять комплектующие, взять на тест, узнать о новинках рынка, то мой вариант достаточно перспективен. Я работаю с такой малогабаритной фирмой, и они просто стали моими друзьями (естественно, название я Вам не скажу по ряду причин). Пусть у таких фирм не все имеется на складе, но выбирают они технику с любовью и Вам не придется огорчаться заказанной покупке. Брак всегда был и будет, но порядочность свойственна не всем.

18. Какими конфигурациями пользуюсь я?
Компьютеры покупал, конечно же, у вышеописанных ребят. Я выбирал конфигурации так, чтобы они как можно больше отличались:

Первая конфигурация:
1. MainBoard: Chaintec 6BTM (BX440/ Slot1)
2. CPU: Celeron-366 (66Mhz Bus - Slot1)
3. RAM: 64Mb DIMM PC100
4. HDD: Fujitsu 10,2Gb; UDMA 66,6; S.m.a.r.t.
5. FDD: Samsung 3.5" (Mode3 suppport)
6. VideoCard: Gygabyte 3DFX Voodoo Banshee AGP (16Mb)
7. SoundCard: Yamaha 724
8. Power Supply: ATX 230W9. TVCapturer: AverMedia (BT686)
10. Keyboard: Win95 PS
11. Mouse: PS/2 2keys
12. CD-ROM: 40xspeed ACER (UDMA)
13. Monitor: Dell P790

Вторая конфигурация:
1. MainBoard: Asus 1741 (100Mhz)
2. CPU: AMD K6-3DNOW!-III 450Mhz (100Mhz Bus / S.socket7)
3. RAM: 32Mb DIMM PC100
4. HDD: Samsung 6,8Gb; UDMA 66,6; S.m.a.r.t.
5. FDD: Mitsumi 3.5" (Mode3 suppport)
6. VideoCard: S3 Savage4 SGRAM AGP 2x (8Mb)
7. Power Supply: ATX 230W
8. Keyboard: Win98 PS
9. Mouse: PS/2 2keys
10. Monitor: Samsung 550S (+ 2 сетевые карты NE-2000.)

Естественно, что компьютеры я собирал сам, потому что, несмотря на уважение к фирме, такое дело доверяю одному человеку на свете - себе и только себе (а как еще можно убедиться, что все подключено правильно?).

19. Имею ли я собственный URL?
Я имею собственный сайт и рекомендую завести Вам подобный свой, где расскажите о себе, о том, что реально интересно всем, а не то, что интересно Вам. Итак, мой URL: http://www.developers.f2s.com.

Как я и говорил в прошлый раз, на Вас могут обратить внимание только при этом способе.

Слова для продолжения разговора
Что ж, у меня есть возможность рассказать о моем многолетнем опыте, но что хотели бы услышать читатели, я не могу предсказывать. Чтобы я написал на интересующую Вас тему, вам достаточно написать мне письмо по электронной почте - и я разверну любую из указанных вами тем в следующем номере газеты. В крайнем случае, попытаюсь.

Павел Горбунов

№ 5-6

Яндекс.Метрика