2014-01-09 7 views
0

Я разработал небольшую консольную игру на C++, которая использует графику ASCII, используя cout на данный момент. Но поскольку я хочу улучшить работу, я должен использовать pdcurses. Дело в том, что функции curses, такие как printw() или mvprintw(), не используют обычные коды ascii, и для этой игры мне действительно нужно использовать смайлики, сердце, лопаты и так далее.Может mvprintw(), функция curses работает с обычными кодами ascii?

Есть ли способ заставить проклятия работать с обычными кодами ascii?

+0

Можете ли вы опубликовать простой пример и результат его выдачи? Вероятно, это проблема с настройками вашего терминала. – kalhartt

ответ

1

Вы не должны думать о символах, таких как смайлик, как «обычные коды ASCII», потому что они действительно не ASCII. (ASCII охватывает только символы 32-127, плюс несколько управляющих кодов до 32.) Это особый случай, и единственная причина, по которой вы можете их увидеть (я полагаю?), Ваша оболочка Windows CMD - это то, что она поддерживая обратную совместимость с IBM Code Page 437 (или аналогичным) из старых DOS-систем. Между тем, вне поля DOS, Windows использует совершенно другое сопоставление, Windows-1252 (модифицированная версия ISO-8859-1) или аналогичная для своего 8-битного, так называемого «ANSI» набора символов. Но оба эти набора наборов символов устарели, по сравнению с Unicode. Еще не запутались? :)

С проклятиями лучше всего использовать чистый ASCII, а также определенные макросы ACS_ *, где это возможно. Это будет переносимым. Но это не заставит вас улыбаться. С помощью PDCurses существует несколько способов получить этот смайлик: Если можно с уверенностью предположить, что ваша консоль использует соответствующую кодовую страницу, то вы можете передать атрибут A_ALTCHARSET, или с символом, до addch(); или вы можете использовать addrawch(); или вы можете позвонить raw_output(TRUE) перед печатью символа. (Все они примерно эквивалентны.) Альтернативно, вы можете использовать «широкую» сборку PDCurses, выяснить эквиваленты Unicode для символов CP437 и напечатать их. (Этот подход также переносим, ​​хотя сомнительно, будут ли персонажи присутствовать на не-ПК.)