<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом hangman game</title>
<link>https://blogengine.ru/blogs/tags/hangman-game/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>«Дар агачы»</title>
<guid isPermaLink="false">124725</guid>
<link>https://bolknote.ru/all/dar-agachy/</link>
<pubDate>Tue, 05 Dec 2023 21:03:37 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/dar-agachy/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Давно появилась идея прикрутить к моей игре «Виселица» под «Флиппер Зеро» татарский язык. Я всё-таки в Татарстане живу, так что идея выглядит логичной. В выходные делал подготовительные работы в коде — в татарском довольно большой алфавит, я смотрел как всё помещается, немного переделывал меню выбора языков, плюс смотрел есть ли в шрифтах нужные буквы.&lt;/p&gt;
&lt;p&gt;Вчера из Института прикладной семиотики АН РТ прислали словарь татарских существительных. Я убрал из него все русские слова (в татарском немало заимствований из русского) и попробовал поиграть.&lt;/p&gt;
&lt;p&gt;К сожалению, возникла проблема. В игре я использую два шрифта — 6×12 с нормальным начертанием и 6×13 с жирным. Шрифты готовые, взяты из фреймворка &lt;i&gt;U∞g²&lt;/i&gt;, я их только переупаковываю, чтобы в них оказались только те буквы, которые я использую в игре.&lt;/p&gt;
&lt;p&gt;Оказалось в шрифте 6×13 нет татарских букв! Я этот момент проморгал, думал разница только в размерах. Клавиатуру я печатаю 6×12, поэтому проблему увидел только когда стал выводить татарские слова из словаря (там единственное место, где используется 6×13).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.12.05.2@2x.jpg" width="1000" height="280" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Шрифт &lt;i&gt;6x13B.bdf&lt;/i&gt; полностью, выделены буквы, похожие на недостающие татарские&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Попробовал посмотреть какие буквы есть в шрифте, чтобы подобрать похожие. Это несложно сделать в командной строке:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;awk &amp;#039;/^ENCODING/{print $2}&amp;#039; 6x13B.bdf | xargs -n1 printf &amp;#039;%x\n&amp;#039; |
while read -r line; do printf &amp;quot;\\u$line &amp;quot;; done&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Из того что есть нашлись замены для &lt;tt&gt;Ә&lt;/tt&gt;, &lt;tt&gt;Ө&lt;/tt&gt; и &lt;tt&gt;Ү&lt;/tt&gt;, а вот для &lt;tt&gt;Җ&lt;/tt&gt;, &lt;tt&gt;Ң&lt;/tt&gt; и &lt;tt&gt;Һ&lt;/tt&gt; похожих букв не обнаружилось.&lt;/p&gt;
&lt;p&gt;Мысли у меня пока две: либо нарисовать недостающие буквы и научиться их добавлять в шрифт, либо обнаруживать ситуацию, когда нужных букв нет в шрифте 6×13 и переключаться на 6×12. Возможно в виде быстрого исправления я выберу второй вариант, а потом попробую реализовать первый.&lt;/p&gt;
</description>
</item>

