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 上,我可以玩 Nethack,终端字体设置为 Courier New,我可以设置 DECgraphics 并且显示正常。

所以问题是:

  • 上面的代码有什么问题?
  • 有哪些免费提供的等宽 Truetype 字体支持 DEC 特殊字符和/或代码页 437?
  • 一旦你确定了那些字形,你如何测试一个 TTF?
  • 您如何在 UILabel 或类似文件中显示这些字形?

(我不想使用任何可用的图形图块集,我不喜欢它们。我知道至少有两个免费的 Nethacks 可用,但没有一个具有我想要的简单键盘界面,我发现弹出一个窗口因为一切都非常缓慢和令人沮丧。我知道这不是一个容易的项目。而且我可能想有一天去 Angband。)

4

1 回答 1

3

CP437 中的大多数(全部?)字形在 Unicode 标准中都有相应的代码点,详见 Wikipedia article

例如,要显示俱乐部,您可以执行以下操作。它适用于默认UILabel字体:

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