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