Создание игр на c

Язык C++ дает неограниченные возможности в создании различных проектов от веб программирования и до создания сложных игр. В видеокурсе мы с вами создадим простую игру с использованием C++.

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

Если вы новичок в C++, то вам стоит изначально посмотреть полный видеокурс по изучению C++ на нашем сайте. Посмотреть его можно .

Содержание

Немного про игру

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

Если вы будете выполнять домашние задания, то ваша игра будет иметь еще больший функционал. Так, вы сможете добавить бонусные фрукты, остановку всей игры и многие другие дополнения.

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

Код игры «крестики-нолики» на языке программирования C#

Доброго времени суток. На данной странице я приведу пример создания всеми любимой логической игры под названием «крестики-нолики».

Так как программирую я в основном на C#, то и представленная программа будет так же на данном языке программирования. Но даже если Вы не знакомы с C#, а программируете на C++, Java, Delphi или на любом другом языке, данный пост в любом случае поможет Вам, так как тут я приведу алгоритм работы такой программы.

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

Всю программу можно поделить на две большие части:

  1. Компьютер ходит первым(крестики)
  2. Компьютер ходит вторым(нолики)

Далее я опишу стратегию игры компьютера, которого мы собираемся сделать непобедимым.

Стратегия игры «крестики-нолики»

Основополагающие правила

Независимо от того, кто ходит первым и какая сейчас позиция, компьютер перед каждый ходом должен проверить две вещи:

  1. Можно ли выиграть? Если да, то компьютер выигрывает!
  2. Угрожает ли нам опасность проиграть следующим ходом? Если да, то закрываем такую возможность!

Компьютер ходит первым

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

Компьютер ходит вторым

Когда компьютер ходит вторым, а пользователь, соответственно, первым, может возникнуть несколько ситуаций:

  1. Первый ход в центр. Тогда ходим до конца игры в любой из углов, а если это невозможно, то в любую свободную клетку.
  2. Первый ход в угол. Отвечаем ходом в центр. Следующие ходы — в любой из свободных углов, иначе — в свободные клетки.
  3. Первый ход в сторону. Ситуация аналогичная предыдущей: по максимуму закрываем углы, после чего ходим туда, где осталось место.

Вот такая стратегия игры в «крестики-нолики». Она не слишком сложная, и теперь мы попытаемся ее реализовать.

Реализация программы «крестики-нолики»

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

Проверка на возможность победы

Перед тем как писать код, необходимо уяснить смысл ее работы. Выигрышных комбинаций всего 8. Можете посмотреть скриншоты: я специально выделил и указал номер этих комбинаций(они понадобятся нам). Эти номера комбинаций будет хранить переменная cherta, которая сразу после выигрыша отдаст команду нарисовать выигрышную черту.




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

Для хранения ходов как компьютера, так и пользователя прекрасно подходит обычная матрица 3×3, в которой можно указывать специальный номер ходившей стороны. Для своей игры я задал такие значения:

  • Изначально матрица обнуляется и это значит, что все 9 клеток пусты. Перед каждый ходом нужно проверять, пустая ли клетка, и можно ли на нее сходить. Полезно, пользуйтесь.
  • Для обозначения компьютера я использовал цифру 1.
  • Для обозначения пользователя я использовал цифру 2.

Далее нам необходимо будет создать специальный метод, который будет отрисовывать игровое поле, используя данные этой матрицы(метод paint, который будет мелькать в коде). А вот собственно и код данного метода:

if (((a[0, 0] + a[0, 1] + a[0, 2]) == 2) && (a[0, 0] == 1 || a[0, 1] == 1 || a[0, 2] == 1)) { for (int j = 0; j < 3; j++) { if (a[0, j] == 0) { a[0, j] = 1; } } win = 1; paint(); cherta = 4; } else { if (((a[1, 0] + a[1, 1] + a[1, 2]) == 2) && (a[1, 0] == 1 || a[1, 1] == 1 || a[1, 2] == 1)) { for (int j = 0; j < 3; j++) { if (a[1, j] == 0) { a[1, j] = 1; } } win = 1; paint(); cherta = 5; } else { if (((a[2, 0] + a[2, 1] + a[2, 2]) == 2) && (a[2, 0] == 1 || a[2, 1] == 1 || a[2, 2] == 1)) { for (int j = 0; j < 3; j++) { if (a[2, j] == 0) { a[2, j] = 1; } } win = 1; paint(); cherta = 6; } else { if (((a[0, 0] + a[1, 0] + a[2, 0]) == 2) && (a[0, 0] == 1 || a[1, 0] == 1 || a[2, 0] == 1)) { for (int i = 0; i < 3; i++) { if (a[i, 0] == 0) { a[i, 0] = 1; } } win = 1; paint(); cherta = 1; } else { if (((a[0, 1] + a[1, 1] + a[2, 1]) == 2) && (a[0, 1] == 1 || a[1, 1] == 1 || a[2, 1] == 1)) { for (int i = 0; i < 3; i++) { if (a[i, 1] == 0) { a[i, 1] = 1; } } win = 1; paint(); cherta = 2; } else { if (((a[0, 2] + a[1, 2] + a[2, 2]) == 2) && (a[0, 2] == 1 || a[1, 2] == 1 || a[2, 2] == 1)) { for (int i = 0; i < 3; i++) { if (a[i, 2] == 0) { a[i, 2] = 1; } } win = 1; paint(); cherta = 3; } else { if (((a[0, 0] + a[1, 1] + a[2, 2]) == 2) && (a[0, 0] == 1 || a[1, 1] == 1 || a[2, 2] == 1)) { if (a[0, 0] == 0) a[0, 0] = 1; if (a[1, 1] == 0) a[1, 1] = 1; if (a[2, 2] == 0) a[2, 2] = 1; win = 1; paint(); cherta = 7; } else { if (((a[2, 0] + a[1, 1] + a[0, 2]) == 2) && (a[2, 0] == 1 || a[1, 1] == 1 || a[0, 2] == 1)) { if (a[2, 0] == 0) a[2, 0] = 1; if (a[1, 1] == 0) a[1, 1] = 1; if (a[0, 2] == 0) a[0, 2] = 1; win = 1; paint(); cherta = 8; } } } } } } } }

Тут так же появляется переменная win, которая хранит значение победившей стороны. Я использовал только два значения: 0-ничья, 1 — победа компьютера. В моей программе нет даже поздравления пользователя с возможной победой, так как это невозможно.

Проверка на возможность проигрыша следующим ходом

if ((a[0, 0] + a[0, 1] + a[0, 2]) == 4 && a[0, 0]!=1 && a[0, 1]!=1 && a[0, 2]!=1) //1-4-7 — защита { for (int j = 0; j < 3; j++) { if (a[0, j] == 0) { a[0, j] = 1; hdpc = false; paint(); } } } else { if ((a[1, 0] + a[1, 1] + a[1, 2]) == 4 && a[1, 0] != 1 && a[1, 1] != 1 && a[1, 2] != 1) //2-5-8 — защита { for (int j = 0; j < 3; j++) { if (a[1, j] == 0) { a[1, j] = 1; hdpc = false; paint(); } } } else { if ((a[2, 0] + a[2, 1] + a[2, 2]) == 4 && a[2, 0] != 1 && a[2, 1] != 1 && a[2, 2] != 1) //3-6-9 — защита { for (int j = 0; j < 3; j++) { if (a[2, j] == 0) { a[2, j] = 1; hdpc = false; paint(); } } } else { if ((a[0, 0] + a[1, 0] + a[2, 0]) == 4 && a[0, 0] != 1 && a[1, 0] != 1 && a[2, 0] != 1) //1-2-3 — защита { for (int i = 0; i < 3; i++) { if (a[i, 0] == 0) { a[i, 0] = 1; hdpc = false; paint(); } } } else { if ((a[0, 1] + a[1, 1] + a[2, 1]) == 4 && a[0, 1] != 1 && a[1, 1] != 1 && a[2, 1] != 1) //4-5-6 — защита { for (int i = 0; i < 3; i++) { if (a[i, 1] == 0) { a[i, 1] = 1; hdpc = false; paint(); } } } else { if ((a[0, 2] + a[1, 2] + a[2, 2]) == 4 && a[0, 2] != 1 && a[1, 2] != 1 && a[2, 2] != 1) //7-8-9 — защита { for (int i = 0; i < 3; i++) { if (a[i, 2] == 0) { a[i, 2] = 1; hdpc = false; paint(); } } } else { if ((a[0, 0] + a[1, 1] + a[2, 2]) == 4 && a[0, 0] != 1 && a[1, 1] != 1 && a[2, 2] != 1) //1-5-9 — защита { if (a[0, 0] == 0) a[0, 0] = 1; if (a[1, 1] == 0) a[1, 1] = 1; if (a[2, 2] == 0) a[2, 2] = 1; hdpc = false; paint(); } else { if ((a[2, 0] + a[1, 1] + a[0, 2]) == 4 && a[2, 0] != 1 && a[1, 1] != 1 && a[0, 2] != 1) //3-5-7 — защита { if (a[2, 0] == 0) a[2, 0] = 1; if (a[1, 1] == 0) a[1, 1] = 1; if (a[0, 2] == 0) a[0, 2] = 1; hdpc = false; paint(); } } } } } } } }

