0

今のところ cout を使用して、ASCII グラフィックスを使用する小さなコンソール C++ ゲームを開発しました。しかし、物事をより良くしたいので、pdcurses を使用する必要があります。問題は、printw() や mvprintw() などの curses 関数が通常の ASCII コードを使用しないことです。このゲームでは、スマイリー文字、ハート、スペードなどを実際に使用する必要があります。

curses を通常の ASCII コードで動作させる方法はありますか?

4

1 に答える 1

1

スマイリー フェイスのような文字を「通常の ASCII コード」と考えるべきではありません。実際にはまったく ASCII ではないからです。(ASCII は文字 32 ~ 127 と、32 未満のいくつかの制御コードのみをカバーします。) これらは特殊なケースであり、Windows CMD シェルでそれらを見ることができる唯一の理由は (私は推測しますか?)、それが古い DOS システムの IBM Code Page 437 (または類似のもの) との下位互換性を維持します。一方、DOS ボックスの外では、Windows はまったく異なるマッピング、Windows-1252 (ISO-8859-1 の修正バージョン)、または類似の 8 ビット、いわゆる「ANSI」文字セットを使用します。しかし、Unicode と比較すると、これらのタイプの文字セットはどちらも時代遅れです。まだ混乱していますか?:)

curses を使用する場合、可能な限り、純粋な ASCII と定義済みの ACS_* マクロを使用することをお勧めします。それはポータブルになります。しかし、それでは笑顔にはなりません。PDCurses では、そのスマイリー フェイスを取得する方法がいくつかあります。コンソールが適切なコード ページを使用していると安全に想定できる場合A_ALTCHARSETは、属性を渡すか、文字を付けてaddch();に渡すことができます。または使用できますaddrawch(); raw_output(TRUE)または、文字を印刷する前に呼び出すことができます。(これらはすべてほぼ同等です。) あるいは、PDCurses の「ワイド」ビルドを使用して、CP437 文字に相当する Unicode を見つけ出し、代わりにそれらを出力することもできます。(このアプローチも移植可能ですが、キャラクターが PC 以外に存在するかどうかは疑問です。)

于 2014-03-01T21:52:12.940 に答える