捌玖网络工作室's Archiver

zw2004 发表于 2008-1-21 17:14

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏, Id{b8E3g9{;yKvo(H
(z]e;j3G.Q
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里)by ck3m
!f~ tOq
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ] lj%S`}
  子函数及演示程序:U Z L8Q7OUm7C
(W!m2zHl
  #include<stdio.h>2R)DA6B:i
  #include<dos.h>*W S%~uYdizL
  #include<conio.h>5]^&Yk B8w+A8J
-I\8G'Z3EE+Rv i7xI[h
  void goto_xy(int x,int y);/yx}&tP'GX
  void dcls(int x1,int x2,int y1,int y2);
5sb'x#Yu@f)xd-W S   void bcls(int x1,int x2,int y1,int y2);
1|/r3nF f"Rgp   void kcls(int x1,int x2,int y1,int y2);
JcCt"PU\}c   void recls(int x1,int x2,int y1,int y2);
J1x } z:QOUM%B$B   void zcls(int x1,int x2,int y1,int y2);6L g7yiz;i({
  void puta(void);
"p+kYMVpGm
T+O-n:r1Jg A3i`Y LBu?5e ^
  /*--------------演示程序---------------------*/
G]4gO%E*tt   main()
9RZ!pY0m7A   {6D%@0l]._khC
  puta();$x$Y0D.D)\g1sx
  getch();%~8g`5m \#g*KM
  dcls(0,4,0,79);"hxkl M#U.k7w*y
  getch();
3z,j yEXX-U2X   puta();+F6cHLD.Y/`
  getch();
x RO*^/X1B g   bcls(0,25,0,79); f2P$}%g_G6Zr)z7y
  getch();:L_k-Up |,~^
  puta();
;{3cb9N]!AC:?0|'o9D2w   getch();yy)W H7KW`^T*S
  zcls(0,25,0,79);s J8H&Xn}
  getch();q h|!Z~k:qi
  }h6X`3Q*^r8Z$F#l
  /*********center clear screen(中心清屏)***********/%n!ZPCX[b g
  void zcls(int x1,int x2,int y1,int y2)
%Ir d7I&w   {
6P0DAG&~B   int x00,y00,x0,y0,i,d;Xo,S`[`
  if((y2-y1)>(x2-x1)){
:d;rm2JQAn8@   d=(x2-x1)/2;K2rO z,o0C!m
  x0=(x1+x2)/2;
bo.b(K@U!m6q   y0=y1+d;
-{+` Gq9l5i6u S   y00=y2-d;
f1}L*U,Q7?(v.S5Q_   for(i=0;i<(d+1);i++)k8x$vA*b3N7ZEs
  recls((x0-i),(x00+i),(y0-i),(y00+i));
?:~M|:n   delay(10);
K!\Y_y*Lv-L^1w   }
w/YpY ^j JK   else{A/t5X&{ m l,n-Bc$`1E
  d=(y2-y1)/2;9Eu&^%w'BYt[^ u
  y0=(y1+y2)/2;
~;@k y.GP`5U-f.E   x0=x1+d;
ZkG(K!t0W   x00=x2-d;
~$H7JNj8|5t/L   for(i=0;i<d+1;i++)
:`q%hm#A!\;Q%W LZ   recls(x0-i,x00+i,y0-i,y00+i);
0IkK'~!vog `F6G:gvM   delay(10);&GkA-P/A3K,Su
  }
r_)f mP   },T'@+t aI!Z4dH

/`B `Vvau[6I&y   /************* clear rectangle side(矩形边清屏)***********************/
q sz3UwQ %B/L(C/FF^:iuj D,x
  void recls(int x1,int x2,int y1,int y2)
.y&x8_b2pn.]#X   {\MP8PZ#r
  int i,j;
Qwm,D3D   for(i=y1;i<y2;i++){ siS9D-Vc"O!v;s:XhH
    goto_xy(x1,i);@`"`Wt"OC$v
  putchar(' ');
S*QP7Mg7n   goto_xy(x2,i);
ea"^L L   putchar(' ');U/QH[&zj9o3C/]D0I?
  delay(10);
8z@4v`o   }*f+c6}4F"@O;us
  for(j=x1;j<x2;j++){
C u7S eJ#[!co`3G   goto_xy(i,y1);
z0i N h.h!raXQ   putchar(' ');
[.eFW$a r;Su%i   goto_xy(j,y2);
w3sj-bDo4`U   putchar(' ');
"['\.s"JA;g   delay(10);
vi]QGqKGh   }
%tOfD8Q+_   }L)} ~$Mo.[/E/g
  /******************open screen clear(开屏式清屏)*********************/4X7uf W,\
1_h7t:X^ e*}S
  void kcls(int x1,int x2,int y1,int y2)+GII1jfP CSn8r
  {
,d | AcLZ#lts   int t,s,i,j;
?6p+i5{~   t=s=(y1+y2)/2;PTv5}F6A1Q
  for(;t<=y2;t++,s--)vP ~iSi
  for(j=x1;j<x2;j++){N O0z4F3]F%xK
  goto_xy(j,t);
MYT!Cn3wnf;E   putchar(' ');
$I-\+r;]h   goto_xy(j,s);
jQ5RH!rp*p+G   putchar(' ');
/b E-Q$d3U&G"yE   delay(10);
b D't#nh   }Kb Kj%T
  }
a i'~+E xL4{3Z1o:L.U@'v   /*****************close screen clear*****闭幕式清屏*******************/}q3\A5_!es M%]-P#O

1RSW|,i8q   void bcls(int x1,int x2,int y1,int y2)
k~M |(Q"b,E};T   {dV6`kIr
  int t,s,j;
'rKJJe/cM   t=y1;6|1d0f/n+T FhU7@D
  s=y2;
7~(Jsj.x   for(t=y1;t<(y1+y2)/2;t++,s--)
,B'`]3?;s"gz9g   for(j=x1;j<x2;j++){
/d9^Z-fA}&G   goto_xy(j,t);N?/b(F(j6N"_S L
  putchar(' ');B,n Zv)T2i(n?{
  goto_xy(j,s);
6SxKi9nc@1~9z   putchar(' ');
H ~IJ3st8rr#E   delay(10);+]~)@ w8F/D
  }
HS/u GN4NPq7u7^J   }
&UC&ir+k   /******************bottom screen clear(自下清屏)********************/
gA"e)t*iMx A xBb3z4W#Z2ft
  void dcls(int x1,int x2,int y1,int y2)
.t9G3@e~O3[   {
BBds-[cI"m a }7w   int t,s,j,i;
ixS~9QD   t=s=(y1+y2)/2;
)sDR(`:n8A+iJ2[@^   for(j=x2;j>x1;j--)
[mC ` Z\c   for(i=y1;i<y2;i++){
@{$g#]}:h}AcQ h   goto_xy(j,i);&Cv5J$udX
  putchar(' ');
NM)@n5k u|#F   delay(10);z!l,c:zye8lO
  }
^${({bsj ju;[   }
U5gl%cDG![y   /******************设置光标子函数******************/ y|A3vj1neW2{?

D8};ls/g1Zq,a   void goto_xy(int x,int y)oQ$Un t8X1fX(Y
  {0o vQv'b u
  union REGS r;
breq'f ZO/l7U   r.h.ah=2;
X+T9qU}ESk5T   r.h.dl=y;)j+Z*VxZH;e0K9D
  r.h.dh=x;Ec Z GD$y
  r.h.bh=0;.`.L^5Q8hYf3@ H
  int86(0x10,&r,&r);
R;x(Z-Kr%a   }
!m8VDO3ui0q.b
RP[|4?1T^   /**********************在屏幕上打出一连串的a字母用于演示程序******************/^WF*e6ZO!{%ZbS

`dPr sED;MVP   void puta(void)
/Mh)WtkH,? X{   {
df\:B)S,~/`ZpT   int i,j;
&yS-X6^T^/N   for(i=0;i<24;i++){
BI8F!Mk`Q   for(j=0;j<79;j++){*b [D*FHS8cr
  goto_xy(i,j);
2e4uBM;b F1{#tN   printf("a");
9r dWfF;K5[   }
c:q _#@!k'y"A*@   }^+o#YBT6C^,E+VQ
  }

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.