Классическая игра «Змейка», реализованная на C с использованием библиотеки ncurses. Управляйте змейкой, ешьте яблоки и избегайте столкновений со стенами и собственным хвостом.
- Отрисовка в терминале через
ncurses - Плавное движение змейки (стрелки или WASD)
- Подсчёт очков
- Пауза (клавиша
p) - Экран «Игра окончена» с финальным счётом
- Рост змейки после поедания яблока
- Размер поля: 20×20
- Обработка столкновений со стенами
.
├── Makefile
├── main.c
├── source/
│ ├── simple_list.c # Двусвязный список для тела змейки
│ ├── snake_graphics.c # Функции рисования
│ ├── snake_input.c # Обработка ввода с клавиатуры
│ └── snake_logic.c # Основная логика игры
├── include/
│ ├── enums.h # Перечисления (Status, Cells, Move)
│ ├── data_types.h # Структуры (Snake, Game, Apple, List...)
│ ├── simple_list.h
│ ├── snake_graphics.h
│ ├── snake_input.h
│ └── snake_logic.h
└── README.md
- Библиотека ncurses (разработочная версия)
- GCC (или любой C99-совместимый компилятор)
- Debian/Ubuntu:
sudo apt install libncurses-dev - Arch Linux:
sudo pacman -S ncurses - macOS (через Homebrew):
brew install ncurses - Windows (рекомендуется WSL или Cygwin)
Просто выполните make в корневой директории проекта:
makeБудет создан исполняемый файл game.
./gamemake clean-
Управление:
←/a– влево
↑/w– вверх
→/d– вправо
↓/s– вниз -
Пауза: нажмите
p(повторное нажатие возобновляет игру) -
Цель:
Съедайте яблоко (@), чтобы увеличить счёт на 10 очков. Каждое яблоко делает змейку длиннее. Избегайте столкновения с границей (#) и собственным телом. -
Конец игры:
При столкновении появляется надпись «GAME OVER!» и финальный счёт. Нажмите любую клавишу для выхода.
- Тело змейки хранится в двусвязном списке (голова = первый элемент, хвост = последний).
- Игровое поле — двумерный массив
enum Cells(Space, Border, Apple, Snake). - Движение обновляется с фиксированной задержкой
320 мс(скорость не увеличивается). - Новое яблоко не появляется на теле змейки.
- Используется
stdscr(стандартный экран ncurses) — без отдельных окон.
- Увеличение скорости после каждого яблока
- Сохранение рекорда
- Препятствия или разные уровни
- Более отзывчивое управление без блокировки движения
- Цвета и улучшенная графика
Этот проект можно свободно использовать и изменять в образовательных целях.
Автор: Марушко Максим
Создан: 2024
Язык: C (C99) + ncurses