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

82 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Игра змейка
### Игра
Змейка это ...
Прямоугольное поле и змейка представляющая из себя последовательность клеток.
У змейки есть голова и хвост - первая и последняя ее клетка.
Каждый тик игры змейка продвигается головой по текущему направлению. Вторая клетка змейки встаёт на место головы. Третья на место второй итд.
Змейка умирает если встречается со своим телом.
Направление можно выбрать с помощью клавиш 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.