Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, g. K- [' J8 M, w( k3 d/ r* o3 Y4 C

% g! ~* Z1 C  ]/ S! v5 `+ J' R, l; U  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里$ U, s( G+ f6 p. |
' F+ Q  P% p/ f9 |) k  t% }" Q
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% E9 Q5 z  @2 e- z7 e  子函数及演示程序:
8 A. c0 v% t+ ]+ B% d/ R6 t2 \# m# a. v2 P
  #include<stdio.h>
# ^. Z4 a7 }3 y+ |6 p  #include<dos.h>9 b6 T# B9 F# F8 B# a
  #include<conio.h>, X6 w! Z0 r0 u, r

% y" w5 L, Z" q3 @$ E  void goto_xy(int x,int y);; i* |2 d. s' w  r" i0 s+ g/ @
  void dcls(int x1,int x2,int y1,int y2);& y! W/ W3 d* \
  void bcls(int x1,int x2,int y1,int y2);. A$ ]1 @$ M1 e8 l6 R! D
  void kcls(int x1,int x2,int y1,int y2);$ _) T1 k: D  c" Z
  void recls(int x1,int x2,int y1,int y2);1 Q/ J( \/ b  w/ e
  void zcls(int x1,int x2,int y1,int y2);3 o8 ^: y3 C! `4 o  s; y
  void puta(void);
: G" F+ l) d" z' F6 Z0 Q9 w3 |0 V* o
* A- a+ U- y9 s. f1 g
  /*--------------演示程序---------------------*/
0 z. _6 c/ S9 J3 P8 o6 \  main()
  \" [# \1 M2 g9 v- H/ Z  {
7 r; m. W/ ?8 A$ a8 t' J  puta();
3 a; C" E* N  X6 J& F2 ^0 c  getch();
3 i& D5 o& N' g  J1 N; x+ B  dcls(0,4,0,79);
/ ?/ Q9 ~" x5 x, I4 }" T  getch();. _$ V) u$ g  U- n; l2 f
  puta();
0 e7 C' |% e! }. B7 t5 T( q  getch();
3 I# C* M: X0 p  bcls(0,25,0,79);) j; I0 M( H5 g( L. N3 U
  getch();/ d1 O8 ^4 g5 [6 ~- V) H4 T
  puta();9 H8 I, y$ R7 O
  getch();
7 y( M. L6 N; g3 E% X0 K  zcls(0,25,0,79);$ U- y9 o0 _3 x% f' @5 Q0 n
  getch();
% I0 c+ ~. X8 B# ^5 t  }+ P" G- Q6 T1 G7 j5 c& u2 v+ p
  /*********center clear screen(中心清屏)***********/0 H7 \% S+ a' U' F
  void zcls(int x1,int x2,int y1,int y2)5 ~1 C1 f! X0 G/ l4 b  `& R
  {
& h9 @4 [3 ~: u  int x00,y00,x0,y0,i,d;
& q; i$ n2 g" z! G  if((y2-y1)>(x2-x1)){5 Y2 H* }8 c- Q: Q9 f* i
  d=(x2-x1)/2;; R! \. m+ L+ r2 ?, B0 F
  x0=(x1+x2)/2;+ B$ F$ x: N+ e1 x1 q
  y0=y1+d;
" ?5 j3 a' r' {' ], ^4 \$ I! C  y00=y2-d;
7 d9 \4 F# |. k8 V5 ?" E  for(i=0;i<(d+1);i++)
: @1 z" ?4 w9 Z: z1 }1 i' c. x  recls((x0-i),(x00+i),(y0-i),(y00+i));2 I% f' q' n. J$ t$ p! P
  delay(10);. o( l  \9 W" i6 R6 D2 B. P
  }
3 Q/ T* J$ ]/ [- X( S/ V  else{% d# R0 N3 ]+ O* Q$ M
  d=(y2-y1)/2;
) G1 C: o2 X  v. {& _' _* ^  y0=(y1+y2)/2;
/ l8 Y9 [% c2 ^' X  x0=x1+d;
9 S1 W' C: b- ?1 V2 x  u" O3 I  x00=x2-d;' d* R" M7 l) g
  for(i=0;i<d+1;i++)# ~% G6 q$ g5 r0 Z: j# g
  recls(x0-i,x00+i,y0-i,y00+i);
' Y  F8 a- t- l2 Q9 `  delay(10);! Z1 ^: H6 l( ^3 v3 c. \
  }0 K  j5 ]6 [. v+ X, `! u6 t/ s. D
  }% q+ }2 D. V# S/ a, P6 t) ~" W% E

$ p9 C; Z5 \% @$ @5 ^' L8 ~' i+ O" j  /************* clear rectangle side(矩形边清屏)***********************/
5 R7 O  q. I: V4 s5 M5 L  A) |/ Y# P0 \, o" k3 D2 b
  void recls(int x1,int x2,int y1,int y2)
% T; b4 U( @4 t2 _# }  {
1 }4 h, i7 V& L  int i,j;
' q4 A7 _  v% ~% N" C  for(i=y1;i<y2;i++){
* n. X( ]8 k0 W+ Y! A" Y    goto_xy(x1,i);, G9 m2 Z  w7 q3 i. S
  putchar(' ');. \, j0 O  w( ?- K
  goto_xy(x2,i);
% Z$ r2 i8 p# R1 U% a  putchar(' ');! B# D- s* Q/ \' b' |6 d
  delay(10);
6 F# \' ]8 m6 E# ]' O2 F  }
( d' W6 y' |. T' w1 s6 `2 k" b  for(j=x1;j<x2;j++){9 T( @- w% S0 p. G  G* G
  goto_xy(i,y1);
, T/ Y8 Y' \5 `  putchar(' ');
9 F5 P2 s$ f) {( w  goto_xy(j,y2);
2 W0 A$ L0 u5 f: M; X0 n+ ^  putchar(' ');
! ?4 M2 M& |2 u9 D4 C6 a/ j: F; a  delay(10);
$ h" z! A# n# Y  }" ]* S% o# U- H
  }, @: E- W/ i  D8 a) b9 A+ q
  /******************open screen clear(开屏式清屏)*********************/5 A& C* _5 B6 \/ z: g

