Box2D - статические и кинематические тела

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

Читать далее →

Просмотров: 25641

Box2D - Тела

Тела - основные объекты в физической сцене, но они не сталкиваются между собой и не взаимодействуют с миром. Звучит странно? В этой статье я все объясню.

Читать далее →

Просмотров: 14103

Прилипания окна к краям экрана

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

Читать далее →

Просмотров: 12312

Пишем игру шашки на Python

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

Читать далее →

Просмотров: 33174

Введение в OgreNewt (Ogre3D + Newton Game Dynamics)

Сегодня мы познакомимся с физическим движком Newton Game Dynamics и графическим Ogre3D. Конкретно – с их связкой OgreNewt, которая написана walaber’ом. Во время написании статьи, я брал OgreNewt из svn. Версия была совместима с Newton 2.15 (последняя – 2.17). Надеюсь, автор и далее будет активно разрабатывать библиотеку. Для примера, разрушения мне придётся писать вручную.

Читать далее →

Просмотров: 12735

AI в шашках. Разбор NegaMax и Alpha-Beta алгоритмов

Как и обещал недавно, опишу в этой статьей алгоритмы поиска ходов в играх подобных шашкам и шахматам. Т.е. мы напишем AI, с которым потом сможем сыграть.

Читать далее →

Просмотров: 19530

Метапрограммирование с помощью constexpr

C++11 содержит два языка для метапрограммирования. Один основывается на шаблонах, другой - на constexpr.

Читать далее →

Просмотров: 11844

Регулярные выражения во время компиляции с помощью constexpr

С новым стандартом C++1x, программисты получили возможность использовать ключевое слово constexpr, который указывает на то, что функция или конструктор возвращают константу времени компиляции. Подробнее о свойствах и ограничениях функций с этим ключевым словом вы можете прочитать на википедии.

Читать далее →

Просмотров: 10359

Многомерные массивы в C++11

Что же нового мы можем сказать о многомерных массивах в C++? С внедрением С++11 мы получили новый класс в стандартной библиотеке: std::array. Мы также получили другие "фичи" языка, как, например, template aliases (псевдонимы шаблонов) и variadic templates (шаблоны с неограниченным количеством аргументов). В статье опишется метод их взаимодействия.

Читать далее →

Просмотров: 10737

Мемоизация в C++1x для рекурсивных функций

Мемоизация - специальная оптимизационная методика, которая позволяет увеличить скорость выполнения компьютерных программ. Данная методика заключается в том, чтобы исключить повторное вычисление результатов предыдущих вызовов. (wikipedia).

Читать далее →

Просмотров: 11196

Perfect forwarding в C++1x

В новом стандарте C++1x появилась отличная "фича", именуемая Perfect Forwarding, которая стала доступна из-за введения rvalue-ссылок.

Читать далее →

Просмотров: 8253

qt4 заменяет qt в extra

Добавлен новый пакет qt4 в репозитории [extra]. Он заменяет уже существующий qt.

Читать далее →

Просмотров: 10071

Разбор сайта Python + Grab

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

Читать далее →

Просмотров: 37017

Генерация подмножеств множества

Алгоритмы теории множеств нередко применяются в программировании. В этой статье я хочу поговорить о генерации подмножеств множества. Множество — это набор элементов. Все элементы множества различны, то есть один элемент не может встретиться в множестве дважды. Программно реализовать множество можно разными способами: в виде класса, в виде массива с функциями для операций над ним и т.д. В языке Pascal имеется готовая реализация и синтаксис для работы со множествами.

Генерация подмножеств множества может пригодиться, допустим, в логике игры, когда из набора персонажей необходимо выбрать случайную их группу. Допустим, имеется множество M = {1, 2, 3}. Все подмножества множества M (их совокупность называют булеаном) следующие:

{}
{1}
{2}
{3}
{1, 2}
{1, 3}
{2, 3}
{1, 2, 3}

Читать далее →

Просмотров: 68904

Задача о ящике

И снова всем привет! После вводной статьи самое время рассмотреть какую-нибудь задачку. Для первого раза возьмем простенькую, чтобы, так сказать, войти в курс дела.

