获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. }* G& u- F& K! v2 |* @

& z% P& h- Z0 @9 R( F  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 d4 W, J# v1 Y: p' P2 H. A
' J! C2 O5 G0 j9 `) |- [  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' w1 z- [- r8 d  _# g* H! x. n, o: c  子函数及演示程序:1 E8 O& K! |+ a7 Y
9 S2 |' j( {5 K
  #include<stdio.h>
8 |0 x4 w) e* {8 f6 e  #include<dos.h>! g/ u, ], q) x; t. v4 t, Q1 h
  #include<conio.h>( m# n0 n5 j6 _% d% z! r$ U: b. R# g
6 f: x# Y) v( _- A
  void goto_xy(int x,int y);
( k& |  y& ~- d1 B* w9 h/ ?. \  void dcls(int x1,int x2,int y1,int y2);: F4 U5 H  m# j* R3 S& u. V4 H
  void bcls(int x1,int x2,int y1,int y2);6 j4 F6 V2 e  s& A: }
  void kcls(int x1,int x2,int y1,int y2);
; @- m" l8 ]; s9 [( j7 S: D  void recls(int x1,int x2,int y1,int y2);
: q; j/ M& X6 D7 m# R9 |, W4 Y  void zcls(int x1,int x2,int y1,int y2);
# e" h/ Y! x7 y; t  void puta(void);0 d: E( |0 x- ~8 C& J& @, ]" v6 t- A

4 L$ D/ a4 A6 v9 B4 [% J
) z! {3 S* F9 h5 K6 A. O- P* y5 X( I  /*--------------演示程序---------------------*/) q$ ^) X; B$ {6 Y* `
  main()
4 C+ `. s, e( }2 `) g  {" h( _+ J' ^- l# Y+ T' t% T
  puta();
, {5 L; h- X. k  getch();! g$ Y9 i) N, ?8 K6 u+ H! Q
  dcls(0,4,0,79);# D8 z; q6 S' ^
  getch();1 [/ d" Z% P" j, `# r9 k! X3 j
  puta();, k; q# Z8 u  Q/ B
  getch();
5 R& O; \! Q5 d, B6 O4 J  bcls(0,25,0,79);
/ X( v/ m. ~; b( ~  getch();( L8 ~+ n- ?1 U' A+ H( T6 K& @
  puta();
; Z$ g9 t( {; b  getch();! d6 n2 P+ z0 e" D' P5 }
  zcls(0,25,0,79);
( W' u# a* {  x8 \0 N# b  getch();+ l, e" ?' X( T0 N
  }
& {! x* G6 F/ _5 G6 ~5 E  /*********center clear screen(中心清屏)***********/
# J8 P& F; n/ H( q  void zcls(int x1,int x2,int y1,int y2)# B2 k# s, x8 m
  {( q7 U$ S& J% g# v! T
  int x00,y00,x0,y0,i,d;
; u. U2 b$ A8 H9 t4 a$ P0 l! ?7 Z( g  if((y2-y1)>(x2-x1)){
: o( r+ S, e2 U: g  d=(x2-x1)/2;( ~9 X  H3 t2 L9 c
  x0=(x1+x2)/2;
1 ?5 ^* i& ~3 K' l+ u( Z" E  y0=y1+d;9 d9 P/ M4 c% P1 n
  y00=y2-d;8 m$ y) J$ J5 g+ y. b" D2 f: X7 M
  for(i=0;i<(d+1);i++)
; {: p$ L" r; U  C$ c  recls((x0-i),(x00+i),(y0-i),(y00+i));
4 d: o2 ~& w3 p0 Q' r5 E) K. M3 G' i  delay(10);
3 l8 P# Y& Q' x7 S3 Z  }4 V5 H, m4 a3 M* l; w: O9 Y
  else{
' F9 S- g% W1 p( F: J1 r  d=(y2-y1)/2;* [/ m1 Q4 C, ?
  y0=(y1+y2)/2;
( s! {; e: P3 F6 m  x0=x1+d;
. P( q4 M. A& I7 j. v, a  `4 Y9 g* T  x00=x2-d;
7 Y# d! s8 _7 n& i5 ^. b  for(i=0;i<d+1;i++)
7 h( ~/ o8 f  g$ z- R3 u3 U+ L& Q  recls(x0-i,x00+i,y0-i,y00+i);+ c0 W- O8 c7 T. e( [" @' t
  delay(10);' Y$ w" w) Y& H! S. p
  }( H" `0 ]6 r% K# q3 v2 I& Z7 V
  }  B1 E. `- Y: _; ]1 k: t6 y6 Y
8 L0 I  b' `  n# p9 U' o- _
  /************* clear rectangle side(矩形边清屏)***********************/
6 X. V# P: |3 R9 b
8 g- M: U" w7 c/ D1 e  void recls(int x1,int x2,int y1,int y2)
; s7 c, c' C1 `! c& [7 S( ^  {
  c# e2 P% ^# O0 W  int i,j;, o+ U  B7 c" V' I' R
  for(i=y1;i<y2;i++){
2 n+ F1 u% c: v$ `( s  _* u. W    goto_xy(x1,i);
5 r" B2 h" [4 d9 |, W  putchar(' ');
; X5 h, B# R  f$ k! w0 M8 k! ^+ j  goto_xy(x2,i);
3 l; o8 L" R0 X& l8 N! Y* L/ t% }1 j  putchar(' ');( B, p% R8 ^$ C% J) ^
  delay(10);1 r# L* d3 V8 q4 d' T
  }1 O' i! v8 s3 r: H0 ~  d
  for(j=x1;j<x2;j++){
0 P: |, J% [  N8 }8 Z0 q6 D  goto_xy(i,y1);( O/ j' _  d7 E, ~  u" ]) @7 N6 R
  putchar(' ');% m3 ?/ y) ]/ J# Y
  goto_xy(j,y2);) z4 ]0 s9 s7 \2 f
  putchar(' ');5 F8 ?' |4 @2 |# y; E7 y
  delay(10);
3 W* z$ E4 o6 a( V) c  s! r7 u  }0 b( W5 u( `# E0 @
  }
% X. W# u1 s! X# _3 i/ Y  /******************open screen clear(开屏式清屏)*********************/( y+ ]9 q5 }4 d5 G5 _5 T  s0 E' |
- U0 I$ N7 v$ i( X* T: i4 T
  void kcls(int x1,int x2,int y1,int y2), |+ H8 U' e1 e6 h0 @
  {5 H6 r+ z" v0 I% T3 D/ [
  int t,s,i,j;
4 v7 L7 Y2 D7 b% B8 Z+ p  t=s=(y1+y2)/2;
4 b/ m/ u1 M' B. n& |0 J* B  for(;t<=y2;t++,s--). i6 J4 y9 c' x& Q% o
  for(j=x1;j<x2;j++){3 v; b  ~6 \" q% H
  goto_xy(j,t);& I5 p  [# s' T- O0 p" f5 ]
  putchar(' ');8 U* l* ~( M# _) k0 }
  goto_xy(j,s);
6 ~  N; ^( P2 B' L! j  putchar(' ');' F/ ^( ^5 i! ]% x( s/ T) S( E& }: G2 B+ n* E
  delay(10);
" j: i3 D, i2 s0 t( x+ A  }
; t- h, F5 ^+ [! }  }% e* A. z6 n) ?. I; F) K# A
  /*****************close screen clear*****闭幕式清屏*******************/
5 `" l  [* N5 h9 ?) m# {+ P" M3 k$ H
  void bcls(int x1,int x2,int y1,int y2)6 {) t* ^& d/ U$ D: |2 U4 s
  {
& Q* h" F; J6 D- Z* D  int t,s,j;7 O' p4 H& x, w9 h! D
  t=y1;4 N- t2 n: ?1 l6 t9 x. v
  s=y2;
4 `+ x9 l0 X$ ]  for(t=y1;t<(y1+y2)/2;t++,s--)" y" K# O- `! Y0 C% ]( [
  for(j=x1;j<x2;j++){
3 P1 w0 M  c) s3 j7 p0 Y  goto_xy(j,t);
! e" W! a( h- |. O, i  putchar(' ');
! A8 l% m* S8 Y3 C2 b& c8 C  goto_xy(j,s);
) T2 L; M/ W! l" W' k  putchar(' ');
' y8 d$ L& c' ^! n/ [  delay(10);
! p& }+ v7 t$ R" C2 f+ `  }, Q  I- L! {1 O4 f. c3 t- s, `
  }: N+ i0 z" R% k) s* i& d
  /******************bottom screen clear(自下清屏)********************/& l% [8 f7 c' O4 h+ n

/ }! ], V9 v$ B0 P8 f2 V* Y9 l" a  void dcls(int x1,int x2,int y1,int y2)
# L0 r; A& O# p( l3 ?5 c. h  {
) W2 _( d1 ~6 Z* O; K  int t,s,j,i;8 k# ~4 Z8 M5 r$ N5 k" O
  t=s=(y1+y2)/2;% ]" X3 ^0 F+ u' a  Y1 h) x
  for(j=x2;j>x1;j--)$ R: q; b0 @/ X; M
  for(i=y1;i<y2;i++){0 b( |, p& X$ d) U0 {$ i% o
  goto_xy(j,i);
1 a' L4 B2 c, I" K5 s  putchar(' ');- Y" r; Q& ^) Q
  delay(10);
# k, ?# b0 O3 j9 o5 R  }
: F6 Z. B) ^! m$ ^& _& v  }
9 [$ ~0 Y, }5 ~. {/ O4 p% o! G  /******************设置光标子函数******************/  I# o, G2 _! a' Y8 m8 G7 {) c( p
2 j; y. O1 b. S% Z! r
  void goto_xy(int x,int y)
! A$ {9 q# M8 i% Z  {
# y; \  X! J9 S0 y" d  union REGS r;
( c) C( @% D/ V8 l  r.h.ah=2;
& E" w9 |4 h0 U  r.h.dl=y;8 w' h$ W# n) r
  r.h.dh=x;5 S% y7 I% ]$ V$ \: X* P  V
  r.h.bh=0;
8 L+ B. t( u; M& ~  int86(0x10,&r,&r);+ R/ C6 f0 n' e5 c/ u
  }
  y2 V* |; j. F# ]  H0 E. u7 `7 y# \3 A/ D' N: S' a
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* o; n! S: {( I- J! k2 x) V
0 `1 b4 g7 F( _$ i8 S  void puta(void)
, Y# l4 u0 E0 Q; R& C# x- C  {
3 K% O! p7 P( R  int i,j;2 Q2 l/ Z- F' L+ y# j+ F& d0 |
  for(i=0;i<24;i++){2 K5 J0 h' s& Z* @3 A( v) C
  for(j=0;j<79;j++){
: z8 i) E/ r  Z; O' f  goto_xy(i,j);0 d2 m- h: g! \+ u) B
  printf("a");
5 L, u! \3 Q/ }2 [4 @  h( ]% \2 k3 D  }
: V* v) @/ F: u) t1 s5 a6 I9 O  }
! N* X; x; D; x+ a6 T4 `  }

返回列表
【捌玖网络】已经运行: