Написание игр на 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. Больше никто так не делает, поэтому, полагаю, вам может быть интересно узнать, почему я сделал такой выбор.
Написанное дальше содержит мнение о языках программирования, которое вам может не понравиться. Я предупреждал.

Что мне нужно от языка

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

Читать еще:  Моды для skyrim графика. Графические моды для Skyrim скачать

Я написал большое количество игр на 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

Почему я пишу игры на C (да, на C)

http://gcup.ru/publ/gamedev/opengl_s_pishem_zmejku_na_c/1-1-0-562

Ссылка на основную публикацию
Статьи на тему: