我已经阅读了Peter Van Der Linden在Expert C Programming中对字形的实现。他陈述了这种绘制字形图案的方法。这个问题严格限于C编程的上下文。
static unsigned short stopwatch[] = {
0x07C6,
0x1FF7,
0x383B,
0x600C,
0x600C,
0xC006,
0xC006,
0xDF06,
0xC106,
0xC106,
0x610C,
0x610C,
0x3838,
0x1FF0,
0x07C0,
0x0000
};
然后定义
#define X )*2+1
#define _ )*2
#define s ((((((((((((((((0
用于绘制16位宽的字形。
然后将上面的数组转换为秒表的字形模式。
我们如何在不使用图形的情况下在屏幕上绘制这些字形?是否有任何方法可以绘制其他对象的字形图案,例如 map 轮廓,人脸,而无需绘制每个像素,也无需使用常规C图形?
是否遵循任何算法?
最佳答案
仅缺少几行代码:
int main()
{
int i,j;
for ( i=0;stopwatch[i];i++ )
{
for ( j=1<<16;j;j>>=1 ) printf("%c",stopwatch[i]&j?'o':' ');
printf("\n");
}
}
瞧,秒表:
ooooo oo
ooooooooo ooo
ooo ooo oo
oo oo
oo oo
oo oo
oo oo
oo ooooo oo
oo o oo
oo o oo
oo o oo
oo o oo
ooo ooo
ooooooooo
ooooo
define
语句是到达该列表中魔术值的简写:$ gcc -E -x c -
#define X )*2+1
#define _ )*2
#define s ((((((((((((((((0
s _ _ _ _ _ _ X X X X _ _ _ _ _ _
// will be preprocessed to:
^D
((((((((((((((((0 )*2 )*2 )*2 )*2 )*2 )*2 )*2+1 )*2+1 )*2+1 )*2+1 )*2 )*2 )*2 )*2 )*2 )*2
最后一个blurb是可导致您在该“秒表”列表中使用的某个值(在这种情况下为960或0x03c0)的表达式。
关于c - 在C中实现字形模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3365577/