返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! Z1 I; a. }0 Y1 Y5 T$ b. ?3 ]7 |. F
* ~! E0 _" n( O) f: E  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. h* K5 @* Y2 W& ?$ T% n& P( ~" \6 S' E7 L8 R" Z
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 ~# p+ C4 X0 S3 r' R( P$ f
  子函数及演示程序:5 U% L1 x. ]& S, G9 Y8 p( M1 w

# K3 c+ o! q1 y( O  Y/ z1 r  I8 W' i  #include<stdio.h>2 d$ ?3 c( Z5 R  K: N/ i( o1 I
  #include<dos.h>
* I2 y& y+ b3 q" Z" K( G( C  #include<conio.h>
: ~4 A+ ?9 p% y/ j# b
- D( d) I5 ]; H7 X  void goto_xy(int x,int y);1 Y5 ~4 {! \+ W" e- D- U
  void dcls(int x1,int x2,int y1,int y2);7 U& t2 |$ f+ K
  void bcls(int x1,int x2,int y1,int y2);
0 n8 Y" E5 E3 E6 [9 T  void kcls(int x1,int x2,int y1,int y2);4 d( i% d( ?" w1 e  v
  void recls(int x1,int x2,int y1,int y2);- M4 T' Z4 t( \/ Q: Y
  void zcls(int x1,int x2,int y1,int y2);
6 t; p; Q8 ^8 _  c+ I" d  void puta(void);, v: w8 J. t  q% j% a

3 q6 S* t, Z( `7 p" e1 E5 y4 k& S- s% Y, h. M1 k, [
  /*--------------演示程序---------------------*/' `1 K3 r% [1 u1 q
  main()1 {; w5 q5 `8 x) Z) x
  {
  _) \9 V" x' k  @9 z, f( P6 Z  puta();
+ ]$ q/ q8 q8 S+ Q  getch();
5 F7 {. x% o6 k3 A# u  dcls(0,4,0,79);  U% o2 [7 h5 D  O4 p
  getch();+ `$ r" l' a+ |) B
  puta();/ z$ y$ H- b1 B
  getch();, {  c- O$ ~: T
  bcls(0,25,0,79);4 g, U) a% ~( l+ `
  getch();
' }" g7 D5 \1 E  puta();6 k: a0 \3 {1 g& C0 g0 K
  getch();
2 @! ]- ^) c% T5 |8 w1 k  zcls(0,25,0,79);
$ a" I+ \1 _" X% v0 F3 B: A3 J. S  getch();8 e$ a5 p8 P! P. R; N$ o/ F
  }4 o+ _( m3 C% k+ ~  E2 _
  /*********center clear screen(中心清屏)***********/! f: M, @2 _1 K: l) I- j
  void zcls(int x1,int x2,int y1,int y2)( d# I& }0 V3 V
  {% P5 \6 A& m9 N, F# N5 O
  int x00,y00,x0,y0,i,d;
3 q: Z# b, C! D4 }  if((y2-y1)>(x2-x1)){
5 d. _% a% O- X) J  d=(x2-x1)/2;$ a# N( ~% @7 Q+ a( T% ~' T4 _; O
  x0=(x1+x2)/2;
7 {7 Z: y1 N: J. ?6 Z- H8 W  y0=y1+d;# f1 ^1 H7 @; Z" k
  y00=y2-d;
/ P8 e) v. b, r  for(i=0;i<(d+1);i++)
- W1 ?; P" X8 W1 |- k% R  recls((x0-i),(x00+i),(y0-i),(y00+i));5 Y% M0 U. l6 d+ W- \- J* X
  delay(10);+ O$ e8 `4 |0 l& P
  }% C& A- c# }5 u5 T# e
  else{
4 ]& o2 D" G/ R  d=(y2-y1)/2;: M9 Q& ?& P5 l$ F* F: m1 C
  y0=(y1+y2)/2;
2 c/ ^- Z4 O$ |  x0=x1+d;
3 A" u1 k; Q  F& ?  x00=x2-d;
1 ^$ _4 M1 X& a( |3 \# d. W* @% c7 B  for(i=0;i<d+1;i++)2 Q+ P( A' z6 s4 S) z* t, {5 `- ?
  recls(x0-i,x00+i,y0-i,y00+i);. i; c: ]/ {3 F1 Q% r/ B2 i% @0 d9 ^
  delay(10);4 ~) H3 o6 F# z
  }4 V7 b. t& B+ `( \7 @# r; q- E: U
  }
  N! }: L  F% X4 o7 v7 \2 b5 z, q% t1 W2 K  o: o" [% d
  /************* clear rectangle side(矩形边清屏)***********************/4 X, P0 I- Q6 N

4 `- x: i! O9 {- t2 l  void recls(int x1,int x2,int y1,int y2)# e: P: p+ r( ]5 {8 F+ ~
  {5 c; [& E- Y3 \0 |$ [
  int i,j;
' B( i9 |% w5 L' @  for(i=y1;i<y2;i++){1 y( V- Q8 ^; [4 t
    goto_xy(x1,i);
8 j. q# b. E, _) ~  putchar(' ');5 y' l, O, e/ V( ]# S0 B3 \, `! w# v
  goto_xy(x2,i);
' t' O4 X% |3 O5 n  putchar(' ');
# a" _; H1 ~0 v. ?' `$ {4 P  delay(10);
8 X3 E' A* S4 R- D" M  i1 Z' z  }$ N7 [( o+ ^/ n  A& @, N5 s
  for(j=x1;j<x2;j++){
7 ?$ o5 G5 v7 u( F  goto_xy(i,y1);+ g- K5 a. m: K
  putchar(' ');( H3 s3 Z" ~; h. d
  goto_xy(j,y2);, g- n" l$ y$ k7 O' ^8 `
  putchar(' ');" e' x! ?$ r2 }- j, z3 q
  delay(10);/ e  K+ Q) g* [
  }
9 N- ~" w) c# z+ @8 a  }
' t. d6 c" V6 `' J( @  /******************open screen clear(开屏式清屏)*********************/5 y( H6 o/ o4 p+ P

- g/ ~: @2 w0 {  void kcls(int x1,int x2,int y1,int y2)1 G5 o1 `& W( J6 T1 q9 Q
  {
# n3 c: [. O. `7 n+ K% T* [  int t,s,i,j;7 k  E& t2 U# d$ c  `# \
  t=s=(y1+y2)/2;
3 b8 P1 w( ~7 V- u  for(;t<=y2;t++,s--)
4 F* F- `5 o, D  for(j=x1;j<x2;j++){
3 y+ j( U/ k" r% I, U- o9 ?7 k  goto_xy(j,t);
! f5 T' I3 l  O  putchar(' ');
2 h* u# }1 i' w4 v6 I! O( h! o  goto_xy(j,s);) f& N& H, |3 n; X
  putchar(' ');9 U' t! I% s2 S" e9 G7 S
  delay(10);
6 k+ N. R: D, |; l9 ^  }
1 ^" Y7 W- F, }" L" s# K  }
4 y6 x* [$ \& A% n: `9 K  /*****************close screen clear*****闭幕式清屏*******************/
) o2 h4 L9 X) m8 U* Z  d% I* D
) }- O, u4 M. Y  void bcls(int x1,int x2,int y1,int y2)9 k9 U5 w5 ^6 {# g/ _8 [! V) V6 Q4 h
  {
% b1 t' w% \6 C  int t,s,j;
' h7 [" A! f. n6 R9 @  t=y1;
) s$ I0 e) H9 c2 o- i. w  s=y2;
) z7 A  e2 u7 U  Q, ^! Z+ A  for(t=y1;t<(y1+y2)/2;t++,s--)
8 d7 A, ~! o) C# V% O* g, `( v& U  for(j=x1;j<x2;j++){4 S4 \- f3 r. d1 p8 l  W8 S
  goto_xy(j,t);
4 X9 p' {- c( o6 x5 K  putchar(' ');, B  Z" n2 |0 C6 M: T# U
  goto_xy(j,s);  _$ n5 X4 f) x: X  ~+ w. m# z3 @
  putchar(' ');
7 \& n1 i7 J6 g& I  delay(10);# q/ S, ]8 U% k) e7 o; Z: j
  }; P8 ^* s: r) `- F% L) B/ H9 h; q1 E. e
  }
1 s# n7 r  p/ D, V  /******************bottom screen clear(自下清屏)********************/
% \, a8 y- J/ ~0 ?* ^+ V
* Q4 A% H  l+ Z% S' C  void dcls(int x1,int x2,int y1,int y2)
+ {: t# J2 w  J+ C0 |) B5 d0 [8 F  {
9 s6 C6 i$ y( h# v- Y' |8 b  int t,s,j,i;+ A& _8 T0 p# p
  t=s=(y1+y2)/2;
# s7 R& F- z- L- S( H* S1 M  for(j=x2;j>x1;j--)7 s6 V! Q; H) ]' f! S
  for(i=y1;i<y2;i++){& ^. ]- e* \( m
  goto_xy(j,i);
( S0 m: u6 U3 q; G  putchar(' ');3 @1 ?# C* e( M# M. a
  delay(10);
. v- I0 h. L: u' O: b" R' }  }
% r2 G1 o! ~7 y0 v& o, X8 W  }
' r/ u: a, e0 _0 s! X5 b  /******************设置光标子函数******************/$ V. _* m+ W0 C0 Y3 x% S! R
, A" a8 ^. ^( a+ Q
  void goto_xy(int x,int y)
1 ?& @, t  w* X: N. F8 S+ }  {
- ]% b$ v& v, T" y8 m) v  union REGS r;
4 z8 e! S' q: g  r.h.ah=2;* V+ Q/ W( G& N# J4 o. R
  r.h.dl=y;, t+ }- j$ A+ t; I' B, {8 ^
  r.h.dh=x;( o1 u( v* \& q8 w" O
  r.h.bh=0;( J: ?$ z& E8 ?$ S& n. U( y! e  N* ?1 {
  int86(0x10,&r,&r);
# T$ {. ?! P8 `! \  }
" P  u, s; m6 P4 |' A3 ~4 |# I' i  q* d$ a
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
9 `: ^% C) j& g- m, i
+ s/ \3 G$ J3 a  void puta(void)' p. b: x' ]2 U9 _
  {: x" s* f! |+ Y- l& A9 m+ ]- j7 O
  int i,j;
! i5 Z0 \8 d$ g) W$ ]  for(i=0;i<24;i++){
$ R. Z) E9 h5 h6 U/ U  for(j=0;j<79;j++){* P6 q. M, C- p. O* ]
  goto_xy(i,j);4 _. I! b: E3 A
  printf("a");9 v- {2 \% U4 P' o
  }9 N9 L- c8 P, r9 r
  }
/ {2 O- A! X: R# r  }

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