dieformetal 21.10.2010 15:49

Есть вопрос!О программировании игр.

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


Тэги: coding games вопрос
+ 2 -
Похожие Поделиться

predator 21.10.2010 16:29 #
slang - кроссплатформенная библиотека для работы с терминалом (в т.ч. обработка нажатия клавиш)
dieformetal 21.10.2010 16:40 #
Аналог ncurses/termios?
predator 21.10.2010 16:54 #
ну у curses есть ещё графический интерфейс (и наверно ещё много чего), о termios незнаю ничего. Но slang подходящая вещь, если нужно: считывать символы с терминала, сделать прогресс бар =) это всё что я знаю о slang =)
dieformetal 21.10.2010 17:23 #
А в чем выигрыш по сравнению с ncurses тогда?
predator 21.10.2010 21:22 #
1) если не нужен псевдографический интерфейс
2) у slang по-любому есть свои фишки
m0nhawk 21.10.2010 17:00 #
Ничего. Это пройдёт.
dieformetal 21.10.2010 17:50 #
Мне чисто для практики.
wiz 21.10.2010 17:19 #
рекомендую начать с питона. на сях очень много лишней писанины.
wiz 21.10.2010 17:19 #
а на питоне есть pygame :3
dieformetal 21.10.2010 17:50 #
Не нравится питон =(
vovans 22.10.2010 10:05 #
а приходилось с ним сталкиваться?

Интересно, чем может не нравиться питон... Для обучения самое то.
cppmm 21.10.2010 18:42 #
Не знаю, как делаю профессионалы, я лично когда раньше пробовал, ну и сейчас в свободное время балуюсь действую по такой схеме(примеры очень условны, прошу не придираться):
1. Вкратце описываю для себя, что моя игра должна уметь.
К примеру, нужно уметь передвигаться по карте, при попадении в отдельные области карты, должны происходить какие-либо события(ловушки, двери и т.п.). Так же по карте передвигаются мобы. Они так же реагируют на события. Мобов можно отстреливать. Они могут отстреливать меня. На карте могут валяться боеприпасы, их и я, и мобы могут подбирать. Корованы грабить пока нельзя.
2. Делю игру на ядро(движок) и доп-функционал. Я для себя сразу решил, что всё, что игрок видит должно быть отделено от математики внутри. Проще говоря, карта поделена сеткой на квадраты, игрок или мобы может находиться одновременно в одном квадрате и перемещаться на соседние. Это всё просчитывается исключительно в программе, никаких координатных сеток и прочего игрок не видит. Он видит некий фронтенд, который как раз принимает эти самые координаты и в зависимости от этого отображается соответствующую картинку. Далее, мобы должны уметь двигаться, обходить стены и стрелять по мне(о алгоритмах ниже). Таким образом я выделяю искуственный интеллект тоже в отдельный модуль. На карте могут находиться ловушки, стены, двери и боприпасы. Всё это дело я выделяю так же отдельно.
Итого:
1. Ядро - реализация и возможность перемещения объектов по координатной сетке. Передача от одного объекта к другому, событий, в случае, если они находятся на соседних клетках координатной сетки(взять патроны, врезался в стену и т.п.). Здесь описываются существующие в данном мире объекты.
2. Интерфейс управления - отображение всего, что насчитала внутри программа игроку и приём команд от него. Будут это передвижения мышки, нажатия клавиш или даже просто ввод текстовых комманд - неважно. Всё это реализуется здесь, ядру передаются только краткие чёткие команды.
3. Реализация искусственного интеллекта. Передаёт ядру те же команды, что и интерфейс управления, только команды эти генерируются программой.
4. Конкретные описания всех объектов, встречающихся в игре.

3. Непосредственно начинаю это дело реализовывать. Сначала я начал реализовывать минимальный набор базовых функций. Т.е. например, мне надо в игре иногда получать случайные значения, я пишу функцию, которая принимает в качестве аргументов количество запросов на случайное число и диапазон, отдаёт массив чисел. Из таких мелочей потихоньку я складываю ядро. Пока без привязки к остальным модулям. Я знаю, что ядро может принимать команду переместить игрока на координатной сетке, но сначала я просто реализую возможность перемещения, тестируя всё каким-нибудь выводом координат в зависимости от нажатия стрелочки(
1: x/y=1/1
2: Нажатие стрелки вверх
3: x/y=1/2)
И так далее. Собирая по маленьким кусочкам подбираюсь к основному ядру. Как будет готово ядро, планирую браться за реализацию объекта игрока/монстра - эти объекты различаются очень мало. Интерфейс - в последнюю очередь. Причём я планирую возможность работы с любым интерфейсом - хочешь, на opengl'е пиши, хочешь в web-интерфейсе играйся. Главное, проработать протокол общения между этим интерфейсом и ядром.

Могу порекомендовать почитать вот этот блог. Для ознакомления. Оттуда можно выйти на множество других ссылок. Ну и гугл-википедия-гугл-учебники по программированию-гугл. :)
Для разработки ИИ придётся вникнуть нехило в матан, для связи между частями не помешает ознакомление с сетевыми протоколами общения и с протоколами связи частей в крупных проектах(да те же кеды с их плазмой и всем, что к ней прикручивается). Ну и объектно-ориентированное программирование значительно облегчит задачу, но надо учитывать, что зацикливаться на нём не надо. Объекты и методы должны упрощать, когда же есть способ реализовать то же самое банальной функцией и тупо прогнать через неё переменную, не надо подключать здоровенный класс с кучей мегасвязей(привет python, привет java ;) ). Возможно даже в некоторых местах понадобится использовать несколько языков программирования. Надо смотреть по ситуации.

