Курсовой проект представляет собой упрощённую консольную реализацию игры "Жизнь", придуманной английским математиком Джоном Конвеем в 1970 году.
Место действия этой игры — «вселенная» — это размеченная на клетки ограниченная плоскость.
Каждая клетка на этой плоскости может находиться в двух состояниях: быть «живой» (заполненной) или быть «мёртвой» (пустой). Клетка имеет восемь соседей, окружающих её
Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:
- в пустой (мёртвой) клетке, рядом с которой ровно три живые клетки, зарождается жизнь;
- если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае, если соседей меньше двух или больше трёх, клетка умирает («от одиночества» или «от перенаселённости»)
Игра прекращается, если
- на поле не останется ни одной «живой» клетки
- при очередном шаге ни одна из клеток не меняет своего состояния (складывается стабильная конфигурация)
Игрок не принимает прямого участия в игре, а лишь расставляет начальную конфигурацию «живых» клеток, которые затем взаимодействуют согласно правилам уже без его участия (он является наблюдателем).
Реализация должна удовлетворять следующим требованиям и ограничениям:
- Текущее состояние вселенной выводится на консоль в виде таблицы из символов, разделённых пробелом. Мёртвая клетка помечается символом
-
, живая клетка помечается символом*
(примеры далее) - На каждом шаге на консоль должно выводиться текущее состояние вселенной, а также информация о номере поколения и количестве живых клеток на текущий момент
- При завершении игры на консоли должно присутствовать состояние вселенной на момент окончания игры, номер поколения, количество живых клеток, а также причина завершения игры
- При расчёте состояния клеток на границах игрового поля учитываются только соседние клетки (у клеток на границе игрового поля соседних клеток будет меньше 8)
- Для инициализации вселенной использовать текстовый файл. Файл имеет следующую структуру: первые два числа - это количество строк и количество столбцов в сетке вселенной. Затем идёт информация о распределении живых клеток. Распределение состоит из неопределённого количества пар чисел, где каждая пара состоит из номера строки и номера столбца живой клетки.
Примеры входного файла, соответствующее ему начальное состояние вселенной и конечное состояние:
20 30
2 3
2 4
3 4
3 5
3 6
3 7
5 0
5 1
5 2
6 2
10 10
3 3
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
- При выводе на консоль каждого следующего состояния у вас никуда не денутся те состояния, которые вы выводили ранее. Это может быть полезно для сохранения истории развития вашей вселенной, но при этом может выглядеть не совсем эстетично.
Альтернативный вариант - очищать консоль перед каждым выводом следующего состояния. Для этого можно использовать функцию
std::system
с аргументом"clear"
, то есть вызвать функциюstd::system("clear");
. Эта функция находится в библиотеке<cstdlib>
- Компьютеры сейчас работают быстро, поэтому без дополнительных действий состояния будут сменять друг друга практически мгновенно. Для комфортного просмотра разумно добавить задержку примерно в 1 секунду перед каждым следующим вычислением нового состояния. Для этого вам необходимо подключить библиотеку
<unistd.h>
и использовать функциюsleep
, которая принимает на вход количество секунд, на которое надо задержаться. Для задержки на 1 секунду необходимо вызватьsleep(1);
Входной файл:
20 30
2 3
2 4
3 4
3 5
3 6
3 7
5 0
5 1
5 2
6 2
Что поможет решить большинство частых проблем:
- Работа над проектом объемная. Вы можете сдавать работу на проверку: частями или полностью. Вы можете сдать часть кода и получить обратную связь, после чего работа будет отправлена на доработку и вы сможете продолжить.
- При возникновении вопросов попробовать найти ответ сначала самому в интернете. Умение искать ответы пригодится вам в профессиональной деятельности. После самостоятельного поиска можно спрашивать преподавателя.
- Если вопросов больше одного, то присылайте их в виде нумерованного списка. Так дипломному руководителю будет проще отвечать на каждый из них.
- При необходимости прикрепите к вопросу скриншоты и стрелочкой покажите, где не получается. Программу для этого можно скачать здесь.
- Распределяйте нагрузку, планируйте время на обучение и начинайте работу над курсовой как можно раньше, чтобы у вас было больше времени на правки и доработку проекта.
Что может стать источником проблем:
- Вопросы вида «Ничего не работает. Не запускается. Всё сломалось». Преподаватель не сможет ответить на такой вопрос без дополнительных уточнений. Цените своё время и время других.
- Откладывание выполнения курсового проекта на последний момент.
- Ожидание моментального ответа на свой вопрос. Преподаватели — работающие разработчики, которые кроме преподавания занимаются рабочими проектами. Их время ограничено, поэтому постарайтесь задавать правильные вопросы, чтобы получать быстрые ответы :)
- Выполняйте работу в repl.it
- Скопированную ссылку (вашу курсовую работу) нужно отправить на проверку. Для этого перейдите в личный кабинет на сайте netology.ru, в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку.
- Работу можно сдавать частями
Никаких файлов прикреплять не нужно.
- К личном кабинете для сдачи прикреплена ссылка repl с кодом курсовой работы
- В ссылке должен содержаться код, который при запуске выполняет описанный в задании алгоритм