@anonymous5382

Какой велосипед написать на с++ для закрепления изученного?

Всем доброго времени суток. Изучил (если можно так выразиться) базовые, составные типы данных, циклы, логические операторы, операторы ветвления, функции, указатели, ссылки, пространства имён, ООП (классы, наследование, абстракция, полиморфизм, инкапсуляция), исключения, шаблоны, файловый ввод и вывод, немного STL. Подбросьте идейку какого-нибудь не очень сложного проекта, который можно попробовать написать с такими знаниями.
  • Вопрос задан
  • 2901 просмотр
Пригласить эксперта
Ответы на вопрос 3
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Непростое, но, как мне кажется, полезно задание:
Напишите TCP сервер используя сокеты и системный вызов poll(select для windows). Примерный интерфейс показан ниже. Вероятно, удобнее писать под linux, хотя большой разницы быть не должно. Должно поддерживаться подключение нескольких клиентов (в качестве клиента можно использовать утилиту netcat). Если возьметесь, могу по ходу дела давать подсказки.
typedef std::function<void(std::String const &, std::String const &, int)> on_msg_func_t;

Class TcpStringServer
{
public:
	void register_on_msg_func(on_msg_func_t const & func);
	void start(int port);
	void send_msg(std::string const &addr, int port, std::string const &msg);
};

void on_msg_func(TcpStringServer const & server, std::string const &msg, std::string const &addr, int port)
{
	server.send_msg("OK");
	std::cout << (boost::format("message %s resivied from %s:%d") % msg % addr % port ).str();
        //std::cout << "message " << msg << "received from " << addr << ":" << port << "\n";

}

int main()
{
	TcpStringServer server;
	server.register_on_msg_func(std::bind(on_msg_func, server, _1, _2, _3));
	server.start(12345);
}


Возможное развитие:

* простая сетевая игра, крестики нолики для начала
* удаленная консоль (прообраз ssh)
Ответ написан
lexxpavlov
@lexxpavlov
Программист, преподаватель
Сделайте какую-нибудь простую игру, с минимумом действий, но с задействованием всего вашего арсенала с c++, особенно ООП.
Например, напишите rogue-like игру, типа того, что описана в этом топике.
Тут у вас будет и работа с графикой, и хранение данных в файлах с конфигами (предметы, монстры, уровни), и игровая механика (перемещение, удары), и искусственный интеллект (поиск пути).
Графику можно сделать как консольной (в текстовом режиме), так и освоить какую-нибудь графическую библиотеку (Qt, например). А можно написать два разных интерфейса и выбирать - запустить в консоли или в окне.
Позже можно будет добавить работу с сетью и режим игры вдвоём.
Этот проект (относительно) не сложный, но даст вам очень много практического опыта. Ведь одно дело писать классы в учебных целях, когда заранее известна конечная иерархия, а другое дело - полностью разработать иерархию, реализовать её, увидеть, что вышло не очень (так часто бывает, нужен опыт), найти способ как провести рефакторинг, обнаружить ценность интерфейсов, переписать классы на использование интерфейсов (или общие абстрактные предки), увидеть, что это гораздо лучше, порадоваться за себя, дать поиграть друзьям, получить багрепорты, исправить все баги, и так далее.
Ответ написан
Комментировать
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы