{"id":20245722,"url":"https://github.com/skytecat/tetris","last_synced_at":"2026-06-11T14:31:41.339Z","repository":{"id":255623499,"uuid":"850576924","full_name":"skytecat/Tetris","owner":"skytecat","description":" Implementation of the Tetris game using finite-state machines in C","archived":false,"fork":false,"pushed_at":"2024-09-15T08:03:27.000Z","size":2030,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T15:47:02.622Z","etag":null,"topics":["c","ncurses-library"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skytecat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-01T07:11:54.000Z","updated_at":"2024-09-15T08:03:30.000Z","dependencies_parsed_at":"2024-11-14T09:39:47.025Z","dependency_job_id":null,"html_url":"https://github.com/skytecat/Tetris","commit_stats":null,"previous_names":["skytecat/tetris"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skytecat/Tetris","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FTetris","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FTetris/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FTetris/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FTetris/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skytecat","download_url":"https://codeload.github.com/skytecat/Tetris/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FTetris/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34204178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","ncurses-library"],"created_at":"2024-11-14T09:23:35.265Z","updated_at":"2026-06-11T14:31:41.326Z","avatar_url":"https://github.com/skytecat.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Тетрис\n\n\u003cimg src=\"misc/gif/tetris.gif\" width=\"500\" height=\"500\"/\u003e\n\n## Резюме \nВ данном проекте реализована игра «Тетрис» на языке программирования С с использованием структурного подхода.\n\n## Содержание\n\n  - [Введение](#введение)\n  - [Информация о проекте](#информация-о-проекте)\n    - [Общая информация](#общая-информация)\n    - [Конечные автоматы](#конечные-автоматы)\n    - [Фигуры](#фигуры)\n    - [Подсчет очков и рекорд в игре](#подсчет-очков-и-рекорд-в-игре)\n    - [Механика уровней](#механика-уровней)\n    - [Управление](#управление)\n  - [Сборка и тестирование](#сборка-и-тестирование)\n\n## Введение\n\nПроект состоит из двух частей: библиотеки, реализующей логику работы игры и терминального интерфейса с использованием библиотеки `ncurses`. Логика работы библиотеки реализована с использованием конечных автоматов.\n\n## Информация о проекте\n### Общая информация\n\n- Программа разработана на языке Си стандарта C11 с использованием компилятора gcc.\n- Код программы придерживается Google Style.\n- Обеспечено покрытие библиотеки unit-тестами, с помощью библиотеки `check`.\n\n- При заполнении линии, она уничтожается и происходит начисление очков;\n- При достижении верхней границы игрового поля игра завершается;\n- Игровое поле соответствует размерам игрового поля консоли — десять «пикселей» в ширину и двадцать «пикселей» в высоту.\n- Фигура, после достижения нижней границы поля или соприкосновения с другой фигурой, остановливается. После этого происходит генерация случайной следующей фигуры.\n\n### Конечные автоматы\n\nКонечный автомат (КА) в теории алгоритмов — математическая абстракция, модель дискретного устройства, имеющего один вход, один выход и в каждый момент времени находящегося в одном состоянии из множества возможных.\n\nПри работе на вход КА последовательно поступают входные воздействия, а на выходе КА формирует выходные сигналы. Переход из одного внутреннего состояния КА в другое может происходить не только от внешнего воздействия, но и самопроизвольно.\n\nКА можно использовать для описания алгоритмов, позволяющих решать те или иные задачи, а также для моделирования практически любого процесса. \n\n**_Конечный автомат для данной игры:_**\n\n![Конечный автомат тетриса](misc/images/diagram.png)\n\n**_Данный КА состоит из следующих состояний:_**\n\n- **Start** — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.\n- **Spawn** — состояние, в которое переходит игра при создании очередного блока и выбора следующего блока для спавна.\n- **Moving** — основное игровое состояние с обработкой ввода от пользователя — поворот блоков/перемещение блоков по горизонтали.\n- **Shifting** — состояние, в которое переходит игра после истечения таймера. В нем текущий блок перемещается вниз на один уровень.\n- **Attaching** — состояние, в которое преходит игра после «соприкосновения» текущего блока с уже упавшими или с землей. Если образуются заполненные линии, то она уничтожается и остальные блоки смещаются вниз. Если блок остановился в самом верхнем ряду, то игра переходит в состояние «игра окончена».\n- **Game over** — игра окончена.\n- **Pause** - состояние паузы, из которого в любой момент можно продолжить игру с сохраненным состоянием\n\n### Фигуры\n\n#### _Используемые фигуры:_\n\n![Фигуры](misc/images/tetris_pieces.png)\n\n### Подсчет очков и рекорд в игре\n\n**В игре есть следующие механики:**\n\n- подсчет очков;\n- хранение максимального количества очков.\n\nДанная информация передаётся и выводится пользовательским интерфейсом в боковой панели. Максимальное количество очков хранится в файле и сохраняется между запусками программы.\n\nМаксимальное количество очков меняется во время игры, если пользователь во время игры превышает текущий показатель максимального количества набранных очков.\n\n**Начисление очков будет происходить следующим образом:**\n\n- 1 линия — 100 очков;\n- 2 линии — 300 очков;\n- 3 линии — 700 очков;\n- 4 линии — 1500 очков.\n\n### Механика уровней\n\nВ игру добавлена механика уровней. Каждый раз, когда игрок набирает 600 очков, уровень увеличивается на 1. Повышение уровня увеличивает скорость движения фигур. Максимальное количество уровней — 10.\n\n### Управление\n  - **Стрелка вниз**, **Стрелка вверх** **+** **Enter** — управление в меню\n  - **'p'** — переход в окно паузы,\n  - **'q'** — переход в окно завершения игры,\n  - **Стрелка влево** — движение фигуры влево,\n  - **Стрелка вправо** — движение фигуры вправо,\n  - **Стрелка вниз** — ускорение падения фигуры,\n  - **Пробел** — вращение фигуры.\n\n## Сборка и тестирование\n\nСборка осуществляется с помощью Makefile,который находится в директории `src`. Функции для вычислений покрыты unit-тестами.\n\n**Цели в Makefile:**\n\n`install` - установить и запустить приложение\n\n`uninstall` - удалить приложение\n\n`clean` - очистить каталог от всех файлов, полученных в результате компиляции\n\n`brew` - установить Homebrew\n\n`lcov` - установить lcov\n\n`test` - запустить тесты функций\n\n`gcov_report` - посмотреть покрытие тестами кода\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskytecat%2Ftetris","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskytecat%2Ftetris","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskytecat%2Ftetris/lists"}