Написание игр на c уроки. Почему я пишу игры на C (да, на C)
Почему большинство игр пишут на C++?
Почему большинство игр пишут на C++? Почему не Java, C#? Чем этот C++ так выделяется среди остальных ЯП?
maxim_tuchin
> Чем этот C++ так выделяется среди остальных ЯП?
Отсутствием больших накладных расходов на обеспечение функциональности и максимально возможной производительностью.
- 1 frag / 2 deaths
- Участник
maxim_tuchin
> Да и c++ кроссплатформенностью страдает.
Он-то ей хоть как-то страдает, а вот у жабы и шарпа кроссплатформенность существует только в красивых презентаициях теоретиков.
- cNoNim
- Участник
maxim_tuchin
покачану.
тема розжыг 146%
maxim_tuchin
> В отдельных случаях, java даже более производительна
maxim_tuchin
> по мне, так он неудобный
если ты все знаешь что ты хотел еще спросить?
- Sh.Tac.
- Удалён
тут ещё хотелось бы узнать какие игры автор имеет в виду?
потому как на серверах и мобилках жава и так рулит : )
- 0iStalker
- Модератор
maxim_tuchin
> Почему большинство игр пишут на C++?
Вся библиотечная инфраструктура, потому что, на С/С++ написана и найти качественные аналоги/реализации под другие языки, очень часто, найти бывает очень трудно.
- maxim_tuchin
- Постоялец
Sh.Tac.
Десктопные конечно)
- cNoNim
- Участник
maxim_tuchin
> Народ, помогите определиться в изучении лучшего яп для создания десктопных игр!
> Плиззз.
haskell
- Eugene
- Участник
maxim_tuchin
> В отдельных случаях, java даже более производительна
Был уже один гений, писавший игру на Жабе. Так получился майнкрафт.
- Kartonagnick
- Постоялец
maxim_tuchin
> Народ, помогите определиться в изучении лучшего яп для создания десктопных игр!
> Плиззз.
- maxim_tuchin
- Постоялец
cNoNim haskell Что, серьёзно? Говорят: чтоб изучить хаскель, надо иметь докторскую степень)
- Frankinshtein
- Постоялец
maxim_tuchin
> Почему большинство игр пишут на C++? Почему не Java, C#? Чем этот C++ так
> выделяется среди остальных ЯП?
С++ это язык конструктор, который позволяет выжать максимум производительности, настроить его максимально под себя и под требования, соблюдая баланс между удобством использования и скоростью
С++ это сложный язык, но тем, кто его осиливает воздается по заслугам 🙂
неосиляторы остаются дельфинами или лабают игры на юнити
- maxim_tuchin
- Постоялец
Frankinshtein
> С++ это язык конструктор, который позволяет выжать максимум производительности, настроить его максимально под себя и > под требования, соблюдая баланс между [b]удобством использования[/b] и скоростью
А разве тебе удобнее std::* вместо java.lang.*.
- maxim_tuchin
- Постоялец
Frankinshtein
> Настроить его максимально под себя
Но насколько хорошо можно подстроить под себя C#, Java и др.? Или же в этом C++ лидер?
Почему я пишу игры на C (да, на C)
Я — тот ещё фрукт. Все мои личные игровые проекты, которыми я занимался в последнее время, были написаны на «vanilla» C. Больше никто так не делает, поэтому, полагаю, вам может быть интересно узнать, почему я сделал такой выбор.
Написанное дальше содержит мнение о языках программирования, которое вам может не понравиться. Я предупреждал.
Что мне нужно от языка
Некоторые требования не подлежат обсуждению или поиску компромиссов. Во-первых, язык должен быть надёжным. Я не могу позволить себе тратить своё время на поиск ошибок, которых я не совершал.
Я написал большое количество игр на Flash, и вот, Flash умер. Я не хочу тратить время на портирование старых игр на современные платформы, я хочу писать новые игры. Мне нужна платформа, в долговечности которой я буду уверен.
Чего я точно хочу, так это избежать зависимости от определённой ОС. В идеале — иметь возможность разрабатывать и для консолей. Поэтому важно, чтобы язык позволял легко портировать написанное на нём, а также имел хорошую поддержку кроссплатформенных библиотек.
Чего я хочу от языка
Самым важным, но не обязательным требованием является простота. Изучение особенностей языка и и его чудного «умного» API я нахожу безумно скучным. Идеальный язык можно однажды изучить и никогда больше не пользоваться его документацией.
Поиск и исправление багов истощает творческий потенциал. Я хочу оставлять меньше багов, потому желаю строгую типизацию, качественные сообщения об ошибках и статический анализ кода. Хочу упростить поиск ошибок, а, следовательно, хорошие отладочные средства и динамический анализ.
Меня не интересует красивая реалистичная картинка, зато я забочусь о производительности. Меньшая требовательность к ресурсам расширяет спектр возможностей, доступных для реализации. Особенно интересно наблюдать за тем, что происходит с современным мощными компьютерами, когда разработчик о производительности не думает.
Ещё больше меня волнует скорость компилятора. Я не какой-нибудь буддийский мастер концентрации, и ждать больше 10 секунд — расточительство. Хуже того, это выбивает из потока. Вроде только глянул Twiiter, а 5 минут куда-то пропали.
Я не адепт ООП. Большую часть времени, проведённого за работой, я имел дело с классами и объектами. Но чем дальше, тем меньше я понимаю, почему надо так жёстко объединять код и данные. Я хочу работать с данными, как с данными, и писать код, который лучше всего подходит в конкретной ситуации.
Альтернативы
C++ продолжает оставаться наиболее распространенным языком для разработки игр, и на то есть свои причины. До сих пор большинство моих заказных проектов пишется на нем, и это мне не нравится.
C++ покрывает мои нужды, но не соответствует желаниям. Он дико сложный. Несмотря на наличие годных инструментов, на нём легко допускать коварные ошибки. Кроме того, по сравнению с C, он медленно компилируется. C++ имеет высокую производительность и предоставляет возможности, которых нет в C, но это не то, чего я хочу, да и достигается это ценой большой сложности.
C# и Java имеют схожие проблемы. Это многословные и сложные монстры, а мне нужен маленький простой зверёк. Оба языка направляют программиста прямиком в пучину ООП, а я против этого. Как и в большинстве высокоуровневых языков, многие сложные вещи тут скрываются так, что ничего не мешает случайно выстрелить себе в ногу.
Мне очень нравится Go. Во многих аспектах это изобретённый заново C, с поправкой на то, что до представления его публике он продумывался несколько лет. Я хотел бы использовать Go, но есть один огромный подводный камень — сборка мусора. Разработка игр на Go сомнительна, ведь сборщик мусора будет приостанавливать весь игровой мир, чего разработчик не может позволить. Также тут всё не очень хорошо с игровыми библиотеками. И хотя всегда можно приспособить для этого дела библиотеку на C, причём без особых проблем, это всё равно порождает много лишней работы. Кроме того, у меня есть сомнения насчёт перспектив. Go был бы неплох для веба, но это стремительно меняющаяся среда. Особенно это почувствовалось со смертью Flash.
JavaScript мне абсолютно не нравится. Он предоставляет столько свободы, что мне непонятно, как люди умудряются писать сколько-нибудь сложные проекты на нём. И не хочу даже пытаться его пробовать.
Haxe выглядит гораздо перспективнее остальных языков в этом списке. У него нет проблем с библиотеками. Если я снова начну писать под веб, то обязательно познакомлюсь с ним поближе. Несколько беспокоит относительная молодость языка, будет ли он жить? Больше мне добавить нечего, с Haxe я успел лишь немного поиграться, не углубляясь.
Джонатан Блоу пишет свой язык. Язык, которым он сам захотел бы пользоваться. Я восхищаюсь его решением, иногда и сам загораюсь идеей поступить так же. Но не выкинуть же все существующие библиотеки. А реализовать полную с ними совместимость — не так просто. Да и вообще это трудно, я бы предпочёл дальше писать игры, а не языки программирования.
Почему C — лучший выбор для меня
Хоть C и опасен, зато надёжен. Это очень острый нож, способный отрубить пальцы так же легко, как нарезать овощи. Но он прост, и научиться правильно его использовать труда не составит.
Он быстрый. А когда дело доходит до компиляции, я и представить себе не могу, что какой-то язык способен сделать это быстрее.
Есть возможность писать код так, чтобы он работал везде. И обычно это относительно несложно. Трудно представить, что однажды это изменится.
Есть отличная поддержка библиотек и инструментов.
Хоть меня это и несколько печалит, но C до сих пор остаётся лучшим языком для меня.
Я совсем не хочу сказать что-то вроде: «Эй, вы тоже должны писать на C». Я осознаю, что мои предпочтения весьма специфичны. Кроме того, по количеству, написанного мной на разных языках, код на «vanilla» C занимает лидирующую позицию, так что это уже часть моей зоны комфорта.
Так что да, C для меня — лучший выбор.
От переводчика
Перевод местами достаточно вольный, но не в ущерб смыслу или содержанию.
Подготовил перевод специально к пятнице, в этот день он особенно уместен, на мой взгляд. Хоть автор оригинального текста и пишет, кажется, на полном серьезе… вы сами всё понимаете, если прочитали. Как истину прочитанное воспринимать не стоит.
С предложениями, пожеланиями и замечаниями, как обычно, в ЛС.
[OpenGL С++] Пишем змейку на C++
Всем привет! Что-то последнее время много уроков по конструкторам игр, и не так много по различным языкам программирования. Что бы устранить эту не справедливость, я решил запилить урок по OpenGL C++, надеюсь вы оцените)
Сразу же перейдем к геймдеву и будем писать маленькую игрульку нашего детства.
Для начала подключаем библиотеку OpenGL к своей среде разработки, я лично программирую в Microsoft Visual Studio 2013.
200?’200px’:”+(this.scrollHeight+5)+’px’);”>
#include “stdafx.h”
#include
#include
#include
#include // подключаем все необходимые инклюды.
int N = 30, M = 20; // т.к. змейка будем ездить по квадратикам, создадим их, для нашего окна в идеале будет 30×20 квадратов
int scale = 25; // размер квадрата. Когда OpenGL будет расчерчивать поле для игры, расстояние между гранями квадрата будет 25 пикселей
int w = scale*N; // ширина поля
int h = scale*M; // его высота
int dir, num = 4; // 4 направления и начальный размер змеи.
struct < int x; int y; >s[100]; // структура змеи, X и Y координаты, массив с длинной.
class fruct // класс фруктов, тех самых, которые будет есть наша змея
<
public:
int x, y; //координаты фруктов, что и где будет находится
void New() // паблик с новыми фруктами. Он будет вызываться в начале игры и в тот момент, когда змея съест один из фруктов
<
x = rand() % N; // вычисление X координаты через рандом
y = rand() % M; // вычисление Y координаты через рандом
>
void DrawFruct() // паблик, отрисовывающий фрукты
<
glColor3f(0.0, 1.0, 1.0); // цвет фруктов. в openGL он задается от 0 до 1, а не от 0 до 256, как многие привыкли
glRectf(x*scale, y*scale, (x + 1)*scale, (y + 1)*scale); // “Закрашиваем” квадрат выбранным цветом, таким образом в нем “появляется” фрукт
>
> m[5]; // масив с фруктами, таким образом, у нас появится одновременно 5 фруктов в разных местах, а не один, как мы привыкли
void Draw() // функция, которая отрисовывает линии
<
glColor3f(1.0, 0.0, 0.0); // цвет наших линий, в данном слуае – красный
glBegin(GL_LINES); // начинаем рисовать и указываем, что это линии
for (int i = 0; i 0; –i) // движение змеи. Система остроумна и проста : блок перемешается вперед, а остальные X блоков, на X+1( 2 блок встанет на место 1, 3 на место 2 и т.д. )
<
s[i].x = s[i – 1].x; // задаем Х координату i блока координатой i – 1
s[i].y = s[i – 1].y; // то же самое делаем и с Y координатой
>
// далее у нас система направлений.
if (dir == 0) s[0].y += 1; // если направление равно 0, то первый фрагмент массива перемещается на один по Y
if (dir == 1) s[0].x -= 1; // если направление равно 1, то первый фрагмент массива перемещается на минус один по X
if (dir == 2) s[0].x += 1; // аналогиная система
if (dir == 3) s[0].y -= 1; // аналогичная система
for (int i = 0; i N) dir = 1; // Ей обратное направление. Например, если она выйдет за экран по высоте, то задаем ей направление, при котором она ползет
if (s[0].y > M) dir = 3; // вниз
if (s[0].x Порядок вывода комментариев:
Источники:
http://www.gamedev.ru/code/forum/?id=186621
http://gcup.ru/publ/gamedev/opengl_s_pishem_zmejku_na_c/1-1-0-562