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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% |. M/ M' N# m4 _8 L1 Y3 t2 Y' E! x9 f1 ]
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 G6 r5 ~% c( Q2 ?
) q8 F7 `( H( k1 i" N% e
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 {  E! {. |7 [0 @* Z1 I7 _! U/ q  子函数及演示程序:6 D4 f) q6 P( J, h1 L

3 Y. {# E, w# {. t  #include<stdio.h>
# p" ?2 g" {' N  #include<dos.h>
9 g  d' I$ f/ T1 C" \( U2 C  #include<conio.h>
; W7 i' e) G1 i  I2 z+ R; Q+ Y0 h& b8 z+ w: w
  void goto_xy(int x,int y);" F" M% i- h- G" o9 X
  void dcls(int x1,int x2,int y1,int y2);
  A( {8 W- Y7 @. J2 f; z; @! j( D  void bcls(int x1,int x2,int y1,int y2);8 P* e# @1 s- {* s1 h3 d* n
  void kcls(int x1,int x2,int y1,int y2);# _1 O  u& n) Q9 N& c
  void recls(int x1,int x2,int y1,int y2);
2 r3 T+ e8 _+ v* `! b3 L# `1 q  void zcls(int x1,int x2,int y1,int y2);2 n7 j1 A" q# D/ p; w
  void puta(void);0 [0 m; K; b2 m4 n- {

! c. C/ @. y: K$ q' V9 |( y+ H
  /*--------------演示程序---------------------*/
3 P1 x% y2 T5 n" R5 U2 y3 F0 Q7 H- P) F5 @  main()
1 M9 w+ j2 R' `2 A8 \  b1 @/ c5 a  {$ U; D' ?( E0 ]: v# t( R
  puta();
7 p" R' v6 x% Z- `7 V  getch();
# {1 \9 Z9 f4 x4 X, c% e, F  dcls(0,4,0,79);
9 H7 j( L9 c. N7 p  getch();' g, T& x% [+ \
  puta();
0 b$ I0 r% z! z( w$ J  getch();4 [6 y. Y) @4 p2 J9 `
  bcls(0,25,0,79);
, K- H, F3 e; m/ P) u8 H' s( q  getch();" E0 T' ^4 e+ U
  puta();+ ]  K+ b: Q) t( Z: l6 }" {
  getch();& ^* Z0 M6 G. o9 A4 W9 R
  zcls(0,25,0,79);) j2 n* o5 d9 Y6 R' I# W2 g7 F
  getch();+ B9 W  W* |! Y4 K# Q/ M
  }
* P' J  j& g5 T3 l8 {& \! g  /*********center clear screen(中心清屏)***********/% X4 n3 F/ V8 n* R
  void zcls(int x1,int x2,int y1,int y2)3 y6 E" G) |7 l# Z# k. C) ?
  {7 B7 U# Y1 W) @: a5 f: a; f$ d  v) U- C
  int x00,y00,x0,y0,i,d;6 y) c% D2 r; \& e3 o. H3 E2 k7 P
  if((y2-y1)>(x2-x1)){$ @8 \; P- H" q$ v
  d=(x2-x1)/2;" [2 R+ O6 o0 I6 |; }
  x0=(x1+x2)/2;
$ D  C, f$ Q. e+ G8 T' R  y0=y1+d;
1 i) k. A" @3 o1 d" [) ?) V  y00=y2-d;* F* }2 F7 M  c# v7 b# j
  for(i=0;i<(d+1);i++)2 Z  F" I0 l3 E+ }
  recls((x0-i),(x00+i),(y0-i),(y00+i));
' H5 ]3 m! K, A* d  delay(10);
+ E6 v- y+ f! X& h  }
) e* a' ~, b2 t: }7 p4 D  else{6 C* _- K. K0 ~; }% D. q
  d=(y2-y1)/2;
) U/ ~' v( _/ X  R/ ~& D/ c; ?  y0=(y1+y2)/2;
' \% T& A) N+ ^' m7 P# g9 I- ]  x0=x1+d;% C0 Z* m  w6 X! B4 A
  x00=x2-d;4 J- |2 z- I( h$ Z  m7 `$ E6 y
  for(i=0;i<d+1;i++): N# |3 n/ F* g
  recls(x0-i,x00+i,y0-i,y00+i);
1 `, U' e) L5 X: I% M. I5 y2 z  delay(10);1 j/ f: k8 l6 ]0 e) w
  }
2 g6 b( x2 T# \& J2 s/ Z  }( {% \1 G6 Z8 n) s5 ^  U/ ?
2 I4 Y* g7 g% V! D& A* a4 Z" L
  /************* clear rectangle side(矩形边清屏)***********************/
- ^& H) H! U" N
5 ~; @3 ~: F& a" e8 T  void recls(int x1,int x2,int y1,int y2)+ S" p2 W9 l; ^* v' ]; S' O
  {' K$ L( g+ {) T* C! W
  int i,j;
& X. ~. q( y9 T/ K: r  for(i=y1;i<y2;i++){4 s; y# n# ~5 d" ^7 D
    goto_xy(x1,i);0 j7 |' ^: j2 h: A( W$ W
  putchar(' ');
8 o! m/ \: L: D) r  goto_xy(x2,i);
! q- ?. B1 J; H( G0 P  putchar(' ');
+ f2 J* n6 I, I* j3 l, e  x  delay(10);
! w6 \9 j1 {% c+ x! p, [  }
  h( H- ~* I/ ?9 s) P3 p  for(j=x1;j<x2;j++){+ V2 w) o3 \  Z: a
  goto_xy(i,y1);6 w- d/ E8 y8 O& N
  putchar(' ');
+ m8 p3 O# _) p% j+ _' g  goto_xy(j,y2);
5 D1 ]5 k. @  e: V  putchar(' ');1 x4 f. q# {" t% H  T
  delay(10);
" r5 B6 o' g- _6 G  x; o3 n  }
# I, d5 B5 G, w1 ~5 _9 \2 D! q  }
& S' A* _4 ?8 o7 S3 ?- {  y# ~5 E3 l  /******************open screen clear(开屏式清屏)*********************/% A4 Y- ]* N! a0 [

& P$ l% z- B* x/ q: E  void kcls(int x1,int x2,int y1,int y2)
5 H  n$ b  ^. V6 A* Y7 o  {: f/ ]& K" U7 y
  int t,s,i,j;
8 F: ?) S/ N; x( x5 S( C  t=s=(y1+y2)/2;
+ s+ i: M% n! v9 _4 y  for(;t<=y2;t++,s--)
# E7 p# B( A' K  for(j=x1;j<x2;j++){+ g7 Z& x# _! r5 r9 ?" d* c
  goto_xy(j,t);
" B  {6 F; x) U5 o/ d  putchar(' ');
, Y" i3 p4 {5 c2 g' i  goto_xy(j,s);8 d# ^8 N* Q0 {
  putchar(' ');1 g& {! M+ d: N  z
  delay(10);
# s- G7 m4 K" F) l4 q" j  }3 |9 A; O3 @9 w6 G. K: Y9 i: n/ g) n
  }
) ^" F1 u! ]0 O4 Z3 [  /*****************close screen clear*****闭幕式清屏*******************/
- S* a7 ^! U" L: W, ]/ q! B# w# D0 v7 K* E; Z1 L* P, u; T
  void bcls(int x1,int x2,int y1,int y2)
- k9 M6 l; I: h1 [  G  {4 K% y( P7 M9 p+ P$ c# ]9 k
  int t,s,j;
3 t- Q+ ^9 ^4 t  t=y1;
( y! q. t0 v; w9 U4 K$ n  s=y2;
( @( j7 @$ T: i3 g$ p5 W  for(t=y1;t<(y1+y2)/2;t++,s--)! p5 @4 M4 L$ G- l
  for(j=x1;j<x2;j++){! U" x3 |. O9 w3 i
  goto_xy(j,t);
2 r9 C9 F. F; K/ p3 N3 V  putchar(' ');
6 d9 {2 I' _. e* @  goto_xy(j,s);
) U, v$ r5 _" G6 L8 L) z  putchar(' ');
3 p- _  [9 C9 \5 B( [  delay(10);+ q% q, B; R& P, |5 I. e# [5 ^
  }
: G/ i: K/ U3 V8 ]% i  }+ b, _5 Z8 `4 i' B4 T  @5 e+ A
  /******************bottom screen clear(自下清屏)********************/
: q  [9 g, V1 |5 _3 A+ _3 p, ?: p7 ?+ ?: U/ ~: w
  void dcls(int x1,int x2,int y1,int y2)7 K( V, e: v3 P+ g, b' t
  {' V% z, X. D6 k- o/ P
  int t,s,j,i;
' H* j2 P0 _0 l# v8 Z; Q( i. j  t=s=(y1+y2)/2;0 a9 l! e) j0 E) r  _
  for(j=x2;j>x1;j--)
: ^3 H3 M4 K- b% ~. y  for(i=y1;i<y2;i++){6 y0 T2 h% f2 w4 b, d/ o5 w
  goto_xy(j,i);
  |4 y2 f& e/ ]2 `8 D  putchar(' ');
& d- X1 c/ L0 A5 q3 L+ E  delay(10);/ o# h) A* P4 S( e
  }2 }4 z4 A$ ~: D6 p
  }. |: u' }" _2 s- [+ D4 k; B
  /******************设置光标子函数******************/+ ~- n8 I1 H( x
' `' d7 e1 ~, u# L; F$ L2 O# E; a
  void goto_xy(int x,int y)+ S9 j- C8 e5 X9 M& s9 T7 Z
  {
5 @3 X; Y3 c0 N% T1 a  union REGS r;
5 `5 L3 s6 D8 q  q+ R  r.h.ah=2;
+ O' J/ d( E0 x; t' f6 K9 p  r.h.dl=y;8 S; a# F3 f4 f/ E% V9 R
  r.h.dh=x;* \, L% U3 B0 c  {( Q
  r.h.bh=0;
4 s' y& q' a: K6 ?- h; B  int86(0x10,&r,&r);
) [/ {& i  G; {' D7 k8 P0 }  }
- d' {& a7 a, e  R6 _
9 }2 x' J, ^5 a) P3 B  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ C  m1 R# J% S% i
) ~3 N3 N% m' j$ x9 J1 N
  void puta(void)
4 B7 c2 _1 {0 X  T  S) _4 y  {
" _' j9 i' \. P- {  int i,j;
3 ~; n% F2 B* {7 B& p. _  for(i=0;i<24;i++){- h9 K2 d. i+ a, n/ h3 q3 Q
  for(j=0;j<79;j++){
) g& f' o* X! [1 {  goto_xy(i,j);
- P% T+ Q( w5 r; H* ?  printf("a");5 ?( ], ~9 r" ~0 P
  }7 L$ B" L- ]- F. c4 @5 r
  }
$ ^& Y/ z/ z; K) o! n  }

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