Разработка и ромхакинг > Разработка игр
[SMD] ИИ-эксперимент с Русскими шашками
<< < (3/6) > >>
Vlad666:

--- Цитата: Werton от 04 Июля 2026, 19:29:40 ---Тенденция по количеству скачек как раз показывает, что интерес падает.

--- Конец цитаты ---

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


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

--- Конец цитаты ---

Как-то порты с одной консоли на другую не цепляют. Всегда на них косо смотрел. Зачем их вообще портировать? Но посмотрим. Может и возьмусь. Сначала хочу Шашки доделать. Есть много идей, но задолбался ждать обновления от Gemini. Хочу доделать ее с новой нейронкой.
ndivision:
Vlad666, На самом деле очень круто! Я по крайней мере внимательно слежу за развитием проекта. Тем более он просто как исследовательский. Sega для меня почти неизведанная платформа - мой приоритет за NES/Fami/Dendy - но это круто что делается игра шикарная такая, которая не выходила в эпоху расцвета консоли.
А что касаемо критики - типа это "не интересно". А с чего бы нет? Я за homebrew, более того как раз интересно сделать реализации настолок - которые были популярны у нас. Это интересная идея.
Сходу на ум приходит:
1. Сделать карточную игру "Дурак" - разные ее версии (32,54 карты. | подкидной - переводной | с разным количеством игроков) - будет отлично.
2. Сделать "Морской бой". Графику к слову можно рипнуть с известнейшей версии для DOS от нашего разработчика.
3. Сделать интересную версию игры в 15шки, с красивой музыкой и фонами.
4. Была настольная игра - лотто - ее реализовать можно. Было бы очень интересно.

Вообще развить тему - куча есть мелких логических игр - которые выходили на разных компах, но не на консолях. Есть над чем подумать :-)
Если интересно содействие - можем в tg списаться.
Vlad666:
ndivision, Кстати, тоже была идея сделать Дурака и Морской бой с продвинутым (если это вообще возможно в этих играх) ИИ и с игрой 1P-2P. Если интерес не пропадет, то сделаю.

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

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

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

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

--- Цитата: Аким от 05 Июля 2026, 11:16:51 ---Но написано вроде на си (си++?).

--- Конец цитаты ---

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


--- Цитата: Аким от 05 Июля 2026, 11:16:51 ---Из идей/пожеланий: слабо русскую версию сделать?  :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}  // Я
};
--- Конец кода ---



С переводом текста особо не заморачивался. Показываю только ради примера. Может быть в финальной версии сделаю лучше и добавлю возможность переключаться между языками.
Аким:
Круто!

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

--- Цитата: Аким от 05 Июля 2026, 14:59:28 ---Круто!

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

--- Конец цитаты ---

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

Добавлено позже:
Вот бы получить халявный доступ к Claude Fable 5, а лучше к Mythos 5 :biggrin:.
Беларус:

--- Цитата: Vlad666 от 05 Июля 2026, 14:21:36 ---Шрифт нейронка сгенерировала программно в виде:
--- Конец цитаты ---
Похоже, не смогла вместить в 8 на 8 пикселей две буквы?
Vlad666:

--- Цитата: Беларус от 05 Июля 2026, 18:15:11 ---Похоже, не смогла вместить в 8 на 8 пикселей две буквы?

--- Конец цитаты ---

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




--- Код: ---#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;
}
--- Конец кода ---
Беларус:
Понятно. Вроде как это древняя, класическая проблема алфавита в переводах. Я переводами не занимаюсь, поэтому лиш предполагаю, што есть два варианта - оставить свободную строку сверху (Ё и Й), или снизу (Д, Ц, Щ), твой - второй.
Тут надо бы глянуть какие из этих 5 букв используютса и выбирать из этово, но вряд ли ИИ в такое может, да и неважно это.
Аким:
Они по высоте не подходят. Каждая буква должна умещаться в квадрат 8 на 8 пикселей. Стандартная высота шрифта от нейронки получается 7 пикселей. А по идеи вообще должна быть 5 пикселей. Чтоб с верху было два пикселя для Й и Ё, и снизу один пиксель для Д, Ц, Щ.

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




--- Код: ---#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 пикселей. Без компромисса не обойтись, идеального варианта нет, как я понял.
Аким:
Теперь высота шрифта 6 пикселей. Сверху 2 свободных под Ё и Й. Но Д, Ц и Щ теперь малость сплющены. Как не крути самая оптимальная высота для шрифта 5 пикселей.
Vlad666:

--- Цитата: Аким от 05 Июля 2026, 21:06:59 ---Теперь высота шрифта 6 пикселей. Сверху 2 свободных под Ё и Й. Но Д, Ц и Щ теперь малость сплющены. Как не крути самая оптимальная высота для шрифта 5 пикселей.

--- Конец цитаты ---

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

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

Как ни крути, но без компромисса не обойтись.
Аким:
Хм, разве нельзя строчные в 4 пикселя сделать? Ну и в принципе можно посмотреть шрифт в уже переведённых играх на Сегу. Там вроде как ромхакеры справлялись...

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

--- Цитата: Аким от 05 Июля 2026, 21:26:16 ---Хм, разве нельзя строчные в 4 пикселя сделать? Ну и в принципе можно посмотреть шрифт в уже переведённых играх на Сегу. Там вроде как ромхакеры справлялись...

--- Конец цитаты ---

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


--- Цитата: Аким от 05 Июля 2026, 21:26:16 ---Ну а так удобный и красивый шрифт уместить в 8Х8 задача творческая... и не только кириллицу.

--- Конец цитаты ---

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

--- Цитата: Аким от 05 Июля 2026, 22:15:13 ---Ну так у тебя в проекте прописные вроде только используются. Зачем тебе строчные?  В этом варианте можно сделать высоту 5 пикселей.

--- Конец цитаты ---

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

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

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



Аким:
Круто. Но я бы ещё добавил в этот редактор возможность редактировать цифры и основные знаки препинания.
Vlad666:

--- Цитата: Аким от 06 Июля 2026, 12:56:54 ---Круто. Но я бы ещё добавил в этот редактор возможность редактировать цифры и основные знаки препинания.

--- Конец цитаты ---

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

Перейти к полной версии