defines
This commit is contained in:
parent
411b2e4bb3
commit
31562af99d
6 changed files with 193 additions and 111 deletions
122
README_RUS.md
122
README_RUS.md
|
|
@ -1,81 +1,6 @@
|
|||
# BrickGame Тетрис
|
||||
Резюме: в данном проекте тебе предстоит реализовать игру «Тетрис» на языке программирования С с использованием структурного подхода.
|
||||
|
||||
💡 [Нажми сюда](https://new.oprosso.net/p/4cb31ec3f47a4596bc758ea1861fb624), **чтобы поделиться с нами обратной связью на этот проект**. Это анонимно и поможет нашей команде сделать обучение лучше. Рекомендуем заполнить опрос сразу после выполнения проекта.
|
||||
|
||||
## Содержание
|
||||
|
||||
- [BrickGame Тетрис](#brickgame-тетрис)
|
||||
- [Содержание](#содержание)
|
||||
- [Введение](#введение)
|
||||
- [Chapter I ](#chapter-i-)
|
||||
- [Общая информация](#общая-информация)
|
||||
- [BrickGame](#brickgame)
|
||||
- [История тетриса](#история-тетриса)
|
||||
- [Конечные автоматы](#конечные-автоматы)
|
||||
- [Фроггер](#фроггер)
|
||||
- [Тетрис](#тетрис)
|
||||
- [Chapter II ](#chapter-ii-)
|
||||
- [Требования к проекту](#требования-к-проекту)
|
||||
- [Часть 1. Основное задание](#часть-1-основное-задание)
|
||||
- [Часть 2. Дополнительно. Подсчет очков и рекорд в игре](#часть-2-дополнительно-подсчет-очков-и-рекорд-в-игре)
|
||||
- [Часть 3. Дополнительно. Механика уровней](#часть-3-дополнительно-механика-уровней)
|
||||
|
||||
## Введение
|
||||
|
||||
Для реализации игры «Тетрис» проект должен состоять из двух частей: библиотеки, реализующей логику работы игры, которую можно в будущем подключать к различным GUI, и терминального интерфейса. Логика работы библиотеки должна быть реализована с использованием конечных автоматов, одно из возможных описаний которого будет дано ниже.
|
||||
|
||||
## Chapter I <div id="chapter-i"></div>
|
||||
## Общая информация
|
||||
### BrickGame
|
||||
|
||||
BrickGame — популярная портативная консоль 90-ых годов с несколькими ~~тысячами~~ встроенными играми, разработана она была в Китае. Изначально эта игра была копией, разработанной в СССР и выпущенной Nintendo в рамках платформы GameBoy игры «Тетрис», но включала в себя также и множество других игр, которые добавлялись с течением времени. Консоль имела небольшой экранчик с игровым полем размера 10 х 20, представляющим из себя матрицу «пикселей». Справа от поля находилось табло с цифровой индикацией состояния текущей игры, рекордами и прочей дополнительной информацией. Самыми распространенными играми на BrickGame были: тетрис, танки, гонки, фроггер и змейка.
|
||||
|
||||

|
||||
|
||||
### История тетриса
|
||||
|
||||
«Тетрис» был написан Алексеем Пажитновым 6 июня 1984 года на компьютере Электроника-60. Игра представляла собой головоломку, построенную на использовании геометрических фигур «тетрамино», состоящих из четырех квадратов. Первая коммерческая версия игры была выпущена в Америке в 1987 году. В последующие годы «Тетрис» был портирован на множество различных устройств, в том числе на мобильные телефоны, калькуляторы и карманные персональные компьютеры.
|
||||
|
||||
Наибольшую популярность приобрела реализация «Тетриса» для игровой консоли Game Boy и видеоприставки NES. Но кроме нее существуют различные версии игры. Например, есть версия с трехмерными фигурами или дуэльная версия, в которой два игрока получают одинаковые фигуры и пытаются обойти друг друга по очкам.
|
||||
|
||||
### Конечные автоматы
|
||||
|
||||
Конечный автомат (КА) в теории алгоритмов — математическая абстракция, модель дискретного устройства, имеющего один вход, один выход и в каждый момент времени находящегося в одном состоянии из множества возможных.
|
||||
|
||||
При работе КА на вход последовательно поступают входные воздействия, а на выходе КА формирует выходные сигналы. Переход из одного внутреннего состояния КА в другое может происходить не только от внешнего воздействия, но и самопроизвольно.
|
||||
|
||||
КА можно использовать для описания алгоритмов, позволяющих решать те или иные задачи, а также для моделирования практически любого процесса. Несколько примеров:
|
||||
|
||||
- Логика искусственного интеллекта для игр;
|
||||
- Синтаксический и лексический анализ;
|
||||
- Сложные прикладные сетевые протоколы;
|
||||
- Потоковая обработка данных.
|
||||
|
||||
Ниже представлены примеры использования КА для формализации игровой логики нескольких игр из BrickGame.
|
||||
|
||||
### Фроггер
|
||||
|
||||

|
||||
|
||||
«Фроггер» — одна из поздних игр, выходящих на консолях Brickgame. Игра представляет собой игровое поле, по которому движутся бревна, и, перепрыгивая по ним, игроку необходимо перевести лягушку с одного берега на другой. Если игрок попадает в воду или лягушка уходит за пределы игрового поля, то лягушка погибает. Игра завершается, когда игрок доводит лягушку до другого берега или погибает последняя лягушка.
|
||||
|
||||
Для формализации логики данной игры можно представить следующий вариант конечного автомата:
|
||||
|
||||

|
||||
|
||||
Данный КА имеет следующие состояния:
|
||||
|
||||
- Старт — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.
|
||||
- Спавн — состояние, в котором создается очередная лягушка.
|
||||
- Перемещение — основное игровое состояние с обработкой ввода от пользователя: движение лягушки по полосе влево/право или прыжки вперед/назад.
|
||||
- Сдвиг — состояние, которое наступает после истечения таймера, при котором все объекты на полосах сдвигаются вправо вместе с лягушкой.
|
||||
- Столкновение — состояние, которое наступает, если после прыжка лягушка попадает в воду, или если после смещения бревен лягушка оказывается за пределами игрового поля.
|
||||
- Достигнут другой берег — состояние, которое наступает при достижении лягушкой другого берега.
|
||||
- Игра окончена — состояние, которое наступает после достижения другого берега или смерти последней лягушки.
|
||||
|
||||
Пример реализации фроггера с использованием КА ты можешь найти в папке `code-samples`.
|
||||
|
||||
### Тетрис
|
||||
|
||||

|
||||
|
|
@ -160,3 +85,50 @@ BrickGame — популярная портативная консоль 90-ых
|
|||
### Часть 3. Дополнительно. Механика уровней
|
||||
|
||||
Добавь в игру механику уровней. Каждый раз, когда игрок набирает 600 очков, уровень увеличивается на 1. Повышение уровня увеличивает скорость движения фигур. Максимальное количество уровней — 10.
|
||||
|
||||
# Tetris Game
|
||||
|
||||
Classic Tetris implementation in C11 with ncurses interface.
|
||||
|
||||
## Requirements
|
||||
|
||||
- GCC or Clang
|
||||
- ncurses library
|
||||
- Check framework (for tests)
|
||||
|
||||
## Building
|
||||
|
||||
make # Build the game
|
||||
make run # Build and run
|
||||
make test # Run unit tests
|
||||
make install # Install to ~/.local/bin
|
||||
|
||||
text
|
||||
|
||||
## Controls
|
||||
|
||||
- **Arrow Keys**: Move left/right, rotate (up)
|
||||
- **Down Arrow**: Instant drop
|
||||
- **Space/R**: Rotate figure
|
||||
- **P**: Pause
|
||||
- **S**: Restart game
|
||||
- **Q**: Quit
|
||||
|
||||
## Features
|
||||
|
||||
- 7 classic Tetris figures
|
||||
- Score tracking with persistent high score
|
||||
- 10 speed levels
|
||||
- Smooth time-based movement using POSIX `clock_gettime()`
|
||||
- Structured programming principles
|
||||
|
||||
## Architecture
|
||||
|
||||
- **FSM-based game logic** with states: Init, Spawn, Move, Moving, Attaching, GameOver
|
||||
- **Separated frontend/backend**: `brick_game/` (logic) and `gui/cli/` (display)
|
||||
- **Time-based delays** for precise falling speed
|
||||
|
||||
## License
|
||||
|
||||
School 21 educational project
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue