Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,0 Q1 p' W/ k+ r! M' ?7 @
8 Z8 X3 X) t" Y3 P- B" Y9 Z
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 l9 y" K8 f! p5 B
: s% W; W7 ?1 s2 x5 Q5 V+ H
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 O7 L3 T6 L& C$ g% ^: U, J4 Q8 t  子函数及演示程序:
' c! r% }4 d4 d" Q4 V, X& y+ D8 ]9 Q4 m) c% u! [
  #include<stdio.h>. u" L2 u8 x1 R& f# L( [
  #include<dos.h>! D4 N% Q. @, R4 }+ @- J! T
  #include<conio.h>* V7 U' b( O5 Y0 k! q; {( K/ d9 t, _
/ p; r5 q9 O. B! e9 G) J5 _
  void goto_xy(int x,int y);
# a$ p, ^3 p6 n! l3 c  void dcls(int x1,int x2,int y1,int y2);
+ U8 F, C( J( R  l1 ~* X  void bcls(int x1,int x2,int y1,int y2);
% Q  P- u1 g, l: N+ I  void kcls(int x1,int x2,int y1,int y2);
, b9 D$ ?- i0 P3 A2 o$ N' B  void recls(int x1,int x2,int y1,int y2);
7 ^% p. i, m% h+ x  void zcls(int x1,int x2,int y1,int y2);' L! \3 w$ }8 v. h6 T4 }
  void puta(void);) m- D( l" u% f" ]( N8 E0 ?

5 {* M# t9 N2 `( a- j0 @# k7 z) i1 \6 g) K% {) ?
  /*--------------演示程序---------------------*/# P2 c7 @' J8 ^: B* O1 p
  main()
6 _1 Q" \# \$ n, N" C1 B  {
6 e  R- A4 F9 ^* G2 M. O' M  puta();
( p& G0 r4 @* ]% n& k  getch();; u! N  N" F, w' K
  dcls(0,4,0,79);$ D  P% R! s' S2 U
  getch();
2 u6 `8 {( d( M- x. m  a  puta();" [) _7 w, P% J+ e8 D# I. L# E1 U
  getch();
% W1 P; ~* E9 Y2 u$ i0 O  bcls(0,25,0,79);
2 @, i5 n3 Y8 z$ ^. b9 f7 E, Y, Y  getch();
9 L3 F4 m* A7 m4 ?4 H0 _9 f  puta();
) `* n4 p5 A, y  getch();
, [6 K+ r& t. ]5 z7 P: |  zcls(0,25,0,79);# v+ x( n( e; [! y# C( e
  getch();
% f  ~$ d& B! w1 k# k; ?  }$ w4 S+ }' v5 n6 |" u
  /*********center clear screen(中心清屏)***********/
0 B  c3 n" Z+ x" O* |$ `: \+ J  void zcls(int x1,int x2,int y1,int y2)
1 ]- b2 R7 `7 \  {: c0 y6 j" w. S2 J* o- T% K1 W
  int x00,y00,x0,y0,i,d;
/ Q) B1 {' L$ r/ V) G  if((y2-y1)>(x2-x1)){
' i- [/ _4 A. s" R+ Q5 _  _/ y  d=(x2-x1)/2;- y& e' _! z1 k: |$ E) ]9 I6 Z
  x0=(x1+x2)/2;% Z# _  s4 q6 l! w/ s; T9 q
  y0=y1+d;$ y* ]+ @$ T- D+ I- p1 c* u
  y00=y2-d;1 B( y( u4 g1 K! Q8 @
  for(i=0;i<(d+1);i++)
% U; H! Y; W  K4 }# W3 C  recls((x0-i),(x00+i),(y0-i),(y00+i));
' R6 q8 m- \- P1 d/ G/ ]  delay(10);% x* h- g$ Q9 D2 `9 W) }$ M
  }
$ c2 S9 F3 @* G7 G8 H  e0 w8 @  else{
7 W4 x# `4 a" t9 ~  c' U  d=(y2-y1)/2;
5 q4 u) y/ b" L8 K, z  y0=(y1+y2)/2;
3 w/ I) |( N3 g! @- m% J0 ]' f  x0=x1+d;
+ f2 |/ X8 q, c; a# I) f  x00=x2-d;+ Q" d# l3 y: J" O5 z
  for(i=0;i<d+1;i++). K, t3 u2 J9 N; f2 s$ b# C
  recls(x0-i,x00+i,y0-i,y00+i);
9 L8 B6 g4 Z& F/ E4 x! Y  delay(10);
$ h# R- k$ Q- m  K/ @( U; P  }) M2 H% C# {: C8 d1 {5 d
  }
8 P/ O' i7 _3 L7 m1 X' r7 w
) L4 I+ T; s" b$ F* `3 j3 `: x% G  /************* clear rectangle side(矩形边清屏)***********************/; ~6 g1 q2 f5 S8 B  O7 j( @
2 L) K+ ?" E- g9 w7 Z( e
  void recls(int x1,int x2,int y1,int y2)
