caos-with-snake/snake.md
2026-02-14 20:23:44 +03:00

5.6 KiB
Raw Blame History

Игра змейка

Игра

Змейка это ... Прямоугольное поле и змейка представляющая из себя последовательность клеток. У змейки есть голова и хвост - первая и последняя ее клетка. Каждый тик игры змейка продвигается головой по текущему направлению. Вторая клетка змейки встаёт на место головы. Третья на место второй итд. Змейка умирает если встречается со своим телом. Направление можно выбрать с помощью клавиш WASD. Змейка не может повернуть головой на 180 градусов. Некоторые клетки поля могут содержать препятствие или яблоко.
При поедании Яблока змейка увеличивается в размере тогда и только тогда когда ХВОСТ достигает клетки яблока. При наползании на препятствие змейка умирает. Мир закольцован - выползание за экран телепортирует голову змейки на соответсвующее поле противоположной стороны. Змейку можно ускорить зажатием пробела (ползет быстро тогда и только тогда когда пробел зажат).

Критерии оценивания

По каждому критерию оценка ставится независимо от 0 до 10 (но может быть и больше на усмотрение проверяющих). Итоговая оценка равна средней оценке по критериям.

  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.