Add 'Mahjong recreation start' article
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
Title: Начало воссоздания Маджонга
|
||||
Date: 2018-01-26 00:00
|
||||
Category: News
|
||||
Slug: mahjong-recreation-start
|
||||
Lang: ru
|
||||
|
||||
![Screenshot][screenshot]
|
||||
|
||||
Эта статья описывает начало воссоздания игры Маджонг.
|
||||
|
||||
**План**
|
||||
|
||||
Мы начали воссоздание Маджонга с составления краткого плана реализации игровой механики с минимальной графикой:
|
||||
|
||||
* Загрузить раскладку
|
||||
* Поместить фишки в позиции раскладки
|
||||
* Различить фишки
|
||||
* Реализовать выбор фишек
|
||||
* Реализовать сравнение фишек
|
||||
|
||||
Как и любой другой план, этот выглядел вполне адекватно на первый взгляд. Тем не менее стоит начать разработку, как появляются новые детали. Этот план не был исключением. Ниже представлена пара проблем, вскрывшихся во время разработки.
|
||||
|
||||
**Проблема №1: предоставить бинарные ресурсы на поддерживаемых платформах**
|
||||
|
||||
Маджонг будет доступен для десктопа, мобилок и веба. Каждая платформа имеет ограничения на доступ к внешним файлам:
|
||||
|
||||
* Десктоп позволяет получить доступ почти к любому файлу
|
||||
* Мобилки имеют ограниченный доступ к файловой системе
|
||||
* Веб не имеет файловой системы
|
||||
|
||||
Мы решили сделать единый способ доступа к ресурсам путём их встраивания в исполняемый файл. Это решение привело к рождению проектов **mjin-resource** и **mahjong-data**.
|
||||
|
||||
Проект [mjin-resource][mjin-resource] служит для:
|
||||
|
||||
* перевода бинарных файлов в заголовочные файлы C с помощью утилиты **xxd**
|
||||
* создания проекта MJIN, состоящего из сгенерированных заголовочных файлов, который собирается в статическую библиотеку
|
||||
* предоставления интерфейса C++ для работы с ресурсами
|
||||
|
||||
Проект [mahjong-data][mahjong-data] является примером подобного проекта MJIN, ресурсы из которого использует проект [mahjong][mahjong].
|
||||
|
||||
**Проблема №2: загрузка изображений PNG на поддерживаемых платформах**
|
||||
|
||||
Для загрузки PNG мы используем соответствующий плагин OpenSceneGraph. Мы собрали его без проблем для десктопа. Сборка же для веба (Emscripten) оказалась сложнее: Emscripten содержит собственную версию **libpng**, которую сборочный скрипт OpenSceneGraph не видит. Нам пришлось обойти несколько проверок OpenSceneGraph, чтобы успешно собрать плагин для Emscripten.
|
||||
Сборка плагина под мобилки ещё ждёт нас впереди. Как только мы разберёмся с плагином PNG на всех поддерживаемых платформах, мы опубликуем информацию о его сборке в новом самоучителе для [кросс-платформенного руководства OpenSceneGraph][osgcp_guide]. Нас уже [попросили это сделать][img_loading_issue].
|
||||
|
||||
**Разработка**
|
||||
|
||||
[Как вы знаете][lets-go], мы опубликовали кросс-платформенное руководство OpenSceneGraph для усиления сообщества OpenSceneGraph. Мы ценим обучение и любим делиться своими знаниями. Поэтому мы решили разрабатывать Маджонг небольшими воспроизводимыми частями, каждая из которых имеет уникальную внутреннюю версию. Эти версии доступны в [хранилище проекта mahjong][mahjong].
|
||||
|
||||
Мы также предоставляем [историю версий, каждая из которых сопровождается сборкой под веб][web-releases], для следующих целей:
|
||||
|
||||
* обучение: показать ход разработки изнутри
|
||||
* доступность: предоставить старые версии для сравнения
|
||||
|
||||
**Текущее состояние игры Маджонг**
|
||||
|
||||
На момент написания этой статьи мы закончили реализацию выбора фишек. [Проверьте в своём браузере!][mahjong-version-tile-selection]
|
||||
|
||||
После реализации сравнения фишек мы опубликуем промежуточный результат для всех поддерживаемых платформ.
|
||||
|
||||
На этом мы заканчиваем описание начала воссоздания игры Маджонг.
|
||||
|
||||
[screenshot]: {attach}/images/2018-01-26-mahjong-recreation-start.png
|
||||
|
||||
[mjin-resource]: https://bitbucket.org/ogstudio/mjin-resource
|
||||
[mahjong]: https://bitbucket.org/ogstudio-games/mahjong
|
||||
[mahjong-data]: https://bitbucket.org/ogstudio-games/mahjong-data
|
||||
[osgcp_guide]: https://github.com/ogstudio/openscenegraph-cross-platform-guide
|
||||
[img_loading_issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4
|
||||
[lets-go]: {filename}/articles/2017-03-16_lets-go-ru.md
|
||||
[web-releases]: http://ogstudio.github.io/game-mahjong
|
||||
[mahjong-version-tile-selection]: https://ogstudio.github.io/game-mahjong/versions/010/mjin-player.html
|
||||
@@ -0,0 +1,74 @@
|
||||
Title: Mahjong recreation start
|
||||
Date: 2018-01-26 00:00
|
||||
Category: News
|
||||
Slug: mahjong-recreation-start
|
||||
Lang: en
|
||||
|
||||
![Screenshot][screenshot]
|
||||
|
||||
This article describes the start of Mahjong game recreation.
|
||||
|
||||
**Plan**
|
||||
|
||||
We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics:
|
||||
|
||||
* Load single layout
|
||||
* Place tiles in layout positions
|
||||
* Distinguish tiles
|
||||
* Implement selection
|
||||
* Implement matching
|
||||
|
||||
Just like any other plan, this one looked fine at first sight. However, once you get down to work, new details start to come out. This plan was no exception. Below are a few problems that came out during development.
|
||||
|
||||
**Problem №1: provide binary resources across supported platforms**
|
||||
|
||||
Mahjong is going to be available on desktop, mobile, and web. Each of these platforms has its constraints on accessing external files:
|
||||
|
||||
* Desktop can access almost any file
|
||||
* Android/iOS have limited access to file system
|
||||
* Web does not have any file system at all
|
||||
|
||||
To provide a unified way for accessing resources, we decided to include them into final executable. This decision led to the birth of **mjin-resource** and **mahjong-data** projects.
|
||||
|
||||
[mjin-resource][mjin-resource]:
|
||||
|
||||
* converts binary files to C header files with the help of **xxd** utility
|
||||
* generates MJIN project that contains generated headers to be compiled into static library
|
||||
* provides C++ interface for accessing generated resources
|
||||
|
||||
[mahjong-data][mahjong-data] is an example of such generated MJIN project that is referenced by [mahjong][mahjong] project.
|
||||
|
||||
**Problem №2: load PNG images across supported platforms**
|
||||
|
||||
To load PNG, we use corresponding OpenSceneGraph plugin. We built it for desktop with no issues. Building for web (Emscripten) turned out to be more difficult: Emscripten provides its own version of **libpng**, which OpenSceneGraph build script can't detect. We had to work around several OpenSceneGraph checks to successfully build the plugin for Emscripten.
|
||||
Building the plugin for Android and iOS is still waiting for us. Once we get PNG plugin working across supported platforms, we are going to publish a new tutorial for [OpenSceneGraph cross-platform guide][osgcp_guide] to cover PNG image loading. We already got a [request to describe image loading][img_loading_issue].
|
||||
|
||||
**Development**
|
||||
|
||||
[As you know][lets-go], we published OpenSceneGraph cross-platform guide to make OpenSceneGraph community stronger. We value education, and we love to share our knowledge. That's why we decided to develop Mahjong in small reproducible chunks uniquely identified by internal versions. These versions are available in [mahjong repository][mahjong].
|
||||
|
||||
We also provide [version history and web releases of each internal version][web-releases] for the following reasons:
|
||||
|
||||
* education: show how development looks like internally
|
||||
* accessibility: provide older versions for comparison
|
||||
|
||||
**Current Mahjong game status**
|
||||
|
||||
As of the time of this writing, we have implemented tile selection. [Try it in your browser!][mahjong-version-tile-selection]
|
||||
|
||||
Once we finish tile matching implementation, we are going to publish the intermediate result for all supported platforms.
|
||||
|
||||
That's it for describing the start of Mahjong game recreation.
|
||||
|
||||
|
||||
[screenshot]: {attach}/images/2018-01-26-mahjong-recreation-start.png
|
||||
|
||||
[mjin-resource]: https://bitbucket.org/ogstudio/mjin-resource
|
||||
[mahjong]: https://bitbucket.org/ogstudio-games/mahjong
|
||||
[mahjong-data]: https://bitbucket.org/ogstudio-games/mahjong-data
|
||||
[osgcp_guide]: https://github.com/ogstudio/openscenegraph-cross-platform-guide
|
||||
[img_loading_issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4
|
||||
[lets-go]: {filename}/articles/2017-03-16_lets-go.md
|
||||
[web-releases]: http://ogstudio.github.io/game-mahjong
|
||||
[mahjong-version-tile-selection]: https://ogstudio.github.io/game-mahjong/versions/010/mjin-player.html
|
||||
|
||||
BIN
pelican/content/images/2018-01-26-mahjong-recreation-start.png
Normal file
BIN
pelican/content/images/2018-01-26-mahjong-recreation-start.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 252 KiB |
Reference in New Issue
Block a user