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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 S3 _! _, a- N# k" M8 N- M- f& b

% p! @+ e5 e7 U5 z* h  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# k3 x5 {  \7 a) w) Y0 a
, O' E5 ?; a3 ]; k: U: }' m) H  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
3 f: \5 Q9 i- e% {7 L: p, Y  子函数及演示程序:
. I! F* R8 h% d5 Y9 f5 W3 a4 |; a: O1 b/ u* ?0 V' C
  #include<stdio.h>! k4 T% }' v8 ~. i3 [1 ~4 U
  #include<dos.h>
" |( Q7 I* r0 c; T" D. S  #include<conio.h>0 N/ t" T1 g  v- s# `2 C& X
% m5 x' P6 H: k5 {$ a) P
  void goto_xy(int x,int y);
9 q8 [( ?; n3 @, j: C  void dcls(int x1,int x2,int y1,int y2);& \& c7 B! H# M! ]4 `# i6 G7 }
  void bcls(int x1,int x2,int y1,int y2);# Z! O/ B  s2 D. ?& t( @2 E1 H
  void kcls(int x1,int x2,int y1,int y2);
1 D7 J# ^" X$ ]% {! R, e9 r  void recls(int x1,int x2,int y1,int y2);
# y4 ]3 x2 S9 W; h+ ?  void zcls(int x1,int x2,int y1,int y2);
3 u0 j" \$ o( F6 S  void puta(void);
3 w4 ]3 t0 Q1 x5 v! r7 r# m7 D, e# u+ B) @9 y. i
7 a! `) \9 q2 z" a; D
  /*--------------演示程序---------------------*/3 b5 h- n2 F: W& A
  main()
0 x& U* ]! w+ g* O6 R, Z0 |. d  {8 q# V, g. l1 \4 t/ t/ \
  puta();
! M1 n% S* S' w0 e5 k  getch();
. B' [% n* [, J0 w- ]  dcls(0,4,0,79);& n8 k$ N6 R: h5 e2 s- p
  getch();
5 V# }4 {' m8 F/ _+ _  puta();1 N) L& U& o; |( f
  getch();- M8 @2 c/ w* R2 j: j
  bcls(0,25,0,79);
8 R$ a. P& y/ j  getch();+ ~9 L: e: ?, K8 v. T& y
  puta();+ ^, P, H( c9 M/ u* \/ `& U/ d
  getch();1 w% n! j8 s) e" O% [! `' _# f0 h8 P
  zcls(0,25,0,79);
0 t2 Y8 r9 p. b7 Z) O3 N. n  getch();
' Z( A2 d" E, l' o% _; m  }
) i8 h9 ?) g0 m* f2 a  /*********center clear screen(中心清屏)***********/
3 f  x+ x* z8 i: M6 V  void zcls(int x1,int x2,int y1,int y2)( @5 \2 D2 _4 i# [* P0 x4 J
  {- @0 L0 g& `9 ~. g
  int x00,y00,x0,y0,i,d;4 Z) W  a6 l9 N
  if((y2-y1)>(x2-x1)){7 t. L2 ^) ^- `8 q5 C1 K5 A* ~
  d=(x2-x1)/2;' u  x) i/ {$ H! o0 m9 e
  x0=(x1+x2)/2;
3 l2 O# s/ c* r& q* U8 t  y0=y1+d;; d. j  g+ [* H9 o8 K+ \
  y00=y2-d;7 o, w* O% i& f+ F
  for(i=0;i<(d+1);i++)  G- i1 i, K! B
  recls((x0-i),(x00+i),(y0-i),(y00+i));  y- I) f: c/ q4 S+ e
  delay(10);
% t! Z8 q0 X$ A/ N  }
4 `. K* G8 }1 c' F. i0 N  else{& V( N0 \7 l+ y; X( Y
  d=(y2-y1)/2;
' z9 |3 W( ]2 T9 h: L, H& N  y0=(y1+y2)/2;1 |% S0 w$ w. ]2 [0 b8 m* Z/ T  J9 }
  x0=x1+d;
$ `# a4 [$ z2 a& ~  x00=x2-d;4 Y3 ^6 x+ S) r4 n+ U- N
  for(i=0;i<d+1;i++)/ X- o: [7 A: x, `' L+ W9 j
  recls(x0-i,x00+i,y0-i,y00+i);
; a8 ]2 A9 `+ L8 M) b  n: t  delay(10);- f9 i+ ~; H; x' J
  }# A7 b0 u" |. w7 n8 V- R2 c' J# i
  }
