Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 j( I7 K- ~  M! K3 o  l3 n# \) |- c7 ~) n
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里% b- R4 N) C, U2 d: a

! ?' k, C" i- o& v' k8 c$ |  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 X: V4 t' d; e, m% `- l  子函数及演示程序:) R3 H  }* W+ t0 W8 G: ]4 v4 T

& l) V# R1 O- \" I/ m9 q  #include<stdio.h>. v7 R. z0 V- C# Z
  #include<dos.h>
: E& C8 y7 c+ J7 a4 W4 `  #include<conio.h>* N7 ~' c% d# G! @9 b7 Z

0 f9 |7 k  O* R5 y0 T; u  void goto_xy(int x,int y);9 |7 A: {' m6 q- X% ]
  void dcls(int x1,int x2,int y1,int y2);
4 l0 [3 d' A4 A# K* x( X( F+ v  void bcls(int x1,int x2,int y1,int y2);: [9 a1 ~. ?- L- V$ }' F' o: x, ?8 `8 S
  void kcls(int x1,int x2,int y1,int y2);
6 \* i4 S: r+ a! p  void recls(int x1,int x2,int y1,int y2);4 W2 |! e; D( P5 x2 g( F
  void zcls(int x1,int x2,int y1,int y2);
9 ]; T( U$ V% D) k0 O5 G& u  void puta(void);
- \' a0 L  R- T3 J) t' G3 g
& O% A$ x/ Z; }4 B* Y2 h7 I* R8 U7 Q
  /*--------------演示程序---------------------*/9 D8 _! b. r  p% D1 _3 r
  main()
4 q( @) O4 T5 [  {
0 _# O/ o0 X; k7 @+ m  puta();
: N6 F  f6 J# f7 i2 [  getch();9 T4 b- V  N* Z: Z( q, h: Y% t
  dcls(0,4,0,79);/ F2 S; ~) O- P8 z" p
  getch();) |$ ~0 O- B) s
  puta();4 X5 R1 O5 C. H$ U* }
  getch();
" e4 a" i: u- v  p8 F6 Z2 j4 A  bcls(0,25,0,79);
6 \, ?" J: |* o0 _1 M* X4 U) H) H8 P  getch();$ }7 Z( k8 J5 U) X
  puta();
" V2 i9 F% n2 I5 e  getch();- {+ ~2 z/ l- y- _! M) e
  zcls(0,25,0,79);
0 s- V$ a* H& M5 t  getch();, r2 X/ k5 ?2 p3 S$ k- Q. U; u  P9 Z" k
  }' z1 y$ i# M8 {1 X% a
  /*********center clear screen(中心清屏)***********/6 M8 l: E& e5 ?( o( Z# y4 s: `
  void zcls(int x1,int x2,int y1,int y2)
1 V/ p! h$ I5 R) i7 G; X- T  {
2 }, v+ K' s: \: g  U7 C  int x00,y00,x0,y0,i,d;
* C! x, N$ w: z& U  if((y2-y1)>(x2-x1)){" X# U' J7 ?0 x- Z+ o
  d=(x2-x1)/2;
$ W1 B% s3 H7 S- e  x0=(x1+x2)/2;& H, r7 D2 ^' \9 Q/ W/ y
  y0=y1+d;
; e" B, e: a/ y  y00=y2-d;* x* S' q( f: N: p4 o& X# Q
  for(i=0;i<(d+1);i++)! I9 C1 x  |' q8 }
  recls((x0-i),(x00+i),(y0-i),(y00+i));" r) j" V) l0 U5 ~" Q" R- I9 D
  delay(10);
( e, b! o" o5 W1 V; [8 v5 g  }
3 T  L- V8 ~0 f" W4 g+ [  else{# w+ Q% k! r. c/ s. |% c4 `! ^
  d=(y2-y1)/2;
. Z* b0 {" X6 V+ c. ]/ Z8 ?  y0=(y1+y2)/2;" j" R* l, @8 ~8 ?
  x0=x1+d;
" X4 W+ H5 H; e$ E+ o+ H5 f  x00=x2-d;
, X, J7 G9 f' {0 e" V  for(i=0;i<d+1;i++)4 G/ p0 X% N$ o% X0 m$ h
  recls(x0-i,x00+i,y0-i,y00+i);
" Q6 s5 h8 c) n0 \) k( J9 Q  delay(10);
7 X4 I& R5 x) u# r$ E3 k4 g+ c  }6 |; }, x/ b+ V
  }- ^6 Y+ W: m! P/ Q/ V% I) h

8 |* |3 D5 j# d  /************* clear rectangle side(矩形边清屏)***********************/3 x/ x* W- m+ Q

# t0 U5 ?( N  H) p( k: M  void recls(int x1,int x2,int y1,int y2)
7 q: \/ b1 x7 M  {6 [1 ^) r: I8 \1 P$ ?: s8 m, {& Q& }
  int i,j;$ L( D+ e  v6 h# B9 ?  h, r
  for(i=y1;i<y2;i++){2 Q6 q$ \2 @4 W/ y2 ]7 `
    goto_xy(x1,i);
/ q6 A& y, P* A  putchar(' ');
2 z3 r0 g, s! P* F$ y( C# m, ?. ~  goto_xy(x2,i);( M& m4 [  O: F. [6 X
  putchar(' ');
- y+ l" S" u: N; {6 J3 ?3 O  delay(10);! ]8 t3 Y) q' {0 T: f. W
  }
- M. N0 l7 {: J  for(j=x1;j<x2;j++){
; k3 L8 |' k( e, L9 R. ]" n  goto_xy(i,y1);
+ }3 D5 }4 E" k) t6 I  putchar(' ');
1 o2 Z2 p4 K6 o* F' c& _9 l  goto_xy(j,y2);: m9 w) n% Y% v  c8 S0 I. H
  putchar(' ');
$ }/ K7 i- J$ E2 V  delay(10);. \) Y+ S) {+ ^: W  D# \
  }
  z/ g/ M1 L& ^6 ]  }# t  E+ P! ^4 Z0 O
  /******************open screen clear(开屏式清屏)*********************/
- C& \# X3 j8 P' B2 O+ i0 v' y1 T1 }5 I
  void kcls(int x1,int x2,int y1,int y2)8 ~' m) e- X6 o. g
  {. U+ s6 S+ \; {/ P' z( y
  int t,s,i,j;4 @0 Z8 ]( t9 O* t
  t=s=(y1+y2)/2;
  N0 ]0 o9 e* d3 e9 q  }7 A- g7 t  for(;t<=y2;t++,s--)2 U7 W" {1 s6 f
  for(j=x1;j<x2;j++){
  A' ~4 R6 `* u# I: f* g8 T1 |3 E  goto_xy(j,t);2 j9 y  f! ^* |1 h
  putchar(' ');5 k) ]; }: o8 m
  goto_xy(j,s);1 V1 }; Y: @+ j# [7 n
  putchar(' ');
) G+ T  t8 i- f1 m/ V1 Z  delay(10);9 h4 G3 F( A# k8 J/ K1 r
  }0 a" c! Y1 _2 m# \
  }% c5 p, c/ g/ Z5 e2 r
  /*****************close screen clear*****闭幕式清屏*******************/4 D, k3 ^, w4 V' p7 H

5 d, D" W( n- A# }! O  void bcls(int x1,int x2,int y1,int y2)7 R2 ^- f2 ~5 S) y
  {5 |  |& Y: t' L7 w
  int t,s,j;
  P& b6 q; T+ Y$ R  t=y1;
, W0 Q, `- \7 e+ J2 r- {0 W8 p  s=y2;+ R; M1 O/ P- M7 a2 w
  for(t=y1;t<(y1+y2)/2;t++,s--)8 {( S8 }: A1 S3 f
  for(j=x1;j<x2;j++){& W7 k3 ~: ^" B9 P& q: U
  goto_xy(j,t);4 x5 Z8 G8 u" u: W, d) ?
  putchar(' ');$ c9 o! [8 G) H8 p$ M9 }
  goto_xy(j,s);
5 p0 e* c2 h; `0 y  putchar(' ');
+ u$ p' Y+ ~8 n* D  delay(10);
' k" h1 W! x/ o, S  }* u7 \5 i( E7 c5 W% r7 n
  }
1 j0 _; a; i7 r" M& C7 f. N- j  /******************bottom screen clear(自下清屏)********************/
. J/ k3 v" d, A( N, Q+ \# Y: D% C- E  Q8 g  |# [
  void dcls(int x1,int x2,int y1,int y2)
  S+ w2 m5 S/ y  {- d0 @8 C% v: O
  int t,s,j,i;$ g  d) r8 v  Z2 ]: N; q
  t=s=(y1+y2)/2;" w' h4 a3 K6 G+ b
  for(j=x2;j>x1;j--)
4 ^3 L, U  h+ n  p! N  b7 L  for(i=y1;i<y2;i++){7 d1 }5 [7 E8 m$ B/ @
  goto_xy(j,i);4 s7 z0 {& M8 f: R( {
  putchar(' ');4 D1 f4 y* X/ `2 B
  delay(10);. w# {2 \# n! {$ P" u# E
  }
3 Q; ~* {) ~3 u  }( R1 k* ~) a8 E' X4 C" A% [
  /******************设置光标子函数******************/
' N* i# `$ F+ M( k/ o  H
  i/ _; L, Z9 X2 m  void goto_xy(int x,int y), B* R% i# M) h3 y% W( C, _' S4 ?
  {2 `$ n+ q7 p$ l/ d* i- U! o  X
  union REGS r;
, J$ b  Y5 A2 E. X4 b& T5 r  r.h.ah=2;, h, Z- U7 L$ D! a0 G
  r.h.dl=y;
0 h9 b# Y! z6 z- s, f9 F  y  r.h.dh=x;
3 Q+ o5 S' h  Q0 D5 ^% d9 A# t: b  r.h.bh=0;; e% @+ o6 A- k: ~3 P+ Q3 j! ^
  int86(0x10,&r,&r);* {; I5 z( f  B
  }
: O  _% H* j4 c4 |0 Q
! I2 H' S- W8 L) ]# O2 q  /**********************在屏幕上打出一连串的a字母用于演示程序******************/% P1 k- H, s- G& }4 j, a
4 I* g0 |# s4 u( F* @; Z
  void puta(void)" ^: C+ b- c$ b6 K
  {) p2 S6 t+ R4 C( J. Z9 [
  int i,j;
5 L: M/ b0 d4 V  J  for(i=0;i<24;i++){9 z6 l- f1 m4 k; F8 N
  for(j=0;j<79;j++){- B* R1 \2 _, i3 k. p! K% g' _
  goto_xy(i,j);* P3 x9 U$ g) p5 L+ ^6 h( `1 R2 d- @
  printf("a");
# R" A" B3 L* S- m; S  }
5 t0 ]- J4 C2 ]- R* V( {  }
5 c  a3 A; {* A  }




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