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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ w/ G5 `  W5 i# J( X

; [4 U/ h" e! _' O8 u& j  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. P+ s- Z8 O+ y' {: q
1 j! h; G" z5 ~, ~; X  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 ?, _' V* A, b. K: _0 |
  子函数及演示程序:
3 e0 Y& I6 m* j. \$ T" r9 ^3 N4 r
, m2 h! x' n- x% n3 f3 N5 z  #include<stdio.h>
  _* E$ X: }$ I  Z# y( c  #include<dos.h>
! Z! Z: s2 r$ S$ x  #include<conio.h>( z8 y! t% o$ T9 o# r' v+ j

# R( I& j+ a- }6 V" g# X  void goto_xy(int x,int y);7 `! s: {* v- s9 Q% q+ g7 s
  void dcls(int x1,int x2,int y1,int y2);' @& F, H) j% Z
  void bcls(int x1,int x2,int y1,int y2);  V: R$ o. T7 g7 C3 N* v6 U
  void kcls(int x1,int x2,int y1,int y2);: t2 l* _" I2 l- x0 n. ?
  void recls(int x1,int x2,int y1,int y2);2 |' O+ H( _# h% [
  void zcls(int x1,int x2,int y1,int y2);
1 o6 _! @- p/ o6 O9 X8 y+ H  void puta(void);0 k: I) s4 s/ m: }5 D1 Z- ~
9 e& L1 }2 V4 p* w& C2 O  S

0 k( Q9 D; @1 w  /*--------------演示程序---------------------*/
" a  r; y5 H9 t" g; C- V  main()
5 ^6 v+ e# L) A3 B4 A4 ^  {5 S3 V7 G$ ?9 T
  puta();. b0 i3 N' o/ |. ]$ [! p5 u  F
  getch();
& B3 z% a2 T$ U) x  dcls(0,4,0,79);
1 N+ w" g$ S1 m7 M  F* D# W8 Y7 B  getch();9 [  r+ |$ T% \4 f5 o* U
  puta();
+ r% Z' f7 Y7 a6 J/ Z8 X  getch();
" }& R; ^( r$ O( y8 {! n) w  bcls(0,25,0,79);6 n; v( \0 d8 F3 Q+ y
  getch();
- u, {* y- {, C: t/ B; h, V; }  puta();
! Z. P* _& S7 p: w8 C, Y' [6 S$ g- I  getch();
& W3 ?- j0 {9 J8 b  zcls(0,25,0,79);; R; z' t4 T8 Q, q! \
  getch();0 @8 Y3 B) [6 _4 ]
  }
4 n: z! v0 |( B" V" ?  Z# L% S% a  /*********center clear screen(中心清屏)***********/
, P6 c" ?& _% V* }. ?6 q0 C  void zcls(int x1,int x2,int y1,int y2)( w6 a0 g9 L/ n5 \# g/ ?
  {
) Q: {# n, K1 H5 {/ t6 H1 c  int x00,y00,x0,y0,i,d;
. F/ {1 l4 F) g0 A- l1 V6 A  if((y2-y1)>(x2-x1)){5 }" l/ `+ q9 X% t0 n  E* f
  d=(x2-x1)/2;
3 b5 T5 g( J% @( O  x0=(x1+x2)/2;
2 a% Q- X6 u6 z1 _5 ^' Q  y0=y1+d;
2 w) _9 R! t) H1 F% c' Z  y00=y2-d;
% g7 |  J8 P2 x: W  h; Z  for(i=0;i<(d+1);i++)
  V* \8 w! t; j3 W9 Z  recls((x0-i),(x00+i),(y0-i),(y00+i));
' e  A) b  c2 u  delay(10);
: \0 ~) N9 g/ h+ r, D  }
/ f. P! R3 E6 P! H- Z) a  else{
. K" j$ t) ?! i% w  d=(y2-y1)/2;( A5 `. G" f, z0 B- i" [
  y0=(y1+y2)/2;3 s- s: M. C" s% n' d7 @; J% V
  x0=x1+d;9 `+ m. |" S& G6 r! X' T
  x00=x2-d;8 p9 ^) K$ \& e
  for(i=0;i<d+1;i++)
# v' b! y) [. J& S5 Z  recls(x0-i,x00+i,y0-i,y00+i);6 j9 J! N4 P2 g8 K  k& C/ e
  delay(10);7 y: j* {8 d* }5 `; N6 z2 b- Z9 i
  }! e% j. L: G# _
  }
: I) ?2 c" F8 s0 z3 d! w2 F1 D
7 Q1 u9 j7 l7 _1 v; C' ^: K5 x: g  /************* clear rectangle side(矩形边清屏)***********************/
  t9 \+ p& v0 J
0 @( l+ Q6 G# a* g# }  void recls(int x1,int x2,int y1,int y2)/ |. O9 I! v% h) d5 t# y
  {7 I* m) u, N0 |3 Y2 w
  int i,j;
$ c4 ~( s" K) ]4 q1 i' K  for(i=y1;i<y2;i++){) o  N) w/ W+ M4 w) p
    goto_xy(x1,i);
; ~1 M8 h# Q. B2 e7 f2 e  putchar(' ');
! d; h: z+ V! h3 I  goto_xy(x2,i);9 u  g# \" ~1 {9 k
  putchar(' ');5 d$ K. v4 }) P3 o9 S
  delay(10);
* p+ X' \' r& w! J( @7 x  }
* t4 Q$ @% u. \! w- v  for(j=x1;j<x2;j++){
( N& T; e, R' j# I: E( \  goto_xy(i,y1);
4 K) n" n" y# [2 l- x, H: N  putchar(' ');' C7 C9 U3 B5 {8 A& O, B2 u& A
  goto_xy(j,y2);
* a! v+ E! c8 c7 g& A5 ^  putchar(' ');
: z) C" T6 h; n  ?  |2 K$ F7 J  delay(10);
' H0 Q: f( j0 a' h& w4 i; h  }( p- z8 B) n% a% p8 C- {
  }( R) f0 ?1 K4 k+ O
  /******************open screen clear(开屏式清屏)*********************/3 }/ {4 q8 I! ?* ]+ D& p0 T
& Q5 w% D, q$ k: e6 i! N2 |
  void kcls(int x1,int x2,int y1,int y2)
- P3 C. Y8 G+ o% U% c  {* }7 {4 d8 e# z+ s/ i. h- a
  int t,s,i,j;
( S- D! h5 r  i: I! j5 A& ]  t=s=(y1+y2)/2;
/ M8 M& O& v5 w( i: ?' s  for(;t<=y2;t++,s--)( `! B4 B% U8 m! b# a
  for(j=x1;j<x2;j++){
6 c- ?, E+ Y( l) O) ?  goto_xy(j,t);
- L; |' _/ M, u( x9 b$ b  putchar(' ');
) H- f$ Q# i2 Q" J  goto_xy(j,s);
8 ~# l' O( [  N$ P7 E3 Z# W  putchar(' ');
& k4 j5 J3 c* ~. R& \  delay(10);1 f$ w) J0 d8 F: H5 T
  }
; Y& f& Z/ W- L- {+ ?  }1 f# e4 q! S3 p6 e/ k& r9 G/ a  w+ y! O
  /*****************close screen clear*****闭幕式清屏*******************/& g; Q# K: @' ~0 Q& F& z6 ^+ J

$ z6 k( Z8 r# E' J  void bcls(int x1,int x2,int y1,int y2)
- S  }( @' g8 t) a4 L# B: a  {
* F! E% Q- g3 s) ~! l7 F* ]  int t,s,j;
$ H; r. r- O- q1 q  t=y1;4 d& ^% q0 ^( f: J9 k0 Z& P! e/ @
  s=y2;
. I( F* E/ }  ]' w. |, \4 v/ e; d  for(t=y1;t<(y1+y2)/2;t++,s--)
# H: W& O, _- ^. \: }1 X9 S1 i  for(j=x1;j<x2;j++){/ T9 G; P/ z1 G
  goto_xy(j,t);
4 m: X$ m- h# c1 @  putchar(' ');) E- T4 W, `% {; E- v$ x3 N2 Y5 ?
  goto_xy(j,s);
  Z! h2 d1 O$ q9 A4 `  putchar(' ');
* b1 v! F+ V, J% I) c  u- g9 R1 Q  delay(10);
  F/ S# [3 m' X+ H% t0 {  }
' l+ \2 h3 Z+ y  }/ F  r$ Y* u8 N( L$ \
  /******************bottom screen clear(自下清屏)********************/
0 L3 ^  J  Y: P1 ]8 t
/ u3 c' I, D$ m  void dcls(int x1,int x2,int y1,int y2)' L8 `$ W) D, k- c! o1 G/ ?
  {$ H3 W7 d. D. s( S! G3 c$ Y
  int t,s,j,i;( x+ ^7 c) b. w& E" E' F7 V
  t=s=(y1+y2)/2;
2 Y( {: S% Q+ f( c2 F  for(j=x2;j>x1;j--)
6 P$ e5 ^. e; v/ F2 E  for(i=y1;i<y2;i++){9 T: h( q. Q+ s5 c7 \, Q
  goto_xy(j,i);
# `" e. [+ `, L: h! @! H; O) G' e; @  putchar(' ');+ x, ]9 V! e% ?- P# Q2 ]% `( A
  delay(10);
. B  J, [# K. J; k6 l  }
% t! [1 b# }' J/ V1 j7 V% |1 d) A  }
' x/ E$ w9 |" x  /******************设置光标子函数******************/
+ r7 |  h/ G+ }: J7 R. `( q9 g% k% \9 ^
  void goto_xy(int x,int y)$ q; |* s) Q7 ?9 b  |, b$ G
  {
) E5 d& w7 X4 ]  union REGS r;
8 R+ X. {, i1 y; Q  r.h.ah=2;
, Q* @' u: x% V( I/ [. v  r.h.dl=y;
: g- d/ K) ~' G8 M* F$ [  r.h.dh=x;
# g( [6 ~5 j5 V$ r0 D3 O  r.h.bh=0;
3 i3 t* }4 L: K; f2 u4 E  int86(0x10,&r,&r);
+ K0 D0 b0 M: p5 u  }+ C' r( R9 B, c6 }% H

4 b# s  U) Z* _* f2 B# C  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; G5 I" ^9 q) A5 a
- x7 o$ k5 S+ m9 h9 \4 E  void puta(void)
: ?8 W/ Z4 ]" v5 z! T& H& S/ B# c  {
& U5 ]; M5 C& n/ b  \  int i,j;
8 p7 }" p$ j' L( f- ~8 m( P  b. b' N  for(i=0;i<24;i++){
3 ^: u; j: [4 O  for(j=0;j<79;j++){
: Y; }8 e$ D! \9 o3 l8 [. e  {' A  goto_xy(i,j);+ S6 E; h/ F4 Y6 k' q: x* x
  printf("a");3 s( H# i: L9 [# P
  }
5 w" N9 x& D3 N6 E: |  }
0 l& s: g1 [8 s* _$ A  }

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