捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
'MW*c u)\3x :O"jk [R4];RP
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
*eV$a`A
.o6?-Fm9e   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
p&j!u nmZ   子函数及演示程序: O-xQ0EF r,Ycj
,X-R}8^]Jzq-P
  #include<stdio.h>
_1g_F4WXbwl   #include<dos.h> vEKdI @;PI
  #include<conio.h>2BdKBv7n&kx
K+^/QC-o&P8bq N
  void goto_xy(int x,int y);
%h:\h-bf   void dcls(int x1,int x2,int y1,int y2);#wT@B"B(CE"R
  void bcls(int x1,int x2,int y1,int y2);%JoXo"vyT(Q(l8h?
  void kcls(int x1,int x2,int y1,int y2); \'C/gt/H0cI2j
  void recls(int x1,int x2,int y1,int y2);
%R8mW_.v%O0U   void zcls(int x1,int x2,int y1,int y2);
1IsJG0U s2T   void puta(void); V9|8\&T tc
n5P0aH7~v
Dj*Z'W,qw
  /*--------------演示程序---------------------*/6U T$j isH3L
  main()];Nu:y f!K!L2Xwk
  {
T%J jO T+_1S   puta();
b m8o'I"zPJ   getch();
q s c3gC0v   dcls(0,4,0,79);
w0`Q1]!B(R ht   getch();
|H,[;|(v9e   puta();$R-y!rQM
  getch();
s2T!iNn$l RZ7o   bcls(0,25,0,79);[I(z2{#Z*V5zr Z
  getch();
f.BX a8RQ   puta();
|J;ZKn$rw   getch();
S$xp5H_ ES   zcls(0,25,0,79);
%c)nP+G`g   getch();
Zx#p!S}gP   }2b1^4]Jend G
  /*********center clear screen(中心清屏)***********/
H7~w0P.wVE"p   void zcls(int x1,int x2,int y1,int y2)
l7J;~/sc&D   {.|6[#pkF,S0hC
  int x00,y00,x0,y0,i,d;
W q}4mo {] u'rb   if((y2-y1)>(x2-x1)){
B?'\\@g2S   d=(x2-x1)/2;Q3E@#A$Smzd
  x0=(x1+x2)/2;
Rdnq1d,z`(xb   y0=y1+d;.Cb7J+}:~ D'k z
  y00=y2-d;
!j iQ'FT6sb   for(i=0;i<(d+1);i++)Re K#`I a}:Z*QU)WL
  recls((x0-i),(x00+i),(y0-i),(y00+i));
^@^z+d0_%P   delay(10);
x b l4i[?   }
s1q"Z$@1M.OV   else{
Gz.E5S}7u*y   d=(y2-y1)/2;
6P/@F6N s   y0=(y1+y2)/2;
nY t s4e-A Wj   x0=x1+d;&cb.N"U2Fh
  x00=x2-d;
:k2kM;a;} m3K@ J   for(i=0;i<d+1;i++)y'g.m4w$G1u!pw
  recls(x0-i,x00+i,y0-i,y00+i);
5S$h8T%_)[ia}   delay(10);-S|}"zl2Sc
  }|'F5LVMu4m
  }S9c8m R ^q

