捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
P@&}T2M` Q k#J"sl&LxkY
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
@~$Rz2|xEz ~0LE6o&G2o$I8iW
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. )yK"dcP:yO,T3W
  子函数及演示程序:
z]:F`3ej$J&_
?2]*M?X   #include<stdio.h>
W'Bb @8X a4\G   #include<dos.h>
aX(c.P:I4g ?U+E   #include<conio.h>A![@*yU2Q8r;s%N2dN

;AB f)u] aYA2A/V   void goto_xy(int x,int y);
6|8P"|"^+m2tPd   void dcls(int x1,int x2,int y1,int y2);
NKyo @6v`0J   void bcls(int x1,int x2,int y1,int y2);9z7B UG8tQ
  void kcls(int x1,int x2,int y1,int y2);
m Iw d{   void recls(int x1,int x2,int y1,int y2);
c7P)VX%X0rf@   void zcls(int x1,int x2,int y1,int y2);_"O4dPO
  void puta(void);+IGb B%J

}&QN$oDE
}t:E`A S.m H!O   /*--------------演示程序---------------------*/"b0l ^~ F j
  main()
nK7j2K!ztc}   {
*W;FS4Q;C1N(?   puta();*l0U?7CLk H[6w6D!d!j
  getch();4G.Bv)Z3Q X'y}
  dcls(0,4,0,79);
2C$|{({6p dK$a   getch();
XKD*NFa   puta();:PoT*z7y'u-e
  getch();
]F1xEtJ9P   bcls(0,25,0,79);
;b+z|0Lq;ex:]   getch();-n"dc,_+G/_ T$[
  puta();-}|y(D&s._
  getch();
Yvr-u,B)a]5Q   zcls(0,25,0,79);op6U3sRN*i&E
  getch();
]Vqr7BM   }
!r v+z5?1B%O`"@qk D   /*********center clear screen(中心清屏)***********/
6F/o0OU:_5O oW|2x$V   void zcls(int x1,int x2,int y1,int y2)
C-mYb2bmm T Q#k   {'x%g@ p1U*iaz
  int x00,y00,x0,y0,i,d; w*Ok6W{6z
  if((y2-y1)>(x2-x1)){
/Vp6Y TF   d=(x2-x1)/2;
P)W3mBt5qpD8R$E   x0=(x1+x2)/2;
\_;[*N.L]   y0=y1+d;%f/C"pHj ZU&h
  y00=y2-d;zx0M1^)k+JWYP
  for(i=0;i<(d+1);i++).~"f.q7yb"KC4D:B
  recls((x0-i),(x00+i),(y0-i),(y00+i));7l OlP9{
  delay(10);
1W!u.@;rM}6w   }
7["p` n;}CcK   else{
4G1Kfz7@U0Z   d=(y2-y1)/2;D:k&V h'SuD5d~
  y0=(y1+y2)/2;;f)JT6[6QY @2K o(V
  x0=x1+d;
Ut9Nup1K]!M   x00=x2-d;7emCW&^m.i
  for(i=0;i<d+1;i++) h~+zX6v_d6]+v |d]
  recls(x0-i,x00+i,y0-i,y00+i);3\4P;u`jq
  delay(10);
\4~h#uk,` AO ]   }
\4q v)K!^m7K*\   }V|!rIU"j3G
+zs'O$u ~3^c
  /************* clear rectangle side(矩形边清屏)***********************/
