返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) d9 q+ e& l- j

3 b5 g5 s$ x9 i/ O# L  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( D  w3 s1 X4 o$ m  l% Q2 U
9 e3 |* u& T" T( f- E( T. q* p  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ) }2 \- M3 V" i( R4 C8 m- X
  子函数及演示程序:
& C, ^1 ]7 c9 m( o- H6 p" J  F
  #include<stdio.h>
# d; {8 O" x9 w1 A' X: a  #include<dos.h>
; l; G1 w: W- ^7 i, W9 I% d2 h: [  #include<conio.h>
' w( ^2 P" R3 `+ j! }" m; s) ]" J7 o# C& j+ w: l) p& J3 t8 i* b  g1 a- M
  void goto_xy(int x,int y);
% M9 E" w1 D6 h' C  void dcls(int x1,int x2,int y1,int y2);
9 Q! z- H/ m/ w! g  \8 y  void bcls(int x1,int x2,int y1,int y2);
+ g! |1 v+ ]+ M3 H- f  void kcls(int x1,int x2,int y1,int y2);
' ]) [' f# C; R  void recls(int x1,int x2,int y1,int y2);
2 y# {/ N6 }. E+ B, m7 M  void zcls(int x1,int x2,int y1,int y2);
6 F/ E4 _; z& P9 z! N" Q5 T6 u  void puta(void);
) W7 c& p5 `+ z% Q) }0 K( O
3 R( M. O  h. |% s7 S
) J% _, p* }4 I) z( P2 l  /*--------------演示程序---------------------*/, d, k( g% j& {  r  d
  main()
5 L  I+ b" |7 U  {- a. I- k1 e9 c" D6 Y' B2 F1 h& W
  puta();
5 V3 |/ l2 o& [" E/ c  getch();2 w/ m" T* ^% |7 w$ y9 k" f) b7 e4 |
  dcls(0,4,0,79);
+ z; v2 M9 e) A$ ?: m% g. O  getch();+ p5 w  _$ P# U  h5 H3 E
  puta();+ k2 m0 a- J, n
  getch();
9 F3 O+ @* B6 s- f  bcls(0,25,0,79);
* }% C3 D  D( I4 K0 U8 g  getch();
! K1 e9 T$ j$ Z% c  puta();
4 c* ?0 Y! A% L$ H5 r' y  N  getch();- N2 i, p- [3 t
  zcls(0,25,0,79);6 z5 G; {! |7 S9 c
  getch();5 \+ [+ e, F3 b2 Y9 c
  }
; K% U/ Q$ c/ ?( I' p, m  /*********center clear screen(中心清屏)***********/
- T" H, F3 s- U5 u6 ]  void zcls(int x1,int x2,int y1,int y2)# t8 _3 d7 f$ c& w* g1 t
  {/ F+ R( d# P* H. z' t) X
  int x00,y00,x0,y0,i,d;' O; u7 X4 X7 f- X% b; B. |
  if((y2-y1)>(x2-x1)){
2 p+ o- F' X+ @4 L3 {3 u0 R# L  d=(x2-x1)/2;
3 P7 G. w# b- A6 K: [  x0=(x1+x2)/2;9 A0 ~1 f7 \+ f  A! j$ J
  y0=y1+d;
  V2 t7 s* o8 s) i5 J- `  y00=y2-d;' t% v& ^: l% k& u( W+ Q
  for(i=0;i<(d+1);i++): R5 r) B9 s2 v: F% E8 c
  recls((x0-i),(x00+i),(y0-i),(y00+i));