Как видите, смысл защиты от возможного поражения является почти что точной копией предыдущего метода. Тут стоит лишь напомнить и уточнить несколько вещей:

  • Ходы противника мы отмечаем значением 2. Для этого используется массив a.
  • Метод paint вызывает отрисовку на основе данных матрицы.
  • Переменная булевого типа hdpc(hod pc, ход компьютера) принимает значение false, если пришла очередь ходить пользователю.

Дирижер всех ходов компьютера

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

Очень важным моментом всей программы является необходимость передавать управление то пользователю, то компьютеру. Для этого я рекомендую простой способ: лично я использовал элемент panel, который выполняет роль игрового поле. С помощью булевой переменной hdpc, я либо разрешал принимать нажатие мышкой пользователя на panel, либо нет, что обеспечивало только своевременный ход пользователя. Так же сразу после хода пользователя я запускал на действие специальный метод, который я образно назвал дирижером всех ходом компьютера. В чем это определение очень даже подходит для него, ведь именно здесь будут приниматься решения, какой метод активировать, то есть именно тут можно увидеть всю стратегию данной игры:

nichia(); //проверяем, если хотя бы одно свободное место на поле. Если да, то ходим. Если нет, то вывод сообщения о ничье. Данный метод предлагаю написать вам самим, он довольно прост. pobeda(); //это тот самый метод для проверки возможности выигрыша if (win == 0) //как помните мы использовали переменную win, чтобы обозначить победу компьютера. Если компьютер еще не выиграл, то продолжаем { zachita(); //этот метод мы так же описали. Компьютер защищается от возможного проигрыша if (hdpc == true) //до сих пор ход компьютера, а это значит компьютер пока не может выиграть и поражением никто не пугает, а значит можно ходить по стратегии { if (pc == 1) //данная переменная хранит информацию о том, кто первым ходил. Если первым ходил компьютер, то значение равно 1, если пользователь — то 2. { krestiki(); //так называется метод, который выполняет ход в самый отдаленный угол от предыдущего хода пользователя } else //компьютер ходит вторым { if (xfir == 1 && yfir == 1) //пользователь первым ходом сходил в центр { ugol(); //ищем любой свободный угол и ходим туда, если это невозможно, ходим в любую свободную клетку } else //пользователь первым ходом не сходил в центр { if (pervhod) //данная булевая переменная хранит true, если пользователь собирается сделать первый ход в этой партии { hod1(); //ходим в центр pervhod = false; } else { ugol(); //ходим в свободный угол } } } } //конец противоположного хода nichia(); } else { winner(); }

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

Ход в противоположный от предыдущего хода угол

Данный метод, который в представленном коде был назван как krestiki, выполняет ход в противоположный от предыдущего шага пользователя угол. Чтобы выполнить данную операцию, мы должны знать, куда последним шагом сходил пользователь. Именно для этих целей я использую специальные переменные. Парочку из них(xfir и yfir — сократил от x first и y first) я уже использовал в предыдущем методе. Данные переменный запоминают только первый ход пользователя. Следующие переменные, которые вы встретите, будут хранить каждый последний шаг пользователя.

if (xlast == 0 && ylast == 0) //если 0,0 { if (a[2, 2] == 0) { a[2, 2] = 1; hdpc = false; paint(); } else { random(); } } else { if (xlast == 2 && ylast == 0) //2.0 { if (a[0, 2] == 0) { a[0, 2] = 1; hdpc = false; paint(); } else { random(); } } else { if (xlast == 0 && ylast == 2) //0.2 { if (a[2, 0] == 0) { a[2, 0] = 1; hdpc = false; paint(); } else { random(); } } else { if (xlast == 2 && ylast == 2) //2.2 { if (a[0, 0] == 0) { a[0, 0] = 1; hdpc = false; paint(); } else { random(); } } else { if (xlast == 0 && ylast == 1) //0.1 { if (a[2, 0] == 0) { a[2, 0] = 1; hdpc = false; paint(); } else { if (a[2, 2] == 0) { a[2, 2] = 1; hdpc = false; paint(); } else { random(); } } } else { if (xlast == 1 && ylast == 0) //1.0 { if (a[0, 2] == 0) { a[0, 2] = 1; hdpc = false; paint(); } else { if (a[2, 2] == 0) { a[2, 2] = 1; hdpc = false; paint(); } else { random(); } } } else { if (xlast == 2 && ylast == 1) //2.1 { if (a[0, 0] == 0) { a[0, 0] = 1; hdpc = false; paint(); } else { if (a[0, 2] == 0) { a[0, 2] = 1; hdpc = false; paint(); } else { random(); } } } else { if (xlast == 1 && ylast == 2) //1.2 { if (a[0, 0] == 0) { a[0, 0] = 1; hdpc = false; paint(); } else { if (a[2, 0] == 0) { a[2, 0] = 1; hdpc = false; paint(); } else { random(); } } } } } } } } } }

В данном методе мы знакомимся с новым методом random, который отвечает, надеюсь вы догадались, за абсолютно рандомный(случайный шаг).

Помните, в стратегии есть и такие ходы. Данный метод я так же оставлю для реализации Вам.

Ход в любой из углов

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

if (a[0, 0] == 0) { a[0, 0] = 1; hdpc = false; paint(); } else { if (a[2, 0] == 0) { a[2, 0] = 1; hdpc = false; paint(); } else { if (a[0, 2] == 0) { a[0, 2] = 1; hdpc = false; paint(); } else { if (a[2, 2] == 0) { a[2, 2] = 1; hdpc = false; paint(); } else { random(); } } } }

Данный метод сделан на основе предыдущего метода, разница лишь в том, что в нем отсутствуют лишние проверки. Тут все просто: находим пустой угол — ходим, не находим — ходим рандомно.

