← ко всем урокам

Урок 1. Первая консольная игра на C#

2026-04-21
(базовый)
(продвинутый)

Описание

ПЕРВОЕ ЗАНЯТИЕ

Делаем первую консольную игру на C#

Базовый уровень - https://play.boomstream.com/N9dyxsTv

И дополнительный продвинутый материал - https://play.boomstream.com/yIMY6Txi

Постараюсь все занятия делать в формате базовый 30 минут где мы чёткое делаем что-то работающее и где-то 60 дополнительных минут с продвинутыми темами и углублением. Завтра уже залезем в Unity

Задачи для практики:
1. Базовый) Сделайте любую простую консольную игру с помощью ИИ и запустите её. Результат в формате видео в комментарии
2. Продвинутый) Разработайте свою формальную систему описания игры. Опишите игру из предыдущего задания с её помощью и пришлите в комментариях

Материалы и код

📁 Проект Unity (Heroes-3)📘 Учебное пособие (PDF)

💬 Комментарии (52)

Андрей Котов2026-04-21 00:13
наконец-то
Кирилл К.2026-04-21 00:15
И как это смотреть? С или без ВПН?
Иван Фот2026-04-21 00:39
↳ Кирилл К.: И как это смотреть? С или без ВПН?
без
Андрей Котов2026-04-21 00:42
↳ Кирилл К.: И как это смотреть? С или без ВПН?
я начал смотреть с ВПН, потом без него, а потом проснулся и пошел спать
Alex Maddison2026-04-21 00:52
Рома, можешь видос залить на другую платформу или скинуть его в телегу? Видос еле грузит в любом качестве
👍1
Александр2026-04-21 01:24
↳ Кирилл К.: И как это смотреть? С или без ВПН?
Копируй ссылку, выключи впн и смотри в браузере
Andy Ivanov2026-04-21 01:27
Есть интересующий меня вопрос: как отслеживать, какой ИИ сейчас лучше всего подходит для программирования?
Например, Gemini хорошо справляется с поиском информации, ChatGPT — с редактированием текста, а Claude пока лидирует в написании кода. Но через полгода или год может появиться новая нейросеть, которая будет писать код лучше, чем Claude. Так вот, как отслеживать такие изменения и всегда понимать, какой ИИ лучший в коде? Заранее спасибо!
Kirill Verbin2026-04-21 04:18
↳ Andy Ivanov: Есть интересующий меня вопрос: как отслеживать, какой ИИ сейчас лучше всего подходит для п
А откуда ты узнал что Claude лучшая в написании кода?
Либо как все - после видоса на youtube или поста на хабре, либо сам тестировал. Нет каких то показателей которые смогут тебе сказать мол «Вот эта AI на 20 попугаев лучше пишет код». Так что либо следи за новостями и обзорами, либо сам тестируй
❤1
Kirill Verbin2026-04-21 04:22
Бл опять как 8 лет назад учить базу программирования)
Nova2026-04-21 08:25
🍾2
Oleg Masharov2026-04-21 10:02
↳ Andy Ivanov: Есть интересующий меня вопрос: как отслеживать, какой ИИ сейчас лучше всего подходит для п
У ChatGPT (или OpenAI) свой CODEX для программирования, в том числе app.
Boris2026-04-21 10:05
Формальное описание игры Battle City

Логика движка
Создаётся игровой движок. Движок является поставщиком сервисов для игры:
2.1 IWorldObjectFactory — создаёт объект и добавляет его для отрисовки в движок.
2.1.2 Каждый объект представляет собой IObject, для которого доступны методы MoveTo(int x, int y) и Rotate(Direction direction).
2.2 ILifecycle — организует цикл обновления. Принимает реализации интерфейса IUpdatable и вызывает у них метод Update каждый кадр.
2.3 IInput — возвращает текущее направление движения (вверх, вниз, влево, вправо) и состояние кнопки выстрела от устройства ввода.
2.4 ICollisionEvents — содержит событие о столкновении двух объектов.
2.5 ITimer — позволяет запускать отложенные и периодические действия (например, спавн врагов, задержка между выстрелами).
Движок запускается на работу.

Техническая логика игры
Создаётся объект игры, которому передаются сервисы. Игра в своей точке сборки создаёт необходимые компоненты и привязывает их к сервисам движка.
Игра состоит из следующих компонентов:
Level — создаёт необходимые объекты для описания границ уровня, кирпичных и бетонных стен, а также базы игрока (орла).
PlayerTank — описывает танк игрока, передвигает его на основе IInput и создаёт снаряды при нажатии кнопки выстрела.
EnemySpawner — в случайных точках спавна создаёт вражеские танки с заданным интервалом, пока не исчерпается лимит врагов на уровне.
EnemyTank — описывает вражеский танк с простым ИИ (движение в случайном направлении, периодические выстрелы и смена направления при столкновении).
Bullet — описывает снаряд, движущийся в заданном направлении до столкновения.
Score — ведёт подсчёт очков за уничтоженных врагов.

Логика игры
GamePlay:
Обработка события столкновения снаряда игрока с вражеским танком — уничтожение врага, уничтожение снаряда и начисление очков.
Обработка события столкновения снаряда врага с танком игрока — уничтожение танка игрока и завершение игры (поражение).
Обработка события столкновения снаряда с кирпичной стеной — уничтожение стены и снаряда.
Обработка события столкновения снаряда с бетонной стеной или границей уровня — уничтожение только снаряда.
Обработка события столкновения двух снарядов — уничтожение обоих снарядов.
Обработка события столкновения любого снаряда с базой (орлом) — завершение игры (поражение).
Отслеживание количества уничтоженных врагов: если все враги уровня уничтожены, игра завершается (победа).
👍3
YANKULAND GAMES2026-04-21 11:59
YANKULAND GAMES2026-04-21 11:59
Игра "ТЕТРИС" (консоль)

• Класс Cell (клетка): хранит координаты (X,Y) и цвет. Нужен для рисования квадратиков фигур и поля.

• Класс Tetromino (фигура): хранит форму (4 блока) и цвет. Умеет: поворачиваться (новая ориентация), выдавать список своих клеток (для проверки столкновений и отрисовки).

• Класс TetrisGame (главный): управляет всем процессом.

Хранит:
- игровое поле 10x20 (пусто/занято + цвет)
- текущую фигуру + её координаты
- следующую фигуру
- счёт, уровень, кол-во убранных линий
- флаг game over

Основные функции:
1. Проверка столкновения: можно ли сдвинуть/повернуть фигуру (стены, дно, блоки). Если нельзя двигаться вниз -> закрепление.

2. Перемещение и поворот: пытается сдвинуть/повернуть, если разрешено. При невозможности движения вниз – закрепляет.

3. Закрепление фигуры: клетки фигуры становятся занятыми блоками на поле. Затем проверяет заполненные ряды.

4. Удаление заполненных рядов: идёт снизу вверх, находит полные строки, удаляет их, сдвигает верхние вниз. Начисляет очки (1/2/3/4 линии -> 100/200/400/800 × уровень). Каждые 10 линий -> уровень +1, падение ускоряется.

5. Появление новой фигуры: следующая становится текущей, новая следующая генерируется случайно. Позиция – вверху посередине. Если сразу коллизия -> game over.

6. Мгновенное падение (хард-дроп): бросает фигуру до упора, затем закрепляет.

7. Отрисовка: рисует границы поля, все блоки (цветные), текущую фигуру, следующую фигуру справа, счёт, уровень, линии.

8. Обработка нажатий: клавиши (стрелки)-> лево/право/поворот/ускорение падения, пробел (хард-дроп), R (рестарт), Esc (выход).

9. Игровой цикл: бесконечно повторяет – проверка ввода, автоматическое падение по таймеру (зависит от уровня), отрисовка, небольшая пауза.
👍2
А2026-04-21 12:36
👍3
А2026-04-21 12:48
*Что есть в игре???
- Змейка
- еда
- Стены
- Счет(очки)
- Скорость

*Как все выглядит в начале?

- Змейка 3 клетки в центре поля
- Еда: случайное место(не на змейке)
- Счет: 0 очков
- Скорость: 100 миллисекунд на шаг
- Игра: не закончена
- Направление: вправо

*Что может сделать игрок?

- Нажать на стрелки:
- Вверх → змейка поползет вверх
- Вниз → змейка поползет вниз
- Влево → змейка поползет влево
- Вправо → змейка поползет вправо

НЕЛЬЗЯ:
- Развернуться на 180 градусов (врезаться в себя)

Что происходит каждую секунду
ПРАВИЛО 1: Змейка двигается
Голова идет вперед, хвост подтягивается

ПРАВИЛО 2: Если голова на еде
- Змейка растет (хвост не подтягивается)
- Счет +10
- Скорость увеличивается
- Новая еда появляется в случайном месте

ПРАВИЛО 3: Если голова в стене
- ИГРА ЗАКАНЧИВАЕТСЯ

ПРАВИЛО 4: Если голова в хвосте
- ИГРА ЗАКАНЧИВАЕТСЯ
👍3
Helgi2026-04-21 13:07
↳ Andy Ivanov: Есть интересующий меня вопрос: как отслеживать, какой ИИ сейчас лучше всего подходит для п
❤2 👍1
Павел2026-04-21 16:24
🏗 1. Application Layer (Точка сборки) • GameMediator: Главный контроллер. Внедряет зависимости (Dependency Injection), управляет Game Loop (Ввод -> Логика -> Рендер) и глобальным состоянием (смена уровней).

⚙️ 2. Infrastructure (Движок) • IRenderer: Двойная буферизация (без мерцания). Рисует слои по Z-Index: Террейн -> Стены -> Танки -> Лес (перекрывает танки) -> Снаряды -> UI. • IInputSource: Абстракция устройств ввода.

🧠 3. Domain Layer (Ядро логики) Чистая математика без привязки к консоли. • Парсинг карт уровней из строк. • Физика: проверка проходимости клеток и видимости для ИИ (Line of Sight). • Сборка мусора (удаление мертвых объектов).

🕹 4. Сущности (Game Objects) • Tank: Базовый класс (ХП, броня, множитель урона). • EnemyFactory: Паттерн Фабрика. Генерирует врагов: Light (быстрые), Heavy (бьют бетон), APC (охотятся только за бонусами). • Окружение: Стены (кирпич/бетон), Бонусы (ХП, Броня, Урон х2).
🔥2 👍1
Павел2026-04-21 16:24
 5. Правила и ИИ (Gameplay) • Конечный автомат (FSM): Враги переключают состояния: Hunt (жадный поиск базы/игрока) -> Attack (выстрел при прямой видимости) -> Hide (отступление за укрытие). • Террейн: Лес (скрывает танк), Лед (принудительное скольжение), Вода (простреливается, но не проходима). • Прогрессия: Победа = убить N врагов (загрузка некст уровня). Поражение = смерть игрока или базы.
👍1
Vlad Savinkov2026-04-21 16:30
Описание игры «Galaga» (консольная версия)
Общее описание
Galaga — это консольный аркадный шутер на C#. Игрок управляет космическим кораблём, стреляет по волнам врагов и уклоняется от их атак. Размер поля — 80×25 символов, обновление — 20 кадров в секунду.

Управление
Стрелки влево и вправо — движение корабля. Пробел — выстрел.

Игровая механика
В начале игры появляются 24 врага (3 ряда по 8 штук). Они двигаются строем влево-вправо, при достижении края опускаются вниз и меняют направление. Враги случайно стреляют каждые 1,5 секунды.

За каждого уничтоженного врага игрок получает 10 очков.

Жизни и поражение
У игрока 3 жизни. При попадании вражеской пули жизнь теряется. Поражение наступает, если закончились жизни или любой враг достиг нижней границы поля.

Победа
Игрок побеждает, если уничтожил всех врагов. После этого выводится финальный счёт и сообщение о победе.
👍2
Refresh2026-04-21 16:48
привет, пэпэ, видео в формате 1 кадр
👍1
Refresh2026-04-21 16:48
Oleg Masharov2026-04-21 18:05
👍1
Oleg Masharov2026-04-21 18:05
Точка сборки игры действует по такой логике:
//Логика движка
1) Создаётся игровой движок
2) Движок является поставщиком сервисов для игры:
2.1) IWorldObjectFactory который создаёт объект и добавляет его для отрисовки в движок: каждый объект это IObject который можно MoveTo(int x, int y)
2.2) ILifecycle который организует цикл обновления. Принимает реализации интерфейса IUpdatable и вызывает у них Update каждый кадр
2.3)IInput который возвращает текущее направление от устройств ввода (вверх, вниз, влево, вправо)
2.4) ICollisionEvents который содержит событие о столкновении двух объектов
2.5) Добавь Enum для вариантов врагов
3) Движок запускается в работу
//Техническая логика игры
4) Создаётся объект игры и ей передаются сервисы
5) Игра в своей точке сборки создаёт необходимые компоненты, которые привязывает к сервисам движка
6) Игра состоит из следующих компонентов:
-Level который запускает врага
-Enemy которых есть 3 типа:
--Одиночный враг, который идёт по прямой вниз из любой точки на верхней границе экрана
--Цепочка, которая состоит из 5 единиц врага, появляется из левого верхнего угла экрана или правого верхнего угла экрана. Движется точно до другого края экрана, потом делает 2 шага вниз и движется к противоположной стороне.
-Bullet которую выпускает Ship
-Ship, которым управляет игрок
IInput
//Логика игры!!!
-GamePlay который:
--Обрабатывает событие столкновения корабля с врагом
--3 столкновения корабля с врагом это конец игры
--Обрабатывает событие столкновения пули с врагом и стирает врага
--Учитывает что пуля может перепрыгнуть через врага на очередном обновлении экрана
--Проход врага за нижнюю границу не наносит ущерба игроку
👍4
Andy Ivanov2026-04-21 19:08
А где ссылка на гит хаб с кодом?
Sergei Kulikov2026-04-21 19:22
Sergei Kulikov2026-04-21 19:22
Точка сборки игры действует по такой логике:
// логика движка
1) создается игровой движок
2) движок предоставляет сервисы:
2.1) IWorldObjectFactory - создание и отрисовка объектов
2.2) ILifecycle - отрисовка кадров
2.3) IInput - ввод
2.4) ICollisionEvents - событие столкновения
3) движок запускается в работу
// логика игры
4) создается объект игры и ему передаются сервисы
5) игра создает необходимые компоненты и привязывается к сервисам движка
6) игра состоит из следующих компонентов:
- игровое поле: имеет размеры и занятые ячейки
- фигуры: имеет форму
- уровень игры: задает скорость падения
- счет
7) Правила:
- в начале игры сверху появляется фигура и падает вниз с заданной скоростью
- если фигура столкнулось со дном поля, либо с занятой ячейкой, то фигура останавливается и ячейки которые она занимает считаются занятыми, сверху появляется новая фигура
- если горизонтальная линия поля занята полностью, то счет увелививается, линия очищается, все занятые ячейки сверху падают вниз на одну линию
- если при появлении новая фигура сразу сталкивается с занятой ячейкой - конец игры
👍2
Антон Еврасов2026-04-21 20:19
Антон Еврасов2026-04-21 20:23
Что то вроде рулетки в казино.
Приходишь, делаешь ставку, крутятся числа начиная со "случайного" и "случайной длинной" вращения.
Так же доступны одно из двух событий с вероятностью наступления 20%.
1) Старушка с яблоком уменьшающим рулетку на 50% (т.е. повышающее вероятность выигрыша на 50%)
2) сговор с крупье тогда рулетка выбирает из трех чисел среди которых одно является числом игрока.
👍2
Дмитрий R8LDC2026-04-21 20:48
Все круто. Но что ставить? c#? где его взять? .net 10 sdk? visual studio?
Nova2026-04-21 20:57
Консольный клон Battle City (aka Танчики, Tank 1990, Super Tank).

3 Версии, от Qwen, DeepSeek, Gemini
Самая работающая "из коробки" получилась у Gemini.

Claude в бесплатной версии, не смог родить "игру".
👍3
Nova2026-04-21 20:57
Nova2026-04-21 20:57
Nova2026-04-21 20:57
Nova2026-04-21 21:03
↳ Дмитрий R8LDC: Все круто. Но что ставить? c#? где его взять? .net 10 sdk? visual studio?
VS Code, google/нейронки в помощь
👍1 🤡1
Дмитрий R8LDC2026-04-21 21:05
↳ Nova: VS Code, google/нейронки в помощь
честно, хуйня, а не совет. я спрашиваю БАЗУ, а не как работает какая-то конкретная функция. Тут если я что-то не то найду, весь результат будет говном
🤡1
Дмитрий R8LDC2026-04-21 21:07
я в жизни не видел и не прикасался к C#
Vlad Savinkov2026-04-21 21:21
↳ Дмитрий R8LDC: Все круто. Но что ставить? c#? где его взять? .net 10 sdk? visual studio?
Я так сделал:
1) установил vs code
2)в расширения установил c# и c# dev kit
3) в вверху, поисковой строке прописал ">net new" и в поставках появилось предложение по установки. net sdk
4) после чего там же в поисковой строке удалось создать новый проект через ">net new project", как в уроке
❤2 👍1
Дмитрий R8LDC2026-04-21 21:27
↳ Vlad Savinkov: Я так сделал: 1) установил vs code 2)в расширения установил c# и c# dev kit 3) в вверху, п
Благодарю! Все работает. Правда, я уже игру на Java навайбкодил :)
👍1
Vlad Savinkov2026-04-21 21:29
Рад что смог помочь)
👍1
Дмитрий R8LDC2026-04-21 22:26
Игра работает как цикл обновления состояния и отрисовки кадра.

## Сначала создаются:

- карта уровня
- объект игрока с позицией и направлением взгляда
- обработка ввода
- рендер
- гейм луп

## После запуска начинается непрерывный цикл, в котором на каждом шаге:

- вычисляется время, прошедшее с прошлого кадра;
- считывается текущее состояние ввода;
- обновляется состояние игрока;
- строится новый кадр;
- кадр выводится в терминал.

## Логика движения:

- поворот изменяет угол взгляда;
- движение вперёд и назад изменяет координаты;
- новая позиция применяется только если в этой точке нет стены;
- выход за границы карты считается столкновением.
- ввод работает асинхронно:

нажатия клавиш читаются отдельно от основного цикла;
каждое нажатие кратковременно помечает действие как активное;
по этим флагам основной цикл решает, нужно ли двигать или поворачивать игрока;
отдельная команда завершает игру.

## Отрисовка устроена по принципу лучевого обхода:

- для каждого вертикального столбца экрана вычисляется направление луча;
- луч движется вперёд, пока не встретит стену;
- по расстоянию до стены определяется высота и яркость этого столбца;
- затем отдельно рисуются потолок, стены и пол;
- поверх этого добавляется карта сверху и маркер положения игрока.
- карта хранится как сетка символов:
- стены непроходимы;
- пустые клетки проходимы.

## Выход из игры
- основной цикл останавливается;
- терминал очищается;
- настройки консоли восстанавливаются.
👍4 👀1
Дмитрий R8LDC2026-04-21 22:38
Пока думал, как правильно подступиться к решетке, навайбкодил дум на джаве. Я даже знаю, откуда референс взялся 😂
👍4
Артем Поротиков2026-04-22 01:05
Простой Rogue-like кравлер
👍1
Артем Поротиков2026-04-22 01:05
📎 Формальная_система_описания_игры.docx
👍1
Артем Поротиков2026-04-22 01:05
👍3
Artmani2026-04-22 03:23
Змейка и Pac-Man

Движок
Создаётся с размерами поля
Предоставляет сервисы играм
Создать объект на поле (символ + координаты)
Уничтожить объект
Зарегистрировать компонент для обновления каждый кадр
Остановить цикл
Вернуть текущее направление с клавиатуры
Сообщить о столкновении двух объектов
Показать строку статуса
Запускает игровой цикл (120 мс на кадр)
Читает клавишу
Вызывает Update() всех компонентов по порядку регистрации
Находит объекты на одной клетке → стреляет событие столкновения
Отрисовывает поле одним выводом

Главное меню
Показывает список игр
1 → запустить Змейку
2 → запустить Pac-Man (3 уровня подряд)
Любая игра завершилась → вернуться в меню

Игра 1 — Змейка
Создать компоненты
Стены по периметру поля
Змейка из 4 сегментов в центре, направление вправо
Еда в случайной свободной клетке
Gameplay подписывается на столкновения
Запустить цикл
Змейка читает направление
Разворот на 180° → игнорировать
Хвост становится новой головой
Рост активен → создать новый сегмент вместо переиспользования хвоста
Gameplay обновляет статус (счёт, длина)
Обработка столкновений
Голова + стена → GAME OVER
Голова + тело → GAME OVER
Голова + еда → счёт +10, еда переспавнилась, активировать рост

Игра 2 — Pac-Man
Создать компоненты
Лабиринт 28×15 по центру поля
'#' → стена-объект
'.' → точка-объект
Pac-Man в центре лабиринта
Получает список стен (для буферизации поворота)
Призраки в зоне призраков
Уровень 1: 2 призрака, Уровень 2: 3, Уровень 3: 4
Каждый призрак двигается раз в N кадров
Gameplay подписывается на столкновения
Запустить цикл
Gameplay сохраняет позицию Pac-Man до его хода
Pac-Man читает направление
Направление изменилось → сохранить в буфер
Клетка по буферному направлению свободна → применить буфер
Клетка впереди свободна → двигаться
Клетка впереди занята → стоять
Каждый призрак ждёт свой счётчик кадров
30% вероятность → сменить направление случайно
Двигается без проверки стен
Gameplay обновляет статус (счёт, жизни)
Проверить тоннели
Pac-Man или призрак вышел за левый край → появиться справа
Pac-Man или призрак вышел за правый край → появиться слева
Все точки съедены
Уровень 1 или 2 → пауза 2 сек → следующий уровень
Уровень 3 → "Pac-Man наелся! Вы победили!"
Обработка столкновений
Pac-Man + стена → откатиться на позицию до хода
Pac-Man + призрак → жизнь −1
Жизни > 0 → вернуть Pac-Man в старт
Жизни = 0 → GAME OVER, вернуться в меню
Pac-Man + точка → счёт +10, точка уничтожена
Призрак + стена → развернуться на 180°, шаг назад
👍1
Алексей Мимеев2026-04-22 09:33
Формальная система описания игры Bomberman

1. Точка сборки
   CompositeRoot создаёт движок ConsoleEngine, создаёт игровые объекты Level, Player, GamePlay, BomberGame, связывает зависимости и запускает игру.

2. Логика движка
   Движок предоставляет сервисы:

* IEngine — игровой цикл и паузы
* IRenderer — вывод в консоль
* IInputHandler — обработка ввода

3. Техническая логика игры
   BomberGame управляет запуском игры, игровым циклом, отрисовкой и финальным меню.
   GamePlay хранит и обновляет состояние игры: уровень, игрока, врагов, бомбу, взрыв, победу и поражение.

4. Компоненты игры

* Level — карта уровня, стены, блоки, дверь
* Player — игрок и его позиция
* Enemy — враг с простым ИИ
* Bomb — установленная бомба с таймером
* Explosion — активная зона взрыва
* GamePlay — правила и состояние партии

5. Логика игры

* На старте строится карта, игрок ставится в начальную позицию, создаются враги, в одном из разрушаемых блоков скрывается дверь.
* Игрок двигается по пустым клеткам и ставит бомбу.
* Бомба через время взрывается крестом на фиксированный радиус.
* Взрыв разрушает блоки, открывает дверь, убивает врагов и игрока.
* Враги двигаются по простому случайному алгоритму и убивают игрока при касании.
* Победа: игрок заходит в открытую дверь.
* Поражение: игрок погибает от врага или от взрыва.

6. Визуальное представление

* красный квадрат — неразрушаемые стены
* серый квадрат — разрушаемые блоки
* зелёный квадрат — дверь
* & — игрок
* ● — враг
* * — бомба
* отдельный символ — взрыв

7. Игровой цикл
   Каждый тик:

* чтение ввода
* движение игрока
* обновление бомбы и взрыва
* обновление врагов
* проверка победы/поражения
* отрисовка кадра
Oleg Masharov2026-04-22 10:12
↳ Дмитрий R8LDC: Пока думал, как правильно подступиться к решетке, навайбкодил дум на джаве. Я даже знаю, о
Скопировал себе инструкции в C# и покрасил стены тоже в белый цвет. Похоже получилось.
👍1
Andy Ivanov2026-04-22 19:04
Игра «Donkey Kong» (консоль)

