0

iPhoneで端末をシミュレートして、実際のDEC端末で楽しんだ原始的なグラフィックを使用してNethackのようなゲームをプレイできるようにしたいと思います。Nethackでは、vt互換端末の場合はDECgraphicsを、コードページ437をサポートする場合はIBMGraphicsを選択できます。

これらの特殊なグラフィック文字は、端末に送信される文字列によって生成されることを私は知っています(vt100.netには、端末のマニュアルやテストプログラムを含む膨大な量の情報があります)。これらの文字列を受信して​​解釈することはできますが、UIViewでこれらの文字を再現して表示できる必要があります。

kCFStringEncodingMacVT100とkCFStringEncodingDOSLatinUSがパズルの鍵のようです。これは、UILabelに「特殊文字」グリフを取得するために私が何をしようとしたかを示す部分的なコードです。

            UInt8 c = some value...
            NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacVT100);
            NSData *charData = [NSData dataWithBytes:&c length:1];
            NSString *charString = [[NSString alloc] initWithData:charData encoding:stringEncoding];
            label.font = [UIFont fontWithName:@"Courier New" size:20.f];
            label.text = charString;

0から255までのcの値を試しました。このコードを使用して、スペースから「〜」までの文字を表示できますが、コーナーやその他の行文字はまったくありません。表示する文字がない場合、charStringはnilです。

これで、Courier New TTFにこれらの文字が含まれていると確信しています。Macでは、ターミナルフォントをCourier Newに設定してNethackを再生でき、DECgraphicsを設定でき、表示は問題ありません。

したがって、質問は次のとおりです。

  • 上記のコードの何が問題になっていますか?
  • DECの特殊文字やコードページ437をサポートする、自由に利用できる等幅のTrueTypeフォントはどれですか。
  • それらのグリフが存在することを確認するために、TTFを取得したら、どのようにテストできますか?
  • これらのグリフをUILabelなどでどのように表示できますか?

(利用可能なグラフィカルタイルセットを使用したくない、好きではありません。すでに無料で利用できるNethackが少なくとも2つあることは知っていますが、必要な単純なキーボードインターフェイスを備えたものはありません。ポップアップがウィンドウに表示されます。すべてのアプローチが本当に遅くてイライラするからです。それは簡単なプロジェクトではないことを私は知っています。そしていつかAngbandしたいと思うかもしれません。)

4

1 に答える 1

3

このウィキペディアの記事で詳しく説明されているように、CP437のほとんど(すべて?)のグリフには、Unicode標準の対応するコードポイントがあります。

たとえば、クラブを表示するには、次のようにします。デフォルトのUILabelフォントで動作します:

UniChar club = 0x2663;
NSString *clubString = [NSString stringWithCharacters:&club length:1];
[label setText:clubString];
于 2011-08-15T05:24:59.460 に答える