捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,RkI3N,k AMM
&R5v"Lk/ew
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里sx*Z#G0j5Z'ki
~N bu4s`$Pc3f ?
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. "V2Z)NMY{|2h
  子函数及演示程序: hC.lU}0m
]`$D-eF9t#N(O/X3b
  #include<stdio.h>hL@1D%D;y@{v
  #include<dos.h>
(~]as!K*C^#D   #include<conio.h>ve'a$b]$e
Jg Yqj(f#K
  void goto_xy(int x,int y);
#|&I m2G6\n2c]2G0x   void dcls(int x1,int x2,int y1,int y2);A+t hF%N JSv
  void bcls(int x1,int x2,int y1,int y2);a1vz.{z7jT
  void kcls(int x1,int x2,int y1,int y2);D!j {%Q7^
  void recls(int x1,int x2,int y1,int y2);{?M"qSv b
  void zcls(int x1,int x2,int y1,int y2);8A*tm'w#D(^x
  void puta(void);
x1FI#G[rg
z5b NH_ {Jc-t;k(KA0I,q1I
  /*--------------演示程序---------------------*/
6UnT!W,q2@f   main()5bDe+J7JN!C
  {
"G(GYbE^   puta();T G,uO Bx
  getch();
uR:x5~Ww5Z(l-G   dcls(0,4,0,79);
_5FYU}^$e   getch();-J]4SM }#?K
  puta();
5`Q9V~1? R"pK]   getch();[%i-q!M#\ q@o)K:z3U
  bcls(0,25,0,79);
"v ravg0z8h(N m*e   getch();
\"`5c,_5VY)IJ {n8u   puta();
N"a${L m]#{   getch();JFj.n6B
  zcls(0,25,0,79);)bz iU6dQ3x
  getch();
~bC2y-yg z;F   }r*Zx+w(G
  /*********center clear screen(中心清屏)***********/sNprr8v"J*r%Nl
  void zcls(int x1,int x2,int y1,int y2)
KLT"gw:cK)BS   {
/T-z/TNm P7\!c   int x00,y00,x0,y0,i,d;
&p%S#e$@z*m%R   if((y2-y1)>(x2-x1)){
CL&Vs`+H?*EBO E   d=(x2-x1)/2;yo { II3|$}f
  x0=(x1+x2)/2;
Z{&mV6FV   y0=y1+d;@"m3mk9fsc9F+wb
  y00=y2-d;3{:d-gNt/H-g
  for(i=0;i<(d+1);i++)btcXy0KZH
  recls((x0-i),(x00+i),(y0-i),(y00+i));$EmNag'q1{
  delay(10); z/xW8OQ~U
  }
`:DXO!TT   else{
lz^7N(F]B   d=(y2-y1)/2;
!s0xw+A,NOV   y0=(y1+y2)/2;-EjjX2j2i
  x0=x1+d;
p KM1|8Y4v0Rk0d9e q.X   x00=x2-d;%ks"FM"_
  for(i=0;i<d+1;i++)
@ j|.Kzpa|3iC)C&g1F   recls(x0-i,x00+i,y0-i,y00+i);D%Y5\lS'cdKz
  delay(10);M&BH'Z^3t}N
  }
[L%p.Y$Q&Ea   }
$J RC.M'Go Obc f5h
  /************* clear rectangle side(矩形边清屏)***********************/0L cS Z)@'X
z,_&i1rtT'vlE
  void recls(int x1,int x2,int y1,int y2)4l(Q6\?%v X/ECpo#L'p
  {"pI[v2fCi}x
  int i,j;|^4f_o/g#i
  for(i=y1;i<y2;i++){ Sv8?tmK|a f&A-~
    goto_xy(x1,i);+\f1TLvIP
  putchar(' ');
;Tf%O ZKH$A   goto_xy(x2,i);j+T)PG0ay x
  putchar(' ');
q.^H;}`1g^   delay(10);r"x;I9l+P#|5G^;H3u[
  }0Q,lM V q/Jl L
  for(j=x1;j<x2;j++){
S"OmG!o4[   goto_xy(i,y1);
2D(~P\5wvl   putchar(' ');;MZ+XdZ6tIz
  goto_xy(j,y2);
l!pw6ng:tTpq   putchar(' ');3E-F&W)\.Xrd([&}+Z
  delay(10);%b)p"_%P(a:k9}?
  }
t1Z T6X f;JG4P   }:k1{ TS2s'\
  /******************open screen clear(开屏式清屏)*********************/w.Z1PC.\s7? {

#GL1bCqs   void kcls(int x1,int x2,int y1,int y2)-b:Q'je8a5b
  {oXK,q-o|X`
  int t,s,i,j;
Xn ?i;_   t=s=(y1+y2)/2;Kb+c_`!^(m2|:A8Z$LH
  for(;t<=y2;t++,s--)
/E*^[]Sna#`N+K   for(j=x1;j<x2;j++){^{N"c(z9I
  goto_xy(j,t);
lA/S ZEH*m!Y U   putchar(' ');
)g(\3R j]_"H#r M   goto_xy(j,s);
![ o(M/sI   putchar(' ');
"gW}/Q_Q   delay(10);(P c)k1f*G8`4]
  }o h`j2s!X
  }G#{J B;[$e${8L
  /*****************close screen clear*****闭幕式清屏*******************/
;xsmex~)yx ae/e$zu|*|
  void bcls(int x1,int x2,int y1,int y2)A/Q6iAKD his
  {
u CdidV1c/Yc_   int t,s,j; }G9r"[[ a
  t=y1; D7s5U~;p
  s=y2;
.^R5? u\m$V&^+a?i   for(t=y1;t<(y1+y2)/2;t++,s--)w9e J0y,Q"w6k*s&{:c
  for(j=x1;j<x2;j++){[{8g] |R K
  goto_xy(j,t);*P'QN{ ~ `$z
  putchar(' ');
)K@j8FD   goto_xy(j,s);
Y:` o'Ay"{8~;yY'ju   putchar(' ');9t#Iq S'}A\
  delay(10);7^7@f&wy(V Wk
  }l-l7|'^ h
  }&u(v&v&qW~I@6d?
  /******************bottom screen clear(自下清屏)********************/
`!o0z4f?6D b{5B
V0}*v X(Pvx   void dcls(int x1,int x2,int y1,int y2)(I6O#s9`1YJ}#`
  {L$c2aIQB
  int t,s,j,i;
@C[!J)TG   t=s=(y1+y2)/2;
j.G*f'Jv&bu\^!H#a   for(j=x2;j>x1;j--)[.u[I!ar]0|i
  for(i=y1;i<y2;i++){ |4hT k)K)XEm
  goto_xy(j,i);
T#z _Cq2s@+j~   putchar(' ');
`$y8\$D/Bs   delay(10);
k D.W-JT l-l   }
f+z5}%v;g+e   }&}f B pQ&G)~N4o!DO0N
  /******************设置光标子函数******************/
t1lB#At ?4~k4ZdQ8BB;L
  void goto_xy(int x,int y)6O)\Hj MI
  {2wB2])hV&j(Meb2|
  union REGS r;
L8~3| Q_Z   r.h.ah=2;:hn3z}Og5l
  r.h.dl=y;
j1S HBK6x!o ZD1r   r.h.dh=x; i;z%W%z0k
  r.h.bh=0;
voK$R2Itg\7`   int86(0x10,&r,&r);nX\u L"o
  }
x[)tA9}:[ v/Hx,kh"dt
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
-HB_/\`(H
&~1j\"a2EU xGG t   void puta(void)
{?,P0s~%j   {zk7kn,}2b2J,Q
  int i,j;
7L1GPK8h/?.\   for(i=0;i<24;i++){
#F R?/?[(u   for(j=0;j<79;j++){Y.f(Hr;E6Y
  goto_xy(i,j);,US3G%Cy2}
  printf("a");
'Wp Z&M;@'J5I   }+m$^!@1dU3P ?&x
  }k q@ p/X,Z"d7Zq.c
  }

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


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