2U&W g9S:t   /************* clear rectangle side(矩形边清屏)***********************/
*^T.UPvur$c ;M(S8Y8UZN
  void recls(int x1,int x2,int y1,int y2)
m2A,pZgpr*JH$I   {B7CEpaC9n+c\` T
  int i,j;
T Zv$D!c   for(i=y1;i<y2;i++){
#EN,z"n5p|~4r     goto_xy(x1,i);
p2f#npH5bo`j3B   putchar(' ');
-tX \:a8zk   goto_xy(x2,i);
R-u s:H| X$Z7Q   putchar(' ');
R6NKII)P Xg   delay(10);
"H0x5b$v;gu+LB   }
#X7t?~9@u:hn)f   for(j=x1;j<x2;j++){/b1A(UZu]G$^!V
  goto_xy(i,y1);
\ l;Nr8Kl Z   putchar(' ');
Ifh"I4a   goto_xy(j,y2);*| bFwH2f
  putchar(' ');
,iQ ^ Ro1ad9I   delay(10);
a wOc KV ["T   }
7oI?LYN:?   }X%JN6A7k?L/x.`
  /******************open screen clear(开屏式清屏)*********************/
0[:u{dv]YpOnG
J:L5YB#rCH\|   void kcls(int x1,int x2,int y1,int y2)
G3?H R g5x   {
X2W5D&G0??k1~   int t,s,i,j;3xTN h7q5h:a#E
  t=s=(y1+y2)/2; mW(L*}!V{e
  for(;t<=y2;t++,s--)R,z-Z3[9]
  for(j=x1;j<x2;j++){
K0e\}r0c,v(w U   goto_xy(j,t);#kj@U}j'J n
  putchar(' ');^JZmq'?X
  goto_xy(j,s);CP:L+Ln4@zK2K
  putchar(' ');,?DJE2w`#h'i7Ey
  delay(10);
-x7ty] d;}   }q&z&J%Z*u4_%[~
  }HaBEK.Ng$g E
  /*****************close screen clear*****闭幕式清屏*******************/#@{/UD!G0gzQx

qF)INV(G6k   void bcls(int x1,int x2,int y1,int y2)
$eME/ML6X   {
q@3Rnr8| A b8x:f3D   int t,s,j;
$A3W/uz1oTj6~u   t=y1;
nhEF T/\+J   s=y2;:A9aK+lC+s%v3}([
  for(t=y1;t<(y1+y2)/2;t++,s--)
:]:bQ4]}   for(j=x1;j<x2;j++){g6^)o;l6p;e/j}0|.G
  goto_xy(j,t);#^C.ppI2h$ZE.H
  putchar(' ');O| Y/A$k*w
  goto_xy(j,s);
D:Z1kQQ'}{t#N+N?Z   putchar(' ');
c!B?NW6gV   delay(10);
A0w^MPtD.?   }
jX-Hp(zL7U-@4l5p!{   }2Ld x?LJVtL^H
  /******************bottom screen clear(自下清屏)********************/B&s!]%H2LG| YY

`f"lsc9A ^xP   void dcls(int x1,int x2,int y1,int y2)
!{RK;t Lq.g5z/}   {'KE}V?~m,b
  int t,s,j,i;1B:M&T D*^5rg-k1m
  t=s=(y1+y2)/2;
I]*y a-u9j{P   for(j=x2;j>x1;j--):MG2R9Qpe.A
  for(i=y1;i<y2;i++){
+M} j\Xf-rY   goto_xy(j,i);Bn M[(j{;X7]]
  putchar(' ');:OR%o4o)i
  delay(10);
&B&Vu,fq'q1{$j;],U^2?L1u   }7a:^6F&RBf*L!N
  }
+`8v3r+V v0]%P3c   /******************设置光标子函数******************/8J6TV!M%rLqGFv-FM

{ \u3UIY{   void goto_xy(int x,int y)
!M v;X*n8e7|8@   {
#Pn^$U\ L0@   union REGS r;
8`!dE6Q1T   r.h.ah=2;
~.yl!lyb!bbzV   r.h.dl=y;L;n;p9]my
  r.h.dh=x;NB)q5J"X#T5B.S4P9q O
  r.h.bh=0;
P-Uur3A+LW _   int86(0x10,&r,&r);h)C+WBRKOm
  }
`4eu4H#niW #Q.l_mQZ
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/+h"g:ey(kd
E)yiNMZAe(F
  void puta(void)
Ju pwVm-_   {
r/auq%w/l}9i   int i,j;#EWV,b.L
  for(i=0;i<24;i++){
i#miw.~$G0F2HEN   for(j=0;j<79;j++){:[s#tw*G/FX
  goto_xy(i,j);
_m4YJWd   printf("a");
O7]&JrX7fC l5J!V|_o9I   }
/Qg`;Q(Q)E   }{9V%g bo(}0@T+Qt
  }

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


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