$ [  r0 w5 r/ j5 N/ t* k% X9 c  delay(10);6 t& h% f0 y* m2 N
  }8 U( `* z2 Z1 q  L) C" d$ |/ B
  else{8 t0 A3 D; P- p; H6 V7 g
  d=(y2-y1)/2;
& T& k+ `5 Z( l  y0=(y1+y2)/2;! [- q' c4 n! R4 f  `! P; @
  x0=x1+d;
% _8 Q; m. k5 i5 T, Y6 O  x00=x2-d;+ C  t1 [! J$ H) ]0 a$ E/ Y. I
  for(i=0;i<d+1;i++)
9 i9 l# a0 s# L; r" b0 B  recls(x0-i,x00+i,y0-i,y00+i);( L+ G/ a# {  G  C& p, q
  delay(10);
* l' T+ [3 y" P( U7 \& d  }
& l( T& r' ^/ w5 m# i' w  }
9 O" P0 o, O9 ~! @; a+ q5 @8 e  @% c; s6 l* X
  /************* clear rectangle side(矩形边清屏)***********************/( x6 F3 M; @# h+ E

. b7 y  E9 _- m; {. ~# q( `  void recls(int x1,int x2,int y1,int y2)! n1 D& U6 c3 h; l0 _9 L
  {# q6 U) Z! [, G* I% E
  int i,j;
9 _5 r- `; T; W% I5 F3 g5 {  for(i=y1;i<y2;i++){! O1 }& Y7 I. I) O
    goto_xy(x1,i);
. z" D. L3 S% o4 z0 {. v  putchar(' ');6 e) ?9 @7 v8 y* y; U  w
  goto_xy(x2,i);% {' b6 [; K* ~& M
  putchar(' ');' ^) x% u. A3 ?& N' C2 R. d1 ~1 H
  delay(10);1 Q0 U" t# A- P; Y( S, C! Q
  }+ {# d/ N. T$ q1 |# }! A: d# u. O
  for(j=x1;j<x2;j++){
. F  ^; y0 v" r; j9 Y& y$ e  goto_xy(i,y1);
% u. Y; [/ p' V  putchar(' ');
- P( n  q, T- {( x. D" P  goto_xy(j,y2);8 O/ X1 q# S  ]" j3 \0 z1 I
  putchar(' ');
4 X8 T' C+ S, |& E  delay(10);
7 u7 i4 b- k! `9 t" L& Y  }) u2 e; y) Y0 \  i4 z+ r
  }
% h, P* j8 o8 z4 Z% B+ c* B0 C  /******************open screen clear(开屏式清屏)*********************/
6 ?4 h' }# ~9 K/ f) T; Y, ]
: t- ~" h5 f+ u1 T& @  void kcls(int x1,int x2,int y1,int y2)
9 e3 @( o, x; y1 y) M' s  {
* I1 J7 ?( B! f  int t,s,i,j;; v# }0 I4 f( \2 E8 }
  t=s=(y1+y2)/2;3 b/ l0 j; j& O
  for(;t<=y2;t++,s--)
/ u& }0 }) r, I- ?0 y2 D- W  for(j=x1;j<x2;j++){% r+ U  j% k+ {
  goto_xy(j,t);# W, e0 S: @% v
  putchar(' ');
' N! z% q* M! p% F8 w7 T8 f  goto_xy(j,s);
. D1 e3 M8 ~6 F7 t% {( c  putchar(' ');" K/ P# U8 a( r+ @! O: D9 Q) [
  delay(10);
0 y. U; R6 [7 K/ v: N( f) m- ~7 O7 ]  }
3 b: h9 J3 X' ~7 a! J2 S  }* l& U, J! _0 I6 I
  /*****************close screen clear*****闭幕式清屏*******************/
2 S$ g8 _; P" `" s
) }3 Z# n# Y0 B! ~; \" j. l  void bcls(int x1,int x2,int y1,int y2)6 t9 u# N3 Y1 `( y6 U0 i
  {+ V$ m! B/ F: n9 y2 k# `/ @# D
  int t,s,j;
& c3 }  K  h  B. m  t=y1;  `% O8 ]" T. d) d/ G/ K
  s=y2;
0 p0 F; ~: _& Q" H6 w- I  for(t=y1;t<(y1+y2)/2;t++,s--)# \# P4 }# O  v% L. J& f# B
  for(j=x1;j<x2;j++){* ?7 Y1 f8 _- m
  goto_xy(j,t);
7 I3 m: s% i+ o8 {) [. u3 X  putchar(' ');
$ @! f% w4 S" v  goto_xy(j,s);
0 O8 T; |" t, v& Q9 `5 c6 f  putchar(' ');
# I8 R3 A+ T) w; _* M. J4 n  delay(10);
& t! N1 l* ]4 n- e  }
1 N- F5 n! r& V' c& E  r  }2 z: r6 K8 r# Q. j- a
  /******************bottom screen clear(自下清屏)********************/; a. d! d' F8 v; f9 V: d
4 r8 O, L- A  j6 i' Y1 _' U
  void dcls(int x1,int x2,int y1,int y2)( U  p) e) E: d2 |$ K$ ]* x3 }8 r
  {
: J! D7 L8 D4 q* T" u( w  int t,s,j,i;/ A. N' b' J( V7 r/ }; ~
  t=s=(y1+y2)/2;9 y, ~- j) U5 X+ `4 M/ e( h0 s9 t
  for(j=x2;j>x1;j--)
) l9 c* p; u' `: o) u, U  for(i=y1;i<y2;i++){
0 g) p& a$ r* h2 d( d1 ^& u, C  goto_xy(j,i);, ^7 y1 n( i, C. C' c( Y) J( m$ z
  putchar(' ');4 C/ l2 b3 [, D  V
  delay(10);% w" _6 E! i; P  o
  }) F" f5 a9 v7 H# @- u: L% ^
  }9 \: z+ E: \4 f1 @: E3 t' f) a9 s
  /******************设置光标子函数******************/
( i7 y7 i. T7 U! U1 n$ F4 K! n
/ {. ]" G  F- ?# n. |+ R( Z! j6 d  void goto_xy(int x,int y)9 S( j: }9 J+ w" |* @9 n
  {
" Q$ Q% @3 t& z$ |  union REGS r;
( D2 ]4 ?% M% ^  S: P0 F6 B) `) _  r.h.ah=2;) _- f9 E" Y* r" t$ f, y( K  r
  r.h.dl=y;1 e& t- n8 b( h* H4 i
  r.h.dh=x;( }3 M8 i5 m- H. v
  r.h.bh=0;" a& F, m+ F7 Z. a8 x' C
  int86(0x10,&r,&r);
/ J- X# c* t# F- i  U$ P, Q  }
4 @" X! `5 K! z; ]+ |- U( `. @! U/ A+ `% a" u6 e7 w
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 K: p# r; b2 i
6 z: k4 F6 R6 u( @7 J: Q  void puta(void)4 Y9 C; d) x: s: I  v& ?
  {
0 o! e, R7 U2 ~$ I6 {3 p. H  int i,j;9 o" s, O  X+ I: R& e# F
  for(i=0;i<24;i++){5 M" q! n2 e6 O/ c$ ^" |! B
  for(j=0;j<79;j++){
7 Y* E3 @1 h' o  goto_xy(i,j);* G& W6 a% k" O2 s( l
  printf("a");
" p9 z! x2 v; e/ f0 W  A, z  }( j; ^, q5 a0 q1 h! D
  }( V5 l: N# w0 b" e. w$ _) G
  }

返回列表
【捌玖网络】已经运行: