Board logo

标题: C语言艺术清屏 [打印本页]

作者: zw2004    时间: 2008-1-21 17:14     标题: C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% }1 L$ ]. y3 ^" q/ t% W
, w/ F; E) q5 w/ r7 `$ {0 i  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ p" b- [* g" n! N& B3 b4 |  D- B7 U9 a1 \
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 r9 ^" L4 J/ H2 k8 z0 a3 _) }" M  子函数及演示程序:
: x+ |. |( y* b3 K
3 h4 `3 C7 D  z9 ^5 N3 l( b% X  #include<stdio.h>) q8 s6 F. y: P' y1 G6 i( G4 y/ J
  #include<dos.h>
: V5 m  c) A5 G- j% C4 B7 g/ o  #include<conio.h>' z6 x' J; V, Y7 G% B) k6 k

/ C; b( N9 g' F; T5 {2 J  void goto_xy(int x,int y);
( X, B0 o$ }( j2 r1 x9 }8 b: k  void dcls(int x1,int x2,int y1,int y2);
( E* J* b; A. x6 F( x6 b+ t6 m; T: m  void bcls(int x1,int x2,int y1,int y2);. ~4 Y' J& Z& b6 N6 b
  void kcls(int x1,int x2,int y1,int y2);0 b* `; f" V# ^" h
  void recls(int x1,int x2,int y1,int y2);0 L' b- O2 x3 r8 V* L- O
  void zcls(int x1,int x2,int y1,int y2);% S  J2 o# \  v/ H
  void puta(void);# o9 h+ V) l( i) F9 Z! R

2 d& b. R" h2 @2 c4 c0 y( x. A/ {
/ |0 d6 p9 q5 A/ Y- S  /*--------------演示程序---------------------*/8 a2 ^( U. `3 `4 k* j* I
  main()4 E4 Z7 N9 G3 }+ w
  {" }) C& C* v% x0 |+ F, e' c
  puta();
3 _$ Q  F0 @, ?" O4 x. ^; |2 v  getch();7 {9 b8 B8 I# E; m1 y- G8 u! c  F) Z
  dcls(0,4,0,79);
$ v. k9 r* Z; C4 W+ q  getch();8 p9 @  X% h. l# H- v
  puta();
  O9 W: k/ m1 l  getch();1 v# m" D8 B6 g: @+ V$ M% a
  bcls(0,25,0,79);
5 v. t  a2 E' K) \  getch();
" \* ?1 s2 N8 t* S8 }& v  puta();
& h' p  {! _+ w: q; `  getch();2 F2 b( u- \& G7 Q8 o) u
  zcls(0,25,0,79);
! Z& }3 `  X3 b/ n8 K. D( e( u  getch();3 n; T0 N+ t1 R; k6 ~
  }
" c- n- P% C- t$ |% n  /*********center clear screen(中心清屏)***********/) u9 |" Y4 l+ p# R6 r
  void zcls(int x1,int x2,int y1,int y2)- d" S7 `" ?8 @. Q( Y
  {, e. V3 P: G* V% S: e
  int x00,y00,x0,y0,i,d;& m& E  q, J+ x" _6 ~, |; W
  if((y2-y1)>(x2-x1)){
1 M2 R7 T/ G( N0 O% x9 j2 _  d=(x2-x1)/2;
0 p( \+ B4 O0 P# {  x0=(x1+x2)/2;
' e. H& i5 s* }. _" x7 b  y0=y1+d;3 i/ g* d4 k1 o  t
  y00=y2-d;5 e' R  S# y8 v$ ^" ?
  for(i=0;i<(d+1);i++)) a+ i9 s  F, q4 E8 P( n
  recls((x0-i),(x00+i),(y0-i),(y00+i));
4 p* {& t7 d/ M; _% v( \  delay(10);3 a" w& W+ }& V) d
  }! S6 N9 V. t! w8 p7 i, W
  else{
, B  x" W' e8 `  d=(y2-y1)/2;( s5 e- U: |" g
  y0=(y1+y2)/2;! U% Y" _& b* P7 I3 b* M3 V
  x0=x1+d;
+ D. j) [1 r, f  x00=x2-d;  A' m9 n# C+ S/ N2 L
  for(i=0;i<d+1;i++)
, v/ T: A$ {' d& m  recls(x0-i,x00+i,y0-i,y00+i);  f: V& r$ F4 d$ g
  delay(10);8 B- a" @, B4 }( U# ]
  }/ v) B( l) k. p$ \
  }
4 q% h% u% V' z' ?, D/ c* l& b) Y+ I( @
: ^; X: N  @( N! N2 ]  /************* clear rectangle side(矩形边清屏)***********************/
' ]% [2 ^/ I+ ^! F3 Y: h9 x6 B7 t0 B' g0 Z; G( l' }. c
  void recls(int x1,int x2,int y1,int y2)
) r5 x# l/ Y! T0 ~/ A* @# M% g  {
& F! N# I. J9 T9 ]9 P6 H  int i,j;5 J% u% Z4 n1 b: Q
  for(i=y1;i<y2;i++){4 ^  b  u4 {; V: ~
    goto_xy(x1,i);3 \; z: E/ h# G! g3 t
  putchar(' ');
) o8 c$ T: z" v5 T3 r+ H  goto_xy(x2,i);& s( w3 u4 l! ~5 _) Q& L
  putchar(' ');" \$ s' D, ^; P7 H* P. `) W
  delay(10);
2 b1 {# i# r+ V: F7 P  }
8 E, Z9 O2 F& i% }2 `  for(j=x1;j<x2;j++){) C' k9 a( |$ V( l3 M
  goto_xy(i,y1);
0 v% ]8 N5 [: f+ P3 u8 c  putchar(' ');
& A* W, g8 l1 g/ u  goto_xy(j,y2);8 R7 I2 j, K$ ^% B4 a
  putchar(' ');2 T% A+ K6 |5 o
  delay(10);9 B! y: [( M. T( s
  }
- n; U( t' N! p  d+ I+ `6 L  }
# {) h) O) Y6 @" w0 k4 J  /******************open screen clear(开屏式清屏)*********************/
( [  ]  {9 v9 C- n' i4 ]$ s0 @3 }& b) f6 v
  void kcls(int x1,int x2,int y1,int y2)
1 z8 {& E; c3 E9 D3 x  {
. k( I+ C% n, A. l  int t,s,i,j;- ~- v6 o9 n8 E  z: M; l) {
  t=s=(y1+y2)/2;; M6 O1 {' w% s* |
  for(;t<=y2;t++,s--)5 M; _2 H  u/ j
  for(j=x1;j<x2;j++){) K( t2 s* ~5 A2 _! _- b# b  S
  goto_xy(j,t);
, c0 H6 |4 ^* i/ R1 R  putchar(' ');
* c$ |$ d" I+ }; r( [; K- h  goto_xy(j,s);: e. J: B3 S' y2 u" N
  putchar(' ');% k# @, w+ K9 I% t; a# }: m9 ?8 [+ |
  delay(10);
. S$ q. g* O( J6 c' L  }- E7 O$ \  `! Z
  }
. o* z) A, v) ?) P  /*****************close screen clear*****闭幕式清屏*******************/
7 I/ q% C) F- z) y3 a! C, ], U7 P. u& E0 \) c1 e
  void bcls(int x1,int x2,int y1,int y2)# m! w8 M! h2 w4 u- |- Y  c+ J
  {$ ^* K% r0 l2 F, \: T% `; P1 R
  int t,s,j;, I8 ?& O  K# A9 E% f+ ~# N
  t=y1;. e  v' `1 a: u7 E0 u* o; {
  s=y2;; |. @6 w5 V" W' Q  R
  for(t=y1;t<(y1+y2)/2;t++,s--)
+ [. ^' \1 C! X% p3 \! `  for(j=x1;j<x2;j++){
' n# ?& _2 V/ ^8 f/ |  goto_xy(j,t);
3 o/ t+ F& `  W  ]: V  putchar(' ');
/ t: A7 ^7 x; M9 s$ S$ X  goto_xy(j,s);
* C$ \$ W- V0 \0 w# n( ^  putchar(' ');
+ y; c- y( q5 B8 ~  delay(10);) @) ~) f* n  P
  }
; w8 `4 O! j6 l+ k' j9 N- P  }
+ k6 ~5 k+ ^/ k( l- n  /******************bottom screen clear(自下清屏)********************/( `* }9 z" Y3 B0 a# v% N
% X  S9 a+ f" y5 W
  void dcls(int x1,int x2,int y1,int y2)
' }' i: o* Y' ]; x0 @0 v  {2 F1 y/ w  L. f! H- G! d% a1 R6 a
  int t,s,j,i;" |& x/ B* N9 O) e
  t=s=(y1+y2)/2;- a3 z6 e" N5 z: `9 W9 d
  for(j=x2;j>x1;j--)" R; Z# \  s' x3 o7 g
  for(i=y1;i<y2;i++){
) ?' t* u3 o8 H& r6 A* t! V  goto_xy(j,i);  j: l7 t8 ~: I1 e9 i6 Q- B
  putchar(' ');
* Y" W# K7 y) }  delay(10);5 b8 C+ ^4 _0 K# L+ O. r. l0 F# a
  }
2 N- B2 Z( C1 h' a; H  }
# Z- [7 g5 E9 e* d6 v7 ]* b5 {* a+ j  /******************设置光标子函数******************/
$ j* P5 t6 g' v. o/ K- X+ o2 ^- s% c8 I8 t% r/ W; N8 ?" }6 p
  void goto_xy(int x,int y), m/ s. }' i( l+ r5 d' x* O4 @- w' K$ g
  {
9 V6 K+ J# R, p; V. z- p+ u  union REGS r;% q$ k" F! @4 r0 U
  r.h.ah=2;( @9 P- S+ ~1 l. `: T+ b9 r
  r.h.dl=y;
0 J- o  n: A- L8 F* T8 B! S+ u  r.h.dh=x;
' j! a" \% E; b' _$ p/ m: C0 S3 }  r.h.bh=0;
" B1 n  H7 t* ?. `+ Q$ M8 M/ k  int86(0x10,&r,&r);
, x7 v( ^- \$ M6 R  }
+ K( ], J9 g) S! K  G; ]2 A2 U9 n7 f( F" `' @
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 o* L  D0 r4 H  o/ f
, A0 d' _* U6 }- a9 m6 D' P  void puta(void)
0 n' l2 T& D  ]2 G2 H  {
$ ]. a: S) t* _6 I" x  int i,j;
' Z( f- a: j( C7 l% w" X0 \7 s+ c  for(i=0;i<24;i++){
, V' X" b4 I; `! k" W- S  for(j=0;j<79;j++){+ }# G" U; ^% n0 I( D! Y/ T
  goto_xy(i,j);; v/ W5 o- u! f/ i
  printf("a");
$ T5 e# r$ w1 c1 |  }" C. I3 Q6 g4 }( P. T
  }/ u/ H5 y' G# z7 r% n/ A
  }




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2