中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 用c语言实现艺术清屏[转帖] 上一主题 | 下一主题
ko20010214
版主




积分 7294
发帖 1628
注册 2002-10-16
状态 离线
『楼 主』:  用c语言实现艺术清屏[转帖]

用c语言实现艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo
C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
子函数及演示程序:
#include
#include
#include

void goto_xy(int x,int y);
void dcls(int x1,int x2,int y1,int y2);
void bcls(int x1,int x2,int y1,int y2);
void kcls(int x1,int x2,int y1,int y2);
void recls(int x1,int x2,int y1,int y2);
void zcls(int x1,int x2,int y1,int y2);
void puta(void);

/*--------------演示程序---------------------*/
main()
{
    puta();
    getch();
    dcls(0,4,0,79);
    getch();
    puta();
    getch();
    bcls(0,25,0,79);
    getch();
    puta();
    getch();
    zcls(0,25,0,79);
    getch();
}
/*********center clear screen(中心清屏)***********/
void zcls(int x1,int x2,int y1,int y2)
{
    int x00,y00,x0,y0,i,d;
    if((y2-y1)>(x2-x1)){
        d=(x2-x1)/2;
        x0=(x1+x2)/2;
        y0=y1+d;
        y00=y2-d;
        for(i=0;i<(d+1);i++)
            recls((x0-i),(x00+i),(y0-i),(y00+i));
        delay(10);
    }
    else{
        d=(y2-y1)/2;
        y0=(y1+y2)/2;
        x0=x1+d;
        x00=x2-d;
        for(i=0;i<d+1;i++)
            recls(x0-i,x00+i,y0-i,y00+i);
        delay(10);
    }
}

/************* clear rectangle side(矩形边清屏)***********************/

void recls(int x1,int x2,int y1,int y2)
{
    int i,j;
    for(i=y1;i<y2;i++){
        goto_xy(x1,i);
        putchar(' ');
        goto_xy(x2,i);
        putchar(' ');
        delay(10);
    }
    for(j=x1;j<x2;j++){
        goto_xy(i,y1);
        putchar(' ');
        goto_xy(j,y2);
        putchar(' ');
        delay(10);
    }
}
/******************open screen clear(开屏式清屏)*********************/

void kcls(int x1,int x2,int y1,int y2)
{
    int t,s,i,j;
    t=s=(y1+y2)/2;
    for(;t<=y2;t++,s--)
    for(j=x1;j<x2;j++){
        goto_xy(j,t);
        putchar(' ');
        goto_xy(j,s);
        putchar(' ');
        delay(10);
    }
}
/*****************close screen clear*****闭幕式清屏*******************/

void bcls(int x1,int x2,int y1,int y2)
{
    int t,s,j;
    t=y1;
    s=y2;
    for(t=y1;t<(y1+y2)/2;t++,s--)
    for(j=x1;jx1;j--)
    for(i=y1;i<y2;i++){
        goto_xy(j,i);
        putchar(' ');
        delay(10);
    }
}
/******************设置光标子函数******************/

void goto_xy(int x,int y)
{
    union REGS r;
    r.h.ah=2;
    r.h.dl=y;
    r.h.dh=x;
    r.h.bh=0;
    int86(0x10,&r,&r);
}

/**********************在屏幕上打出一连串的a字母用于演示程序******************/

void puta(void)
{
    int i,j;
    for(i=0;i<24;i++){
        for(j=0;j<79;j++){
            goto_xy(i,j);
            printf("a";
        }
    }
}

其中主函数调用只是个演示程序,具体应用时稍加修改即可
辽宁省铁岭师范高等专科学校微机室版权所有&copy;2002






ko20010214
=================================
大功告成,打个Kiss!
ko20010214@MSN.com
神州优雅Q300C
Intel CeleronM 370处理器 | 256MbDDR内存
40G硬盘 | USB2.0 | IEEE 1394
13.3 ' WXGA 宽屏(16:10) | COMBO光驱
10/100M网卡 | 四合一读卡器
2003-6-22 00:00
查看资料  发送邮件  发短消息 网志  OICQ (16959102)  编辑帖子  回复  引用回复
ricepot100
初级用户




积分 294
发帖 49
注册 2003-5-16
状态 离线
『第 2 楼』:  

请问dos系统是什么语言编写的:汇编?c?

2003-6-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yiyesong
元老会员




积分 1987
发帖 632
注册 2002-10-27
状态 离线
『第 3 楼』:  

汇编



[flash=550,93]http://dos.e-stone.cn/dosbbs
uploadImages/200311161145850422.swf[/flash]
2003-6-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
LanE
银牌会员




积分 1832
发帖 647
注册 2002-11-8
状态 离线
『第 4 楼』:  

都是画空格来完成清屏的

2003-6-23 00:00
查看资料  发送邮件  发短消息 网志  OICQ (9367907)  编辑帖子  回复  引用回复
jhuang
初级用户




积分 124
发帖 3
注册 2003-6-15
来自 chongqing
状态 离线
『第 5 楼』:  

另类的清屏!!!
:)

2003-6-24 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hongying
初级用户




积分 112
发帖 4
注册 2003-6-26
状态 离线
『第 6 楼』:  

这不能算艺术清屏。你的算法太简单了。呵呵,说的直接,冒犯之处,还望原谅。

2003-6-26 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
LanE
银牌会员




积分 1832
发帖 647
注册 2002-11-8
状态 离线
『第 7 楼』:  

这个的确不是很好,那楼上的给一个比较好的算法吧:)

2003-6-27 00:00
查看资料  发送邮件  发短消息 网志  OICQ (9367907)  编辑帖子  回复  引用回复
阿瑞斯
初级用户




积分 176
发帖 25
注册 2003-7-3
状态 离线
『第 8 楼』:  

长篇论文!

2003-7-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (101907090)  编辑帖子  回复  引用回复
hit
初级用户

孤胆枪手


积分 688
发帖 148
注册 2002-10-26
来自 陕西
状态 离线
『第 9 楼』:  

说明一下算法




我:╭∩╮(︶︿︶)╭∩╮。靠!!!
2003-7-9 00:00
查看资料  发送邮件  发短消息 网志  OICQ (23296996)  编辑帖子  回复  引用回复
luler
初级用户




积分 111
发帖 5
注册 2003-7-19
状态 离线
『第 10 楼』:  

华而不实的东西.(请不要攻击俺)
没意思.


2003-7-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: