Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# I3 A6 m% y) Y  u
9 K  ?6 @' V* ~6 \& M- R: Q$ f! |  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' c9 S+ c' x, q+ K7 Y
4 f: o: h; X, A+ B, i- ]. c+ }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ D& |  L! [4 l) V8 K( w  子函数及演示程序:
% ~& G& J8 p: x3 s- S
3 p8 n$ |+ z, I% T0 a  #include<stdio.h>6 L$ G- Y. y; Q% G
  #include<dos.h>
6 r6 H, ]0 J- e) [' Y  #include<conio.h>
% |' a7 Z* P! A. }
# z* v2 Z/ d9 f0 f  ]3 z  void goto_xy(int x,int y);
5 @4 C6 ^; a4 \4 _5 P  void dcls(int x1,int x2,int y1,int y2);
- A& O1 z; }1 q( d  void bcls(int x1,int x2,int y1,int y2);
: ]3 I0 I4 m1 S% t8 |" ~' C  void kcls(int x1,int x2,int y1,int y2);! K3 ^4 j7 V1 c" }8 p" }
  void recls(int x1,int x2,int y1,int y2);
5 V, L( U. r* e# @' L) ~' U/ S  void zcls(int x1,int x2,int y1,int y2);
" o- v6 n/ q' C0 a2 Z  void puta(void);' X' h: b- q( W

; Z. {& m/ a5 F' m9 E! }: @" {$ g, S) a: \0 R5 e) a/ H* m
  /*--------------演示程序---------------------*/
7 ]4 u7 o3 ^) [, m# Q7 Q) k' S/ |+ @  main()- N' `  z* a2 Y$ M% b. M/ n3 ~2 j
  {
) d& e5 M# y) l  puta();  [2 o" y6 i$ T
  getch();$ Y0 f" v$ D1 W( D/ B  C
  dcls(0,4,0,79);
4 Q9 f$ m& ^( u( O: M  getch();) d3 o. O) N5 H8 n* H
  puta();
+ Z' X9 @) H# z( q1 O  getch();
9 z$ F% v4 }$ T  a& {+ @  bcls(0,25,0,79);
6 A6 U. ^4 A1 l* Q4 p4 m5 l9 j  getch();
0 ]% ?; u. J4 `7 b! u8 A  puta();! R  w6 h  v" v$ j* ]+ d$ |
  getch();
' `2 v2 K  K% ~: G5 \4 o  zcls(0,25,0,79);! k# v+ t+ \7 k' R9 z5 G- d9 g
  getch();
