在mud中进行画框操作

用方框对字体进行修饰

利用ANSI码对光标进行操作,对显示的字形用方框显示出来,如下图所示:

file

ps:本人计算机语言半吊子一个,如果有不妥之处请多多包涵与指教^^

代码部分

头文件display.h

/***********************************************************
FileName:display.h
FileFunc:控制屏幕显示信息和光标的状态头文件
Version:V0.1
Author :
Date  :
Descp :实现屏幕和光标的控制
************************************************************/
#ifndef __DISPLAY_H__
#define __DISPLAY_H__

#define MAX_DISPLAY_ITEM    25 //25rows
#define MAX_DISPLAY_WIDTH   80 //80columns

void Display_Message(int x,int y,string str);
void Draw_Box(int row,int col,int len,int wid);
void Move_Cursor(int x,int y);
void Display_Cursor(void);
void Hide_Cursor(void);
void Clear_Screen(void);

#endif /*__DISPLAY_H__*/

实现文件display.c

/***********************************************************
    FileName:display.c
    FileFunc:控制屏幕显示信息和光标的实现文件
    Version:V0.1
    Author :
    Date  :
    Descp :实现屏幕和光标的控制
************************************************************/
#include <ansi.h>
#include <display.h>

//x:从1***行***开始计算 y:从1***列***开始计算
//从x行y列开始显示信息str
void Display_Message(int x,int y,string str)
{
    //sprintf("\033[%d;%dH%s",x,y,str);
    printf("\033[%d;%dH%s",x,y,str);
}

//定义边框的符号,在fluffos的testsuite文件夹内的unicode相关的文件里有丰富的符号
#define TOPLEFT   "┌"       //左上角
#define TOPRIGHT    "┐"     //右上角
#define BOTLEFT      "└"    //左下角
#define BOTRIGHT    "┘"     //右下角   
#define VERLINE     "│"     
#define HORLINE     "─"
// 从row行col列开始画wid宽len长的边框
//length len width wid rangtangle
void Draw_Box(int row,int col,int len,int wid)
{
    string strTop = TOPLEFT;
    string strBot = BOTLEFT;
    int end;

    for(int i=1;i<wid-1;i++)
    {
        strTop += HORLINE;//top boxline
        strBot += HORLINE;//bottom boxline
    }
    strTop += TOPRIGHT +"\0";
    strBot += BOTRIGHT +"\0";

    end = col + wid -1;
    Display_Message(row,col,strTop);//画上边
    for(int i=1;i<len;i++)
    {
        Display_Message(row+i,col,VERLINE);//画竖左边
        Display_Message(row+i,end,VERLINE+"\0");//画竖右边
    }
    Display_Message(row+len-1,col,strBot);//画下边
}

//移动光标至x行y列

void Move_Cursor(int x,int y)
{
    printf("\033[%d;%dH",x,y);
}
//显示光标
void Display_Cursor()
{
    write("\033[?25h");
}
//清屏
void Clear_Screen()
{
    write(CLR);
}
//隐藏光标
void Hidden_Cursor()
{
    write("\0338m");
}
void Reset()
{

}
//此处是测试
int main(object ob,string arg)
{
    switch(arg)
    {
        case "move_cursor":
        Move_Cursor(50,50);
        write("\n");
        write("here\n");
        break;
        case "display_cursor":
        Display_Cursor();
        write("\n");
        write("display_cursor success\n");
        case "display_message":
        write("\n");
        Display_Message(20,20,"hello world");
        break;
        case "Draw_Box":
        Draw_Box(19,19,3,strlen("hello world")+2);
        break;
        case "cls":
        Clear_Screen();
        break;
        case "reset":
        Move_Cursor(0,0);
        break;
        default:
        write("please choose right parameters!!");
        return 0;
    }
    return 1;
}

需要注意的

  • Draw_Box的起始点应该是 字符串的显示起始点(x,y)(x-n,y-m)(边框离起始点的距离)
  • 只是突然的想法写出来的,第一次发贴,可能有不足之处,见谅
京ICP备13031296号-4