Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Создание компьютерных игр выпуск 7


Информационный Канал Subscribe.Ru

Выпуск 7. Прежде чем отправиться в путь...

Здравствуйте, уважаемые читатели!

Со времени предыдующего выпуска я размышлял. Размышлял о GameSchool.ru, о статьях и обучалках, о рассылке и ее судьбе. Я вспоминал то время, когда все только начиналось. Когда я пребывал в восторге от недавно скачанных аркад для эмулятора SNES и приобретенных квестов, и при этом не желал ничего слышать о кваке, контре и прочих, тогда еще, пожалуй, новинках. Когда я, пребывая в восторге, в очередной раз сказал себе - как бы я хотел создавать нечто подобное!

Но на этот раз за словом последовало действие. Я решил обязательно выяснить, что же необходимо для того, чтобы научиться этой науке. Я искал в Интернете, и наконец нашел. И я решил поделиться найденным с такими же интересующимися людьми, как и я. А также, я решил делиться информацией и впредь, и поэтому я создал простенький сайт. Наверное, есть еще те, которые его помнят. У сайта не было ни дизайна, ни приличного хостинга, ни доменного имени второго уровня. Были только лишь несколько статей, да пара обучалок.

И все-таки, сайт выполнял свою задачу. А рассылка писалась "по горячим следам". Многому я учился на ходу, и научившись, использовал в рассылке.

И все бы хорошо, пока я, незаметно для себя, не предал основные принципы и идеалы проекта. Я попросту позабыл о них, "отдал на откуп профессионалам". А все потому, что я сам почувствовал свою мощь, сам стал в какой-то степени профессионалом.

Сейчас я работаю программистом. Настоящим С++ программистом, а не сисадмином и программистом БД на FoxPro, как было до этого. И могло бы быть и дальше, если бы я не поверил в себя и не стал всерьез интересоваться созданием компьютерных игр. И этим я обязан исключительно обучалкам, которые я до сих пор перевожу и выкладываю на сайт. Конечно, до этого я штудировал книгу Дейтелов (Х. М. Дейтел, П. Дж. Дейтел Как программировать на C), которая позволяет выстроить потрясающий фундамент знаний программирования, но обучалки - это то, что позволяет кое-что понять. Понять, что книги книгами, а программирование - вот оно! Садись и пиши. И ничего сложного, можно обойтись и без "почтенных фолиантов".

Так вот, когда я стал "работником С++", многое, о чем я собирался поведать в рассылке, стало казаться слишком простым, понятным "и так". И рассылка сильно от этого пострадала. Почувствовав такие дела, за рассылку тут же взялись профессионалы, и рассылка потеряла свой дух.

Размышляя, я осознал свою единственную ошибку, превратившую меня в "старого лектора". Эта ошибка - неумение слушать своих учеников. Если бы я больше прислушивался к их словам, я бы остался верен своим принципам, и рассылка не потеряла бы форму. И кроме того, я бы не забыл, о чем моя рассылка.

Сейчас я это вспомнил. И принял решение. Возможно, оно расстроит профессионалов, но - эта рассылка для новичков и только для новичков. И не требуйте, чтобы я поменял название. Создание простых игр - это тоже создание игр. Для профессионалов есть более узкие понятия, например "разработка коммерческих игр класса ААА". Я пойму, если профессионалы будут отписываться, но рассылка все равно остается рассылкой для новичков. Тем не менее, я с удовольствием приму любую помощь и совет от профессионалов. И я считаю, что рассылке очень нужны профессионалы-наблюдатели, готовые смириться с тем, что для себя они не узнают из рассылки практически ничего нового (как справедливо заметил один из читателей, нет такого человека, который знал бы абсолютно все).

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

Но прежде чем сделать этот первый шаг, я прошу у читателей время на размышления и подготовку. Мне также нужно время на пополнение сайта, то есть перевод новых статей и обучалок. Может быть мне будет достаточно недели, а может быть потребуется и больше времени. Пока что я точно не знаю. Но ведь мы никуда не торопимся. Когда я вспоминал о принципах и идеалах сайта, я вспомнил, что одним из основных принципов была идея - нести вечные, неустаревающие знания. Такие знания не потонут в мощном потоке технологий. Никакое "три дэ" и "мобильные технологии" не сокрушат их. Веяния моды - тленны и проходящи. Игры - вечны.

Я рекомендую тем, кто хочет отправиться в путь вместе со мной, также поразмышлять и подготовиться. Для начала посмотрите в окно, посмотрите, какая погода. Не отдавайте свою жизнь погоне за модными технологиями. Наслаждайтесь вашей жизнью. Осознайте свою уникальность. Поверьте в себя. После этого можете приниматься за дело.

А "что делать конкретно" - очень хорошо раскрывает Евгений в своем замечательном письме. Рекомендую всем прислушаться к его словам.

Здравствуйте, Евгений!

Пишу к Вам в рассылку, по двум причинам: первая - помочь(а может и protect) новичкам; вторая - предложить раздел для рассылки. (Извините за большое письмо, я пойму если его не опубликуют...) По порядку.

--------------------------------------------------------------------------------

Эта часть письма адресована, прежде всего, программистам, поскольку им труднее всего. Во первых, определитесь с чем у вас именно проблемы в написании игр. Основные трудности связаны с:
1) Невозможность полностью описать процесс из-за его сложности и обширности;(крутой AI или симулятор)
2) Невозможность общей реализации в виде программного кода (это те программисты, которые используют для написания программ Ctrl+C или Ctrl+Ins);
3) Невозможность составления отдельных алгоритмов(вроде вытирания в тетрисе и столкновений в арканоиде)
4) Проблемы с выбором средств написания(это спор о VC++ и BBuilderC++).

Разберем...

1) Когда программисты (а особенно начинающие) берутся сразу за большой проект, то у них возникает проблема с его описанием, т.к. постоянно придумывают что-то новое и пытаются это склеить со старым. Для того чтобы защитить себя от таких вот перепадов настроения программисты ведут жесткую документацию (шаг вправо, шаг влево -...) В ней они описывают все правила игры и ее структуру (ничего конкретного, только иерархию и модульность). Разбивают программу на графическую реализацию и математическую модель. Подробно о каждой из них далее.

2) Если вы не знаете, к примеру, как создать приложение в VC++, то почитайте учебник по WinAPI (http://www.winprog.org/tutorial/forgers-win32-tutorial-pdf.zip). Если не знаете, как перейти теперь от GUI к DirectX или OpenGL, то и вправду купите книгу А.Ламота или зайдите на http://www.andypike.com/tutorials/directx8 (тут лежит простенький учебник), или на сайт ведущего рубрики "Игромании" посвященной созданию игр Дмитрия Литвиненко aka AntiLoop (адреса не помню, уж извините, но вот мыло anti_loop@igromania.ru). И вполне приличную помощь можно получить на http://msdn.microsoft.com . Если же вы не хотите себе забивать голову нюансами 3д графики, то можете начать и с OpenGL. Писать на чужих движках не советую(даже на Genesis3d). Лучше прочтите теорию(толку больше, чем сидеть и смотреть как чужая либа строит на экране кубики и конусы, а теории полно в библиотеках каждого вуза).

3) Ну, а если вы, таки меня не слушали(см.2), то вам сюда. Проблемы с, на первый взгляд, простыми алгоритмами, есть результат не последовательности в обучении (отсутствии хватки программиста в составлении алгоритмов). Первое - всегда абстрагируйте сложные объекты. Второе - читайте Дейтла(сам, признаюсь, не читал, занят:( ). Третье - разбейте задачу на множество разных подзадач (именно разных!) К примеру, тот самый алгоритм вытирания строк в класич. тетрисе. Поле-сетка (массив, или что там у вас) YxX, элементы которого - индексы в массиве с картинками или цветами. Нужно создать функцию, которая вытирает, смещает (падение строк) и возвращает количество вытертых строк (для очков). Мы видим две разные задачи: вытирание и смещение. Отметим, что чем выше строка, тем дольше ей "падать", потому создаем в функции массив перемещений, для записи необходимых перемещений для каждой строки. Проверяем каждую строку на вытирание (заполнение) и заполняем массив перемещений, увеличивая с каждой пустой строкой величину перемещения. Потом перемещаем (не "копируем" а "вырезаем") все строки в поле-сетке. Это нужно делать снизу вверх, чтобы не вытереть нижние.Вот код (сначала не хотел, но потом передумал):

//Grid - указатель на структуру с размерами и данными сетки

    int move=0, score=0;                          //для увеличения перемещения и для подсчета очков
    int *movar = new int[Grid->rows];             //массив перемещений
    for (int i=0;irows;i++) movar[i]=0;    //очищаем массив этого можно не делать если массив глобальный, или auto
    for (int i=Grid->rows-1;i>0;i--)              //Идем снизу вверх( 0,0 - это у меня левый верхний)
    {
       if(CheckEraseLine(i)) {move++;score++;}   //функция проверки "заполнености" строки i, идет увеличение перемещения
       else movar[i]=move;                       //если строка i не подходит для вытирания, то ее можно перемещать на move
                                                 //позиций
    }
    for (int i=Grid->rows-1;i>0;i--) MovingRows(i,i+movar[i]);  //MovingRows функция перемещения строки i в строку i+movar[i]
    delete movar;                                //следим за порядком (можно и с [])
    return score;                                                                //возвращаем очки

Алгоритм не самый лучший(я такой бы не использовал:)), но в нем присутствуют 1 и 2 пункты. (Ну а теперь спрячте свои улыбки, потому что я мог бы вас запугать и матрицами перемещений и рядами Тейлора:)).

4) Что первее: яйцо или курица. Именно так и выглядят споры о VC++ и BBuilderC++. Раньше это были споры о Microsoft и Borland (к слову продукты Borland намного качественней,а документация по ним заслуживает самых высоких похвал, как сказал один по настоящему великий профи: "...то, что пишется в MSDN можно издавать, как книгу о тупости всего человечества и гениальности Microsoft"...). Если вы хотите разбирать вашу программу по полочкам и работать над всякими офисными игрушками, то выбирайте BBuilderC++. Более серйозные игры можно писать на нем, предварительно достигнув высот в VC++(т.к. оба в равной степени, в отличии от распространенного мнения, могут работать c DirectX и OpenGL). Я к примеру написал свою первую игрушку (tetrisA10) на Builder, а С++ выучил на VC++.

А вообще спрашивайте на форуме( в разделе для новичков, думаю, никто на вас наезжать не будет:)). И побольше пишите(программируйте)... Легкой всем отладки...

--------------------------------------------------------------------------------

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

С Уважением, Евгений aka WidowMaker mailto:widowmakerreborn@mail.ru

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

До встречи!

Евгений Казеко.
evgeniy@kazeko.com


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.games.gamecoder
Отписаться

В избранное