0 B0 z' i. w. ?: }
1 {* b; ?3 n, a' W+ Q, S2 p5 f4 F  /************* clear rectangle side(矩形边清屏)***********************/
' h4 k; j! c; q* z4 }% e0 \. V4 \7 P: S, I% c
  void recls(int x1,int x2,int y1,int y2)
$ m/ N% l( D3 \- r3 M  {0 E. Q6 M2 n/ G. ]1 t& _
  int i,j;- U) D5 K  F) A
  for(i=y1;i<y2;i++){
5 v! ]  U/ b) _( ^/ G    goto_xy(x1,i);1 w/ ^6 M& s' H, K
  putchar(' ');& U  s( e* s) [. i; B
  goto_xy(x2,i);$ `! [8 y& g8 ^6 J
  putchar(' ');
6 t; w9 P6 B* B. u! E; W: @# V  delay(10);
7 m4 T, u5 R, G0 j7 ^  V# H/ |  }( @$ ?/ l8 W- X1 S' f; D! \2 o' C$ O
  for(j=x1;j<x2;j++){
! a5 _! R; t+ O3 R. n/ {  goto_xy(i,y1);
8 ~- a. Q0 }. m4 K$ ?6 j  z( M' J  putchar(' ');" H* w! L' }$ k  c
  goto_xy(j,y2);! ?5 q% q* u5 D9 |) H
  putchar(' ');
" a) l. J% Z6 O4 |9 D  delay(10);0 }: o8 _# c4 Q) \$ D2 o, h
  }
- ]3 f9 z( Q8 a/ T! ~' L& a* o  }
! Q5 k) E* S8 h/ ~  /******************open screen clear(开屏式清屏)*********************/+ j# ]+ P4 k% n4 V* b4 m

( U- H0 o# v# |  void kcls(int x1,int x2,int y1,int y2)* r, T! i. e3 D$ z! Z! h
  {
, p% ?4 |3 f$ p; K  int t,s,i,j;
  S, D7 K: v2 U! r2 [3 j7 Q  t=s=(y1+y2)/2;
9 V) q3 t# h& H  for(;t<=y2;t++,s--)
% Z+ e) V' N8 @. e' {0 d  for(j=x1;j<x2;j++){1 b# J2 }% V/ g9 V# R' `
  goto_xy(j,t);' f5 T& n8 y0 e# h! B- S
  putchar(' ');/ U8 L' Q& Z2 d0 I8 {5 S4 I
  goto_xy(j,s);
5 g! o: R5 u* Z9 v3 X1 _  putchar(' ');  Z3 }; o* T$ ~0 `' f* q1 L
  delay(10);
1 V! @# x. z% @7 T$ u' r  }- |$ {: I4 S2 V: o. @
  }
# g# S3 j' ], z+ Y3 P+ W  /*****************close screen clear*****闭幕式清屏*******************/
1 p/ \, d6 O" q  w, K9 @
. T& f7 j6 R! [# H! n  void bcls(int x1,int x2,int y1,int y2)
4 Y5 O$ g/ U! l) B5 B( C: M  {. l4 l8 Z& |7 S- o
  int t,s,j;* H1 S' b" I0 h6 I' K7 L, @
  t=y1;
3 m. j1 @/ ?% l2 k" e% u, C  s=y2;1 X3 Y1 ^' I8 }8 Q% O) r: U' U
  for(t=y1;t<(y1+y2)/2;t++,s--)) C% @; p& J1 b/ U
  for(j=x1;j<x2;j++){
* Y1 B0 R: ^* h  goto_xy(j,t);- ?' n- S9 S& e" w
  putchar(' ');
# ~- R9 D7 |* }% @+ U, L  goto_xy(j,s);
- l: P4 e6 r8 Y  putchar(' ');
2 ?  l$ Q$ `( T' ]# m* m, l  delay(10);& ?  B& \8 Y( S, O7 J$ ^" G- i
  }
6 z* ~& v) R) t2 H7 h2 |4 \4 G  }' g' c4 O4 x$ h8 e( u
  /******************bottom screen clear(自下清屏)********************/
* J+ r6 B( j0 b- S( d6 V2 t- Z8 d- L# D
  void dcls(int x1,int x2,int y1,int y2)
! G7 L0 M1 {0 L+ N# v. S6 z  {
* b& w! N3 F4 Y+ j7 `# f; H+ w0 Y+ w  int t,s,j,i;
, F# }/ ]3 Z: m: A9 N  t=s=(y1+y2)/2;
% i& i3 J! {2 l4 ], P6 `- X  for(j=x2;j>x1;j--)
) {1 S8 E- ?9 O* b) M* ?' N  for(i=y1;i<y2;i++){
: a1 c' U' N6 k, m5 `  goto_xy(j,i);% ]6 T3 X$ Z* ]+ p& G2 U3 t
  putchar(' ');
5 Y5 g& a* Y; |! a3 i& P  delay(10);
/ V6 V$ v/ h7 [' _  }; W7 d- L- t' x: A, F/ a/ a* U4 V
  }
2 h, P* l' P5 }+ a  /******************设置光标子函数******************/( ~  x& `/ B/ j

3 i! T  G& ~; W6 D5 J  void goto_xy(int x,int y)# A7 o! H/ l3 ~4 @
  {
+ ?( `7 b9 K! _" }* `8 n  union REGS r;
) F( j" u" W1 s) s( Y8 T  r.h.ah=2;
9 i3 n9 r) I7 y! }  r.h.dl=y;
% \" L. c4 N2 b& X8 H$ E1 Y1 n: H  r.h.dh=x;
+ ]1 F; f2 M9 s, B1 ?  r.h.bh=0;4 \6 y. ]0 M- y: Z7 r
  int86(0x10,&r,&r);
: T0 Z" X2 C0 @4 V0 `$ c7 h  }
, N, T" y% w+ {; ]) z) F
. q: D5 g9 X9 T  A7 R/ k  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
( d2 o4 c) r+ b  t) h8 N/ N! [. ~" V6 R+ |- }9 m6 z
  void puta(void)3 C& m8 ]! }7 d; `; {7 T
  {% p- G! w. b" v6 Z% _( m- V
  int i,j;; ^3 a) U+ q( |( [
  for(i=0;i<24;i++){
9 R6 C5 \' n3 [1 N( \( L1 i  for(j=0;j<79;j++){
/ h3 I8 ]5 i# C& r2 q! d. f  goto_xy(i,j);
3 k+ n) X2 N! W  k4 E+ h! N  printf("a");
* j( F" [; O8 F. U  }
) t# I% \% b! x  }
  J0 k) e% O& B% v/ E- g6 D* ]% r% M  }

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