diameter 发表于 2012-1-27 20:24:23

[Add-in][Lib]dOutput 模拟控制台

本帖最后由 diameter 于 2012-1-27 20:34 编辑

你是否熟悉了在PC上编写CUI的C语言程序呢?你是否对printf函数恋恋不舍呢?昨天我试了wotof1996的iHacker,发现命令行界面实在是有点蛋疼...我想起了当年还在用RGSS写游戏脚本时写的Console,于是就付诸实践,把其移植到了9860上。
我使用了一个简单的链表,实现了伪标准输出(输出至屏幕终端),没什么新意,主要是实现了输出自动换行(此行不够了跳到下一行)和滚屏。

输入有两个函数,一个通过一个编辑框输入。函数原型
int dGetLineBox (char * s,int max,int width,int x,int y);
用户可以指定输入最大字符长度、输入框字符数(宽度)和其位置

另一个输入函数依赖伪标准输出dStdOut
int dGetLine (int max,char * s);
它会自动在dStdOut光标最后位置进行输入,输入内容不能换行,但是可以滚动(当然,输入内容不会被加入dStdOut,需要用户手动加入)

输出建议只使用dPrintf,与printf的使用方法完全一样
看下面代码,就实现了一个简单的consoleint dConsole ()
{
    char buf;

    *buf = '\0';

    dPrintf ("Welcome to Console\n");

    while (1)
    {
      dPrintf("\nC:\\>");
      dStreamRedrawScreen (dStdOut);// in fact , you may also use dStdOutRefresh
      dGetLine(128,buf);
      dPrintf(buf);
      buf = '\0';
    }
}图:

至于清除屏幕,使用dStream中的函数dStreamDestory把dStdOut内容清空即可

注意!若想使用dStdOut,光把源文件添加进你的工程可不够,一定要在AddIn_Main里面初始化dStdOut(调用dStandardOutputInitialize函数即可)
另外想要将dStdOut的内容显示到屏幕,需调用dStdOutRefresh函数

zhengran14 发表于 2012-1-27 20:28:13

顶一个,小饕又出新作了

NAT 发表于 2012-1-27 21:16:56

不错

wtof1996 发表于 2012-1-29 16:43:30

我那个命令行写的非常复杂的说,学习一下。
现在在ns的lua方面,ihacker推迟吧

geotri 发表于 2013-1-27 21:34:54

不能输入加减乘除符号,也不能输入小数点。请问在程序中,如果要输入一个float,用什么函数?进一步如果要输入的是整数或字母呢?

slymitec 发表于 2014-12-15 18:14:45

顶一下………………

slymitec 发表于 2014-12-15 18:14:59

再顶………………
页: [1]
查看完整版本: [Add-in][Lib]dOutput 模拟控制台