我希望能够在我的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并且显示正常。
所以问题是:
(我不想使用任何可用的图形图块集,我不喜欢它们。我知道至少有两个Nethacks已经免费提供,但没有一个具有我想要的直接键盘接口,我发现弹出一个窗口,让一切都变得非常缓慢和令人沮丧。我知道这不是一个简单的项目。我可能有一天会想到Angband。)
答案 0 :(得分:3)
CP437中的大多数(全部?)字形在Unicode标准中都有相应的代码点,详见本维基百科article。
例如,要显示球杆,您可以执行以下操作。它适用于默认的UILabel
字体:
UniChar club = 0x2663;
NSString *clubString = [NSString stringWithCharacters:&club length:1];
[label setText:clubString];