# Пет-проекты Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, а также библиотек и/или фреймворков. Также пет-проекты могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру. Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать началом для вашего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему, или же список вдохновит на какую-либо собственную идею! ## Сторонние ресурсы * [Google Summer of Code](https://summerofcode.withgoogle.com/archive) Коллекция проектов, которые предлагались различными компаниями или комьюнити в рамках ежегодной программы стажировки студентов от Google. Архив содержит проекты за последние несколько лет. Представлено большое количество проектов для языка C++. Возможно вы найдете для себя что-то интересное в архиве для практики, либо попробуете свои силы в будущих стажировках. * [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc) Репозиторий содержит коллекцию пет-проектов, собранные для различных языков программирования. Также включает обширный список идей для C++. * [Programming challenges](https://programming-challenges.jeremyjaydan.dev/) - [PNG изображение](https://programming-challenges.jeremyjaydan.dev/media/programming-challenges-v4.0.png) Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :) ## Список идей для пет-проектов ### Игры Ниже представлен список классических видеоигр, которые не содержат в себе сложного ИИ или динамическую генерацию мира. Вы можете реализовывать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [SFML](https://www.sfml-dev.org/). Это простая в использовании библиотека, которая предоставляет достаточный набор возможностей для создания несложных графических интерфейсов для 2D или 2.5D игр при помощи [спрайтов](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)). Если же вы захотите сделать что-то более сложное, где применяется физика, то можете начать с простых движков, например: [Box2D](https://box2d.org/) или же освоить более продвинутые: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность. * [Змейка](https://habr.com/ru/company/microsoftlumia/blog/136629/) * [Тетрис](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81) * [Жизнь](https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0_%C2%AB%D0%96%D0%B8%D0%B7%D0%BD%D1%8C%C2%BB) * [Пятнашки](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81) * [Арканоид](https://ru.wikipedia.org/wiki/Arkanoid) * [Сапер](https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BF%D1%91%D1%80_(%D0%B8%D0%B3%D1%80%D0%B0)) * [2048](https://ru.wikipedia.org/wiki/2048_(%D0%B8%D0%B3%D1%80%D0%B0)) * [Пасьянс](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81) * [Пасьянс-паук](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%83%D0%BA_(%D0%BF%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81)) * [Пинг-понг](https://ru.wikipedia.org/wiki/Pong_(%D0%B8%D0%B3%D1%80%D0%B0)) * [Donkey Kong](https://ru.wikipedia.org/wiki/Donkey_Kong) * [Лабиринт](https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D0%B8%D1%80%D0%B8%D0%BD%D1%82_(%D0%B6%D0%B0%D0%BD%D1%80)) * [Сетевые игры для 2-4 игроков: пинг-понг, морской бой, покер, шашки, шахматы и т.д.](https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%B3%D1%80%D0%B0) Рекомендуем ознакомиться с нижеперечисленными источниками, которые содержат больше информации о различных алгоритмах для игростроения. Они могут пригодиться для одной из вышеперечисленных игр, или же для собственных идей: * https://www.redblobgames.com/ * http://www.squidi.net/three/ --- ### Приложения При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Не забывайте о принципе: "от простого к сложному". * Сетевой чат (на чистых сокетах или при помощи [gRPC](https://grpc.io/docs/languages/cpp/quickstart/)) * Калькулятор * Файловый менеджер * Конвертер валют * Получение списка Pull-Requests или Issues в любом Github репозитории * Автоматизация рутинных: различные вычисления и формирование отчетов в виде таблиц --- ### Студенческие приложения Нижеперечисленные примеры больше подойдут для студентов, которые проходят или недавно проходили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. ещё свежи знания по академическим дисциплинам. * Библиотека линейной алгебры: матрицы, вектора, действия с ними * Моделирование различных процессов: физика, теоретическая механика и т.д. * Применение численных методов: интегрирование, дифференцирование, аппроксимация, интерполяция и т.д. --- [**На главную страницу**](README.md)