捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
Q$@r'x{!YO:Ew\p C,YxtQ}
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里*axG U{ n6E-k@3y,i
5ZM&aD~e/{Md{
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5@-x We/r*u_   子函数及演示程序:
it.O"}:_.X`
Syr?x2[0~Zm)k K   #include<stdio.h>:g H1[%d?CYU'sYd
  #include<dos.h>WK:ME!Y"U,C
  #include<conio.h>
+G'm1t.u9vd *aP$vY$s.Kj d1Y
  void goto_xy(int x,int y);+dJ1~M3Lq(q I7j_
  void dcls(int x1,int x2,int y1,int y2);:sn%wm"B
  void bcls(int x1,int x2,int y1,int y2);]7P,Z_F6Wu-}E
  void kcls(int x1,int x2,int y1,int y2);%p gTD*Z2{*PGY
  void recls(int x1,int x2,int y1,int y2);
kw,S4S*Nl8QO   void zcls(int x1,int x2,int y1,int y2);
#qQpTv   void puta(void);
}6HC`3bd%L8o)a`
"OEz(y%[5N |0@ J0~u:v8O/] k?
  /*--------------演示程序---------------------*/
FZ l?!{0U   main() a`Y2nV:p3HD9G
  {5g*{1B;J&S K
  puta();dU-pD my G
  getch();~.nk)l2|
  dcls(0,4,0,79);
-@a{J6D!lX!G:hC   getch();
Y5Z3r@%C"}   puta();.Tuz.R,[9r)Jh^ |
  getch();
(T)F_ kE^   bcls(0,25,0,79);E6KY3Yx3{8fN
  getch();
lE`r6q%v   puta();IQ-? N,rc Z P Z
  getch();5VK`(C iKy P
  zcls(0,25,0,79);
P y0JS{   getch(); E ~1]gMd5nb
  }
T/? UH sL U1R   /*********center clear screen(中心清屏)***********/3U4Z&s;t~qXn4jh
  void zcls(int x1,int x2,int y1,int y2)
z&F R1f|   {
{wnb5f1U(w/e,}-@I   int x00,y00,x0,y0,i,d;
'|,|3QM&a0h   if((y2-y1)>(x2-x1)){
`YD*dDZy   d=(x2-x1)/2;vsb5T)~lU({
  x0=(x1+x2)/2;x-Wvg f$U2c6p o
  y0=y1+d;
Rs!VU%z(XU   y00=y2-d;PH-]lKMlT:w-e
  for(i=0;i<(d+1);i++)
.b2n j}$R]W   recls((x0-i),(x00+i),(y0-i),(y00+i));
4J&D9r ?,BJ0b   delay(10);E&K5^tq|p
  }
0Dg:XQ&AM"Ml   else{Fiw)[+{r_C
  d=(y2-y1)/2;
$X*V9y L'\+p*q9U   y0=(y1+y2)/2;
d!Q \h ps Vx   x0=x1+d; l)p:l4x1f nu
  x00=x2-d;*_&W Pg yy S
  for(i=0;i<d+1;i++)