: u) ?" F8 t+ k# r2 _$ g$ g) K  }1 d  y) N4 C- f# t1 @# T
  /*********center clear screen(中心清屏)***********/
) k+ s& L0 i9 w6 [  void zcls(int x1,int x2,int y1,int y2)& @6 j  f& h1 D. a) K* G8 w  b; r! j0 E9 A' y
  {
& }; u( u! c% y( P4 H  int x00,y00,x0,y0,i,d;0 T1 C& h$ l1 s  i( f
  if((y2-y1)>(x2-x1)){
" U; E0 r  D7 v$ _4 ?  d=(x2-x1)/2;
8 m. F7 Y# S5 \; m4 M: Q  [6 U  x0=(x1+x2)/2;. f& r1 b3 r8 K$ B
  y0=y1+d;
, C5 F& ]: Q6 H8 Y) h  y00=y2-d;. e! F5 @, L6 l# _- b9 u; `
  for(i=0;i<(d+1);i++)
/ {8 C5 d' L( H3 ~! p  G  recls((x0-i),(x00+i),(y0-i),(y00+i));
- ?: e1 n! w; ]; k/ N) Z  delay(10);
4 \( p' l9 `0 L* v% G: u3 b  }- S9 _$ F" y" V. ^6 W* C+ v6 S
  else{; a. L. A) a6 J( W! J
  d=(y2-y1)/2;
3 h6 \8 W2 d6 M2 y  y0=(y1+y2)/2;4 ~! g5 J+ Q, A! R
  x0=x1+d;
# P- F3 W; r8 A% Z- d  ?( Y) {  x00=x2-d;
0 K& `9 V* Y5 H, q$ B  for(i=0;i<d+1;i++)
% z1 y  l' ]" Z, ?% v& ?  recls(x0-i,x00+i,y0-i,y00+i);. @  ~. K/ A6 k1 U0 N/ R  q; G
  delay(10);
0 a1 W' e& B, ^/ L  }
% M4 _3 @( F" J1 V/ ]  }& B+ u6 q* s0 k; M2 s

) A: h# L( g+ X1 k' K; Q# V  /************* clear rectangle side(矩形边清屏)***********************/' s& p" U2 b" x' B
8 t4 A. i) \4 {9 l: @3 X
  void recls(int x1,int x2,int y1,int y2)
% ^0 C2 z7 f" W; {, j" n6 h  @* ]7 a  {! w$ p$ k7 m0 |4 S
  int i,j;+ f8 @# A4 d! u' I
  for(i=y1;i<y2;i++){
8 X$ @/ ]* @8 ~  Z    goto_xy(x1,i);1 ~$ `# s9 r& U" h
  putchar(' ');3 N( f! Y* f7 Y6 A) O
  goto_xy(x2,i);! A1 Z- @$ R+ o  X# P
  putchar(' ');7 p' ~( S1 U4 T! d
  delay(10);
( B9 E7 C' B( B" s$ X6 u  }* j4 B  z# E( G( T3 q0 a
  for(j=x1;j<x2;j++){5 T- _% r) h" H0 G- v- `2 H" W
  goto_xy(i,y1);- N6 }9 T0 J, S7 J; k9 d
  putchar(' ');0 X! c, V% g( g1 r) S7 V) G2 V
  goto_xy(j,y2);
) H- ^% Z3 N- ^0 w  putchar(' ');& D* [7 F2 z+ Y# s* y' |: }: _, f
  delay(10);
# }& `8 U# z" e  }4 b' Y5 a+ X0 [, }$ P
  }
7 X9 [1 ^' p% s5 e$ O1 i, P' `  /******************open screen clear(开屏式清屏)*********************/
8 R3 }' b$ P( H' ]4 {, d0 ^1 @2 j. {2 z# w7 X4 B" Q
  void kcls(int x1,int x2,int y1,int y2)
' g: P9 z  j% r  {: C- k1 R, V/ w! I
  int t,s,i,j;, H# m% t# t1 |  c
  t=s=(y1+y2)/2;% D1 ^, K# r3 V! Z
  for(;t<=y2;t++,s--)  b1 `$ S' D* S$ m9 b
  for(j=x1;j<x2;j++){
" X- f; V4 L2 u! V: t& S# [  goto_xy(j,t);
3 l+ [0 n5 I; F! p* m6 M. a& i  putchar(' ');
0 Z0 q  l" ?" A' G  goto_xy(j,s);! R! O" M6 t) e! }# W- j
  putchar(' ');
) {$ _+ ~- X% V" S1 P2 k  delay(10);
  |4 Z* z: A6 S% t  }& m7 c2 I0 d, f9 Q5 T8 }, t; l
  }2 L2 |) g% e( f& j! [! R
  /*****************close screen clear*****闭幕式清屏*******************/
8 B: P+ {; _. o0 l. F- t# V/ m6 `3 z1 k8 u- g- q, _/ u
  void bcls(int x1,int x2,int y1,int y2)( M6 A: `9 A2 x0 M
  {- G, i9 @: V" D7 s( E% e
  int t,s,j;- ^+ ?) d, X0 I
  t=y1;7 Y! s! i! U1 ]" b* d
  s=y2;
) R! f5 P7 l( k* S% n  for(t=y1;t<(y1+y2)/2;t++,s--)
& a5 ~( `/ d2 R7 x; K. e  o. t0 \  for(j=x1;j<x2;j++){! P( X. S/ [/ J
  goto_xy(j,t);3 \6 `$ V+ s% P2 h
  putchar(' ');9 m$ R5 J7 l3 d6 ^5 R+ _( l
  goto_xy(j,s);5 s3 l8 c- g8 p1 ^
  putchar(' ');
( ~' ?4 r; x/ O  P6 E8 }  delay(10);/ G" Z- [7 C7 b0 i" d# D) m8 v
  }
! e9 Q- G. C7 M! E1 d0 _1 D* g) ]  }
0 k4 R  H6 B. M7 l, n7 T  /******************bottom screen clear(自下清屏)********************/
. `1 U& |, M' h) w/ V. O
! T0 B& {8 T( _  void dcls(int x1,int x2,int y1,int y2); s. x& g  o* G
  {
. ?5 G$ _# s: S/ g2 r1 H  int t,s,j,i;
) `# _/ O2 @1 f0 S/ G  t=s=(y1+y2)/2;
  H* L! c  N0 M: d; n  for(j=x2;j>x1;j--)
  V7 |9 w' x( }* y$ C. z  for(i=y1;i<y2;i++){
* g/ V% I6 W. _" J8 o  goto_xy(j,i);$ ]" j: k" f0 V, ]3 f7 S; q6 [, H  d6 z
  putchar(' ');$ Z( B  O& z* ~' |; y1 k' q
  delay(10);6 Y' F& `/ K- B& |/ q
  }
/ v. a/ s5 ^' V4 }9 T; J  }
8 [" j5 j* k" t  @  /******************设置光标子函数******************/
% h- B* G4 f, ]1 |$ j$ R
$ v7 \- t( z/ p5 w0 O6 f  _+ M  void goto_xy(int x,int y)* \; q. D8 Z  h; W7 _) }
  {
5 \0 i/ o( G' q3 E4 J  union REGS r;
1 L/ m  M* C" `6 M- _( A; O- ^  r.h.ah=2;0 p0 A1 ~& ?+ i8 D$ ]8 ]. I
  r.h.dl=y;- Z0 R& C9 k- h& a! F
  r.h.dh=x;" d2 T. D. J; M, u9 a( c) b
  r.h.bh=0;% J4 P# t/ Q7 `7 v) s
  int86(0x10,&r,&r);
1 L; F$ {8 e# h  }7 K& w/ Y* X" G8 J8 r+ k
" w6 c7 C8 v  E% @. j
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
9 n, H' O' c# d6 C7 O& |3 P
) i. \* ^0 l9 B! s# i  void puta(void)
1 @: v. e; l( O$ V0 ?  {" Y% \2 u, m8 {: a: K' A8 L' {$ B' s2 E
  int i,j;
5 c$ ]4 `* j/ h) h. [, ?  for(i=0;i<24;i++){
* v! `. z; |8 g2 j! L* J9 m, ~: J* |  for(j=0;j<79;j++){0 l2 A* C: [, N$ o% V# x
  goto_xy(i,j);
* S1 [- M; i- ^0 u  printf("a");7 x# J  j5 u5 t$ {3 K
  }
3 }' Z! I) N0 I3 B8 u: c  }  a7 u; p6 V% I: o  I5 ?
  }




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