Чистый текстовый интерфейс Java для игры типа roguelike - PullRequest
9 голосов
/ 02 февраля 2011

ОК, это звучит как сумасшедшая идея - но мне интересно эмулировать текстовый интерфейс в стиле 1980-х roguelike в чистом Java, то есть с использованием Swing или аналогичного.

Вот примерно то, что нужно сделать:

  • Предоставить сетку фиксированного размера символов фиксированного размера в качестве «экрана» (например, 100 * 75)
  • Используйте соответствующий моноширинный шрифт,в идеале с большим количеством интересных символов
  • Разрешить установку цветов символов переднего плана и фона для каждой позиции символа индивидуально
  • Разрешить печать строк или отдельных символов в любом месте экрана (что должно перезаписывать все, чтоуже в экранном буфере в этих местах)

Кто-нибудь знает хорошее существующее решение, которое позволило бы это?Или я застрял на взломе одного с нуля?

ps причина, по которой я хочу, чтобы чистая Java работала в изолированном апплете.Поэтому решения JNI, такие как jcurses , к сожалению, исключены .....

Ответы [ 6 ]

9 голосов
/ 04 февраля 2011

Совсем не сумасшедший, этот подход я реализовал в Legerdemain: http://roguelikefiction.com

Я использовал двумерный массив символов (char [] []) с соответствующим массивом объектов java.awt.Color [] [] для отслеживания цветов. Вы можете поместить эти массивы в класс, унаследованный от JPanel (который, в свою очередь, является частью JFrame), и выполнить весь рисунок в обратном вызове paintComponent () панели.

Нет ничего плохого и в подходе Curses / JNI, хотя вы получаете все виды отличных символов Unicode, если вы идете по маршруту Swing. Legerdemain использует пять или шестьсот из них.

4 голосов
/ 03 февраля 2011

Для проектов такого рода я счел необходимым строго разделить игровую модель и вид.Этот простой пример предлагает общую архитектуру, а эта более сложная игра расширяет понятие.Преимущество заключается в том, что представление может развиваться отдельно от самой игры, которой не важно, как выглядят виды для прослушивания.

Для символов символы Unicode могут быть привлекательным вариантом, как предлагается в этом пример .

3 голосов
/ 03 февраля 2011

Обеспечить фиксированную сетку фиксированного размера размер символов как «экран» (например, 100 * 75)

string [] screen = новая строка [75], затем просто заполните каждый из них 100 пробелами:).

Используйте подходящий моноширинный шрифт, в идеале с множеством интересных символы

См. Ссылки для хороших ссылок: http://cg.scs.carleton.ca/~luc/mono.html

Разрешить установку переднего плана и цвета фона персонажа для каждого позиция персонажа индивидуально

Вы можете получить эти текстовые эффекты, используя элемент управления, который позволяет отображать HTML, например, JEditorPane. Таким образом, вы можете просто определить специальные ключевые слова как «специальные ключевые слова». (Хорошо, это немного устарело, но должно работать нормально для вашего случая. Было бы проще, если бы вы сохранили свое «игровое состояние» как обычную строку (массив), но перед выводом html представляли его.

Разрешить печать строк или отдельные персонажи в любом месте экран (который должен перезаписать все, что уже на экране буфер в этих местах)

Если вы следовали моему совету в предыдущем вопросе, чем ваше игровое состояние в качестве обычного строкового массива, то вы просто находите строку для своей строки, находите use string.substring (length) + "A" + string.substring ( начальный индекс: длина + 2, длина строки - (длина + 2)); построить новое игровое состояние.

2 голосов
/ 03 февраля 2011

Поскольку вы говорите о мошеннических и символьных интерфейсах, чтобы завершить путешествие в прошлое, почему бы вам не поискать реализацию Curses C и не сделать View с JNI.Ваша модель и контроллер - обычная Java.Существует Curses реализация практически для любой платформы.

2 голосов
/ 02 февраля 2011

Я однажды (много лет назад) начал кодировать что-то вроде этого (терминальная реализация в Swing). Я дошел до того, что мог отображать текст с escape-последовательностями ANSI для перемещения курсора и цветов в нем, но не реализовывал ввод. Если тебе интересно, я откопаю.

1 голос
/ 11 февраля 2011

Я реализовал простую консоль Swing, вдохновленную многими ответами здесь (спасибо всем!)

Для тех, кто заинтересован, она доступна здесь:

Swingтекстовая консоль Java

...