Алгоритми пошуку шляху — невід'ємна частина розробки ігор. А також різних систем навігації, орієнтації і багато чого ще. Але ми зосередимося саме ігрової індустрії і алгоритмах, які в ній застосовуються.

Кожен ігровий розробник стикається із завданням, в якій потрібно змусити персонажа(або бота) пройти з однієї точки в іншу, при цьому не зібравши всі стіни. А розробникам стратегій ще потрібно враховувати прохідність клітин(дороги, болота, ліси і так далі). Ось тут на допомогу приходять на допомогу алгоритми пошуку шляху.

image

Читати далі →

Доброго часу доби! Сьогодні я поділюся досвідом розробки програми для контролера ROBO TX від німецької фірми Fischertechnik. Можливо, на даний момент він не є топовою моделлю, однак базові принципи, які я збираюся описати далі, можуть бути корисні юним розробникам, які зіткнуться з контролерами цього виробника.

Контролер ROBO TXimage

Даний контролер в основному призначений для конструювання простих роботів з метою навчання. У комплекті йде графічна середовище програмування, яка допомагає закласти в нього прості алгоритми. Також хлопці з російського представництва Fischertechnik підказали, що є динамічна бібліотека c API від творців, яка надає повний контроль і дозволяє вирішувати необхідні завдання більш гнучко вже шляхом розробки власного софта, що як раз і сталося в моєму випадку.

Читати далі →

Всім привіт! У статті буде представлена спрощена реалізацію
Stream
з Java 8 на С++. Скажу відразу, що:
  • на відміну від Java не використовуються відстрочені обчислень;
  • немає паралельних версій;
  • місцями поєднує
    Stream
    та
    Collectors
    ;
  • використовуються прості і готові рішення від STL, тут немає чистого ФП, де тільки рекурсія;
  • не використовуються техніки оптимізації.
В цій версії основний упор зроблений на те, щоб швидко і просто зробити велосипед). Про ФП згадано по-мінімуму (комбінаторам уваги не приділено :)).
Інтерфейс
template < typename Type>
class Stream : private StreamImpl<Type>
{
private:
typedef StreamImpl<Type> Parent;
public:
using Parent::Parent; // конструктори успадковані
using Parent::data;
using Parent::isEmpty;
using Parent::count;
using Parent::flatMap;
using Parent::map;
using Parent::reduce;
using Parent::filter;
using Parent::allMatch;
using Parent::noneMatch;
using Parent::groupingBy;
using Parent::partitionBy;
using Parent::minElement;
using Parent::maxElement;
~Stream() = default;
};

Читати далі →

Доброго дня! Дана стаття є продовженням циклу статей, присвячених розробки для мобільної платформи Sailfish OS. У цій статті піде мова про створення власних компонентів на QML на С++, а конкретно про створення властивостей і методів, доступних в QML, про сигнали і зв'язування. Так само покажемо, як підключати новий компонент до додатка.

Читати далі →

Привіт, Хабр! Про иммутабельных даних чимало говориться, але про реалізацію на С++ знайти що-то складно. І тому вирішив заповнити прогалину в дебютній статті. Тим більше, що в мові D є, а в С++ – ні. Буде багато коду і багато букв.
Про стилі – службові класи і метафункции використовують імена в стилі STL і boost, користувальницькі класи в стилі Qt, з якою я в основному працюю.
Введення
Що з себе представляють иммутабельные дані? Иммутабельные дані – це наш старий знайомий const, тільки більш суворий. В ідеалі иммутабельность означає контекстно-независиую незмінюваність ні при яких умовах.
По суті иммутабельные дані повинні:
  • забезпечувати фізичну і логічну константность;
  • забороняти призначення нового значення на етапі компіляції;
    всі операції повинні проводитись над копією, а не над оригіналом.
Иммутабельные дані прийшли з функціонального програмування і знайшли місце в паралельному програмировании, т. к. гарантують відсутність побічних ефектів.
Як можна реалізувати иммутабельные дані в С++?
У С++ в нас є (сильно спрощено):
  • значення – об'єкти фундаментальних типів, екземпляри класів (структур, об'єднань), перерахувань;
  • покажчики;
    посилання;
    масиви.
void має сенс робити иммутабельными. Посилання теж не будемо робити иммутабельными, для цього є const reference_wrapper.

Читати далі →

Розробка для Sailfish OS: Тестування QML-компонентів

Доброго дня! Дана стаття є продовженням циклу статей, присвячених розробки для мобільної платформи Sailfish OS. В цей раз ми розповімо про те, як організувати тестування QML-компонентів додатків, написаних для мобільних пристроїв. Розглянемо всі етапи від написання коду до запуску тестів на реальному пристрої.

Читати далі →