Итак, задача о ящике. Условие задачи взято из системы Cats сайта ДВГУ. Оно на английском языке, я кратко опишу суть. Имеется шесть досок определенного размера (ширина и высота). Необходимо определить, можно ли из этих досок собрать ящик. Входной файл box.in содержит шесть строк, каждая описывает размер доски и состоит из двух чисел w и h — ширины и высоты. Выходной файл box.out должен содержать слово POSSIBLE, если возможно из данных шести досок собрать ящик, либо IMPOSSIBLE, если это невозможно. Ограничение по времени выполнения: 2 секунды, по памяти: 64 Mb. 1 ≤ w, h ≤ 10000.

Читать далее →

Просмотров: 37107

Шифрованная флешка в TrueCrypt

Добро пожаловать в мир паранойи, мои маленькие друзья. Так как пока мы почти ничего не знаем, но очень хотим чему-нибудь научиться, то начнём с самого примитивного, а именно, сделаем шифрованную флешку. Поможет нам в этом TrueCrypt. Программа кроссплатформенная, имеется версия как под Linux, так и под Windows и MacOS, что не может не радовать.

Читать далее →

Просмотров: 55251

Nokia N950 и MeeGo 1.2

Мне посчастливилось стать одним из обладателей 250-ти девелоперских телефонов Nokia N950.

Этот телефон является модификацией анонсированного Nokia N9, но был выпущен минимальной партией и предоставлен разработчикам для того, чтобы они заранее могли начать работу над своими приложениями для новой платформы, MeeGo 1.2 Harmattan.

Чтобы попасть в конкурс, я заполнил заявку на meego.com, и после двухнедельного нервного ожидания мне сообщили, что моё приложение было одобрено. Из-за особенностей российской таможни пришлось подождать ещё пару недель, прежде чем телефон наконец попал мне в руки.

Читать далее →

Просмотров: 32319

Apcupsd. Контролируем электропитание

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

Захотелось мне однажды увидеть единую и наглядную картину об электропитании серверов на работе, а также получать оперативные уведомления в случае его перебоев. В силу своей симпатии к системам на базе Linux решил двигаться в этом направлении. Дома я уже имел удачный опыт использования Apcupsd — демона для контроля ИБП фирмы APC, но здесь меня ждала несколько иная задача.

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

Читать далее →

Просмотров: 155871

Создание PDF в .NET

PDF (Portable Document Format) — этот формат хорошо подходящий для документов, имеющих четкую заранее определенную структуру (квитанции, анкеты и т.д.). Для работы с PDF в .NET существуют свободная библиотека PDF Clown, опытом работы с которой я и поделюсь в этой статье.

Читать далее →

Просмотров: 34821

Экскурс в ACM/ICPC

ICPC LogoACM/ICPC (или просто ICPC) — крупнейшая студенческая командная олимпиада по программированию. Это мероприятие приравнивается к чемпионату мира по программированию. Данная статья открывает новую одноименную категорию на сайте, где мы будем разбирать интересные олимпиадные задачи.

Начну с небольшого экскурса в историю и правила проведения чемпионата. Четвертьфинальные и полуфинальные этапы чемпионата проходят независимо в своих регионах, победители которых проходят в следующий этап. Лучшие команды из каждого региона по итогам полуфинала собираются вместе в одном из городов мира и выясняют отношения в финале. Чемпионат командный, в каждой команде три участника. В распоряжении команды один ПК, некоторое количество времени (обычно 5 часов) и ряд поставленных задач (как правило, 5-10 задач). Каждая задача имеет условие, формат входных и выходных данных, ограничение по времени и по памяти. Решением задачи является программа, написанная на одном из доступных правилами языков программирования (обычно пишут на C). Программы-решения проверяются в автоматическом режиме. Система автоматической проверки выполняет несколько тестов, подавая проверяемой программе входные данные и анализируя выходные согласно условию задачи. Если программа на выходе дает неправильный ответ, превышает лимит допустимой оперативной памяти, выполняется дольше положенного времени (не компилируется, выпадает в runtime error, ну и так далее), то тест не пройден. Задача считается решенной, если программа удачно проходит все тесты, предложенные системой. Вариантов “почти решенная”, “наполовину решенная”, как вы понимаете, нет. При подсчете баллов учитывается количество решенных задач, время и количество попыток, затраченных на их решение.

Читать далее →

Просмотров: 23778