<item>
<title>«Виселица»: правлю баги</title>
<guid isPermaLink="false">124742</guid>
<link>https://bolknote.ru/all/viselica-pravlyu-bagi/</link>
<pubDate>Tue, 21 Nov 2023 08:55:12 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/viselica-pravlyu-bagi/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Игрушка «Виселица» для «Флиппера Зеро», которую мы как-то &lt;a href="https://bolknote.ru/all/napisali-s-dochkoy-igru/"&gt;написали с дочкой&lt;/a&gt;, давно перешла из стадии весёлой разработки в стадию унылой поддержки — пользователи потихоньку находят баги, я правлю. Не самая моя любимая стадия, но один баг повеселил.&lt;/p&gt;
&lt;p&gt;Один из пользователей пожаловался, что слова с русской буквой «Р» отображаются иногда как-то неадекватно — крайние буквы как будто «срезаются». Выкинув из словаря всё, кроме слов, начинающихся или кончающихся на эту букву, я и сам убедился в наличии этого странного эффекта.&lt;/p&gt;
&lt;p&gt;Проблема оказалось в сочетании того как я кодирую символы русских слов и следующей строки кода:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="cpp"&gt;furi_string_trim(line);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Для экономии места и производительности словарь у меня хранится в кодировке &lt;i&gt;UCS-2&lt;/i&gt; с выкинутыми кодами &lt;tt&gt;0x04&lt;/tt&gt;, из-за чего русская буква «Р» (с кодом &lt;tt&gt;0x0420&lt;/tt&gt;) записывается как &lt;tt&gt;0x20&lt;/tt&gt;, а это код пробела.&lt;/p&gt;
&lt;p&gt;Вызов &lt;tt&gt;furi_string_trim&lt;/tt&gt; мне нужен, чтобы срезать перевод строки, после её считывания. Только я не учёл, что срезаются там все пробельные символы, включая урезанную до одного байта букву «Р».&lt;/p&gt;
&lt;p&gt;В общем, создал себе проблем на ровном месте. Надо было хранить буквы как есть и не выпендриваться. Впрочем, баг правится просто:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="cpp"&gt;furi_string_trim(line, &amp;quot;\n&amp;quot;);&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>«Виселица» в каталоге программ</title>
<guid isPermaLink="false">124167</guid>
<link>https://bolknote.ru/all/viselica-v-kataloge-programm/</link>
<pubDate>Tue, 07 Nov 2023 23:06:10 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/viselica-v-kataloge-programm/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bolknote.ru/all/napisali-s-dochkoy-igru/"&gt;Нашу с дочкой&lt;/a&gt; игру для «Флиппера Зеро» «Виселица» включили сегодня в каталог программ для этого устройства. А ещё она есть в одной из альтернативных прошивок — от разработчика с ником &lt;i&gt;RogueMaster&lt;/i&gt;!&lt;/p&gt;
&lt;p&gt;Кстати, я думаю, что Ева является самым молодым соавтором игры для «Флиппера» в мире.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.07@2x.png" width="1000" height="176" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Сегодня приняли нашу с дочкой игру в каталог программ «Флиппера Зеро»&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Пилю «Виселицу»</title>
<guid isPermaLink="false">124049</guid>
<link>https://bolknote.ru/all/pilyu-viselicu/</link>
<pubDate>Thu, 02 Nov 2023 10:49:10 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/pilyu-viselicu/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Не то, чтобы я не понимал, что сообщество владельцев «Флиппера» относительно небольшое, всё же это очень специфический инструмент, но всё же не ожидал, что написанная за выходные игрушка удостоится такого внимания.&lt;/p&gt;
&lt;p&gt;Только выложил её на «Гитхаб», как мне написал автор одной из популярных альтернативных прошивок, прислал патч, исправляющий некую ошибку и попросил английскую версию, — хочет включить игру в свою прошивку.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.02@2x.jpg" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Вчера для «Флиппера» пришёл чехол из Китая, выглядит — супер!&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Доброе слово и кошке приятно, поэтому вот уже несколько дней пилю поддержку других языков.&lt;/p&gt;
&lt;p&gt;Для начала переделал сборку на другой инструментарий — ранее игра не собиралась через более распространённый &lt;i&gt;uFBT&lt;/i&gt;, потому что мой код использовал кое-какие кишочки прошивки, а &lt;i&gt;uFBT&lt;/i&gt; её не содержит. Такой переход поможет опубликовать игру в общем каталоге, но я с этим не спешу.&lt;/p&gt;
&lt;p&gt;Для поддержки английского пришлось довольно много переделать, всё что осталось сейчас — вывести меню, наверное сегодня уже доделаю. Я замахнулся на конфигурируемую поддержку, по моей идее, можно будет очень просто добавить любой язык, для которого есть шрифт.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.02.1@2x.jpg" width="1000" height="200" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Файл описания языка, пример для русского&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В итоге, файл описания выглядит как текстовый файл, где первой строкой написано название словаря, ниже стоит цифра, показывающая сколько букв будет выведено в строке, при рисовании клавиатуры, ещё ниже — зазор между буквами в угадываемом слове в пикселях, потом цифра, про которую я расскажу дальше, ниже — шестнадцатеричные коды букв в кодировке &lt;i&gt;UCS-2&lt;/i&gt;, ещё ниже — строки сообщений.&lt;/p&gt;
&lt;p&gt;Если открыть словарь для английского языка обычным текстовым редактором, то внутри будет текст, с русским такой номер не пройдёт. Объясню почему.&lt;/p&gt;
&lt;p&gt;Когда я только начал программировать игру, начал я с упаковки русского словаря в программный код и генерации случайного слова. Оказалось, что быстро выбрать случайное слово не так-то просто. Первый вариант работал очень медленно, поэтому я сделал оптимизации, которые мне помогли достичь комфортной скорости.&lt;/p&gt;
&lt;p&gt;Во-первых, я перешёл на другой генератор — встроенный вызов &lt;tt&gt;furi_hal_random_get()&lt;/tt&gt; вместо обычного для Си &lt;tt&gt;random()&lt;/tt&gt;. Друг, который в прошлом имел дело с микроконтроллёрами, сказал, что как правило лучше использовать то, что предлагает фреймворк — так быстрее.&lt;/p&gt;
&lt;p&gt;Во-вторых, я переделал метод выбора случайного слова. Раньше я выбирал слово с линейной сложностью — генерировал номер строки и читал словарь, пока его не достигну. Переделал на константную — выбираю случайное смещение в файле и ищу следующее слово после него. Что дало теоретический положительный эффект — более длинные слова выбираются чаще.&lt;/p&gt;
&lt;p&gt;В-третьих, почти в два раза сократил файл словаря. Любая русская буква занимает в распространённых юникодных кодировках два байта, но второй байт всегда одинаковый, его можно выкинуть. Если посмотреть на ряд, описывающий клавиши в моём файле, видно, что первая четвёрка всё время повторяется. То есть из кода русской буквы &lt;tt&gt;А&lt;/tt&gt; — &lt;tt&gt;0x0410&lt;/tt&gt; можно убрать &lt;tt&gt;0x04&lt;/tt&gt; и оставить только &lt;tt&gt;0x10&lt;/tt&gt;, мы и так будем знать какую букву кодировать.&lt;/p&gt;
&lt;p&gt;В словаре так и сделано. Поскольку внутри программы я храню различные состояния в виде массива, мне нужно знать минимальный получившийся код символа, чтобы вычитать его, преобразовывая код в смещение в массиве. Для русского языка минимальный код будет у буквы &lt;tt&gt;А&lt;/tt&gt; — &lt;tt&gt;0x10&lt;/tt&gt;, как я показывал выше, то его и нужно записать в файл описания языка. Цифра &lt;tt&gt;16&lt;/tt&gt; в нём — это и есть &lt;tt&gt;0x10&lt;/tt&gt; в десятичной кодировке.&lt;/p&gt;
&lt;p&gt;Надеюсь сегодня допишу всё что нужно и выложу новый вариант.&lt;/p&gt;
</description>
</item>

<item>
<title>Написали с дочкой игру</title>
<guid isPermaLink="false">123933</guid>
<link>https://bolknote.ru/all/napisali-s-dochkoy-igru/</link>
<pubDate>Sun, 29 Oct 2023 21:09:27 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/napisali-s-dochkoy-igru/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;После того как я обнаружил, что на «Флиппере Зеро» &lt;a href="https://bolknote.ru/all/pishem-na-flipper-zero-po-russki/"&gt;можно&lt;/a&gt; писать программы с поддержкой русского языка, никак не мог отделаться от желания написать что-нибудь посерьёзнее демонстрационного примера с использованием этой идеи.&lt;/p&gt;
&lt;p&gt;Раздумывал недолго, выбрал для реализацию игру «Виселица» (некоторые знают её под названием «Балда»), в которую когда-то мы играли в детстве.&lt;/p&gt;
&lt;p&gt;Правила там простые — один игрок загадывает слово и рисует чёрточки по количеству букв в нём. Второй пытается отгадать побуквенно. Если названная буква в слове есть, на бумаге рисуется позиция или позиции этих букв, если нет, то рисуется часть виселицы. Если виселица нарисована полностью, отгадывающий проиграл, если слово угадано раньше, — выиграл.&lt;/p&gt;
&lt;p&gt;Пока программировал, подсела дочка, спросила чем я занимаюсь, я рассказал с примерами. Мы даже пару раз сыграли на бумаге, после чего вызвалась мне помочь нарисовать графику к игре.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.10.29@2x.jpg" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Дочка рисует виселицу для нашей игры, это первый вариант, в игру не вошёл&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Я подумал, что вполне смогу использовать то, что она нарисует в прототипе, но получилось вполне симпатично и я оставил её графику как есть.&lt;/p&gt;
&lt;p&gt;Так что у нас с дочкой теперь есть первая совместная игра — я программировал и разрабатывал интерфейс, она нарисовала виселицу и иконку приложения, а так же выступила первым тестером.&lt;/p&gt;
</description>
</item>


</channel>
</rss>