Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,: B8 R6 E& g% s0 V3 Z- A/ T! H
+ ~0 k! a* r/ f" A0 r2 L$ @. l
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 ~# T  c  r( S4 I- r# e, v2 j, E4 Y7 c3 l
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 o' q) q+ c4 Q# A  h7 q" U  子函数及演示程序:
1 n3 q' Q( C9 z3 `6 T# m
; Q# w( `( C4 T2 n3 t: j  #include<stdio.h>9 C: x9 J) o+ {* R5 {/ l
  #include<dos.h>9 F! O2 V* r' [* V2 f/ z* ]
  #include<conio.h>
2 P5 s( d& X! [: Q3 V
. |; ?% W; U) N  void goto_xy(int x,int y);& t9 Q3 l7 Z5 k4 n
  void dcls(int x1,int x2,int y1,int y2);
7 o7 R; M/ x' M/ C# k- y' F. Q  void bcls(int x1,int x2,int y1,int y2);
, f( K. F2 j8 B  void kcls(int x1,int x2,int y1,int y2);
/ E8 d! o- U. u2 R+ s- R  void recls(int x1,int x2,int y1,int y2);
$ ?$ S+ J8 R3 o8 a8 ]0 p# I. g& B8 h! f  void zcls(int x1,int x2,int y1,int y2);5 I  }) _6 y" m  {7 D
  void puta(void);! Q+ j- ]2 X# _" a
) l: I" ?# V3 \4 f9 Q: o
0 M/ W) {1 Z2 o8 R9 a
  /*--------------演示程序---------------------*/
2 Q5 u, N0 ~2 X1 k# s' w1 z  main()
( Y) S) E+ b3 p" Z" ^; F2 Q  {
! f) _7 I1 f0 W  puta();
$ T6 ?( U* u) N- {' Q7 ]  getch();8 R5 U) H2 V" E( p& c
  dcls(0,4,0,79);
8 @: G0 P$ b$ H: x  getch();
) ~9 l0 J8 f7 f  ?3 y9 @1 V  puta();
& ?: j' W6 v: |( v9 _. v  getch();* F( C$ n1 |7 o% Y* M. i! a
  bcls(0,25,0,79);4 c% j( m/ x) g" j4 ?& r9 ]$ B
  getch();6 _  ^$ @' I# i  ^. E5 G7 h
  puta();( s1 j9 [$ G. A+ U% D
  getch();" m8 l4 k# @  x$ q
  zcls(0,25,0,79);
8 F& ^  s9 w* t" J" Y3 M  getch();: a' A* A. D9 Y  A  U. ]
  }
* j+ _5 E0 o' j* H  /*********center clear screen(中心清屏)***********/6 c7 e3 T. d& {
  void zcls(int x1,int x2,int y1,int y2)# l; C* E" D* j" I
  {' s+ Z6 M! u5 X0 l
  int x00,y00,x0,y0,i,d;' \! Z+ f9 j7 m" w+ I5 e
  if((y2-y1)>(x2-x1)){' @; f) Y4 x+ R
  d=(x2-x1)/2;
7 k% N, l4 }3 M  x0=(x1+x2)/2;- C+ f- [- c- a6 R. j' A
  y0=y1+d;( r0 S$ }4 n: L" d4 B" i& y
  y00=y2-d;
* U8 P9 v- q- Z# S  for(i=0;i<(d+1);i++)
3 w4 P* k: W9 z  recls((x0-i),(x00+i),(y0-i),(y00+i));  u; Z$ E& }4 ]0 J: P' u
  delay(10);
. x& W4 l# d; w; D2 [  }1 m% P$ @/ U) @. @8 V
  else{: ~( i( y" ?9 z" J. s5 f
  d=(y2-y1)/2;
6 |' O8 Z# e% }) h* f& v, e$ O  y0=(y1+y2)/2;
5 A! i0 `& I$ l2 b, b/ k- ?  x0=x1+d;' l) t6 ^8 D' h3 f
  x00=x2-d;
3 m/ W& _9 c5 M: }6 g  for(i=0;i<d+1;i++)
4 \2 c. T5 R; h1 w3 [  recls(x0-i,x00+i,y0-i,y00+i);1 N* s* p3 P5 l1 l2 n, i; M
  delay(10);  x  |; B4 y+ h8 z8 E, f
  }( |0 Q4 x3 P+ J  t% ?8 g9 M! Q
  }( H# r( R+ g  ?, b

2 r* ^3 _& O, ~3 ^+ F  /************* clear rectangle side(矩形边清屏)***********************/" }& i$ v8 ~( k+ C- P! B
- H! H8 r! B; L, V( l
  void recls(int x1,int x2,int y1,int y2)) a' w: S' |* P) @& J
  {" B% ?/ h, u8 f$ Z1 `6 m8 P
  int i,j;
) w* x1 b# ?$ Q/ v; H$ g  for(i=y1;i<y2;i++){) }3 I9 T9 P6 V& `- W
    goto_xy(x1,i);
; W+ M; a6 e( a5 ^; Y, k7 A, ~  putchar(' ');/ k7 i  k8 F# b$ S
  goto_xy(x2,i);
" d' \9 }/ f6 {5 u1 t  putchar(' ');
! G. Y; `, O! N& }8 }  delay(10);
; C7 u: o! ~% z5 Z  }
5 |& w, @. T( U! O2 D) Y0 Z  for(j=x1;j<x2;j++){/ }7 D9 X7 c3 p! W1 r& H
  goto_xy(i,y1);; q# D8 f6 l# }) n4 u- N. h
  putchar(' ');  ^) q( z  u; h1 V. u0 V. I' U% F
  goto_xy(j,y2);/ V$ G2 ?- J, F( B  D/ Z
  putchar(' ');
9 _9 ?9 i2 D; z1 i/ ]/ S* N8 l  delay(10);0 |$ v2 n, L0 o: j- ]) b9 H# F
  }
) ^1 Q5 T' ?6 ~* z  }& o* N. s9 c, I4 c& Q$ \( N
  /******************open screen clear(开屏式清屏)*********************/) d9 |5 ~! v9 W) T$ Z
6 n" @3 B7 x3 B3 ?7 m0 f
  void kcls(int x1,int x2,int y1,int y2)
6 e! O' [% S( n  {7 D/ k* p" D. n2 n) ?
  int t,s,i,j;! g4 h% N/ `  y" @
  t=s=(y1+y2)/2;* F* H, G3 `% a/ v% f6 z
  for(;t<=y2;t++,s--)
2 z% ^( [- k8 O& V1 ]  \) a  for(j=x1;j<x2;j++){
' N! r( u& D) l9 f3 Q" H1 N  goto_xy(j,t);9 ~! H! s# ~7 W- C
  putchar(' ');
' f; t4 G( G9 z$ y* e8 B  goto_xy(j,s);! B! I8 B1 h- L
  putchar(' ');
; r% ~" C, J1 T  h" G( C  d  delay(10);6 K  }1 a& G1 z$ i' i: x
  }) k; C5 h. l1 h% C2 Q
  }: m+ G8 b: o3 D* P0 I5 C( n
  /*****************close screen clear*****闭幕式清屏*******************/8 \# U  T# w$ l1 s/ \- D1 R% ~) S$ @
4 R6 Y4 v' e5 V" ~8 T2 b
  void bcls(int x1,int x2,int y1,int y2). Z! t9 z4 R! e8 q4 T$ G  Q1 y
  {# Q8 G; z0 A2 r' u, n8 }6 r% i  d- |
  int t,s,j;# [) }4 @2 E0 ~1 X* p, T8 A
  t=y1;" m8 g5 m6 R7 d( U8 @$ U% }: B
  s=y2;
# i% \; T* B2 K, e: B2 W' k  for(t=y1;t<(y1+y2)/2;t++,s--)0 A, g8 ^# G# r0 B+ `8 ^
  for(j=x1;j<x2;j++){
6 b: j0 T$ _# c1 B- a% b  goto_xy(j,t);
. x' {. B& K  c+ g  putchar(' ');. h) D( R  Q* V3 p% h+ y9 X
  goto_xy(j,s);
6 d6 c2 R; r# G8 w4 o- y1 k: W+ W3 }- ?  putchar(' ');
' N5 F) W2 o( o' [# e! P7 ^  delay(10);( H& \! M; K$ k7 `
  }6 H( U+ }" t$ ]4 c8 ~
  }
9 C. Y( ~/ ^1 ^( r+ G$ x; b- A  /******************bottom screen clear(自下清屏)********************/5 S3 `# l% }9 D  W' Z
5 r9 f, q* W0 e# `2 D
  void dcls(int x1,int x2,int y1,int y2)8 Z; ]+ V' e$ B" r" X( t5 {3 x6 n. a3 O
  {
3 h9 T8 O4 a/ |( w  int t,s,j,i;9 ^! [6 Q7 Y6 H: s" u( b" t
  t=s=(y1+y2)/2;
# E% ~$ h8 b1 ~# q  for(j=x2;j>x1;j--)
; B$ `0 M+ H- E  for(i=y1;i<y2;i++){
- o9 W3 @5 e1 b& C6 G( Y  goto_xy(j,i);7 I+ W3 x' f( a7 I1 q! }
  putchar(' ');
4 C+ g4 L$ u0 s4 Z1 e! b) ?  delay(10);' C# [  u) o: M
  }; O( r+ u6 o7 ?: }
  }
( f. E( H$ p8 E2 f- L  /******************设置光标子函数******************/
8 q1 D# d0 x( m3 W$ a* }, {% t
$ p' `5 d5 J( B# e9 E% `  void goto_xy(int x,int y)
5 T& n, D2 x+ g2 o! @  {
0 `% s8 i& Z. S: r) x* `$ v  union REGS r;
) Q0 v! R1 W& W! G2 \! P  r.h.ah=2;- C* o$ n' y  T, U8 A9 ~# y/ M
  r.h.dl=y;
- S" k; E6 W/ J9 \  r.h.dh=x;8 W8 b/ E/ ?) j# x$ k
  r.h.bh=0;: d; V, c& Q4 w4 Q
  int86(0x10,&r,&r);
# K* L4 @6 Q: l  N3 W  O5 }3 I- G, Y  }
2 R! l# {" ?' `
8 |  O& h' y; Y# Y8 |  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 ^" L9 Y: V& d6 v; o+ Q
" q: V5 ~; I# S  void puta(void), z: F9 c9 U7 A  z6 J. M
  {* A& a4 x/ z% ?  H+ ^
  int i,j;
. @; h. M4 [! I  for(i=0;i<24;i++){5 {3 F4 K1 o2 P
  for(j=0;j<79;j++){/ I$ c, e( H! l  W' s! q/ s
  goto_xy(i,j);2 C2 \2 K' a+ y" X1 P7 u' I+ Y
  printf("a");
* I4 w7 y' |/ n% A9 g  }$ q& y+ y+ f% N$ ~' ]- y4 M, m
  }+ O6 E$ y, U$ O) Y
  }




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