3 a: H8 D$ {* D# M5 `" p% T  {5 H! m1 F$ r' Y+ Y- f
  int i,j;7 _2 B( b) _2 f" l: d& ^4 q+ e2 o: @
  for(i=y1;i<y2;i++){
  b' ^8 @4 b1 I    goto_xy(x1,i);: _0 C; e$ a+ M: n" a3 s3 p
  putchar(' ');
1 ^: G4 v& |+ U% I  goto_xy(x2,i);& _, y7 |8 Z& w
  putchar(' ');
, l6 v( I$ g' G0 @8 D# S  delay(10);
8 e6 S' n% p$ R  }
' u, }; a+ D/ _# ]: U  for(j=x1;j<x2;j++){
' V& ^+ ^  `$ ~! o+ {8 R: L  goto_xy(i,y1);2 }. ?# L! h( \- f8 b' }, [
  putchar(' ');6 Y" R2 [$ O" M" F9 r- l
  goto_xy(j,y2);, V4 Q5 v: R' h7 @
  putchar(' ');) v' q- q) M$ h7 k- r: q+ a1 V
  delay(10);
' Z. P) [$ A! Y6 r4 l  }
1 ?; }6 N$ z2 E1 p  }8 c9 D2 @; ^  j# g- ]6 p
  /******************open screen clear(开屏式清屏)*********************/
0 Z+ t# G- g% @  @, l
! u$ R% k  e! Z0 Y8 ^4 S  I" V  void kcls(int x1,int x2,int y1,int y2)
9 s1 g2 P. H( M  {7 W% [$ G4 `" D* P' O4 ^3 ~
  int t,s,i,j;
( j* }4 D7 J: D6 d6 W( {  t=s=(y1+y2)/2;0 ~: B% q! @, Y; T" ^, o2 z
  for(;t<=y2;t++,s--)4 C' a; F' w0 X4 a8 j) X
  for(j=x1;j<x2;j++){; ^# B: w+ C5 H' j1 a# J: v' {: M7 ^
  goto_xy(j,t);& W+ i* p2 `" L* J3 _
  putchar(' ');& x7 J# K5 G, O4 P# `  {, C
  goto_xy(j,s);8 d2 g7 d: q6 M$ k1 \% ?0 E
  putchar(' ');
4 Y& G& \' y. s  delay(10);
2 o( |( a" D- `) f2 ?9 f& ~( w  }6 D5 I$ @3 u" f) P
  }
# }3 p- X: w0 ^1 d- Y  /*****************close screen clear*****闭幕式清屏*******************/
2 t( g$ k: O7 X3 y: D
$ i3 {& U5 Q8 @. i  void bcls(int x1,int x2,int y1,int y2)
* s/ w2 t* Z' q3 ?6 \/ H- t5 s  P  {
. y6 Q- F0 X8 T1 U  int t,s,j;( |" g* N- F' l9 C% E, ~
  t=y1;
  z$ k5 Q9 l5 I, x  s=y2;
" e7 S- B! L8 E$ B3 ~# P0 L+ X& d  A  for(t=y1;t<(y1+y2)/2;t++,s--)
- K9 x8 V: S6 \: u+ p* Z5 H9 c4 K/ a  for(j=x1;j<x2;j++){( Z) y, ^# l/ p! H
  goto_xy(j,t);
8 _7 d- s; Z9 M: Z8 w8 v; p* e& @  putchar(' ');) b0 R3 [2 m8 @: x: C4 F2 a
  goto_xy(j,s);1 ?0 t* [; j: Z+ S4 b* F: ^
  putchar(' ');8 Z! v- F/ ^2 ]- n* M1 O( v
  delay(10);& o6 l5 q# B8 K
  }# [" w9 ~9 H! B: M! _
  }
) r; \2 }; c& R/ i2 Y) A3 m1 c  /******************bottom screen clear(自下清屏)********************/% l3 R* j# ~1 b8 H& j
5 b4 m% |  u8 ?! z, X
  void dcls(int x1,int x2,int y1,int y2)/ @; A1 i9 R5 N( d* i" {* J
  {
/ `: Y( I: H( O  int t,s,j,i;
% q0 X, j- M5 K7 y; V  t=s=(y1+y2)/2;
2 @" `$ O- o) M! o$ S6 t  for(j=x2;j>x1;j--)
2 I: m- S+ ]% ?7 j/ r  for(i=y1;i<y2;i++){: ?4 M$ w! {! `8 [' J
  goto_xy(j,i);" F3 c( I% q7 y' g- V
  putchar(' ');+ E: k, Z8 X. p# Q! D
  delay(10);1 e, s% S: n9 s
  }$ [9 l* g, S; U- R2 J- j
  }
8 \* G, }& ?, a0 r; _  /******************设置光标子函数******************/& D8 h2 N4 b) N; u* g8 L' v* i4 M
6 @' P7 G9 f: k3 E! h
  void goto_xy(int x,int y)
' c( G! [) v! G  {
! Z) [3 X1 g; |$ Z  union REGS r;1 H4 f5 u6 e/ E* z
  r.h.ah=2;
1 P, F+ K' r) v: ^, J  r.h.dl=y;$ f$ q7 t  i! G7 c
  r.h.dh=x;: r. k/ t7 A" A. o
  r.h.bh=0;+ ~) v' B& }! r: N- \, n, R; O
  int86(0x10,&r,&r);
. e; r. n% C4 _" t  }  N" b( }$ P# G

$ O& P% [. E; f  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
' I1 ]+ ^+ k  _. z. f
# H: g; f; l, A6 t# M) Y( k  void puta(void)
! {8 H' G! g7 H# x. p# S% M2 w+ p% S  {
; m2 W- k5 T2 _- V7 Y+ v' K  int i,j;
/ Q/ p( {" X! W3 G  for(i=0;i<24;i++){
6 x; @4 ~$ R" f0 ?7 C9 p$ m  for(j=0;j<79;j++){) M2 Q4 b' j2 K6 g# l7 v3 h$ M
  goto_xy(i,j);
7 @- k! a9 }( d# N  printf("a");
% [" i0 p1 ~% q3 C( Y  }
; _  `3 S( U# q) ]7 N# \  }8 `( I2 z1 x1 ~, O" c
  }




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