获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,  M/ E3 K3 i% [. \  o* H

4 n1 ^6 u. p+ e; A  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 E1 `% ~5 {$ }5 s1 q# A; s% {, Z
8 b* F/ Z, C, T! n  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 G/ h$ s3 l: k2 d
  子函数及演示程序:) S* ~6 @2 a% o2 Q
2 w' J4 B$ g: _& w9 [4 B; H
  #include<stdio.h>
; \" q2 X" b1 Y. u0 P5 J: K8 L) v6 y  #include<dos.h>, J" u* |4 C* G3 j. ?
  #include<conio.h>
% B  a4 _& ~' _4 {
0 X( b" |5 S7 V. `3 z  void goto_xy(int x,int y);: b* [+ e2 N6 M% W& X2 D
  void dcls(int x1,int x2,int y1,int y2);
* K& f9 R6 _2 d$ O' C  void bcls(int x1,int x2,int y1,int y2);
7 Y8 V! Z3 x2 G4 b  void kcls(int x1,int x2,int y1,int y2);) L- Y7 [  T3 i$ X4 x8 `  `* m
  void recls(int x1,int x2,int y1,int y2);
# S( P7 Y+ _0 _3 \2 |" w# C9 v  void zcls(int x1,int x2,int y1,int y2);
# L6 r# Z: P. B+ _+ u  void puta(void);/ X9 \, ?, L- t* J; \4 `; M

+ H6 r3 ~5 r# R7 v; q- o/ K* G# w, i$ y: E3 o5 M" l  r3 U9 ?1 G' v2 T) w
  /*--------------演示程序---------------------*/
+ w5 V1 Z# {% x/ U  main(), I2 H0 J( d* k
  {# _' v2 H3 Q6 H2 d
  puta();
3 \' _/ G' j- y6 u9 n5 `  getch();
1 R; D& n& \4 n/ X1 m  dcls(0,4,0,79);
( V. o0 S/ |' z& j) P( \- @5 g  getch();
! a( S/ |* }0 @, r4 z  puta();! J! z1 |3 ?' Q( \
  getch();8 E8 E3 V1 H  {/ i/ i! c1 c4 W
  bcls(0,25,0,79);, i$ @7 y1 N$ T& d
  getch();" x. f( K! Z8 f& l# O( y% h1 O( l
  puta();
9 r* _/ x+ y( T5 q  q; J. r  getch();
0 r3 A& B, V( n6 W! h+ X9 b  zcls(0,25,0,79);% E6 k( R2 I4 O
  getch();
/ z+ ?9 v% p3 C' e; R  }
2 ~4 B' i1 \$ v  /*********center clear screen(中心清屏)***********/, z' N) ?+ k  J, {1 {
  void zcls(int x1,int x2,int y1,int y2)
4 N: f4 ^) y, ?; }+ c7 T  {$ |( T1 N% w- Q" T
  int x00,y00,x0,y0,i,d;
# B' |3 \9 p; O7 F; x$ ^9 v/ B, \  if((y2-y1)>(x2-x1)){
& r" x  U0 E" D1 S  d=(x2-x1)/2;
) e5 _6 x$ w0 Z" X6 k3 h  x0=(x1+x2)/2;9 v6 F+ y5 [8 L# X' W
  y0=y1+d;
. W. y+ U1 `2 _, q! t1 ^  y00=y2-d;/ [, d  ^1 I& {: O
  for(i=0;i<(d+1);i++)
. ^3 T5 |* a& q  recls((x0-i),(x00+i),(y0-i),(y00+i));
  U  U# }  Z. T4 a1 T  delay(10);1 p0 w) d+ N5 o0 H* l; r; p* b' }
  }
2 \8 @3 b3 r0 Z) C  F  else{
$ O9 t. p' J$ y: f; X& p, c  d=(y2-y1)/2;# \7 k, Q4 v+ S. P* Q
  y0=(y1+y2)/2;
2 L0 T$ ]# A4 U+ A  x0=x1+d;6 v0 }  q8 H% p- @: X0 U, [
  x00=x2-d;
5 g* P: J# c1 U  for(i=0;i<d+1;i++)8 V' l5 C' M) ^8 n/ ^* }9 I% F- q
  recls(x0-i,x00+i,y0-i,y00+i);; o1 g. b6 l* l, B! ]
  delay(10);
" ]' s' E' Z0 R' M: k/ n  }
& l0 Q7 M% l) R  }( }! J: s' i0 R2 f. B2 q

* Q  J+ N5 e! x$ k; c  /************* clear rectangle side(矩形边清屏)***********************/
7 F. ]; M! {2 D
4 ?  E: G! R& |- u; N" p  void recls(int x1,int x2,int y1,int y2)$ K0 n. R  v* K+ T( x
  {
: D8 W, @% s( m/ R1 O$ `* [  int i,j;' S- k0 E( c8 Y
  for(i=y1;i<y2;i++){: g& g: t& @7 p
    goto_xy(x1,i);) W% L, U1 F* m9 p
  putchar(' ');
' U( v2 p* q& q" V% @0 h/ m  goto_xy(x2,i);1 m0 L. h1 [+ m; d% o
  putchar(' ');
- i) B$ v( m/ o( l: H$ J  Y" _. v0 P  delay(10);8 @) I- j. }+ {0 j) V, h
  }/ Q" ^6 d( h( q* X/ l- J0 D, `
  for(j=x1;j<x2;j++){+ s9 D* P: X8 v+ B+ d2 G  g4 P
  goto_xy(i,y1);) X% e( g$ z! ]9 O
  putchar(' ');3 _# t  B. Z5 h7 R: g" `2 V
  goto_xy(j,y2);* Y# a. ~+ o1 D. z) Z% S
  putchar(' ');1 K; A+ ^; V2 |/ @9 A8 C
  delay(10);
. z3 |* D" \- q# M6 L) I/ d  }$ h6 a# d# j5 V# P
  }
  Y& Y( V7 P8 s7 g  /******************open screen clear(开屏式清屏)*********************/$ i0 _; O) Z9 O# o3 I) ?* Z
2 |) b5 X. K- a8 T& d. d- h
  void kcls(int x1,int x2,int y1,int y2)" F2 r* H' P2 v1 e8 n
  {) W- h  q) `# R. a
  int t,s,i,j;; V. o7 @* m$ v2 s( ~! _
  t=s=(y1+y2)/2;4 e  F6 i. o$ A& v7 |6 |9 d
  for(;t<=y2;t++,s--)
) [4 `# s& q5 R0 |  for(j=x1;j<x2;j++){
( H3 g2 \$ J! E3 g  goto_xy(j,t);4 H! g  f1 P4 o' `
  putchar(' ');' }, k  E* h9 C2 r9 B
  goto_xy(j,s);9 P: D# `; W. y% a8 O0 X; E
  putchar(' ');
! N- U% |  m0 Y3 ~4 \, U9 d  delay(10);) ^; _% W5 U3 O  a# Q
  }' S' ]4 I7 g6 s3 n4 Y7 k
  }( j& ]. l% ~5 A/ K% P+ G5 Q
  /*****************close screen clear*****闭幕式清屏*******************/
* |& H: H4 g5 V" I1 Z5 q+ z/ e  ^6 w6 P( b1 I& u7 _0 E
  void bcls(int x1,int x2,int y1,int y2)4 G7 i; x  v; t1 i: Z- k" D( ?
  {
4 i- U3 m% A% C4 o5 n' p) Q% r  int t,s,j;
+ F/ ^. P; Y- J& H4 X+ R4 b, L1 C  t=y1;% E+ s( b% E4 g: |- @3 Q' H' ?
  s=y2;
- b1 R& b$ ]. K$ \4 B  for(t=y1;t<(y1+y2)/2;t++,s--)# h  s3 s$ l7 I
  for(j=x1;j<x2;j++){+ i* q) b, T: J4 u( T7 u: t
  goto_xy(j,t);- x, v" i4 H  v) O! \- Z. h
  putchar(' ');5 _- x( t7 ~. V
  goto_xy(j,s);2 k( O* t& h$ \& V
  putchar(' ');
5 f: Q) B! d0 r( i- X1 {1 B0 K  delay(10);2 f) ^+ Z( ]" `% M/ x) Y5 m) N
  }
2 ^& F# j. k9 M8 M8 p: X( o  }1 k9 q/ `3 T" i6 X* ?
  /******************bottom screen clear(自下清屏)********************/
! G9 G3 I3 n- t! t& Z3 k, l, b, g2 n& o/ F: j3 |2 d
  void dcls(int x1,int x2,int y1,int y2)9 G' Z1 d) W% U2 A& `$ ^
  {( x5 D$ r- ?) R$ M; t4 E! A5 X
  int t,s,j,i;5 [/ `  r- w) d- O4 ], u
  t=s=(y1+y2)/2;" [# s4 D' V! M
  for(j=x2;j>x1;j--)# x/ ]3 E1 u1 s4 D4 J" d2 H/ W
  for(i=y1;i<y2;i++){
6 y" ^7 \3 r" Z0 G$ b2 A6 u! }  goto_xy(j,i);
+ S7 B  |/ D' f  putchar(' ');
* U4 F0 c2 F" o- p5 N4 s# Q) @  delay(10);
3 Y! n% M$ J0 J! G5 L  }+ P3 C* F. ]! J- g% P3 ^
  }! e: z0 o/ O& f3 B+ M, H
  /******************设置光标子函数******************/
6 x1 |$ ]; T( O, p8 e: H3 y5 G& h, U; u9 ~1 Z4 j- h1 m
  void goto_xy(int x,int y)/ R% [( {3 K; ?# }& d; F
  {9 k1 w8 v/ A# Y
  union REGS r;
9 S, w, q& o8 Z  r.h.ah=2;
$ q; o5 _( Q3 y9 z; h% Z  r.h.dl=y;
# s/ O: ~$ ]: N0 [: A  r.h.dh=x;/ n2 ^2 x7 J8 A  w, I* m
  r.h.bh=0;
2 Q  P9 S2 g5 [6 D1 k, d/ o  int86(0x10,&r,&r);$ Q! i% \" I9 u, I+ ?1 N) Q
  }
# n! Z9 n) m4 q; G) e3 e& E+ {2 r" x
9 f9 m4 C1 U- v4 S& f; Z  /**********************在屏幕上打出一连串的a字母用于演示程序******************/% f% t! o* Z5 x; E* X0 W
9 }5 b; ~5 a% y: Z- s: j
  void puta(void)
: g; o% Y8 |/ ^) m" e  {
5 r6 {3 C/ H8 t  I  int i,j;& s" r2 S5 M& _
  for(i=0;i<24;i++){1 _0 ~) G3 |$ R2 @: D
  for(j=0;j<79;j++){: i: M; q8 K5 [9 O! a$ t
  goto_xy(i,j);
" r- `9 |7 A) J  printf("a");* |. }, t; d3 G# f0 c
  }& G7 b) X! `5 b# E$ j
  }
( u% D; e2 M( m5 f! {! N- g% {+ O/ w7 I  }

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