Current time: 23.12.2024, 07:48 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Игры для терминалов
» Эмуляция терминала в браузере
Author Message
Berserker Offline
Administrators

Posts: 16666
Post: #37

Quote:Спасибо, кэп!
Я имел в виду - что это вообще за консоль, зачем её эмулировать, на чём она сделана - и как она привязана к нашему форуму? ...

   Браузеры по умолчанию не содержат средств для создания приложений для терминалов - то есть приложений с текстовым интерфейсом и стандартной функциональностью. В своё время для Turbo Pascal была библиотека CRT, в которой был реализован базовый функционал для работы с консолью:
  • Функции изменения цвета и фона выводимого текста
  • Управление видимостью и положением курсора
  • Установка текущего окна, относительно которого выводится текст и считаются координаты курсора
  • Очистка текущего окна
  • Вывод текста с поддержкой спецсимволов, таких, как перевод строки, которые должны быть обработанны по особому, а также автоматической прокрутки
  • Проверка состояния клавиатуры, нажата ли в данный момент какая-либо клавиша
  • Ожидание нажатия клавиши и получение её кода
  • Сложная функция чтения ввода текста с поддержкой базового редактирования

Чем удобен текстовый интерфейс?
  • В мире существуют десятки тысяч терминальных игр/программ, в том числе и на приставках/тетрисах
  • Консольные игры писать проще, так как не нужна особая графика и музыка. Можно вложить силы в саму игру
  • Консольные приложения писать проще, чем гуишные

   HTML/Javascript содержит средства для написания эмулятора консоли и библиотеки функций для неё с приемлимыми трудозатратами (1400 строк текста, не кода).
Реализация основана на создании Ширина * Высота одиночных span-элементов, отображающих каждый по символу, что есть существенная нагрузка на браузер, особенно если консоль велика, но позволяет регулировать отображение (символ, цвет, фон, прозрачность) каждой отдельной ячейки. Как и во всех терминалах используется моноширенный шрифт без указания конкретного, что позволяет браузерам использовать те шрифты, которые у них есть. Нормальная кроссбраузерная работа с клавиатурой крайне тяжела по причине разности реализации браузеров, их багов и отсутствия спецификации в этой сфере. В то же время консоль требует вполне чёткой работы с полным контролем разрешения/запрета обработки стандартной реакции на клавиши.
   Ещё одной проблемой является, собственно, ввод текста. Коды клавиш слабо корелируют с кодами символов. И здесь в браузерах огромная лажа.
   Наконец, javascript использует один поток и везде, кроме Оперы, это ещё и основной поток вкладки. Это значит, что большинство функций по своей природе асинхронны, а мы привыкли писать: Write('Вас зовут: '); Name = Read();
   Проблема асинхронности глобальная и моя реализация не берётся её решать (решение обычно сводится к эмуляции потока, как в примитивном виде сделано в Rpg Player). Для клавиатуры было выдвинуто требование работы с буфером обмена, по крайней мере конкретная вставка любого текста. Я использую элемент textarea (TMemo) единичного визуального размера за пределами экрана для перехвата событий клавиатуры. При потере фокуса элемент убирает красную границу с консоли, что сразу становится видно. Три ключевых события поддерживаемые браузерами (ИЕ здесь и далее не имеется в виду) KeyDown. KeyPress, KeyUp перехватываются. У каждого браузера свои особенности работы с ними, но в целом удалось вычленить общую функциональность и даже добавить новый тип событий Input, то бишь ввод. Таким образом в данный момент консоль полностью работоспособна.
   Реализация змейки - просто интересное дело и, собственно, проверка работы на практике. Я планирую вторую версию с поддержкой хотсита, разными бонусами и врагами.
   Идея создать эмуляцию терминала пришла к концу первой реализации ФЯП. Для того, чтобы из ФЯП можно было иметь доступ к консоли (а значит запускать игры на ФЯП из постов), нужно написать обёртку к каждой функции библиотеки, иначе кулхацкеры будут делать гадости.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
10.08.2010 20:51
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
Игры для терминалов - Berserker - 08.08.2010, 23:19
RE: Игры для терминалов - gamecreator - 09.08.2010, 00:54
RE: Игры для терминалов - FCst1 - 09.08.2010, 01:24
RE: Игры для терминалов - Berserker - 09.08.2010, 02:56
RE: Игры для терминалов - FBX - 09.08.2010, 02:59
RE: Игры для терминалов - Berserker - 09.08.2010, 03:08
RE: Игры для терминалов - FallenAngel - 09.08.2010, 07:13
RE: Игры для терминалов - GrayFace - 09.08.2010, 08:07
RE: Игры для терминалов - Corwin - 09.08.2010, 09:59
RE: Игры для терминалов - Efrit - 09.08.2010, 11:04
RE: Игры для терминалов - Hasart - 09.08.2010, 11:07
RE: Игры для терминалов - Druin - 09.08.2010, 11:27
RE: Игры для терминалов - Druin - 09.08.2010, 12:11
RE: Игры для терминалов - Druin - 09.08.2010, 12:54
RE: Игры для терминалов - Hasart - 09.08.2010, 13:16
RE: Игры для терминалов - FallenAngel - 09.08.2010, 13:22
RE: Игры для терминалов - Druin - 09.08.2010, 13:35
RE: Игры для терминалов - Corwin - 09.08.2010, 13:39
RE: Игры для терминалов - Druin - 09.08.2010, 14:37
RE: Игры для терминалов - Deo - 09.08.2010, 14:45
RE: Игры для терминалов - FBX - 09.08.2010, 15:30
RE: Игры для терминалов - Berserker - 09.08.2010, 16:48
RE: Игры для терминалов - Druin - 09.08.2010, 17:01
RE: Игры для терминалов - Berserker - 09.08.2010, 17:42
RE: Игры для терминалов - Druin - 09.08.2010, 17:58
RE: Игры для терминалов - Berserker - 09.08.2010, 18:05
RE: Игры для терминалов - packa - 09.08.2010, 18:23
RE: Игры для терминалов - gamecreator - 09.08.2010, 18:26
RE: Игры для терминалов - packa - 09.08.2010, 18:29
RE: Игры для терминалов - gamecreator - 09.08.2010, 18:33
RE: Игры для терминалов - Berserker - 09.08.2010, 18:55
RE: Игры для терминалов - packa - 09.08.2010, 21:29
RE: Игры для терминалов - Efrit - 10.08.2010, 09:32
RE: Игры для терминалов - gamecreator - 10.08.2010, 11:26
RE: Игры для терминалов - Efrit - 10.08.2010, 11:39
RE: Игры для терминалов - gamecreator - 10.08.2010, 14:40
RE: Игры для терминалов - Berserker - 10.08.2010 20:51
RE: Игры для терминалов - FallenAngel - 10.08.2010, 21:17
RE: Игры для терминалов - Efrit - 10.08.2010, 22:06
RE: Игры для терминалов - Berserker - 10.08.2010, 23:18
RE: Игры для терминалов - Efrit - 11.08.2010, 06:04
RE: Игры для терминалов - Druin - 11.08.2010, 11:38
RE: Игры для терминалов - gamecreator - 11.08.2010, 22:21
RE: Игры для терминалов - Berserker - 12.08.2010, 00:04
RE: Игры для терминалов - Druin - 12.08.2010, 00:12
RE: Игры для терминалов - Berserker - 12.08.2010, 00:34
RE: Игры для терминалов - Berserker - 12.08.2010, 03:11
RE: Игры для терминалов - gamecreator - 12.08.2010, 03:38
RE: Игры для терминалов - Berserker - 12.08.2010, 03:48
RE: Игры для терминалов - Druin - 12.08.2010, 11:43
RE: Игры для терминалов - Berserker - 12.08.2010, 17:46
RE: Игры для терминалов - Berserker - 12.08.2010, 18:43
RE: Игры для терминалов - FCst1 - 12.08.2010, 18:48
RE: Игры для терминалов - Efrit - 12.08.2010, 20:55
RE: Игры для терминалов - Berserker - 12.08.2010, 21:57
RE: Игры для терминалов - gamecreator - 12.08.2010, 22:31
RE: Игры для терминалов - Berserker - 12.08.2010, 22:58
RE: Игры для терминалов - packa - 13.08.2010, 00:38
RE: Игры для терминалов - Berserker - 13.08.2010, 00:53
RE: Игры для терминалов - FallenAngel - 13.08.2010, 11:23
RE: Игры для терминалов - Solmyr2000 - 13.08.2010, 14:08
RE: Игры для терминалов - gamecreator - 13.08.2010, 15:07
RE: Игры для терминалов - Tent - 13.08.2010, 15:19
RE: Игры для терминалов - Efrit - 13.08.2010, 15:51
RE: Игры для терминалов - Berserker - 13.08.2010, 16:14
RE: Игры для терминалов - packa - 13.08.2010, 16:19
RE: Игры для терминалов - Berserker - 13.08.2010, 18:04
RE: Игры для терминалов - gamecreator - 13.08.2010, 20:27
RE: Игры для терминалов - Berserker - 13.08.2010, 21:13
RE: Игры для терминалов - Solmyr2000 - 13.08.2010, 22:09
RE: Игры для терминалов - Berserker - 13.08.2010, 22:12
RE: Игры для терминалов - gamecreator - 13.08.2010, 22:30
RE: Игры для терминалов - Berserker - 13.08.2010, 22:35
RE: Игры для терминалов - Berserker - 14.08.2010, 00:25
RE: Игры для терминалов - FBX - 14.08.2010, 00:32
RE: Игры для терминалов - gamecreator - 14.08.2010, 00:34
RE: Игры для терминалов - FBX - 14.08.2010, 00:39
RE: Игры для терминалов - Berserker - 14.08.2010, 01:45
RE: Игры для терминалов - etoprostoya - 14.08.2010, 09:31
RE: Игры для терминалов - GrayFace - 14.08.2010, 10:06
RE: Игры для терминалов - gamecreator - 14.08.2010, 13:17
RE: Игры для терминалов - Berserker - 14.08.2010, 18:57
RE: Игры для терминалов - packa - 14.08.2010, 20:04
RE: Игры для терминалов - Efrit - 14.08.2010, 20:33
RE: Игры для терминалов - Berserker - 14.08.2010, 20:37
RE: Игры для терминалов - Efrit - 14.08.2010, 20:45
RE: Игры для терминалов - Berserker - 14.08.2010, 20:57
RE: Игры для терминалов - gamecreator - 15.08.2010, 00:03
RE: Игры для терминалов - Efrit - 15.08.2010, 09:32
RE: Игры для терминалов - Berserker - 15.08.2010, 17:55
RE: Игры для терминалов - Druin - 16.08.2010, 02:53
RE: Игры для терминалов - Berserker - 16.08.2010, 03:15
RE: Игры для терминалов - Berserker - 16.08.2010, 23:05
RE: Игры для терминалов - Berserker - 17.08.2010, 05:02
RE: Игры для терминалов - packa - 17.08.2010, 08:52
RE: Игры для терминалов - gamecreator - 17.08.2010, 15:58
RE: Игры для терминалов - Solmyr2000 - 17.08.2010, 17:18
RE: Игры для терминалов - Berserker - 17.08.2010, 18:12
RE: Игры для терминалов - FBX - 17.08.2010, 18:16
RE: Игры для терминалов - Berserker - 17.08.2010, 18:20
RE: Игры для терминалов - Solmyr2000 - 17.08.2010, 18:27
RE: Игры для терминалов - Berserker - 17.08.2010, 18:35
RE: Игры для терминалов - Efrit - 17.08.2010, 18:54
RE: Игры для терминалов - Berserker - 17.08.2010, 19:09
RE: Игры для терминалов - Berserker - 17.08.2010, 19:55
RE: Игры для терминалов - Efrit - 17.08.2010, 20:15
RE: Игры для терминалов - Berserker - 17.08.2010, 20:22
RE: Игры для терминалов - packa - 18.08.2010, 00:04
RE: Игры для терминалов - Berserker - 18.08.2010, 00:15
RE: Игры для терминалов - Solmyr2000 - 18.08.2010, 00:16
RE: Игры для терминалов - packa - 18.08.2010, 00:48
RE: Игры для терминалов - Efrit - 18.08.2010, 06:44
RE: Игры для терминалов - packa - 18.08.2010, 11:20
RE: Игры для терминалов - Deo - 18.08.2010, 12:32
RE: Игры для терминалов - Solmyr2000 - 18.08.2010, 12:37
RE: Игры для терминалов - Hasart - 18.08.2010, 12:47
RE: Игры для терминалов - gamecreator - 18.08.2010, 13:41
RE: Игры для терминалов - Deo - 18.08.2010, 14:44
RE: Игры для терминалов - gamecreator - 18.08.2010, 18:01
RE: Игры для терминалов - packa - 18.08.2010, 21:30
RE: Игры для терминалов - Solmyr2000 - 18.08.2010, 22:15
RE: Игры для терминалов - gamecreator - 18.08.2010, 22:17
RE: Игры для терминалов - Berserker - 19.01.2011, 01:57
RE: Игры для терминалов - Berserker - 29.06.2011, 18:59
RE: Игры для терминалов - FallenAngel - 29.06.2011, 19:16
RE: Игры для терминалов - Berserker - 29.06.2011, 19:54
RE: Игры для терминалов - packa - 29.06.2011, 20:44
RE: Игры для терминалов - Efrit - 29.06.2011, 20:55
RE: Игры для терминалов - Berserker - 29.06.2011, 21:11
RE: Игры для терминалов - Flashback - 29.06.2011, 21:14
RE: Игры для терминалов - Berserker - 29.06.2011, 21:19
RE: Игры для терминалов - gamecreator - 30.06.2011, 04:39
RE: Игры для терминалов - packa - 30.06.2011, 11:14
RE: Игры для терминалов - Corwin - 30.06.2011, 12:12
RE: Игры для терминалов - Flashback - 30.06.2011, 14:27

Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group