Вопрос по libtcod и C.

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 11:08

Начал изучать C путём написания рогалика на libtcod v. 1.5.1. и возникла у меня проблема с юникодом. В поставку libtcod входят шрифты consolas_unicode*.png.

Делаю так:

Код: Выделить всё

...
TCOD_concole_set_custom_font ("consolas_unicode_10x10.png, TCOD_FONT_LAYOUT_ASCII_INROW | TCOD_FONT_TYPE_GREYSCALE, 32, 64);
...
TCOD_console_print_utf (NULL, 0, 0, L"Тестовое сообщение.");
И вместо тестового сообщения вижу кракозябры. Чую что я неправильно подгружаю шрифт, но ничего не официальном форуме пока не нашёл кроме такого варианта.

Отказываться от русского не хочу в силу того, что многие друзья хотели бы поиграть в рогалик, но не владеют в достаточной степени английским (сколько я бы им не говорил о том что в рогаликах он очень прост).

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

Re: Вопрос по libtcod и C.

Сообщение karagy » 18 июл 2012, 12:18

В какой ОС происходит сборка?
В через что именно вы смотрите на кракозябы - консоль через ssh-клиент?

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 12:42

1. GNU/Linux
2. Окно SDL.

UPD: Выглядит это именно как неправильное смещение, а не корявая кодировка.

Аватара пользователя
Toth
Сообщения: 327
Зарегистрирован: 11 ноя 2009, 13:36
Откуда: Красноярск

Re: Вопрос по libtcod и C.

Сообщение Toth » 18 июл 2012, 13:12

TCOD_concole_set_custom_font ("consolas_unicode_10x10.png, TCOD_FONT_LAYOUT_ASCII_INROW | TCOD_FONT_TYPE_GREYSCALE, 32, 64);
Не ведаю, что там творится внутри libtcod, но флаг TCOD_FONT_LAYOUOT_ASCII_INROW настораживает, если ты используешь таки юникод.

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: Вопрос по libtcod и C.

Сообщение Jesus05 » 18 июл 2012, 13:20

http://doryen.eptalys.net/data/libtcod/ ... _font.html
если верить этому то ASCII_INROW и ASCII_INCOL говорят, что шрифт квадратный (16Х16 из 256 символов)
по идеи надо использовать TCOD_FONT_LAYOUT_TCOD, но что делать дальше я не в курсе.
(libtcod`ом никогда не пользовался)

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 13:52

ASCII_INROW это нормально. Дело, видимо, в чём-то другом.

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

Re: Вопрос по libtcod и C.

Сообщение karagy » 18 июл 2012, 13:56

1. Убедитесь что ваша консоль способна показывать UTF-ные символы.
2. наивное гугление а-ля TCOD_console_print_utf выдает буквально 4-й ссылкой, например, такое: http://doryen.eptalys.net/forum/index.p ... 467.5;wap2 - где можно заметить: "Since the TCOD_console_print_utf function has a wchar_t* parameter, you should not use c_char_p but rather c_wchar_p"
http://ru.wikipedia.org/wiki/Широкий_символ
Из того что я вижу в инете - L"Тестовое сообщение." - дает UTF строку, но не UCS32, как требуется в вашем случае.

Но всё это, разумеется, только догадки.

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

Re: Вопрос по libtcod и C.

Сообщение karagy » 18 июл 2012, 14:04

как вариант, попробуйте u"Тестовое сообщение."

upd.
кажется я не прав про L"
кстати, по первому пункту, что видно на консоли для wprintf(L"Тестовое сообщение\n"); ?

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 14:41

wprintf (L"Тестовое сообщение"); выводит знаки вопросов, но вот printf (L"Тестовое сообщение"); выводит всё как надо.

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 14:44

Похоже проблема где-то в libtcod. Выяснил что смещения отправляются правильные, но только вот дальше 256-го символа в шрифте он не выводит (зацикливает первые 256 символов). Выяснил это, попробовав TCOD_console_put_char.

Аватара пользователя
Toth
Сообщения: 327
Зарегистрирован: 11 ноя 2009, 13:36
Откуда: Красноярск

Re: Вопрос по libtcod и C.

Сообщение Toth » 18 июл 2012, 14:49

256 символов
Вот и аски повстречался с юникодом.

Дальше нужно внимательно курить мануалы. Это за тебя точно никто не сделает.

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 15:09

Выкурив мануалы и исходники libtcod пришёл к выводу что он пока не готов к юникоду. Жалко. Хорошая библиотека.

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 18 июл 2012, 15:40

Жара под сорок сплавила мозги. В общем, оно тупо берёт код символа и выводит мне соответствующий этому коду символ из шрифта. А в шрифте всего 32х64. Надо просто или обратное смещение делать или (что имхо лучше) сделать свою функцию вывода текста. Спасибо всем.

Аватара пользователя
kipar
Сообщения: 2120
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: Вопрос по libtcod и C.

Сообщение kipar » 19 июл 2012, 06:54

karagy писал(а):1. Убедитесь что ваша консоль способна показывать UTF-ные символы.
libtcod не использует консоль, у него свое SDL окно и свой вывод шрифта как куска из текстуры.
Я бы сделал функцию, преобразующую русские буквы в нужные ему коды (соответствующие русским символам в текстуре шрифта) и потом выводил функцией из libtcod.

sukiminoku-san
Сообщения: 22
Зарегистрирован: 03 апр 2012, 17:26
Откуда: Курган, Россия

Re: Вопрос по libtcod и C.

Сообщение sukiminoku-san » 21 июл 2012, 13:19

2Kipar: именно к такому выводу я и пришёл. Да вот беда. В очередной раз я столкнулся со строками в сях и в очередной раз готов спасовать и переключиться на другой язык. Кто-нибудь мне объяснит пару вещей (гугл не помог).

Как считать произвольный символ из строки wchar_t? Как получить код символа?

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 34 гостя