3i.F[ELcwn@v   recls(x0-i,x00+i,y0-i,y00+i);
&we&@j E#E!W   delay(10);
wa6etR   }
-{?-f8E ]?*o}X   }
J!a.Q'IKOa$EC{
D.?q9_x \   /************* clear rectangle side(矩形边清屏)***********************/ES$E-Bve(Tg'\8Y0F

l}K[ U)z&G   void recls(int x1,int x2,int y1,int y2)Bz3\? z6E k
  {
4B2DRk6X:M5Q   int i,j;v['\5{ n;?
  for(i=y1;i<y2;i++){
3`fk5ys"ai     goto_xy(x1,i);
F6c D"lLONv;B   putchar(' ');5N*q;Mac
  goto_xy(x2,i);[3g8wj%[7GU
  putchar(' ');
9zE;H4L'X/W   delay(10); C uAe wd
  }
]-?Dp'a   for(j=x1;j<x2;j++){d&q'F }$t8I)J$LH
  goto_xy(i,y1);
-YUF G0F kd&g;]   putchar(' ');
6zt @V{'z   goto_xy(j,y2); nx _'J5^ L{n'~,n
  putchar(' ');
6vP9t@G+n   delay(10);o Z$d/MDx2K
  }
,` FTV&fQ;T   }
E,bU1Zo8g&?t   /******************open screen clear(开屏式清屏)*********************/
"[QMfQ q5co
o#M]%e&l!VVcw   void kcls(int x1,int x2,int y1,int y2)K]6Z7m&OR
  {Yb_ u;Y6l|M
  int t,s,i,j;gCMH6r%J
  t=s=(y1+y2)/2;
9d!K&zsVg9`   for(;t<=y2;t++,s--)4M&``J0lq\'~
  for(j=x1;j<x2;j++){
%A/o%sO}   goto_xy(j,t);
8^C?6b|.u+j   putchar(' ');
oCR/D)U*[e1fC   goto_xy(j,s);hR sAw6e"Py
  putchar(' ');FS[B o2Dj?yC1bM
  delay(10);
H1a j.L/V/RM6Dn   }
$uPp%~1Y{6|d y:Ho$Y   }
F(wY(}+yc3sM   /*****************close screen clear*****闭幕式清屏*******************/&s7}3ued
GRJg(T2sXrP g
  void bcls(int x1,int x2,int y1,int y2)6lA)?a:`!U'S a'P t
  {
)AG_2kq+gC}}t   int t,s,j;
$L{8T%c _+W7pM#E?   t=y1;?-r2iifRWTo
  s=y2;8U{)Nrxb:H0q p?
  for(t=y1;t<(y1+y2)/2;t++,s--)
^X@8Q/dH%TOD   for(j=x1;j<x2;j++){({(k9N;VW$fEv:X
  goto_xy(j,t);[z1O*q$zS;b
  putchar(' ');a o9b.fX5Pf\F5Z
  goto_xy(j,s);
W9Ik/e0Ed   putchar(' ');
a)S/R%S2v   delay(10);5VU:I!KL~ [c
  }
"? {`;D9Z o"Iu   }:b fO1]g f T
  /******************bottom screen clear(自下清屏)********************/5pF| p o)[P9]7c RCA |#?2M

(A"hv.g Kl   void dcls(int x1,int x2,int y1,int y2)&ut,~x'_;t,J
  {
pqZ C6m3j0O$u   int t,s,j,i; L-Sz h%XW|A4|
  t=s=(y1+y2)/2;d_l'bf/vF8S%F
  for(j=x2;j>x1;j--)
dA(Z;qC c8vm|@   for(i=y1;i<y2;i++){"|*N(Y4aA%}nG"`r3b
  goto_xy(j,i);}8@2Ps S-e
  putchar(' ');
BV:dnWYr+F   delay(10);
q%C-Rm^k   }"nw5WVEZ
  }j:F+Ix#A
  /******************设置光标子函数******************/
+G3P l m Yt
}~*Jf p+ANV   void goto_xy(int x,int y)3l'OBn4@8T H
  {8F2k G:mYu*cOx
  union REGS r;,Oz2Q#E3@b:_
  r.h.ah=2;-Q@{:}N.q
  r.h.dl=y;KT A[.r { E
  r.h.dh=x;`"T9eO3vks$~'X
  r.h.bh=0; N0Y4Jb;_u'N9V
  int86(0x10,&r,&r);J4l/|e \)\ qO![-j
  }0k8c0KI$G fb7]
O6KOg5~
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/l8Z5Y-eG SN4c4hB

0t|#O(@1VkC   void puta(void)W e"SX5c4EC%f"D
  {
vKy+e;wc6X] |   int i,j;
*g&dN9P ?"l*x,~*a   for(i=0;i<24;i++){
p? J#Ht7}&n+}:z   for(j=0;j<79;j++){~*nNf{Px\&k.Q
  goto_xy(i,j);5Z/Ng'S Rv_}
  printf("a");
"U7LsSfK   }@'^UC@U
  }0o1q1X8M#dy/W
  }

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


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