Skip to content

Small and accurate Rogue-like engine, written in c#

Notifications You must be signed in to change notification settings

ogamespec/RogueCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RogueCore

To read on your native language use your favourite machine translation.

RogueCore - маленький и аккуратный движок для создания Rogue-like игр на C#.

Исходный код не содержит комментариев, всё описание движка находится в этом Readme.

Colors

Что умеет движок:

  • Эмулировать текстовой режим с курсором и 24-битным цветом. Я посчитал что в 2019-м нет смысла ограничиваться палитрой CGA :-)
  • Обрабатывать ввод с клавиатуры
  • Рисовать линии и окружности
  • Находить путь на карте
  • Просчитывать FOV ("туман войны")
  • Содержит виджет для вывода потока сообщений + (more)

Для демонстрации возможностей движка была создана демка RogueDemo.

Обзор

Движок находится в сборке RogueCore с одноименным пространством имен.

Пространство имен RogueCore содержит следующие классы:

  • Screen: кастомный контрол для имитации текстового видеорежима
  • Input: регистрация обработчиков ввода с клавиатуры
  • Message: вывод потока игровых сообщений + (more)
  • Dungeon: создание и управление картой подземелья
  • Tracer: универсальный трейсер для трассировки линий, окружностей и путей на карте

Класс Screen

Экран представляет собой массив символов (класс Char).

Char имеет следующие свойства:

  • Color backColor: Цвет заднего фона
  • Color frontColor: Цвет символа
  • char character: Символ

Методы класса:

  • Screen(): Конструктор экрана создает экран по умолчанию 80x25
  • int ScreenWidth: Ширина экрана (при изменении размера экрана вся информация на нем теряется)
  • int ScreenHeight: Высота экрана (при изменении размера экрана вся информация на нем теряется)
  • void ClearScreen(): очистить экран
  • void SetChar (int x, int y, Char character): Установить символ в указанных координатах
  • Char GetChar (int x, int y): Получить символ по указанным координатам
  • void SetCursor (Point point): Установить курсор
  • Point GetCursor (): Получить координаты курсора
  • void ShowCursor (): Показать курсор
  • void HideCursor(): Скрыть курсор
  • bool IsCursorVisible (): Получить состояние видимости курсора
  • void ClearLine (int n): Очистить горизонтальную линию экрана
  • void Print (int x, int y, string text): Вывести строку в указанные координаты (задний фон и цвет символов не меняется)
  • void PutChar(char charValue, bool backward = false): Вывести указатель и подвинуть курсор. backward=true используется для вывода справа-налево

Класс Input

Класс Input преобразует KeyEventArgs во внутреннее представление (класс KeyInfo)

Методы класса:

  • void RegisterHandler (InputHandler handler): Зарегистрировать обработчик
  • void SendKey (KeyInfo key): Отправить KeyInfo зарегистрированному обработчику
  • KeyInfo Translate (KeyEventArgs e): Транслировать KeyEventArgs в KeyInfo (используется в обработчике события OnKeyDown)

Класс Message

Если вы тут, то нет необходимости объяснять как выводятся сообщения в Rogue-like играх :-) Класс Message как раз для этого.

Методы класса:

  • Message (int lineStart, int numLines): В конструкторе необходимо указать в каком месте экрана будет находится область сообщений (lineStart) и сколько строк она будет занимать (numLines)
  • void Add (string msg): Добавить сообщение в очередь
  • void Clear(): Очистить очередь сообщений
  • void ShowMore (Screen screen): Показать часть очереди сообщений (та что влазиет на экран) и при необходимости вывести (more)

Класс Tracer

Движок не рисует линии и окружности прямо на экране. Для этого используется более универсальный способ - трассировка. Во время трассировки вместо вывода очередного символа вызывается TraceDelegate пользовательского приложения. Трассировка заканчивается, если TraceDelegate вернет значение < 0. Благодаря этому можно унифицировать рисование линий например для обработки "тумана войны" или для рисования анимации полета стрелы. Рисование окружностей можно превратить в рисование красочных взрывов или других спец-эффектов.

Все методы класса статические:

  • List<Point> TraceLine(Point start, Point end, TraceDelegate cb, object ctx): Трассировка линии
  • List<Point> TraceCircle(Point center, int radius, TraceDelegate cb, object ctx): Трассировка окружности
  • List<Point> TraceFov(Point point, int radius, TraceDelegate cb, object ctx): Трассировка поля обзора
  • List<Point> TracePath (Dungeon map, Point from, Point to, TraceDelegate cb, object ctx): Трассировка пути по карте

Класс Dungeon

Подземелье представляет собой массив тайлов (класс Cell).

Cell содержит следуюшие свойства:

  • bool visible: Используется во время обработки "тумана войны"
  • bool solid: Используется во время трассировки пути, а также "тумана войы"
  • Char character: Символ для отображения на экране, который соответствует данному тайлу

Методы класса:

  • Dungeon (int w, int h): Создает подземелье указанного размера
  • void Clear(): Очистить подземелье (заполняется пустыми тайлами)
  • Cell GetCell (int x, int y): Получить тайл по указанным координатам
  • void SetCell (int x, int y, Cell tile): Установить тайл по указанным координатам
  • void Display(Screen screen, int lineStart): Отобразить подземелье на экране, начиная с указанной строки (lineStart)
  • void FillLine(Point start, Point end, Cell tile): Заполнить линию указанным тайлом
  • void FillRect(Rectangle rect, Cell tile): Заполнить прямоугольник указанным тайлом
  • void FillCircle(Point center, int radius, Cell tile): Заполнить окружность указанным тайлом
  • void ShowAll (): Показать все тайлы (установить флаг visible для всех)
  • void HideAll(): Скрыть все тайлы (сбросить флаг visible для всех)
  • void UpdateFov (Point point, int radius): Обновить "туман войны" в указанных координатах и с указанным радиусом обзора

About

Small and accurate Rogue-like engine, written in c#

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages