65.9K
CodeProject 正在变化。 阅读更多。
Home

ASCII动画(仅供娱乐)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2002年5月21日

3分钟阅读

viewsIcon

88477

downloadIcon

1430

使用此 COM 对象在窗口中绘制和动画 ASCII 字符。

引言

Asciimation 是 ASCII 动画的缩写。 类似于简陋版的 DirectX 或 Window 的 GDI。 在这里,我向您展示一个小型的 COM 库,供您这些富有创造力的人士尝试这种新的艺术形式。

重点是什么?

没有任何重点,我只是为了好玩才做的。 我受到了 星球大战 Asciimation 的启发,并认为,我可以让那些想成为 ASCII 艺术家的人更容易一些。

IAsciiAPI 接口方法

Initialize(DWORD hwnd, [out, retval] VARIANT_BOOL* bInitialized);
SetBackColor(int R, int G, int B);
SetBackMode(int nMode);
SetForeColor(int R, int G, int B);
GetWidth([out, retval] int* width);
GetHeight([out, retval] int* height);
ClearScreen();
DrawString(BSTR bstrString, int x, int y);
Circle(int x, int y, int radius, int step, short nAsciiCode, 
    VARIANT_BOOL bFilled);
Arc(int x, int y, int radius, int degfrom, int degto, int step, 
    short nAsciiCode, VARIANT_BOOL bFilled);
Rectangle(int left, int top, int right, int bottom, short nAsciiCode, 
    VARIANT_BOOL bFilled);
CharBlit(BSTR bstrCharArray, int Width, int Height, int DestX, 
    int DestY, short nAsciiMask);

初始化

将要绘制 Asciimation 的窗口的 HWND 发送到此方法。 没有它,它就无法绘制任何东西。 我曾想过让 Asciimation 成为一个控件,但我认为将其制成更像 API 的形式会更好。

SetBackMode

设置 nBackMode 成员变量,该变量用于设置文本的背景模式(OPAQUETRANSPARENT)。

SetBackColor

设置 crBackColor 成员变量,该变量用于设置文本的背景颜色。

SetForeColor

设置 crForeColor 成员变量,该变量用于设置文本的颜色。

GetWidth

返回适合窗口宽度的字符数。

GetHeight

返回适合窗口高度的字符数。

ClearScreen

使用当前的背景模式和背景颜色在窗口的宽度和高度上绘制空格。

DrawString

在给定坐标的窗口上绘制一个字符数组。

使用 nAsciiCode 参数绘制一个字符圆,其中心位于 (x,y),半径为 radiusstep 参数将绘制一个断开的圆,仅每 step 度绘制一次字符。 要填充圆,请设置 bFilled = VARIANT_TRUE,否则设置为 VARIANT_FALSE

Arc

使用 nAsciiCode 参数绘制一个字符弧,其中心位于 (x,y),半径为 radius,从 degfrom 度到 degto 度。 step 参数将绘制一个断开的弧,仅每 step 度绘制一次字符。

矩形

使用 nAsciiCode 参数绘制一个字符矩形,其角位于 (left, top) - (right, bottom)。 要填充矩形,请设置 bFilled = VARIANT_TRUE,否则设置为 VARIANT_FALSE

CharBlit

bstrCharArray 字符数组绘制到窗口中的 (DestX, DestY) 位置。 所有字符都将显示在一个 Width X Height 矩形中,但 nAsciiMask 字符除外,该字符根本不会被绘制。

结论

如果您发现这段代码以任何方式有用,那就太棒了! 如果没有,那也没办法,但我希望您可以从中获得一些乐趣。

这是演示项目中的一些屏幕截图

如果您对改进或向 Asciimation 添加方法有任何想法,请随时给我发送电子邮件或在此处留言,或者主动修改代码。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.