From 9b9ecdd4c397294332217f1400b0c16e85061a4c Mon Sep 17 00:00:00 2001 From: Igor Mineev Date: Sat, 14 Feb 2026 20:20:12 +0300 Subject: [PATCH] Add task --- snake.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 snake.md diff --git a/snake.md b/snake.md new file mode 100644 index 0000000..368f001 --- /dev/null +++ b/snake.md @@ -0,0 +1,81 @@ +# Игра змейка + +### Игра + +Змейка это ... +Прямоугольное поле и змейка представляющая из себя последовательность клеток. +У змейки есть голова и хвост - первая и последняя ее клетка. +Каждый тик игры змейка продвигается головой по текущему направлению. Вторая клетка змейки встаёт на место головы. Третья на место второй итд. +Змейка умирает если встречается со своим телом. +Направление можно выбрать с помощью клавиш WASD. +Змейка не может повернуть головой на 180 градусов. +Некоторые клетки поля могут содержать препятствие или яблоко. +При поедании Яблока змейка увеличивается в размере тогда и только тогда когда ХВОСТ достигает клетки яблока. +При наползании на препятствие змейка умирает. +Мир закольцован - выползание за экран телепортирует голову змейки на соответсвующее поле противоположной стороны. +Змейку можно ускорить зажатием пробела (ползет быстро тогда и только тогда когда пробел зажат). + +### Критерии оценивания + +По каждому критерию оценка ставится независимо от 0 до 15. Итоговая оценка равна средней оценке по критериям. + +1) Играбельность/Визуал +2) Архитектура системных вызовов +3) Код игры + +За валидную игру (запускается, как-то играется) оценка не может быть ниже 4. + +#### Играбельность/Визуал + +Смотрится картинка, звук, реакция на нажатия клавиш (в том числе нескольких одновременно). + +На 10 обязательно наличие + +1) Меню со стартом и рестартом +2) Не примитивные фигуры +3) Звук поедания +4) Возможность регулировки скорости (через зажатие клавиши пробел) +5) Счет очков в углу экрана +6) Регулировка количества яблок на арене (по дефолту 5) + +#### Архитектура системных вызовов + +Смотрится какое API для взаимодействия с устройствами вы придумали + +На 10 обязательно: + +1) Аналог getc который помнит не одно последнее нажатие на клавиатуру, а как минимум 32 последних нажатия/отжатия +2) Системный вызов получения реального времени (все тики должны занимать одинаковое время вне зависимости от скорости вычислений) +3) Системный вызов проигрывания звука +4) Системный вызов переключение экрана в режим 13h с выбором адреса в юзерспейсе +5) Системный вызов переключения обратно в режим вывода на консоль (после завершения программы ОС должна продолжить работу в штатном режиме) +6) Системный вызов ожидания/сна + +#### Код игры + +Код должен быть читаем, понятен и аккуратен. + +На 10 обязательно наличие автоигры, где змейка сама себя проходит (по нажатию на клавишу). В режиме автоигры змейка обязана дойти до конца (заполнить все поле). + +Доп баллы возможны если змейка в режиме автоигры делает это быстро при наличии не более 5 яблок на поле. + +Генерация яблок обязана быть псевдослучайной. + +### FAQ + +#### Можно ли писать на C++? + +Да, для этого создайте в user папке snake.cpp + +#### Можно ли использовать много файлов для игры? + +Нужно. Создавайте хедеры и си файлы в папке user (или подпапке). В Makefile добавьте сборку. + +#### Создал в `user` `snake.c` а пишет что `run snake` не найдено... + +Поправьте Makefile чтобы собирался файл `snake`, а также добавьте его в `USERPROGS` + +#### Какой размер поля должен быть? + +Разрешение экрана режима 13h 320x200 px. Важно чтобы поле состояло из квадратных клеток. +Минимальный размер квадрата 4px. Рекомендуемый - 10px.