Автор Тема: [SMD] ИИ-эксперимент с Русскими шашками  (Прочитано 7171 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #30 : 22 Июня 2026, 20:27:04 »
Дело было вечером, делать было нечего, и я решил сделать еще одно обновление, добавив четвертый режим игры - 2-MIXED (ставропольские шашки). Как и в режиме 2-MOVES, человек и компьютер за раз делают два хода, но разница в том, что в 2-MIXED второй ход делается шашкой противника.

Еще подправил визуальное и звуковое предупреждения о попытке нарушить правила. Теперь они не будут срабатывать там, где им лучше не срабатывать для удобства игрока.

315963-0

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #31 : 23 Июня 2026, 16:47:57 »
Обновил код графики. Теперь, когда игрок двигает шашки, он не увидит графических артефактов в виде полосок из черных пикселей на игровой доске, появляющиеся на долю секунды.

Точно не скажу, но, похоже, графика в игре стала идеальной в плане отсутствия артефактов.

Кстати, нейронка исправила проблемы с графикой, когда она узнала, что я использую эмулятор BlastEm. Я ей о нем вообще не говорил, но она поняла это из скрина, который я ей отправил. Она тут же выдала рабочее улучшение графики, написав код так, чтобы он отлично работал на оригинальном железе или на высокоточном эмуляторе. Это лишний раз показывает, что при составлении промтов нужно учитывать все, а не просто писать: "Напиши мне это". Чем точнее промт, тем качественнее результат.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #32 : 01 Июля 2026, 12:53:12 »
Добавил второй вид шашек - Английские. Теперь на титульном экране можно выбрать между русскими и английскими правилами.

Правила Английских шашек, в отличие от Русских:

- Черные ходят первыми.
- Простые шашки бьют только вперед.
- Дамка ходит только на одну клетку во все стороны.
- Дамка не может бить, если фигура противника находится на одной линии, но не на соседней клетке.
- Если простая шашка во время множественного взятия становится дамкой, то она не может продолжать взятие.

А также добавил новое условие объявления ничьей. Изначально ничья объявлялась, только если совершается 40 полуходов подряд (20 ходов белых и черных) без движения простых шашек и без взятия фигур противника. Теперь ничья объявляется еще и при условии, если у белых и черных остается только по одной дамке, так как при таком наборе фигур ни одна из сторон не сможет победить.

Изменил заголовок на титульном экране с RUCHECKERS на CHECKERS, т.к. теперь игра универсальная, а не только русская.

316257-0

Вместе с игрой в архив добавил исходный код.
« Последнее редактирование: 01 Июля 2026, 13:26:07 от Vlad666 »

Оффлайн cl

  • Пользователь
  • Сообщений: 77
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #33 : 01 Июля 2026, 16:37:01 »
Кстати, интересно, можно ли с помощью нейросети так же круто оптимизировать уже существующие игры, страдающие тормозами? Если она такой сложный алгоритм может настолько круто ускорять для слабого процессора раз за разом, то почему бы ей не ускорить обычную игрушку с простейшей логикой?
в будущем думаю не проблема, но сейчас ии нужно как то видеть, то что изменять
в теории если гидру или ида обучать структуре мд, чтобы это перевести в с, это можно потом оптимизировать

Оффлайн ghostdog3

  • Супермодератор
  • Сообщений: 2276
  • Благомир
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #34 : 01 Июля 2026, 19:53:28 »
Добавил второй вид шашек - Английские
Спасибо! Это всегда интересно.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #35 : 01 Июля 2026, 22:07:13 »
Спасибо! Это всегда интересно.

Потом, если живы будем, добавлю еще несколько видов шашек: Бразильские, Пул (США) и Итальянские. Я бы их сразу добавил (можно прямо сейчас), но жду, когда выйдет следующая версия Gemini. Хочу именно с ее помощью сделать ИИ умнее и быстрее, который будет понимать правила всех этих видов. Вроде как вот-вот должны запустить новую нейронку. Английские шашки тоже позже хотел добавить, но решил немного оживить тему. А завтра выложу крутое обновление с двумя улучшениями алгоритма Quiescence Search, делающими ИИ умнее.

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

Добавлено позже:
Обновления от Gemini 3.1 Pro:

1. Минимальное значение параметра DEPTH SEARCH уменьшено до 1.
2. Параметр DEPTH SEARCH можно установить на RANDOM, при котором ИИ делает случайные ходы, но в рамках правил. Это самый легкий уровень сложности, на котором ИИ вообще не рассматривает ходы. При значении RANDOM параметр QUIESCENCE SEARCH автоматически отключается.
3. У параметра QUIESCENCE SEARCH теперь только два значения — ON и OFF. Если параметр включен, то QS работает до упора (лимит 99 ходов), что делает ИИ более сильным противником, хоть за это и придется платить дополнительной парой секунд ожидания.
4. ИИ стал умнее благодаря улучшениям алгоритма Quiescence Search:
   - Раньше алгоритм QS мог игнорировать обязательные взятия при анализе ходов и попадаться в простые ловушки. Теперь он безошибочно просчитывает форсированные многоходовые комбинации до самого конца, строго соблюдая правила всех видов шашек.
   - Раньше алгоритм QS мог при анализе ходов прерваться прямо посередине серии взятий при исчерпании лимита глубины поиска. Теперь он принудительно доводит любой начатый мультипрыжок до конца, прежде чем выносить оценку позиции. Это исключает ситуации, когда ИИ принимал неверные решения на основе "зависших" незаконченных ходов.
5. Кнопка MODE переворачивает доску, когда идет ход человека.

Обновления от Claude Fable 5 (это не шутка):

1. Исправлена симметрия оценки позиций для белых фигур. Раньше веса клеток для белых пешек брались несимметрично, что могло приводить к перекосам в стратегии игры за белых (ИИ оценивал левый и правый фланги по-разному). Теперь матрица весов корректно отзеркаливается по горизонтали, делая позиционную оценку ИИ объективной для обеих сторон.
2. Исключен учет срубленных фигур в базовом счете. В старой версии алгоритма фигуры, которые уже были побиты в рамках текущего хода (но физически еще находились на доске), ошибочно добавляли или отнимали очки из общей оценки позиции. Теперь такие фигуры корректно игнорируются при подсчете очков, что делает оценку состояния доски алгоритмом гораздо точнее.
3. ИИ научился выигрывать быстрее и сопротивляться дольше. В алгоритм минимаксного поиска (при расчете тупиковых ситуаций, когда ходов больше нет) добавлена зависимость от глубины поиска. Теперь, если ИИ видит неизбежную победу, он выберет тот путь, который приведет к ней за меньшее количество ходов. Аналогично, если ИИ видит неизбежное поражение, он перестанет сдаваться сразу и будет выбирать ходы, которые максимально оттягивают проигрыш.

И некоторые другие мелкие улучшения / исправления от Fable 5.

На этом пока все. Финальную версию сделаю, когда выйдет следующая версия Gemini.
« Последнее редактирование: 04 Июля 2026, 03:29:38 от Беларус »

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #36 : 04 Июля 2026, 08:52:34 »
Похоже, от Google не дождешься новой нейронки, в то время как ее конкуренты выпускают свои каждый месяц.

Не мог дождаться и с помощью старой Gemini 3.1 Pro сделал очередное обновление:

1. Добавлены новые виды шашек: Пул чекерс, Бразильские и Чешские.
2. Визуально улучшены титульный экран (вид шашек зависит от параметров игры), а также окна паузы и окончания игры (вид шашек зависит от цвета игрока и цвета победителя).
3. На игровой экран добавлены стопки срубленных шашек.

И несколько других мелких улучшений.

316321-0 316323-1

316325-2 316327-3

Но финальную версию я все равно сделаю с помощью новой нейронки. Думаю, у нее лучше получится сделать ИИ умнее и быстрее благодаря более глубоким знаниям железа консоли и языка SGDK.

Оффлайн Werton

  • Пользователь
  • Сообщений: 1078
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #37 : 04 Июля 2026, 17:59:44 »
и языка SGDK
Нет такого языка, есть api фреймворка/библиотеки.

Вообще, конечно похвально, что ты занимаешься креативом, это всяко лучше, чем накидывания говна на вентилятор на высосанные темы, в чем ты раньше любил тут практиковаться.
Но всё же, как по мне это барахтанье в луже. Такие простые настольные, карточные и прочие тетрисы игры, на мегадрайве мало кому интересны, а изменения с выдроченными внутренними алгоритмами в погоне за долями секунд, так вообще всем до лампочки (имхо).

Дело это конечно  лично твоё , но как по мне, пора двигаться дальше и взяться за что-нибудь посерьёзнее, не супер масштабное, а что-то среднее. Например видел чела в интернете, который не умея кодить делает порт/репрограмминг Contra 3 со snes, как я понял тоже на нейронках.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #38 : 04 Июля 2026, 19:01:13 »
Нет такого языка, есть api фреймворка/библиотеки.

Я в этом не спец.

Но всё же, как по мне это барахтанье в луже. Такие простые настольные, карточные и прочие тетрисы игры, на мегадрайве мало кому интересны, а изменения с выдроченными внутренними алгоритмами в погоне за долями секунд, так вообще всем до лампочки (имхо).

Во-первых, мне интересно. Интересно чисто ради эксперимента, а не ради того, чтобы поиграть в эту игрушку. Прочти название. И немногим другим тоже интересно. Хоть и немного, но люди скачивают каждую новую версию. Уверен, финальную скачает в разы больше народу. Вон, некоторые до сих пор играют в Тетрис на NES. Казалось бы, кому он нафиг нужен?
Во-вторых, алгоритмы хоть и выдрочены, но не для железа времен Моисея.
В-третьих, не за доли секунды. Первая версия на максимальных настройках думала над, например, первым ходом 60 секунд. Последняя думает 17 секунд. И это при том, что она стала умнее.

Дело это конечно  лично твоё , но как по мне, пора двигаться дальше и взяться за что-нибудь посерьёзнее, не супер масштабное, а что-то среднее. Например видел чела в интернете, который не умея кодить делает порт/репрограмминг Contra 3 со snes, как я понял тоже на нейронках.

Посмотрим. Доделаю эту игрушку, сделаю другую. Но если интерес не пропадет и живы будем.

Добавлено позже:
Почему я выбрал именно логическую игру Шашки? Да потому, что писать ее алгоритм для допотопного железа, чтобы он был шустрым и имел хоть какие-то нормальные навыки игры, - дело не из легких даже для опытных программистов, как мне кажется. Мне интересно, что из этого выйдет. Мне интересно, на что способны нейросеть и консоль. Да и в конце концов, не нужно париться с графикой.
« Последнее редактирование: 04 Июля 2026, 19:10:51 от Vlad666 »

Оффлайн Werton

  • Пользователь
  • Сообщений: 1078
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #39 : 04 Июля 2026, 19:29:40 »
Хоть и немного, но люди скачивают каждую новую версию. Уверен, финальную скачает в разы больше народу.
Тенденция по количеству скачек как раз показывает, что интерес падает.

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

Но дело конечно твоё, можно и шашки делать если нравится. А вообще, если интересно будет, в сети есть исходники несколько незаконченных хомбрю портов типа metal slug, vigilante, ещё вроде что-то было, как вариант можно их попробовать допиливать через нейронку, там код конечно "ужас-ужас", но нейронке в принципе должно быть пофиг.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #40 : 04 Июля 2026, 20:31:48 »
Тенденция по количеству скачек как раз показывает, что интерес падает.

Я бы тоже не стал качать каждое обновление. Подождал бы, когда этот чувак допилит финальный вариант.

Но дело конечно твоё, можно и шашки делать если нравится. А вообще, если интересно будет, в сети есть исходники несколько незаконченных хомбрю портов типа metal slug, vigilante, ещё вроде что-то было, как вариант можно их попробовать допиливать через нейронку, там код конечно "ужас-ужас", но нейронке в принципе должно быть пофиг.

Как-то порты с одной консоли на другую не цепляют. Всегда на них косо смотрел. Зачем их вообще портировать? Но посмотрим. Может и возьмусь. Сначала хочу Шашки доделать. Есть много идей, но задолбался ждать обновления от Gemini. Хочу доделать ее с новой нейронкой.

Оффлайн ndivision

  • Пользователь
  • Сообщений: 251
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #41 : 04 Июля 2026, 21:24:35 »
Vlad666, На самом деле очень круто! Я по крайней мере внимательно слежу за развитием проекта. Тем более он просто как исследовательский. Sega для меня почти неизведанная платформа - мой приоритет за NES/Fami/Dendy - но это круто что делается игра шикарная такая, которая не выходила в эпоху расцвета консоли.
А что касаемо критики - типа это "не интересно". А с чего бы нет? Я за homebrew, более того как раз интересно сделать реализации настолок - которые были популярны у нас. Это интересная идея.
Сходу на ум приходит:
1. Сделать карточную игру "Дурак" - разные ее версии (32,54 карты. | подкидной - переводной | с разным количеством игроков) - будет отлично.
2. Сделать "Морской бой". Графику к слову можно рипнуть с известнейшей версии для DOS от нашего разработчика.
3. Сделать интересную версию игры в 15шки, с красивой музыкой и фонами.
4. Была настольная игра - лотто - ее реализовать можно. Было бы очень интересно.

Вообще развить тему - куча есть мелких логических игр - которые выходили на разных компах, но не на консолях. Есть над чем подумать :-)
Если интересно содействие - можем в tg списаться.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #42 : 04 Июля 2026, 21:35:16 »
ndivision, Кстати, тоже была идея сделать Дурака и Морской бой с продвинутым (если это вообще возможно в этих играх) ИИ и с игрой 1P-2P. Если интерес не пропадет, то сделаю.

Добавлено позже:
А если есть идеи / предложения по Шашкам, то, народ, пишите прямо сюда. Посмотрим, что можно сделать. Но не обещаю. У нынешних нейросетей уже большие возможности, но все же от меня еще тоже нужны кое какие знания и умения. Особенно это касается графики и музыки :biggrin:.
« Последнее редактирование: 04 Июля 2026, 21:45:31 от Vlad666 »

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #43 : 05 Июля 2026, 11:16:51 »
Интересная тема. Походу вайб-кодинг профессия будущего... а может уже и настоящего.

Автор в любом случае молодец!

Спасибо что с исходником запостил. Было интересно глянуть. Хотя в SGDK никогда заходить не пытался. Но написано вроде на си (си++?).

Из идей/пожеланий: слабо русскую версию сделать?  :debile: Текста-то всего ничего. Основная задача будет - добавить русский шрифт.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #44 : 05 Июля 2026, 14:21:36 »
Но написано вроде на си (си++?).

Вроде как слегка модифицированный под консоль C.

Из идей/пожеланий: слабо русскую версию сделать?  :debile: Текста-то всего ничего. Основная задача будет - добавить русский шрифт.

Можно и перевести. Шрифт нейронка сгенерировала программно в виде:

const u8 cyrillic_font_1bpp[31][8] = {
    {0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x00}, // А
    {0x7E, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00}, // Б
    {0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00}, // В
    {0x7E, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00}, // Г
    {0x3E, 0x26, 0x26, 0x26, 0x26, 0x7E, 0x66, 0x66}, // Д
    {0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00}, // Е
    {0x6B, 0x6B, 0x3E, 0x1C, 0x3E, 0x6B, 0x6B, 0x00}, // Ж
    {0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00}, // З
    {0x66, 0x6E, 0x7E, 0x7E, 0x76, 0x66, 0x66, 0x00}, // И
    {0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00}, // К
    {0x1E, 0x36, 0x36, 0x66, 0x66, 0x66, 0x66, 0x00}, // Л
    {0xC3, 0xE7, 0xFF, 0xDB, 0xC3, 0xC3, 0xC3, 0x00}, // М
    {0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, // Н
    {0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // О
    {0x7E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00}, // П
    {0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00}, // Р
    {0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00}, // С
    {0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, // Т
    {0x66, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x3C, 0x00}, // У
    {0x18, 0x7E, 0xDB, 0xDB, 0x7E, 0x18, 0x18, 0x00}, // Ф
    {0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00}, // Х
    {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x03}, // Ц
    {0x66, 0x66, 0x66, 0x7E, 0x06, 0x06, 0x06, 0x00}, // Ч
    {0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0x7E, 0x00}, // Ш
    {0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0x7E, 0x03}, // Щ
    {0xF0, 0x30, 0x30, 0x3E, 0x33, 0x33, 0x3E, 0x00}, // Ъ
    {0x63, 0x63, 0x63, 0x7B, 0x67, 0x67, 0x7B, 0x00}, // Ы
    {0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00}, // Ь
    {0x3C, 0x66, 0x06, 0x3E, 0x06, 0x66, 0x3C, 0x00}, // Э
    {0x66, 0x69, 0x69, 0x79, 0x69, 0x69, 0x66, 0x00}, // Ю
    {0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00}  // Я
};

316353-0

С переводом текста особо не заморачивался. Показываю только ради примера. Может быть в финальной версии сделаю лучше и добавлю возможность переключаться между языками.
« Последнее редактирование: 05 Июля 2026, 14:32:32 от Vlad666 »

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #45 : 05 Июля 2026, 14:59:28 »
Круто!

Нескромный вопрос: это платные нейронки?

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #46 : 05 Июля 2026, 15:11:27 »
Круто!

Нескромный вопрос: это платные нейронки?

У меня подписка на Gemini 3.1 Pro.

Добавлено позже:
Вот бы получить халявный доступ к Claude Fable 5, а лучше к Mythos 5 :biggrin:.
« Последнее редактирование: 05 Июля 2026, 15:38:25 от Vlad666 »

Оффлайн Беларус

  • Модератор
  • Сообщений: 1607
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #47 : 05 Июля 2026, 18:15:11 »
Шрифт нейронка сгенерировала программно в виде:
Похоже, не смогла вместить в 8 на 8 пикселей две буквы?

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #48 : 05 Июля 2026, 19:17:43 »
Похоже, не смогла вместить в 8 на 8 пикселей две буквы?

Ё и Й вместила, но чтобы уместить точки и черточки, сами буквы нейронка нарисовала меньше. Я их удалил из списка, потому что они выделяются на фоне всех остальных букв.

316371-0

#include <genesis.h>

const u8 cyrillic_font_1bpp[33][8] = {
    {0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x00}, // А
    {0x7E, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00}, // Б
    {0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00}, // В
    {0x7E, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00}, // Г
    {0x3E, 0x26, 0x26, 0x26, 0x26, 0x7E, 0x66, 0x66}, // Д
    {0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00}, // Е
    {0x24, 0x00, 0x7E, 0x60, 0x7C, 0x60, 0x7E, 0x00}, // Ё
    {0x6B, 0x6B, 0x3E, 0x1C, 0x3E, 0x6B, 0x6B, 0x00}, // Ж
    {0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00}, // З
    {0x66, 0x6E, 0x7E, 0x7E, 0x76, 0x66, 0x66, 0x00}, // И
    {0x3C, 0x00, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x00}, // Й
    {0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00}, // К
    {0x1E, 0x36, 0x36, 0x66, 0x66, 0x66, 0x66, 0x00}, // Л
    {0xC3, 0xE7, 0xFF, 0xDB, 0xC3, 0xC3, 0xC3, 0x00}, // М
    {0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, // Н
    {0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // О
    {0x7E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00}, // П
    {0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00}, // Р
    {0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00}, // С
    {0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, // Т
    {0x66, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x3C, 0x00}, // У
    {0x18, 0x7E, 0xDB, 0xDB, 0x7E, 0x18, 0x18, 0x00}, // Ф
    {0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00}, // Х
    {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x03}, // Ц
    {0x66, 0x66, 0x66, 0x7E, 0x06, 0x06, 0x06, 0x00}, // Ч
    {0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0x7E, 0x00}, // Ш
    {0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0x7E, 0x03}, // Щ
    {0xF0, 0x30, 0x30, 0x3E, 0x33, 0x33, 0x3E, 0x00}, // Ъ
    {0x63, 0x63, 0x63, 0x7B, 0x67, 0x67, 0x7B, 0x00}, // Ы
    {0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00}, // Ь
    {0x3C, 0x66, 0x06, 0x3E, 0x06, 0x66, 0x3C, 0x00}, // Э
    {0x66, 0x69, 0x69, 0x79, 0x69, 0x69, 0x66, 0x00}, // Ю
    {0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00}  // Я
};

u32 vdp_tile_buffer[33 * 8];

void generateCyrillicTiles() {
    for (u16 i = 0; i < 33; i++) {
        for (u16 row = 0; row < 8; row++) {
            u32 packed_row = 0;
            u8 src_row = cyrillic_font_1bpp[i][row];
           
            for (u16 col = 0; col < 8; col++) {
                packed_row <<= 4;
                if (src_row & (1 << (7 - col))) {
                    packed_row |= 1;
                } else {
                    packed_row |= 0;
                }
            }
            vdp_tile_buffer[i * 8 + row] = packed_row;
        }
    }
}

int main(bool hard) {
    generateCyrillicTiles();
    VDP_loadTileData(vdp_tile_buffer, 1, 33, CPU);

    PAL_setColor((PAL1 * 16) + 0, RGB24_TO_VDPCOLOR(0x000000));
    PAL_setColor((PAL1 * 16) + 1, RGB24_TO_VDPCOLOR(0xFFFFFF));

    u16 current_tile = 1;

    for (u16 i = 0; i < 33; i++) {
        u16 row = i / 11;
        u16 col = i % 11;
       
        u16 x = 9 + (col * 2);
        u16 y = 10 + (row * 2);
       
        VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, current_tile), x, y);
        current_tile++;
    }

    while (1) {
        SYS_doVBlankProcess();
    }

    return 0;
}

Оффлайн Беларус

  • Модератор
  • Сообщений: 1607
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #49 : 05 Июля 2026, 19:35:41 »
Понятно. Вроде как это древняя, класическая проблема алфавита в переводах. Я переводами не занимаюсь, поэтому лиш предполагаю, што есть два варианта - оставить свободную строку сверху (Ё и Й), или снизу (Д, Ц, Щ), твой - второй.
Тут надо бы глянуть какие из этих 5 букв используютса и выбирать из этово, но вряд ли ИИ в такое может, да и неважно это.

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #50 : 05 Июля 2026, 19:51:16 »
Они по высоте не подходят. Каждая буква должна умещаться в квадрат 8 на 8 пикселей. Стандартная высота шрифта от нейронки получается 7 пикселей. А по идеи вообще должна быть 5 пикселей. Чтоб с верху было два пикселя для Й и Ё, и снизу один пиксель для Д, Ц, Щ.

Как раз забракованные Й и Ё с такой высотой (в 5 пикселей) и есть. Надо под них весь шрифт подгонять в идеале  :debile:

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #51 : 05 Июля 2026, 21:01:20 »
Еще вот такой вариант нейронка сгенерировала.



#include <genesis.h>

const u8 cyrillic_font_1bpp[33][8] = {
    {0x00, 0x00, 0x38, 0x44, 0x44, 0x7C, 0x44, 0x44}, // А
    {0x00, 0x00, 0x78, 0x40, 0x78, 0x44, 0x44, 0x78}, // Б
    {0x00, 0x00, 0x78, 0x44, 0x78, 0x44, 0x44, 0x78}, // В
    {0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x40}, // Г
    {0x00, 0x00, 0x1C, 0x24, 0x24, 0x24, 0x7E, 0x42}, // Д
    {0x00, 0x00, 0x7C, 0x40, 0x78, 0x40, 0x40, 0x7C}, // Е
    {0x28, 0x00, 0x7C, 0x40, 0x78, 0x40, 0x40, 0x7C}, // Ё
    {0x00, 0x00, 0x92, 0x54, 0x38, 0x38, 0x54, 0x92}, // Ж
    {0x00, 0x00, 0x38, 0x44, 0x18, 0x04, 0x44, 0x38}, // З
    {0x00, 0x00, 0x44, 0x44, 0x4C, 0x54, 0x64, 0x44}, // И
    {0x28, 0x10, 0x44, 0x44, 0x4C, 0x54, 0x64, 0x44}, // Й
    {0x00, 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x44}, // К
    {0x00, 0x00, 0x3C, 0x44, 0x44, 0x44, 0x44, 0x44}, // Л
    {0x00, 0x00, 0x42, 0x66, 0x5A, 0x42, 0x42, 0x42}, // М
    {0x00, 0x00, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x44}, // Н
    {0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38}, // О
    {0x00, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x44}, // П
    {0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40}, // Р
    {0x00, 0x00, 0x38, 0x44, 0x40, 0x40, 0x44, 0x38}, // С
    {0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10}, // Т
    {0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x38}, // У
    {0x00, 0x00, 0x38, 0x54, 0x54, 0x38, 0x10, 0x10}, // Ф
    {0x00, 0x00, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44}, // Х
    {0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x7E, 0x02}, // Ц
    {0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x04}, // Ч
    {0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x54, 0x7C}, // Ш
    {0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x7E, 0x02}, // Щ
    {0x00, 0x00, 0xC0, 0x40, 0x78, 0x44, 0x44, 0x78}, // Ъ
    {0x00, 0x00, 0x41, 0x41, 0x79, 0x45, 0x45, 0x79}, // Ы
    {0x00, 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x78}, // Ь
    {0x00, 0x00, 0x38, 0x44, 0x1C, 0x04, 0x44, 0x38}, // Э
    {0x00, 0x00, 0x46, 0x49, 0x79, 0x49, 0x49, 0x46}, // Ю
    {0x00, 0x00, 0x3C, 0x44, 0x3C, 0x14, 0x24, 0x44}  // Я
};

u32 vdp_tile_buffer[33 * 8];

void generateCyrillicTiles() {
    for (u16 i = 0; i < 33; i++) {
        for (u16 row = 0; row < 8; row++) {
            u32 packed_row = 0;
            u8 src_row = cyrillic_font_1bpp[i][row];
           
            for (u16 col = 0; col < 8; col++) {
                packed_row <<= 4;
                if (src_row & (1 << (7 - col))) {
                    packed_row |= 1;
                } else {
                    packed_row |= 0;
                }
            }
            vdp_tile_buffer[i * 8 + row] = packed_row;
        }
    }
}

int main(bool hard) {
    generateCyrillicTiles();
    VDP_loadTileData(vdp_tile_buffer, 1, 33, CPU);

    PAL_setColor((PAL1 * 16) + 0, RGB24_TO_VDPCOLOR(0x000000));
    PAL_setColor((PAL1 * 16) + 1, RGB24_TO_VDPCOLOR(0xFFFFFF));

    u16 current_tile = 1;

    for (u16 i = 0; i < 33; i++) {
        u16 row = i / 11;
        u16 col = i % 11;
       
        u16 x = 9 + (col * 2);
        u16 y = 10 + (row * 2);
       
        VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, current_tile), x, y);
        current_tile++;
    }

    while (1) {
        SYS_doVBlankProcess();
    }

    return 0;
}

А вообще, русский алфавит сложный для рисования в ограниченном формате 8 на 8 пикселей. Без компромисса не обойтись, идеального варианта нет, как я понял.

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #52 : 05 Июля 2026, 21:06:59 »
Теперь высота шрифта 6 пикселей. Сверху 2 свободных под Ё и Й. Но Д, Ц и Щ теперь малость сплющены. Как не крути самая оптимальная высота для шрифта 5 пикселей.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #53 : 05 Июля 2026, 21:13:31 »
Теперь высота шрифта 6 пикселей. Сверху 2 свободных под Ё и Й. Но Д, Ц и Щ теперь малость сплющены. Как не крути самая оптимальная высота для шрифта 5 пикселей.

Да, я тоже так подумал, но нейронка говорит, что для прописных букв 6 пикселей - это самый минимум, потому что в противном случае не останется пикселей для строчных букв, для которых минимум - 5 пикселей в высоту. Только если они тебе вообще не нужны, то можно и в 5 пикселей прописные буквы нарисовать.

Буква Д получилась нормальной. Сплющены на один пиксель Ц и Щ. Если их нарисовать с такой же высотой, как у остальных букв, то для крючка места не останется. Вместо него будет только один выступающий пиксель вправо. Если такой вариант устраивает, то можно его сделать.

Как ни крути, но без компромисса не обойтись.

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #54 : 05 Июля 2026, 21:26:16 »
Хм, разве нельзя строчные в 4 пикселя сделать? Ну и в принципе можно посмотреть шрифт в уже переведённых играх на Сегу. Там вроде как ромхакеры справлялись...

Ну а так удобный и красивый шрифт уместить в 8Х8 задача творческая... и не только кириллицу.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #55 : 05 Июля 2026, 21:45:38 »
Хм, разве нельзя строчные в 4 пикселя сделать? Ну и в принципе можно посмотреть шрифт в уже переведённых играх на Сегу. Там вроде как ромхакеры справлялись...

Наверное, можно, но получится фигня полная. Если есть примеры, то покажи.

Ну а так удобный и красивый шрифт уместить в 8Х8 задача творческая... и не только кириллицу.

С английским алфавитом вообще проблем нет. Он гладкий, как титьки и жопа. А кириллица сложна тем, что у нее всякие выступающие закорючки, которые некуда деть в ограниченном пространстве, если тебе нужны прописные и строчные буквы.

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #56 : 05 Июля 2026, 22:15:13 »
Ну так у тебя в проекте прописные вроде только используются. Зачем тебе строчные?  В этом варианте можно сделать высоту 5 пикселей.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
Re: [SMD] ИИ-эксперимент с Русскими шашками
« Ответ #57 : 05 Июля 2026, 22:38:55 »
Ну так у тебя в проекте прописные вроде только используются. Зачем тебе строчные?  В этом варианте можно сделать высоту 5 пикселей.

Под игровой доской текст отображается прописными и строчными буквами. То же самое в окошках паузы и окончания игры. Но там тоже можно сделать только прописные буквы. Да и с этой игрой проблем нет в плане перевода. Сделаю нормальный перевод в финальной версии, если не передумаю. Язык можно будет переключать на кнопку MODE или добавлю дополнительный экран настроек. Я бы сейчас выкатил финалку, но хочу сделать это с помощью новой нейронки. Хочу сделать ИИ в разы быстрее и умнее. Думаю, что у новой нейронки это получится лучше.

Хотя, зачем переводить игру? Там и без перевода все понятно. Сюжета никакого нет :biggrin:.

Добавлено 6 июля 2026 года:
Сделал браузерный редактор шрифта. Все в архиве.

316393-0

316395-1
« Последнее редактирование: 06 Июля 2026, 17:06:26 от ghostdog3 »

Оффлайн Аким

  • Пользователь
  • Сообщений: 1106
  • Пол: Мужской
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #58 : 06 Июля 2026, 12:56:54 »
Круто. Но я бы ещё добавил в этот редактор возможность редактировать цифры и основные знаки препинания.

Онлайн Vlad666

  • Пользователь
  • Сообщений: 1342
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #59 : 06 Июля 2026, 19:23:47 »
Круто. Но я бы ещё добавил в этот редактор возможность редактировать цифры и основные знаки препинания.

Добавил вкладки "ЦИФРЫ" и "ЗНАКИ". Во вкладку "ЗНАКИ" добавил возможность менять символы местами и добавлять новые, если в наборе нет нужных.