(MI.IT^8{}'?Ou
f*l_o @8b,C9m   void recls(int x1,int x2,int y1,int y2)#V ?Z\_3o
  {
ZT/HtPOA o   int i,j;k q&^ts
  for(i=y1;i<y2;i++){L^.eV)}8pA(A
    goto_xy(x1,i);
#` J M%ng | t   putchar(' ');
+j0h%~` Pf8a[   goto_xy(x2,i);8iT6}jG;v
  putchar(' ');E\o.Kkn
  delay(10);Sn4T9WY(F ur
  }
o6P/epJ0WD5MB   for(j=x1;j<x2;j++){
ui5cYQ7S:o   goto_xy(i,y1);
']D`*a f2x   putchar(' ');
^3|(PtOb1Pho]T   goto_xy(j,y2);R9b\~0s \IJw
  putchar(' ');
6tGp(LDL   delay(10);KD DDp(x`
  }
b0l#tAb"m {^2D   }Y"nmS{1Z
  /******************open screen clear(开屏式清屏)*********************/
c;xZ g$Yx*z(^CZ b8B bZGNC2Ih WiB
  void kcls(int x1,int x2,int y1,int y2)
sYW0R6p   {
q/X$}L"}G9k   int t,s,i,j;
6AWs lbF   t=s=(y1+y2)/2;
ba4K:fg9d'sMN   for(;t<=y2;t++,s--)
*~N-B6m!k S'W)gR*Qe   for(j=x1;j<x2;j++){
SlBQ1u]A:N   goto_xy(j,t);
t0Xt-yP@   putchar(' '); j#_ S0QO A0h"I
  goto_xy(j,s);
4|t#p:p} pb S/p7y   putchar(' ');
%C(z0lT/_ Fm6Y   delay(10);
m@"A aL*kG-Im8u   }
0c&QTs(wJSl   }3b/@UFN
  /*****************close screen clear*****闭幕式清屏*******************/-i&[D Z&B6I
5lR#|B5^%V)f m6W
  void bcls(int x1,int x2,int y1,int y2)
8iC%fdv   {
J1S0S6K4U1gj,y   int t,s,j;;s_[ r(T*G.B"E4C:Y
  t=y1; {EC,R&J?Db;{l/_
  s=y2;6K7jEL-w
  for(t=y1;t<(y1+y2)/2;t++,s--) |Lcv4o
  for(j=x1;j<x2;j++){
qV ga1?n~   goto_xy(j,t);'SJ7} r E7?
  putchar(' ');/u0OZx7j0rr
  goto_xy(j,s);
o{ M P;x~-o{   putchar(' ');:lt4R'_3V
  delay(10);2yC(w'u h+i]/o;~
  }z0\7gP?"Z*o8K@V(b
  }(T5OD \&pi
  /******************bottom screen clear(自下清屏)********************/(hk*U_/Kt
5\6i0TA(X yn-oe4r-W,{
  void dcls(int x1,int x2,int y1,int y2)
r/sBvSG3fG*p   {'dd*h-Sq3UOes+\)a r @
  int t,s,j,i;
L9vS;F0],P   t=s=(y1+y2)/2;
O W P0|2{!_&?To   for(j=x2;j>x1;j--)Y2voa-Q0?3E J^
  for(i=y1;i<y2;i++){MM4m|`U4U I2U
  goto_xy(j,i);
y/O@pM l4?   putchar(' ');Uab~.F
  delay(10);
#Gsl3Ya%rIk a   }a(x0z0FhX,`9WB
  }
t QC w A   /******************设置光标子函数******************/
X^4\+IT
Q]F$H;Ac(b   void goto_xy(int x,int y)
5CU4fJ^)e \;C}   {j5YV/\7E9f
  union REGS r;
M{&QHD)H(r0~   r.h.ah=2;3L1Z8m9TZt1aA
  r.h.dl=y;
)s!S#KST H8nMI   r.h.dh=x;
%H1F1SE2X   r.h.bh=0;
#I%]4aYC],F   int86(0x10,&r,&r);
,wd_#u{6I3o/~r   }\,BC!e)qs2o

Q^9N+i7z%Kh3jg   /**********************在屏幕上打出一连串的a字母用于演示程序******************/8FG | Ft{Y ? ^+m+KG

XlmQ? fvL   void puta(void)
Nfe+`U:^   {!j'@ {%gc I
  int i,j; m,P y c WPZ
  for(i=0;i<24;i++){,}X8}&\`#A?S A
  for(j=0;j<79;j++){F3j*yj gk;p0]
  goto_xy(i,j);phU{_6q
  printf("a");
,yGh'c RqF   }
;K/Bk { N   }7Z7y(\zj,K
  }

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


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