2

我有一个想法,在我的类似 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)

我试图让我的角色看起来像你,但得到了这个。(您可以看到角色移动的 FOV 以及它如何覆盖物品。)

失败.gif

例如,这就是它以前的工作方式。

成功 gif

源代码取自 libtcod python教程

upd:我尝试将 '你'.encode() 与 gb18030、gbk、gb2312、hz、cp950、bi0ghkscs、big5、iso2022_jp_2 编码一起使用,但它给了我错误符号的输出。例如,段落符号或 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)
4

1 回答 1

0

汉字需要特定的编码。

参考此处报告的问题。建议您在将字符串传递给 libtcod 之前对其进行编码。考虑用

.encode('utf-8')

于 2019-04-27T15:56:22.543 回答