Общее описание: Игрок должен подняться с нижней части экрана на верхнюю, избегая падающих бочек, используя лестницы и платформы. Цель — достичь отмеченной позиции (Goal).

Структура данных
• Класс Game (состояние игры): хранит все данные о состоянии игры.

Данные:
PlayerX, PlayerY — координаты игрока
GoalX, GoalY — координаты цели (финиша)
BarrelX[], BarrelY[] — координаты трёх движущихся бочек
LaddersX[] — X-координаты лестниц (4 штуки; Y зависит от их положения)
Width, Height — размер игрового поля (40×20)
Платформы — вычисляются динамически (каждый 4-й ряд, с проёмом для лестницы)

Основные функции
1. Обработка ввода (Input()):
Стрелки влево/вправо — движение игрока по горизонтали (если нет стены)
Стрелки вверх/вниз — движение по лестнице вверх/вниз (только если игрок находится в колонке лестницы)
Проверка столкновений с платформами и стенами перед перемещением

2. Обновление бочек (UpdateBarrels()):
Каждая бочка движется влево на 1 позицию.
Когда бочка достигает левого края (X ≤ 0), она появляется справа и падает вниз на один этаж.
Если бочка упадёт ниже дна, она переходит на верхние этажи.

3. Проверка столкновений (CheckCollision()):
Столкновение с бочкой → Game Over («You were hit by a barrel!»)
Достижение цели → Победа («You reached the goal! You win!»)

4. Отрисовка (Draw()):
# — стены (границы поля)
P — игрок
G — цель
O — бочки
= — платформы
H — лестницы
(пусто) — пустое пространство

5. Логика платформ и лестниц:
Платформы расположены каждый 4-й ряд.
На каждом этаже есть проём в платформе (выровнен с лестницей) для прохода вверх/вниз.
Лестницы закреплены на 4-х фиксированных X-координатах.

6. Завершение игры (GameOver()):
Вывод сообщения на экран
Ожидание нажатия любой клавиши
Выход из программы

Основной игровой цикл (Mediator.Run()):
Бесконечный цикл:
Отрисовка сцены
Обработка пользовательского ввода
Обновление позиций бочек
Проверка столкновений и условий победы/поражения
Пауза 100 мс

Архитектура:
Mediator — координатор (связывает Engine и Game)
Game — логика и данные игры
Engine — графический движок (отрисовка и завершение)
Program — точка входа
UNGERN (Павел)2026-04-24 22:50
🎰 ИГРА 21 (БЛЭКДЖЕК)

Классическая карточная игра 21 в терминале на C#.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎮 ПРАВИЛА ИГРЫ

ЗНАЧЕНИЯ КАРТ:
Туз (A): 11 очков (или 10 при необходимости)
Король (K): 4 очка
Дама (Q): 3 очка
Валет (J): 2 очка
Остальные: номинальная стоимость (2-10)

ЦЕЛЬ: набрать 21 или близко к нему, не превышая это значение.

ХОД ИГРЫ:
1. Введите ставку
2. Выбирайте: взять карту или остановиться
3. Дилер берет карты до 17+
4. Выигрыш = ставка × 2

СПЕЦИАЛЬНЫЕ УСЛОВИЯ:
Два туза = 21 (автоматическая победа)
Перебор (>21) = проигрыш

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💰 СИСТЕМА СТАВОК

Начальный баланс: 1000 долларов
Минимум: 1 доллар
Максимум: ваш баланс

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 КАК ИГРАТЬ

1. Запустите программу
2. Введите ставку
3. Выберите:
(1) - Взять карту
(2) - Остановиться
4. Смотрите результат

ps в течении недели не мог сесть, сессия на носу
Желтова Мария2026-07-09 00:00
📎 формальное описание игры.odt
🔥1
Желтова Мария2026-07-09 00:00
Игра rogue_hunger_and_scared.
Рогалик с генерацией уровней 5 этажей с торговцем и пошаговой боевкой.
ps: Хорошо, что курс еще идет))