如何在libtcod中使用汉字?

时间:2019-04-27 15:43:18

标签: python encoding fonts chinese-locale libtcod

我有一个想法,在像ASCII的流氓类游戏机中将汉字用作实体。我正在使用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)

我试图让我的角色看起来像你,但是明白了。 (您可以看到角色通过其FOV以及其覆盖物品的方式来移动。)

failure gif

例如,以前就是这样。

success gif

源代码取自libtcod python tutorial

upd:我尝试对gb18030,gbk,gb2312,hz,cp950,bi0ghkscs,big5,iso2022_jp_2编码使用'你'.encode(),但它给了我错误的符号输出。例如,段落符号或tilda('〜'),或上面有点的几个字母。

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 :(得分:0)

汉字需要特定的编码。

正在举报here。建议您在将字符串传递给libtcod之前对其进行编码。考虑使用

对字符串进行编码

.encode('utf-8')