Как использовать китайские иероглифы в libtcod? - PullRequest
2 голосов
/ 27 апреля 2019

У меня есть идея использовать китайские иероглифы в качестве сущностей в моей похожей на ASCII roguelike консольной игре.Я использую python-tcod, но я не знаю, есть ли способ использовать китайские иероглифы в нем.

Я попытался установить китайские шрифты с помощью функции console_set_custom_font, которая хорошо работала при отображении английских символов, но не китайских.Они просто не отображаются.

libtcod.console_set_custom_font('GoJuOn.TTF', libtcod.FONT_TYPE_GREYSCALE)

libtcod.console_init_root(constants['screen_width'], constants['screen_height'], constants['window_title'], False, libtcod.RENDERER_SDL2)

Я пытался сделать своего персонажа похожим на 你 ,, но получил это.(Вы можете видеть, как персонаж движется по его полю и как он покрывает предметы.)

failure gif

Например, вот как он работал раньше.

success gif

Исходный код взят из libtcod python tutorial

upd: я пытался использовать '你' .encode () с gb18030, gbk, gb2312, hz, cp950,кодировки bi0ghkscs, big5, iso2022_jp_2, но это дало мне вывод неправильных символов.Например, знак абзаца или тильда ('~') или несколько букв с точками над ним.

upd2: код, который я пытался использовать с другой кодировкой

player = Entity(0, 0, '你'.encode('gb18030'), libtcod.white, 'Player', 
render_order=RenderOrder.ACTOR, blocks=True,
                fighter=fighter_component, inventory=inventory_component, level=level_component)

Общий кодкоторое отображает char ('你' char - свойство char объекта)

def draw_entity(con, entity, fov_map, game_map):
if libtcod.map_is_in_fov(fov_map, entity.x, entity.y) or (entity.stairs and game_map.tiles[entity.x][entity.y].explored):
    libtcod.console_set_default_foreground(con, entity.color)
    libtcod.console_put_char(con, entity.x, entity.y, entity.char, libtcod.BKGND_NONE)

1 Ответ

0 голосов
/ 27 апреля 2019

Китайский иероглиф требует специальной кодировки.

Обращаясь к сообщенной проблеме здесь .Предложите вам закодировать строку перед передачей в libtcod.Рассмотрим кодирование строки с

.encode('utf-8')

...