捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9L1e5`"E0_:Z

.J3B#lA/mf   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里 J} dR:p:b

/NWOpHe!YE&P   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
T5SM&c?%X   子函数及演示程序:vL%`Y7pA_+R&\

B.?;r'c'D,V+ig{   #include<stdio.h>*N4nsM}9? @
  #include<dos.h>
^j$b)}.xf5M   #include<conio.h>7vu!q"NG t

;sr ?5l"Fd8`*I0F-HP5T   void goto_xy(int x,int y);
Gg(kQT2t   void dcls(int x1,int x2,int y1,int y2);
n/z+a!x.t9dlj   void bcls(int x1,int x2,int y1,int y2);
4fQ)@M,Q7K4T5f   void kcls(int x1,int x2,int y1,int y2);
Q'b(PrtR3\`   void recls(int x1,int x2,int y1,int y2);
C R0lA Nls   void zcls(int x1,int x2,int y1,int y2);
+~-N(?.W \T5n9]Rb#A&l   void puta(void);B&@gb/|'`%NWgW
y k'M(@rb1yZ

L4bSC(f~h   /*--------------演示程序---------------------*/l#^nt i
  main()
kiP4DG(d4H-_   {
Nf7wo!gz   puta();
(hHQ br   getch();
r&f'_2q4~ w   dcls(0,4,0,79);
7U:@NC B   getch(); MUS3Qma/T%w
  puta();+\@#d{~Q2Z0c7qy
  getch();
a'\ z"A R(~ypA   bcls(0,25,0,79);
9T:L/\-t6jz+a'HIO   getch();
"N p+qE/p   puta();"@]]|&Yx th
  getch();Q&Sy#U9Gs
  zcls(0,25,0,79);-I%aO}7[
  getch();.V zx'L1|9N
  }
J1~S8TJP*q"\1]H   /*********center clear screen(中心清屏)***********/)}-uZ.U$~C `#^
  void zcls(int x1,int x2,int y1,int y2)I-P~Fs
  {(Q C(x({ cNl?u
  int x00,y00,x0,y0,i,d;
|#j0r:LlK*w2?!q   if((y2-y1)>(x2-x1)){D!j.HrqJTX
  d=(x2-x1)/2;
Nw3|y+X.c)hH   x0=(x1+x2)/2;P#L D\&FR+D:~/B
  y0=y1+d;%u6l.vqswI'T v
  y00=y2-d;kR)@qRv/o O
  for(i=0;i<(d+1);i++)
-U/}RzDR   recls((x0-i),(x00+i),(y0-i),(y00+i));
2H!Uk O%Bp   delay(10);D&W2cDRrU%Q
  }
Ne2vZ:CO%sK)N   else{A-Wx RE5J Ti
  d=(y2-y1)/2; } zI`@&V.iG
  y0=(y1+y2)/2;JbKj%Mi!U-R&q
  x0=x1+d;
o9S8K2?|,@L_$d8c   x00=x2-d; rOvd.AC
  for(i=0;i<d+1;i++)*}d[Fk-B1_e;j
  recls(x0-i,x00+i,y0-i,y00+i);P3\3Ro {4|'z
  delay(10);J8n![^pj&F o
  }wU!x!VAqv
  }~Yw6}E;i

EVLF7AF"Lq   /************* clear rectangle side(矩形边清屏)***********************/
H-g4CVO8]&M OX Y{J)A{/E*h
  void recls(int x1,int x2,int y1,int y2)D8g~D_
  {n;G1}J7m
  int i,j;(]Sql4^'Jfy:ovhf7r
  for(i=y1;i<y2;i++){
gY:O9KJ(Y-w     goto_xy(x1,i);
WXEr1a^oRQ   putchar(' ');
U P0C] V7JZ.\4@   goto_xy(x2,i);
f4q:IF+T0F   putchar(' ');Z C a"U Q!e8n"_
  delay(10);k^S*u:b_$~{y
  }n!`f-a(M)|7GA
  for(j=x1;j<x2;j++){
:D*|3W:B j*jsy/t   goto_xy(i,y1);
Vj }*@1n_6P   putchar(' ');p'O)W E ?i0b
  goto_xy(j,y2);
S"g'a)NN)i'G o   putchar(' ');
hr"qJ N5|4Lr   delay(10);
K1I`"w4^   }
f}I"g Iwj;x   }
&G u?\%{qG   /******************open screen clear(开屏式清屏)*********************/D4@zqDc
I/c$U:u:x5MZ`
  void kcls(int x1,int x2,int y1,int y2)3K-O2rU T7d
  {
qPPX5w!L5_2a   int t,s,i,j;;hM3b}'{*h5T_,Ok
  t=s=(y1+y2)/2;
oK+\{^&N K yi6C i#P   for(;t<=y2;t++,s--)
GCg [8\sj]s   for(j=x1;j<x2;j++){ QY#cY2o3C|y,i
  goto_xy(j,t);o|/ejiI
  putchar(' ');
f4@ Iw W(L(b u   goto_xy(j,s);
k8~ Z/M'KjN'S   putchar(' ');
?(D a k:}!|q   delay(10);
0A c!e6e(`k   }
/]w*vey   }F&ucr8v"s ]
  /*****************close screen clear*****闭幕式清屏*******************/V0YiF5R,A9W {
#U EY@a
  void bcls(int x1,int x2,int y1,int y2)Qhk+{,wR
  {
Xq&v]5CA"rY   int t,s,j;
fbgf1Tq+J-E mmL a2S   t=y1;
JVk$K2W   s=y2; PD H|zp k+K;CH}
  for(t=y1;t<(y1+y2)/2;t++,s--)p7zYXp&Um"C
  for(j=x1;j<x2;j++){
,hzs Y8W8@   goto_xy(j,t);
h)O0b8~7D C{   putchar(' ');
QBs ^i   goto_xy(j,s);&a ^ B#{*RFm
  putchar(' ');
.`N9n%\t&]x7wA:\   delay(10);y3TPT(| Bq.lM3q
  }
p6a4Ze-F,E H.c3S   }
;AK+BwwS   /******************bottom screen clear(自下清屏)********************/t7U*u Z\,u g.F

P;FX EZz+gS*N   void dcls(int x1,int x2,int y1,int y2)6Ip2I\,k8d/[
  { q$O$azT7w
  int t,s,j,i;
jh:g)~.C?2Xatk'r)},U   t=s=(y1+y2)/2;!S7G \"[E3zF
  for(j=x2;j>x1;j--)
dQj%X6WL1T5J7C!T }   for(i=y1;i<y2;i++){.Z9@$~Bs)|
  goto_xy(j,i);
dl~7Nj;T   putchar(' ');
JvFk K Rb:y2}   delay(10);rDA w+lD:?B
  } ^cUA:T-D"I
  }
'S b5\2Cb6J @   /******************设置光标子函数******************/
$gD8@DT9X CD V8IZ5Z7Byb)T
  void goto_xy(int x,int y)5wJ~(D W{
  {
h0Qd d$H lZL3b   union REGS r; t'fH8SR;uJ;X-d
  r.h.ah=2;Q4j V5L"YBK/b
  r.h.dl=y;
fl#x?&d   r.h.dh=x;
I6V/SM rV}z   r.h.bh=0;
C*Wk.i z9C   int86(0x10,&r,&r);/?GW)v PR:F)h
  }
4EZ LFf5Ca
x#_{s4Q g:x}   /**********************在屏幕上打出一连串的a字母用于演示程序******************/
I(BEc j2bEK ~ o'hR!Y)^
  void puta(void)E6I/B.h1W
  {|yp Q.{^
  int i,j;.I3nN jb$E
  for(i=0;i<24;i++){\P7s#{ZEu~ U
  for(j=0;j<79;j++){
#A,K"t.[C&O   goto_xy(i,j);
^:vO[D0C5j0vY   printf("a"); d*C`:x6B lE%o
  })S k1no1W9Y
  }
:y E)b-`js   }

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


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