P.S. Это моё видение этой задачи. Я так делаю игрушку в свободное от работы время, как и ТС в основном для углублённого изучения языка. Будет ли это вообще работать - я хз. Я даже не программист, поэтому если я где-то написал откровенную чушь, не стоит гневных криков, просто поделитесь своим решением.
dieformetal 26.10.2010 15:49 #
О, спасибо, примерно это я и искал)) буду вкуривать по такому плану.
NeonLight_Child 21.10.2010 20:19 #
В субботу на московском инстал фесте буду показывать как писать игры на примере sdl+opengl. После феста, выложу статью с примером полноценной игры. Статья уже написана, но выложу только после феста. А пока, можешь полазить у меня на linuxgamesdev.blogspot.com. Из инетовских ресурсов можеш посмотреть на:
1) журнал Lingametecр:http://lingametech.com, в частности http://lingametech.com/index.php?option=com_weblinks&task=view&catid=15&id=12
2) на статьи из журнала Linuxformat:
N98:http://wiki.linuxformat.ru/index.php/LXF98:%D0%A1%D1%82%D1%80%D0%B5%D0%BB%D1%8F%D0%BB%D0%BA%D0%B0
N103:http://wiki.linuxformat.ru/index.php/LXF103:%D0%A1%D1%82%D1%80%D0%B5%D0%BB%D1%8F%D0%BB%D0%BA%D0%B0
3)Сайт http://plg.lrn.ru, в частности http://plg.lrn.ru/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
4)gamedev.ru, еще много интересного можно найти на www.boolean.name
Я "учился" на статьях из LinuxFormat и на исходниках SDL-Ball: http://sdl-ball.sourceforge.net/
digiwhite 21.10.2010 20:46 #
dieformetal 26.10.2010 15:07 #
Да, местами есть интересные ссылки.
Мне скорее интересно написать движок попробовать, чем сляпать игру на уже имеющемся.
Minoru 08.06.2011 18:25 #
Если интерес к вопросу не пропал, попили shooter.
dieformetal 09.07.2012 18:23 #
Много набралось, пока меня не было =) наверное не воткну быстро в код =)