捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,S$x Dz'iq%D7`

c-bUi*tL E   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+Ef.s-b U9n)F
$WH(Cj;D^)n W&G
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. PGe}D0G s;G'mA
  子函数及演示程序:cu$E&H3O r
;N9F$B5Hz-Y O-_-w\
  #include<stdio.h>
I {Ts`4u3g7N   #include<dos.h>
g@0E;sl$ruw   #include<conio.h>
8m#~-j;K)|aK
s]1|bw!e!k4f   void goto_xy(int x,int y);
`a^6_!K/{Dl   void dcls(int x1,int x2,int y1,int y2); M4xR2K{ C.e L?%e
  void bcls(int x1,int x2,int y1,int y2);8Q'D&F#F b6m} \
  void kcls(int x1,int x2,int y1,int y2);5@'EV5C7}
  void recls(int x1,int x2,int y1,int y2);e S-r?'P
  void zcls(int x1,int x2,int y1,int y2);"dW3`p,g
  void puta(void);
Yk0?T E5T E%v#}(H z/t6M4@"X2wA4^A
e:`l;HJJ/D o t
  /*--------------演示程序---------------------*/
NmUlcB)l   main()D@Ld5tt|R3n
  {+CST%l9b,r3F`/F-X
  puta();]xi6a1k
  getch();
sk)_[d$Lc0Y0f|   dcls(0,4,0,79);
_4k e H x8P8eI   getch();
,}O!cpZ(e/B`C   puta();
%iru!Tw*n l   getch();
!Y H[.jG   bcls(0,25,0,79);
@ ZH^T}2b'O(e}   getch();6rLU!vy!u{D
  puta();o&Mjg TO-o
  getch();
JC4w"qmf9f   zcls(0,25,0,79);%\i8b/F/cNlBXw:v
  getch();
9y V?[7^g9l   }9b t/r(T v!d
  /*********center clear screen(中心清屏)***********/
*H0bnijT   void zcls(int x1,int x2,int y1,int y2)$aNbIWgg
  {
bt5Zf'a Jm;q   int x00,y00,x0,y0,i,d;
F7M0v!N+Ox   if((y2-y1)>(x2-x1)){
O'H o0_}(H   d=(x2-x1)/2;
4DC6X T7{tC^   x0=(x1+x2)/2;zKL gG"S
  y0=y1+d;0e~5JlRaX }
  y00=y2-d;3Q\Ko!QG}
  for(i=0;i<(d+1);i++)
4{'d;{3y8hV{y   recls((x0-i),(x00+i),(y0-i),(y00+i));hv*fu'd'{
  delay(10);HmC uG xpu V4c
  }
:p3J1J Oe5Qj} bI   else{-zh"[$T$IG
  d=(y2-y1)/2;+Vi%Ag/g(A[
  y0=(y1+y2)/2; ^)]:lvbH
  x0=x1+d; N Q,n?Y`re?3q?
  x00=x2-d;0z2@})S)b5X5J.e
  for(i=0;i<d+1;i++) u0u+KF3U&TR5|9[*]o
  recls(x0-i,x00+i,y0-i,y00+i);@;\4v/f7R(O"`(n:~
  delay(10);
7j.OYkMz5WK8P   }
f[ }3Rzj#`EP!]}   }
5~u9d9B*s *w+gj } CGN8Y
  /************* clear rectangle side(矩形边清屏)***********************/
^Ene JT_u{F] T
^Ib3@a,N/gX+uM   void recls(int x1,int x2,int y1,int y2)
Vw1l \2E!GU {E   {
/t/~c-J n!kL"|P   int i,j;4^Wd/dz#z
  for(i=y1;i<y2;i++){/|\;rVf P
    goto_xy(x1,i);
/Ir'U7gpe8E6g(D   putchar(' ');
\8M b*F7Q8e   goto_xy(x2,i);
WV$Y#C0_7Y8SF   putchar(' ');
QM STi&f,r |9E8C   delay(10); V{!P,fR@2b%m_c
  }
!d$Ym(EH]%]U   for(j=x1;j<x2;j++){:SO0Q4nz Q7a
  goto_xy(i,y1);
M5E m*bu5G7`f-`   putchar(' ');Gw%M*Q sd9PA6c
  goto_xy(j,y2);#kkC;n/No/Yi}
  putchar(' ');
KC:C-w2Z'Z{3B"iY   delay(10);,@%X1rQ!bg,uEbMX
  }4Q(PW3u"R h8b!VR B
  }z$T\NKA |;s'tC+X&P
  /******************open screen clear(开屏式清屏)*********************/
1jL4wUy `Y A5t(E5z1I%M7o9M;d
  void kcls(int x1,int x2,int y1,int y2) Gm"F{6EeY
  {Cc0U)P:}%g4v&lyp
  int t,s,i,j;
TO!~ays__   t=s=(y1+y2)/2;g+O%p)`7fQ/n
  for(;t<=y2;t++,s--))G g%u0S9Z"j o
  for(j=x1;j<x2;j++){}3p[ A Cv
  goto_xy(j,t);
fC5B|[Yq6VMA|   putchar(' ');
^C-W-B-|;s)^   goto_xy(j,s);i rq$Ly
  putchar(' ');$i+wZ,u~#ZK
  delay(10);+^{Y-S]$[
  }\7nI4ng3j.g0M}
  }
h l!_Q s:{IIr'M   /*****************close screen clear*****闭幕式清屏*******************/Y0U?*zr~7VB

3tK p3\4u   void bcls(int x1,int x2,int y1,int y2)
F|5|c^ t)C   {
x%US4q M/I U   int t,s,j;
%vT^ C0xoC$e2yf2bD   t=y1;
g8y'QB~9L?   s=y2;:D ~8U]L-z?
  for(t=y1;t<(y1+y2)/2;t++,s--)Yw`-T7SZcf.X
  for(j=x1;j<x2;j++){8M0dfnWOvx$j_
  goto_xy(j,t);
e(k6fs^X9d@   putchar(' ');
QYD6u|g5USD x   goto_xy(j,s);
:@;i.K}k ]B3__~i\   putchar(' ');5O$z&wh0]oI
  delay(10);0J:crw g
  }
+{@&f#Vos   }
[m@i{F   /******************bottom screen clear(自下清屏)********************/]"P$j.\(v5z la

G+dz3n;X;M` Mb6O%~   void dcls(int x1,int x2,int y1,int y2)
bO!D pK*BW,J.J   {'WUK)x%Uw.Eg%^
  int t,s,j,i; lF5u0Eu"FG
  t=s=(y1+y2)/2;1a`p%p&L0A9M"G
  for(j=x2;j>x1;j--)
,c%x8Jo t5Cb Q   for(i=y1;i<y2;i++){
bAKD#["l2X#`:Wu   goto_xy(j,i);
!L)[X"O q+l   putchar(' ');
RDs$cq&@   delay(10);1mLm I$R
  }
,Q-uX-Bj+UL0p   }
]gZgJ@2J*H]   /******************设置光标子函数******************/%ictI A

?x3~%zz R'ko   void goto_xy(int x,int y)%] hmS#@a {
  {!J'v^bRDb
  union REGS r;
T c)hk5O6i.] O   r.h.ah=2;
@#l-e[Wy0{ T   r.h.dl=y;hE/Wad7m
  r.h.dh=x;:F9V8F9nX&O*C7f
  r.h.bh=0;{+[Q'W9s'nh
  int86(0x10,&r,&r);
Hl2b| DT   }|%u1|*f6C1CO}L VW
2\V#|B kDB{
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
g*vh!O)|:ll#?:X ~.r,T/@"KnvG
  void puta(void)
+{X+eX3aC5Q$m As   {
T2klP!^   int i,j; ]T&_N zKW
  for(i=0;i<24;i++){+OT+uV!k
  for(j=0;j<79;j++){3X JFeZ
  goto_xy(i,j);'XpyP)e9_i
  printf("a");
,I:X5H_7K2CnV   }
:z6[$L DZ,tX7S4J   }9@DuhmC
  }

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


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