, h. N3 i8 c/ N; [: o  void kcls(int x1,int x2,int y1,int y2)1 L% S! {4 y$ [$ S; Q# t6 w; b! W+ |
  {; w4 K% d6 o: K( |- ?, K7 ^5 A
  int t,s,i,j;8 A0 Q8 }" g9 |  k
  t=s=(y1+y2)/2;# U: n- S1 s7 c+ Z0 c0 z
  for(;t<=y2;t++,s--)
* Z/ U! P1 C3 \% W$ a4 Z( r1 C  for(j=x1;j<x2;j++){
) x( l2 c5 y5 Q: m  C* e3 h  goto_xy(j,t);/ Y, q: I" S  I& m0 m
  putchar(' ');4 ~; @0 ?/ x3 {' a! l
  goto_xy(j,s);
9 Y% j- ]0 D  n( r; Z7 t: _  putchar(' ');0 d% D9 X( E$ ^9 N- S  W
  delay(10);
5 {/ Q7 d- \3 L  }
& q# f/ d6 c" S: j! }  }
$ T  F' v' W( ~- n  /*****************close screen clear*****闭幕式清屏*******************/
8 p3 Y2 Z6 z0 h4 j. B4 H, e
4 K' `, b( V4 X# S: v' K. ~: k9 F  void bcls(int x1,int x2,int y1,int y2)
' s% k0 i; B+ K, n3 Y4 U% Q  {% p& `! c0 C! k% ~
  int t,s,j;& r( w( E) X  w! a" G9 U  |
  t=y1;
+ F+ s1 h- e; ?0 k# a& H  s=y2;
% u/ @" a! C% c5 [0 x: ~) W9 A' N& I  for(t=y1;t<(y1+y2)/2;t++,s--)
+ U5 ?& q' Q" [% t  for(j=x1;j<x2;j++){
6 \5 f  P, l; C0 c+ G2 f  goto_xy(j,t);
8 S0 ~' }0 z1 d' b  putchar(' ');9 u: o( \6 D$ F1 u* z6 B; D. T. b  R7 x
  goto_xy(j,s);
: G; E, w) U; e  putchar(' ');5 M7 v# H3 e. I+ l3 G, g
  delay(10);5 i2 p% r( w+ n4 H5 o
  }
7 z% ~& X: I# W" O; q+ u3 f  }
! q* n" ]8 |7 i$ R& O$ o  /******************bottom screen clear(自下清屏)********************/
1 I- V: \4 e# K* l( s) I% d8 h* g; J" x, q
  void dcls(int x1,int x2,int y1,int y2)
4 Z; t0 L# G0 C- W% k% ]  {% w% j4 Q7 }7 ?: v" w1 S) @  a
  int t,s,j,i;- I+ k* N4 R+ w  v% W+ h: J
  t=s=(y1+y2)/2;; v5 {, _6 X0 O; y1 }; I  m
  for(j=x2;j>x1;j--)
# n1 o+ q, ]; d0 g. b0 \  for(i=y1;i<y2;i++){) E7 l" L$ U" ?
  goto_xy(j,i);8 S$ }" y# K# E$ l3 d6 d/ m
  putchar(' ');
1 H, p) S1 @) E; s6 }% e3 M  delay(10);; ?& |2 J6 x! k" E7 \: a- ]6 S3 ]
  }
) y3 }9 m6 j; k$ V) p9 U7 {) \" Z6 d  }
+ z! x1 z" ?- U0 ~1 z0 c0 }  /******************设置光标子函数******************/
1 Y  W8 Z2 d5 t; N! g1 R! w/ `
* ~: R7 N2 p6 q0 F" B9 S0 r  void goto_xy(int x,int y)
8 Z' N) G3 R' w- `" Q* S  {& Y# {0 ]) v5 C+ l# i" ]5 r
  union REGS r;
* A$ q' X& v; {  r.h.ah=2;; [1 O- {+ W' ~$ [3 V
  r.h.dl=y;' a' {2 y7 P$ f% a, M2 r2 X, j0 A
  r.h.dh=x;0 A. M) E# M( C. B1 B
  r.h.bh=0;5 W( c, |" T+ _' e
  int86(0x10,&r,&r);
1 Q" S6 ?% N, J: b4 p  }1 U: T1 D& }( s7 \2 ?: L8 n
/ v. l7 `5 M/ q. Y( `4 P
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/& F- t- t2 {" H- ?8 f/ v

7 k1 h% h+ o9 s/ y5 z5 X2 [  void puta(void)
9 e, D& x5 \5 D- _- u+ i  {
/ {4 z* c) O- E& u2 ]  int i,j;5 E1 ]! g$ w2 t
  for(i=0;i<24;i++){
9 B( U1 `' C& ?- d8 O  for(j=0;j<79;j++){2 O! Z& i  \) ~' q+ |0 p; v- W
  goto_xy(i,j);( }+ Y1 u+ B7 h1 \
  printf("a");4 b5 @& J4 [4 e9 v
  }+ e/ g7 l, r2 i7 V# S9 k, R% V
  }
; a$ z6 u( B4 \  }




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