Я понимаю, что приведенная часть это только половина всей программы. Но это основная половина всей программы. В ближайшее время я напишу еще одну статью, в которой опишу «рисовательную» часть этой программы, а так же укажу как отловить ход пользователя на panel`и. Напомню, что все это будет на языке C#. Так же напомню, что мы только что писали код программы, которая имитирует игру компьютера с пользователем в «Крестики-нолики»

Update: Боюсь у меня нет времени и еще больше нет желания заново разбираться в игре, которую я некогда написал и поэтому, скорее всего, обещанная рисовательная часть программы и прочие фишки никогда не увидят свет на страницах сайта About-windows.ru. В связи с этим просто предлагаю вам скачать исходник этой игры и дальше уже самим разобраться в ее коде. Прошу не судить строго по поводу «красоты» программирования.

Ссылка на скачивание игры Крестики и нолики.

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

Внимание! Данный сайт не обновляется. Новая версия: shatalov.su

Создание игр шаг за шагом

Аннотация к данному разделу расположена на главной странице.

На данный момент уроки раздела представлены в порядке их создания. Постепенно они будут упорядочены (а некоторые будут переписаны), чтобы достичь максимально быстрого и эффективного изучения.

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

Мой e-mail: roman@shatalov.su
Роман Шаталов

Этап первый. Изучение языка программирования C++

Как я уже писал в аннотации к разделу, исходить мы будем из того, что вы не знаете ни языков программирования, ни что-либо о создании игр. Нашей первоочередной задачей будет изучение языка программирования высокого уровня C++.

Главная цель данного этапа — освоение основных возможностей C++. Этап считается успешно пройденным, если вы можете самостоятельно воссоздать код Морского боя и создать простейшее окно Windows.

  1. Устройство компьютера. Перейти.
  2. Языки программирования.

    История. Перейти.

  3. Базовые концепции программирования. Перейти.
  4. Псевдокод и блок-схемы. Перейти.
  5. IDE, компиляторы, компоновщики, отладчики. Перейти.
  6. Установка и регистрация Visual C++ Express Edition. Перейти.
  7. Первая программа — Hello world. Перейти.
  8. Основы C++ — разбор программы Fahrenheit to Celsius. Перейти.
  9. Циклы и ветвления. Перейти.
  10. Массивы. Перейти.
  11. Расстояние между двумя точками пространства. Перейти.
  12. Типы данных. Перейти.
  13. Функции. Часть первая. Перейти.
  14. Функции. Часть вторая. Перейти.
  15. Эффективность алгоритмов (нуждается в переписывании). Перейти.
  16. Структуры. Перейти.
  17. Многофайловые программы. Перейти.
  18. Стеки и очереди. Перейти.
  19. Классы. Перейти.
  20. Векторы. Перейти.
  21. Наследование. Перейти.
  22. Установка DirectX SDK. Перейти.
  23. Указатели. Перейти.
  24. Работа в IDE Visual C++ 2008. Часть вторая — отладчик. Перейти.
  25. Консольный морской бой. Перейти.
  26. Случайные числа. Перейти.
  27. Введение в WinAPI. Часть первая. Перейти.
  28. Операции C++. Перейти.
  29. Связные списки. Часть первая. Перейти.
  30. Введение в WinAPI. Часть вторая. Перейти.
  31. Матрицы. Перейти.
  32. Обработка ошибок и исключений. Перейти.
  33. Шаблонные функции и классы. Перейти.
  34. Перегрузка операций. Перейти.

Этап второй. Изучение базовых возможностей DirectX

На данном этапе мы продолжим изучать C++ и познакомимся с базовыми возможностями DirectX. Основной программой данного этапа является Камера.

  1. Введение в DirectX API. Перейти.
  2. Битовые шкалы. Перейти.
  3. Сортировка методом пузырька. Перейти.
  4. Поверхности. Перейти.
  5. Инициализация Direct3D. Перейти.
  6. Рекурсия. Ханойские башни. Перейти.
  7. Инициализация DirectInput. Перейти.
  8. DirectInput. Ввод с клавиатуры. Перейти.
  9. Связные списки. Часть вторая. Перейти.
  10. Координатные пространства. Перейти.
  11. Линейные и аффинные преобразования. Перейти.
  12. Реализация класса трёхмерных векторов. Перейти.
  13. Вершинные буферы. Перейти.
  14. Графы (урок не дописан). Перейти.
  15. Индексные буферы. Перейти.
  16. DirectInput. Ввод с мышки. Перейти.
  17. Перспективная проекция. Перейти.
  18. Библиотеки статичного связывания. Перейти.
  19. Деревья. Перейти.
  20. Преобразования матриц. Перейти.
  21. Тригонометрия. Перейти.
  22. Работа в Visual C++ 2008. Часть третья. Перейти.
  23. Реализация камеры. Часть первая. Перейти.
  24. Файлы. Ввод, вывод в C++.

    Перейти.

  25. Вращение вокруг произвольной оси. Перейти.
  26. Реализация камеры. Часть вторая. Перейти.
  27. Формат данных BMP. Перейти.
  28. Спрайты. Часть первая. Перейти.
  29. Конечные автоматы. Перейти.
  30. Время и таймеры. Перейти.

Этап третий. Графический конвейер и двухмерная графика

На данный момент сюда будут помещаться все новые уроки. Пока что я не могу выделить главную тему. Впоследствии этот этап будет переработан (как и предыдущие). Пока что здесь будут расположены уроки в порядке их написания.

  1. Вывод текста в direct3D. 24-ой выпуск рассылки.
  2. Программа Клетки (v0.1, v0.2). 25-й выпуск рассылки.
  3. Сравнение C++ и Delphi/Pascal. Перейти.
  4. Формат x. Перейти.
  5. Выбор объектов в трёхмерном пространстве. 26-ой выпуск рассылки.
  6. Системы счисления. Перейти.
  7. FVF. Перейти.
  8. Little-endian и big-endian. Перейти.
  9. Копирующий конструктор и указатель this. Перейти.
  10. Состояния рендеринга. Перейти.
  11. Буфер глубины. 27-ой выпуск рассылки.
  12. Уравнение прямой. Перейти.
  13. Уравнение плоскости. Перейти.
  14. Интерфейс и растеризация треугольников. 28-ой выпуск рассылки.
  15. Запуск программы в Windows. Перейти.
  16. UML. Перейти.
  17. Виртуальные функции. Перейти.

Роман Шаталов 2009-2012

Язык Программирования С

Книга является как практически исчерпывающим справочником, так и учебным пособием по самому распространенному языку программирования.

2 декабря 2013

Создание игр для мобильных телефонов

Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.

14 мая 2013

Как самому создать трехмерную игру

На основе книги вы сможете сделать игры по типу DOOM. Не плохой материал для спецов данной области для повышения квалификации.

14 мая 2013

Программирование игр в Blitz3d

Эта книга научит вас основным приемам программирования собственных игр.

Вы научитесь всему, начиная от создания графических компонентов и их анимации, до включения в игру музыки и звуков

30 апреля 2013

Основы разработки игр на Unity 3D

Прочитав данную книгу, вы научитесь создавать полностью функциональные, профессиональные 3D игры с реалистичными окружением, звуком, динамическими эффектами, и более!

13 сентября 2012

C++ для чайников

Книга, которая у вас в руках, — это введение в язык программирования C++. Она начинается с азов.

27 января 2011

C++. Стандартная библиотека

Книга посвящена стандартной библиотеке C++, значительно расширяющей возможности базового языка.

1 декабря 2010

C/C++ в задачах и примерах

Сборник задач по программированию на языке C/C++, как типовых — ввод/вывод, управление вычислительным процессом, работа с массивами, сортировка и пр.

18 ноября 2010

Решение сложных задач на C++

Материал этой книги составляют переработанные задачи серии Guru of the Week, рассчитанные на читателя с достаточно глубоким знанием C++.

21 марта 2010

Эффективное программирование TCP/IP

Основное внимание в данной книге уделено тонким вопросам функционирования семейства протоколов и способам работы с ними.

9 марта 2010

Секреты программирования игр

Эта книга учит, как создавать собственные игры, используя опыт, накопленный профессионалами.

19 февраля 2010

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

В статье приведу логику объекта, использующегося в моей игре Tropic Defense.

Читать | Комментарии [39]
14 сен. 2014

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

Читать | Комментарии [23]
6 авг. 2012

Есть матрица узлов (сетка клеток), каждый узел имеет линки на своих соседей. Алгоритм оперирует двумя списками: сортированным (далее open), в котором хранятся узлы, линки которых еще не были обработаны (узлы сортируются по оценке расстояния до конечного узла от наиболее близкого), и не сортированный (далее close) с обработанными узлами. Принцип работы следующий:

Читать | Комментарии [77]
17 янв. 2004

Автор: Jakob Ramskov

Читать | Комментарии [2]
13 мар. 2003

Добавить комментарий

Закрыть меню