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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ~. k( d$ E5 \% J* o9 _, a0 X0 y, s; D1 c* B
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 B3 D% @6 |& N, A

' Z9 Y& G( O/ G5 l; q  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# l3 X9 }: s' P$ a& c2 o  子函数及演示程序:
- N+ P5 X  p5 N7 j$ E) z$ w& n7 J/ E% i- f0 U0 P% h9 A+ K
  #include<stdio.h>
& j9 y- |2 b( \* ]8 i  #include<dos.h>
6 K' Y+ L5 |, d, m  #include<conio.h># b0 ?: N1 g' n8 w
/ P! z. H+ ^* D* S4 {5 c! [, C
  void goto_xy(int x,int y);
, j& \6 V: i0 Q' u( f/ ^  void dcls(int x1,int x2,int y1,int y2);5 U, R4 X: C- D7 @
  void bcls(int x1,int x2,int y1,int y2);
) O7 [8 L- v( Q. w9 k8 x  void kcls(int x1,int x2,int y1,int y2);! v) ~$ P/ g! q9 @* i1 Q* q
  void recls(int x1,int x2,int y1,int y2);% X, x0 r6 o8 F
  void zcls(int x1,int x2,int y1,int y2);
4 ?1 n$ e5 h' ~1 u  e/ g  void puta(void);
8 X3 H" z3 U$ w9 H
, M! v0 L3 c/ l8 U- a
& i- C% M. I; z4 c1 b  /*--------------演示程序---------------------*/% k5 j( B- U: H( e( f. ]
  main()
, b; y7 N/ r5 B! @( B  {3 e* p/ L( |% d9 J8 F2 o7 c' F; ~
  puta();
: w8 m# t/ k+ s1 g. Q$ ?! A  getch();; m; ?4 r# t3 ^
  dcls(0,4,0,79);  D& ^7 J  c6 d
  getch();
1 a" D" H3 f. Y7 I9 Z' v/ D  puta();1 O% o  ^# b# w
  getch();% [! o, R  j/ R* @, M+ z- ~( f
  bcls(0,25,0,79);3 p1 e7 s- K9 |7 g
  getch();: D' ~& o. n/ ?% t
  puta();; D* A) V+ K, W: T3 T
  getch();8 S& @/ V  _% m" r% Q/ l
  zcls(0,25,0,79);
& N  M7 ]1 n& E  getch();
& z7 C/ D: G8 X: u' ?2 x  }6 v1 W6 U2 X. n3 Y
  /*********center clear screen(中心清屏)***********/# |) @7 O! M: |$ N
  void zcls(int x1,int x2,int y1,int y2)
* e. n2 i) M, X/ \$ O. o  {/ z* q, P& l+ h- b
  int x00,y00,x0,y0,i,d;! ^0 m( `; [, s% [( S% X0 h
  if((y2-y1)>(x2-x1)){7 J  w! ?: |8 b- \2 g2 K
  d=(x2-x1)/2;* J5 U- ?2 q, w, R7 H, `# {
  x0=(x1+x2)/2;
* x, L  X, z* _& k: O0 r" Y  y0=y1+d;. t. S1 ^1 d0 V2 s: W4 a
  y00=y2-d;
3 Z  p) f; S  L  for(i=0;i<(d+1);i++)
) Z' m2 D" [( \  G% S  recls((x0-i),(x00+i),(y0-i),(y00+i));
( B2 X! c' k5 ~8 J; A  delay(10);
" N$ C0 c/ S% T% H# U; S  }
2 @3 y- {( X3 k8 j* P# l" ~  else{
: Z  E" G6 y  ^3 O  d=(y2-y1)/2;. k6 Q  g5 g3 A2 T4 ]
  y0=(y1+y2)/2;
$ O2 p8 ?; T: O( [! S  x0=x1+d;
4 s( m) V" f$ X5 R& a; j9 S  x00=x2-d;1 ]" b5 y; m5 ]2 d8 Z7 r5 ^9 }
  for(i=0;i<d+1;i++)
- u8 B0 \* |, d$ n8 H+ D  z: W9 `  recls(x0-i,x00+i,y0-i,y00+i);  @) B& X% ?( K) _. `
  delay(10);
: x: i! D$ Y2 |# s/ h9 A  }
. T' h. K# ~' K  }
. g9 \" n7 m1 b  o6 D3 H1 e* c+ d3 z% G2 r% Y! e# |' a! z; H
  /************* clear rectangle side(矩形边清屏)***********************/& h; |% ?5 A7 @4 {/ `0 f% y/ S
# q8 K% \7 v% d% ]4 l( r9 U
  void recls(int x1,int x2,int y1,int y2)
! G$ [6 x) P2 Z& q0 j) b+ e  {* v; Z& @" y2 ^  U# Q$ I
  int i,j;
- [4 j# u, B: ^( r( J  for(i=y1;i<y2;i++){
6 A% K( g, Z6 N- r/ s    goto_xy(x1,i);5 V: @" g- r9 C
  putchar(' ');: I! P* i  a; B9 P7 e3 z9 }7 Z9 j
  goto_xy(x2,i);
1 g! A5 o0 C- s+ u  putchar(' ');% r* l0 Z2 Q; R+ J% Q+ \5 Z8 e
  delay(10);# W, ~. r1 k4 d; ]# }
  }
* _8 |1 h- p0 J. Z  M  for(j=x1;j<x2;j++){
2 M* ?& ^6 \) P3 i. Y% h  goto_xy(i,y1);* a/ J" G% ~! k7 A" w0 H  l
  putchar(' ');
8 h$ G' Y: Z. k- _* F6 ^3 Z( s  goto_xy(j,y2);- k9 _3 h7 m( G4 j
  putchar(' ');
# o$ J% l) x' D1 I/ N0 j: q  delay(10);
2 v3 h6 y) n  Q  }' z4 y0 y& W* `' }0 j8 a
  }# G0 o- \* ]9 F$ P
  /******************open screen clear(开屏式清屏)*********************/5 {# Q3 M* b. R/ X& S. \
: w: g! ]  q! k/ b; V
  void kcls(int x1,int x2,int y1,int y2)  [# X0 k4 T- V, v8 M
  {
% ?4 ^/ F$ q- _8 U& S$ _" r  int t,s,i,j;
' h1 ^- d* A9 o/ N  t=s=(y1+y2)/2;
8 x  v- ?# }2 z. e3 E  for(;t<=y2;t++,s--)) Q. h7 W: g2 x/ \7 C+ g+ g
  for(j=x1;j<x2;j++){
0 R* }+ T' `4 g: q2 R  goto_xy(j,t);
; q- K  c# [, l+ Q" \! m4 v  putchar(' ');
( }: c( z" c. v! S9 p" M  goto_xy(j,s);
/ `# w8 i1 O+ ?: b7 L. p* s  putchar(' ');. {& A. V  Y! j4 @. Z1 i
  delay(10);
, [5 w% `* K9 x" ?, k  }
7 G; j6 Y1 E3 C8 }  }$ Z8 g, b7 n  h* ?" _9 P1 Z+ m
  /*****************close screen clear*****闭幕式清屏*******************/
3 k5 h7 u9 K' s9 \/ |
; ^/ D" h$ Q2 j  f& p' C" y  X" h+ o  void bcls(int x1,int x2,int y1,int y2): D. g, s' v( l6 K. @
  {
7 t; {# |. y& C$ k. i  int t,s,j;$ ~$ S! L) E. m/ X. [" ]9 P+ w4 I
  t=y1;4 y: ]2 U. W+ w1 V! Z* ]
  s=y2;2 @* z% t( D9 z
  for(t=y1;t<(y1+y2)/2;t++,s--)
! p$ _6 s( u2 s2 e7 O1 S8 S* W  for(j=x1;j<x2;j++){
" f! D. M. A9 H  goto_xy(j,t);
" R2 s0 i, ?+ `" u  |7 d$ ^  putchar(' ');0 E5 r) P: u4 |% f: R# {! \8 w+ g
  goto_xy(j,s);% Q. u3 j  `" r3 Z5 p# X
  putchar(' ');
( Q, G% r# h8 w, H$ N  delay(10);
& q) {: j2 Z$ Q& J4 R  }& h- Z. r/ ]1 Z  G% |
  }
0 L7 t) J  i; W+ K3 e& y1 b9 T  /******************bottom screen clear(自下清屏)********************/7 y# [4 c  L# ?* y% ^
3 D" l# [( @% {- ?! B9 q( U7 Z2 t
  void dcls(int x1,int x2,int y1,int y2)% Z! R- x# l$ i5 Y2 k, C5 A# a
  {2 c# ?' I* z( e, G* I8 }" c
  int t,s,j,i;8 I) Z. {: F3 n" F3 Z9 w% t
  t=s=(y1+y2)/2;
$ M) _+ h3 I  b, e, s$ Q$ ^  for(j=x2;j>x1;j--)- }- F5 u; k( _3 N" \5 M
  for(i=y1;i<y2;i++){. t: Q7 h; g8 X
  goto_xy(j,i);  F# I3 h0 u. S
  putchar(' ');
6 ^9 {7 {7 V2 R, U# V# j& S% W, Z  X  delay(10);/ K  O5 D3 Y! T
  }0 _% B7 \) ^8 X4 q/ g; k5 G8 k9 ?
  }, [8 M) d/ X0 S
  /******************设置光标子函数******************/% o4 X5 [7 ?/ E+ S, j

. x/ j3 u& F* x4 |" z7 D* y  void goto_xy(int x,int y)# I, \7 @9 Z# H9 ]
  {7 W( i+ M) g/ \, o' z  `
  union REGS r;
  O& `8 p% d1 q/ o" V5 ~  r.h.ah=2;; D, T6 w% ?* M
  r.h.dl=y;8 B2 `) s& i1 P
  r.h.dh=x;
* |# v. h0 ]/ V, o8 d% T; p% ~  r.h.bh=0;
0 n7 |* _2 q9 ^  int86(0x10,&r,&r);% W2 ^" q3 x1 b5 M# b/ `
  }1 [4 J# r9 R  }/ W$ H, p

/ J2 T7 t/ N  @( f1 t% K  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ G, w* ~5 ^% _9 B0 n1 T% h/ ~* P. ?* o" G4 P% ~  l, I
  void puta(void)
* p4 l1 C" m8 ~8 g( R' l# t! d) i  {
, X. R. f8 H! D- C, Y* u+ |  int i,j;
1 d* ?- x9 z& |+ ^  for(i=0;i<24;i++){
" T( H# k9 a' w: z  for(j=0;j<79;j++){4 K8 ^5 l8 z4 K
  goto_xy(i,j);# g( k, N2 p* G0 d$ C8 N
  printf("a");# q2 ]/ t& `% e! L7 p
  }( Y* t2 D- N4 v4 c7 N
  }* ^, u5 w# ^7 _$ J8 D- c0 Q
  }

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