Обновить

Комментарии 10

Хочу обратить ваше внимание на то, что подобный подход не научит вас писать код на C правильно. Максимум, чему вы научитесь - писать как-нибудь, и результат будет работать. А иногда не работать. У вас в профиле не указано никаких других языков, кроме C/C++ - откуда я делаю вывод, что их нет.
Чтобы как-то улучшить результат, я предлагаю вам либо спрашивать ревью у ИИ, либо, для чистоты процесса, после написания какого-то законченного небольшого куска кода предлагать решить ту же задачу ИИ, не показывая ваш код - как я понимаю принцип работы LLM, она покажет самые ходовые практики для данного случая.

Хорошо, спасибо :)

Я буду вам очень признателен за помощь в исправлении моих ошибок. Выслушаю любую критику.

Критики не будет, как и исправления ошибок. Просто наподумать/допилить.

Почему-то игра странно себя ведет при вводе следующих никнеймов:

  • Fluggegecheimen

  • Nikita Dzhigurda

В итоге я заменил %c на %s.

... но она упорно продолжает зацикливаться на кириллице.

Ну и ждем патч с добавлением обработки некорректных команд от игрока (например, когда он вместо '1' или '2' ввёл '3' или 'q').

У меня стоит ограничение по длине никнейма в 14 (а не в 15, как в выделенном массиве) символов. Но спасибо :)

Почему здесь я не использовал указатель? Т.к программа лишь выводит значения, но не изменяет их.

В таком случае можно было бы объявить указатель на константную структуру, т.е.:

void print_status(const Player* player, const Monster* monster) {
...
}

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

Хорошо, спасибо :)

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

2д еще проще доделать, как концептуально так и до полного рабочего прототипа, а там уже будет видно ваше приложение вам самому

сосредоточтесь на модульности, нужно 2д, звук, менеджер ресурсов(с ростом проекта персистентность добавляйте), сосредоточтесь на таком принципе каждый новый подход использует старый ваш материал(можно добиться примерно 50%), и тогда материал будет расти вы будете получать знания

есть некоторые техники сокращения пути, или упрощения как в 3д или 2д, но база это 2д, как емуляция процессора в какой-то мере, по-сути и там и там всё одно и тоже, просто в играх упор на игровую механику, поэтому база важна

Большое спасибо)

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

printf("ASDqwe\n");
// будет эквивалентно
//          вот тут запятой не нужно
//          v 
printf("ASD" "qwe\n");
printf( // и так тоже можно
  "ASD"
  "qwe\n"
);
  

Так что как минимум количество printf в вашей программе можно радикально сохранить. А уж если вынести литералы в дефайны, то и подавно.

Наверное имеет смысл немножко почитать про ANSII ecape sequences. Попробуйте попользоваться каким-нибудь gitui/tig или тот же fzf и сравните насколько они интерактивны не выходя из терминала.

Чтобы посмотреть как довольно неплохо писать код на C можно подглядеть код и подход raylib, например.

С точки зрения разработки игр - если игра не будет сильно усложняться и останется на этапе попеременного обменивания тумаками, то вопросов нет. Если же вы действительно хотите сделать полноценную RPG, то имеет сразу задумываться о написании ECS, чтобы обработка логики происходила системами, а не юнитами. Ну а сами юниты превращаются в набор систем и пару пропертей, типа того же имени и ID.

Ооо, спасибо)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации