捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8gr1^m&qClR
%~!Tz/m&R1m%R   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里a1{aGn3o/TQ

1H$~ nj%~#Vq4K   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
r&G L#pV6` u,Ws   子函数及演示程序:5ZxL0RT~j#[bHH
\3i:W'c+L.] Q5F
  #include<stdio.h>&eySaR/oO0A7c-p
  #include<dos.h>7e:NG4H(I$mm"_f
  #include<conio.h>
T%vb,H%]+Tp
Q8cSji zX m   void goto_xy(int x,int y);
%Z[A+ru8Cb1JP!a   void dcls(int x1,int x2,int y1,int y2);6L)eQHz@-wl.D
  void bcls(int x1,int x2,int y1,int y2);
$\D_gA@6M D [   void kcls(int x1,int x2,int y1,int y2);0NrQj GPM.C0|D
  void recls(int x1,int x2,int y1,int y2);
+vli*`w rIS:Bu[   void zcls(int x1,int x2,int y1,int y2);-IH+AR4i
  void puta(void);'dG p1y']1? }+PR2]
N8} ~!@OC

%W4vlBCB&\+xM   /*--------------演示程序---------------------*/']gtck)q+@
  main()
z!kHx:HW   {
L tnly5J(w7l\ b*v   puta();
-ReR3I0}$R)p   getch();
E)S.FS+puSj y   dcls(0,4,0,79);[7C!P!] P#Gt
  getch();
Rvypa U   puta();
6GP4[2_f   getch();
jzy'C$U6y#S|0n5l   bcls(0,25,0,79);AHl:@U2}
  getch();
K J6D.UM8|krhI   puta();
aHH,x lO.PI#M7G   getch();V6R x#M1O"T n%Y0P f
  zcls(0,25,0,79);
n{N zaO   getch();Hf P+Q Yff)q
  }/w(zW(F v?2rh"j `0n
  /*********center clear screen(中心清屏)***********/_6Y"BS B"aFa
  void zcls(int x1,int x2,int y1,int y2)"@9LE"O Z
  {B"w2X#Fl0J4g
  int x00,y00,x0,y0,i,d;
0d(V?M^X   if((y2-y1)>(x2-x1)){
G;t(?-Y y   d=(x2-x1)/2;*FQ F fD f4l
  x0=(x1+x2)/2;#n}i"~)N$] l4q8Ah
  y0=y1+d;[:e(fz4M|PzE
  y00=y2-d;
'a$u:@F%fZ   for(i=0;i<(d+1);i++)
?7H2zY-eE+XWr   recls((x0-i),(x00+i),(y0-i),(y00+i));9~v-U'v0x2r b"rSN/^
  delay(10);uyC:r Q/v~k
  }
7rg:I.K CO9q-b:C   else{
fH6m[l!P/fy   d=(y2-y1)/2;k5[O+[5v-^x
  y0=(y1+y2)/2;^x7R RQ9g2M\
  x0=x1+d;-EJ$u(M9j|5G
  x00=x2-d;Rw`h([$j!Fm P-V)R
  for(i=0;i<d+1;i++)*yt.Q^_%B
  recls(x0-i,x00+i,y0-i,y00+i);
}G%^3nyqH]P   delay(10);
%y!AJC C.E!M}0\J   }%wWZN9x
  }
#RT ~-@J7[C
"W)Yj+D[ Sfj   /************* clear rectangle side(矩形边清屏)***********************/ d7G d bu@5X$w[

XO-{Z'~nH   void recls(int x1,int x2,int y1,int y2)
7` f$A|:pn#L9h*@P4n   {
r~4U8LVDfq#s,D   int i,j;ryEiU7\| e
  for(i=y1;i<y2;i++){
%d1x:v8~ K;m"\#V4k'{ |3B     goto_xy(x1,i);vJ8Or,I iB$J
  putchar(' ');
f4u8o#k+Y&f9B[bF   goto_xy(x2,i);
{2i/wL4W b{"J!N   putchar(' ');5H:ED/G"L
  delay(10);1WEyx+Epa7C/Hn'd/t?
  }
8gF%cgT{Kd7`   for(j=x1;j<x2;j++){
u4C6~z"]0_ X(j$@!X   goto_xy(i,y1);n_@ d R2k-cjp@
  putchar(' ');
7z4B,pu"[)B   goto_xy(j,y2);
7Yu^'_ g ut8lf;Z{   putchar(' ');TI$Y5e }$[u2[
  delay(10);2}8W@;TE\
  }
9~n m:dl   } [ t3iq? o%j
  /******************open screen clear(开屏式清屏)*********************/
tIC2H.}n'N 3{}.@/k3Z I b
  void kcls(int x1,int x2,int y1,int y2)
wqKHxh   {&t!t_KV]9C1Wq ? Y
  int t,s,i,j;*x"e7{^ Is5ti0vl
  t=s=(y1+y2)/2; k8Gc@~0P ic
  for(;t<=y2;t++,s--)i.dkH K*r3Bc?Uo
  for(j=x1;j<x2;j++){
[MT(FX X3k   goto_xy(j,t);
8BN6W xB v   putchar(' ');
t)K U j ?:LX4l   goto_xy(j,s);
L"I G6o3I(E+S   putchar(' ');A{,m{8nQ8C
  delay(10);\,Ex@6o,e)wG
  }
+u.R5SH.Q]T | z   }
S#LXxQ   /*****************close screen clear*****闭幕式清屏*******************/Zu,m)[r7wVP

)w kf-wr:[6E   void bcls(int x1,int x2,int y1,int y2) IbF+N%qaU!gQ
  {@t-VJim*O
  int t,s,j;
3Xv/E:p&HUp   t=y1;~6k!@)[6U
  s=y2;
S%W#l`t&@2C   for(t=y1;t<(y1+y2)/2;t++,s--)
'\,SJO5f \B nP   for(j=x1;j<x2;j++){
/W.}"y4^V]s   goto_xy(j,t);
ip,r f1m%U3a~/J s   putchar(' ');S1KR&J3g*ud
  goto_xy(j,s);*[8N9k*|Sp"R9_yu
  putchar(' ');
h'GQfU*??]8]*q   delay(10);rI]2Q-O&IV}&h1Q
  }REU8f0zFv'U4b
  }
8@;uH+Y'sNf q   /******************bottom screen clear(自下清屏)********************/
uf C\sk![0H
Y b%h;@0zZ   void dcls(int x1,int x2,int y1,int y2)
d4HQ,oX!esk   {p8u7|l`7R(T!DD
  int t,s,j,i;
6R]0W'Tw kDw#E   t=s=(y1+y2)/2;
'm@.g)m5h,`0p   for(j=x2;j>x1;j--)
/h zr0N h   for(i=y1;i<y2;i++){
*FJL]c7VN   goto_xy(j,i);
!g6[9b4Ly   putchar(' ');
6yFt}\#[   delay(10);Dh8L'Tb ?_
  }"t7yfR%T*d XSLbU4`
  })r\ [ Z'de*f4S
  /******************设置光标子函数******************/o(o3u:?0t
-E M/Q:jVval
  void goto_xy(int x,int y)9~qdk%c.\3S8^
  {-u5P6|)|,C$R"K8yO#\-t
  union REGS r;
v_L[ V xD~$K"l   r.h.ah=2;(fU?r(xw {
  r.h.dl=y;
P)@W({V*Y   r.h.dh=x;
X(C#I-L ^s^2O   r.h.bh=0;O7n/x-yn(I0g7Kw v&_
  int86(0x10,&r,&r);
6\:G;Z.z.K7J aB7^8~   }N s_v9z'^/t2mg

-E`L7Ln'w   /**********************在屏幕上打出一连串的a字母用于演示程序******************/
LE Fs LKp H &PUYY @ [f8Y*m
  void puta(void)/l `8Jj0B+k)v
  {.t)s|#H%PT'Y _5g
  int i,j;
;S xZKPr*~   for(i=0;i<24;i++){
h"JGQX0B)fm*O   for(j=0;j<79;j++){)mn!L?(w
  goto_xy(i,j);
UX[b7q(_ \   printf("a");
u7y6g0\hP-@   } N7P:N#C y NQ
  } ` {a%W6L m(vd
  }

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


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