返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 s. _, `! @5 [8 _3 J, L. j6 a7 y6 f' [1 R# n5 L$ \% l- f
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, F& q+ U& o( `
( b! x) z0 M  d- o
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 }9 v  i$ ^( A* X2 O# F& N- V+ Q. ^  子函数及演示程序:
/ p) P4 k$ I8 E' i: b) E
/ b7 w% O6 b: }  c0 @& M* f$ b  #include<stdio.h>  S2 ]- t. w5 ~' [. j
  #include<dos.h>, Z+ j& V: e5 q# f
  #include<conio.h>
+ \+ H* x9 N: z4 r/ ?6 K+ E& m* y! Y. K. e% n# d/ e, ~
  void goto_xy(int x,int y);
$ h. v9 N4 O/ d; Y  void dcls(int x1,int x2,int y1,int y2);
: f7 V! L0 k% d7 c3 R. {  void bcls(int x1,int x2,int y1,int y2);  F  g: }0 E+ u( q! ]" ?
  void kcls(int x1,int x2,int y1,int y2);1 ?0 @; U# p1 O1 A0 \: Y
  void recls(int x1,int x2,int y1,int y2);8 r+ |# P8 {' s5 O% w4 K! x7 N1 p
  void zcls(int x1,int x2,int y1,int y2);3 c% v9 |+ B8 u) q5 p8 k3 y6 @
  void puta(void);% P- f. m$ Z4 o* e! \
- ^# n) V( x" o4 H* j1 y

7 M9 }: V4 d+ r/ b1 j$ @: }  /*--------------演示程序---------------------*/- M  g, R0 ~$ F8 ~; ]* H- N' ~
  main()
; l" A+ @- U  i, G: {) S1 V  {
2 R% L2 t- V$ C; V8 F  puta();8 X" b# d3 Y* N# F
  getch();1 t: u5 N: ]  m) V9 L" R
  dcls(0,4,0,79);8 y5 v- S1 d% j" `7 g$ e
  getch();
6 p0 P, L, k2 i/ Q; Q  Z  puta();
- F6 M/ z% j& L& `; M  getch();
0 H- j: f( x* m' {( ^  bcls(0,25,0,79);5 L4 ?. T/ z6 U
  getch();0 `9 h# p0 w/ V6 N& [. Q: A6 S# x
  puta();
2 O8 H0 P" l$ @% x  getch();
/ Y* j- D4 B9 k$ `  E/ R  zcls(0,25,0,79);( d* m6 f5 L7 P$ W) M$ ?2 ~
  getch();/ R( ]  N0 j1 z& K( @( T! [9 L
  }
! \2 Y1 U% o% l# v  /*********center clear screen(中心清屏)***********/2 l1 g$ Z+ T* l+ _  z4 P3 h* C
  void zcls(int x1,int x2,int y1,int y2)
3 C% ?- ?& @! P8 X  {% v; c# I# U2 x. l
  int x00,y00,x0,y0,i,d;$ r# l+ [: a* t+ O5 v
  if((y2-y1)>(x2-x1)){  Z5 X+ O# c% O
  d=(x2-x1)/2;
2 {0 a. ?5 E* `8 G5 E  x0=(x1+x2)/2;
/ F" b* V+ ^+ O  y0=y1+d;" \4 L8 f  g# Z
  y00=y2-d;
! a# P0 c" g& v8 D% s  for(i=0;i<(d+1);i++)3 L# O/ n+ C1 j( `; l0 \
  recls((x0-i),(x00+i),(y0-i),(y00+i));9 [! t+ u: C' K% I' u* ^: Z
  delay(10);$ Y5 ?. H* J1 v% `: g: P8 P! {( j
  }
# j6 [; i2 {& }' K3 N: |  else{
$ n) a: `3 i/ o& t1 L3 l5 B4 n  d=(y2-y1)/2;! q, n, c6 `) c
  y0=(y1+y2)/2;5 j0 Q, \  S- E" z
  x0=x1+d;+ B" K+ C- w# X  q
  x00=x2-d;  M4 \: a' n8 O& C
  for(i=0;i<d+1;i++)2 H# p' U" H9 H4 O
  recls(x0-i,x00+i,y0-i,y00+i);
, r- K, G3 N( _  delay(10);( ~2 J/ {1 B* o
  }+ f* X/ q: s. }7 o+ q1 [
  }
. k* t6 r5 s# r# ^; o# y! |4 e( d' V" K- b0 n
  /************* clear rectangle side(矩形边清屏)***********************/5 U* w( D' U3 q6 M0 p: K4 ~  s- Q
/ K8 I1 |' A, A3 F7 `4 \
  void recls(int x1,int x2,int y1,int y2)
) i: ~8 r* A2 A5 f  {. j9 R. E( t- z1 q* n
  int i,j;
2 ~) ~0 h0 Y. K1 |8 F& ^  for(i=y1;i<y2;i++){: O7 f( s, u8 U  w9 Z! _
    goto_xy(x1,i);
  Z( U2 J- k2 E3 B, N  putchar(' ');
3 {1 W8 x% E9 N( M% f  o  goto_xy(x2,i);; I! L' ^! b1 I5 e/ N% @
  putchar(' ');8 d1 a; c3 r$ V
  delay(10);
" Q1 I9 \$ ?& g  }5 Q! V8 N, V) @6 q, U2 }
  for(j=x1;j<x2;j++){
0 c) o6 o2 Q; r% q2 m  goto_xy(i,y1);; i( L7 y- K' `/ g, \& O
  putchar(' ');) f: S1 N' x2 s" j% T8 l8 t& V
  goto_xy(j,y2);0 }! P, M3 }5 C& d* h$ l2 @
  putchar(' ');; m. \$ c+ q; X
  delay(10);
/ i' r3 u; {+ |" g/ V9 n6 C$ Z  }& k( X6 n& b' \3 [; a; o/ F
  }
0 h* R* M6 n. p& K3 L7 j  /******************open screen clear(开屏式清屏)*********************/
0 l; H4 i# y- R# {, m6 Z5 O7 l/ d7 `, ]' g3 a( ^3 J
  void kcls(int x1,int x2,int y1,int y2)( [& S# Q6 U" F6 M) r/ F) g7 l
  {
/ s" Z5 L) B+ n+ l  int t,s,i,j;
. j  m7 e4 q* D+ E# {( l  t=s=(y1+y2)/2;
' ?/ z% Q% o& T0 `4 `: P  for(;t<=y2;t++,s--)
# g' i) a0 ]: x1 X( ^$ m. Z  for(j=x1;j<x2;j++){, [( i" a& q% X. c! Y
  goto_xy(j,t);* S9 A% J- }% m. X1 p/ o
  putchar(' ');
. J$ v  R9 u) g2 ]% v  goto_xy(j,s);# S: z1 I+ `  J* _
  putchar(' ');
) [) ]1 {  v+ ?  delay(10);
( P6 D+ y7 J4 i: O1 }  }: l  [9 N3 Y- H3 _4 m
  }; Y+ L+ H# ^4 g
  /*****************close screen clear*****闭幕式清屏*******************/
' M3 M6 Z. Y7 F. h! K; U1 p# S6 v9 a0 X
  void bcls(int x1,int x2,int y1,int y2)
0 e8 h5 V2 [' d* j0 \& }  {
2 A, G2 G2 r7 j6 x: \5 \' s; x  int t,s,j;
9 F/ M- E% q) ~: V  t=y1;. p: C$ u4 e4 O
  s=y2;
9 `! C1 \% D4 Z+ `7 G& y3 J  for(t=y1;t<(y1+y2)/2;t++,s--)2 t8 j, x5 N# u
  for(j=x1;j<x2;j++){# ?( j2 K, @+ b3 s# j3 N
  goto_xy(j,t);
; u$ z$ F7 l4 k5 `  putchar(' ');" C6 c/ |/ e( u- o# @( _
  goto_xy(j,s);
, T9 a5 {& g' p( v# o; N  putchar(' ');
: E- o) H& T  R0 l1 D  delay(10);
0 T6 V) K3 E% g9 o; H: G  }
  @3 h% J+ _0 e  q/ D6 @; R  }
& B- u$ w; r. W% @) m' a! E6 l  /******************bottom screen clear(自下清屏)********************/
! D& j  U. ?0 Z) V8 {- C
/ e) E$ j, X5 {) I6 i; F3 m4 {  void dcls(int x1,int x2,int y1,int y2)5 }' c4 _. O7 i- c
  {! A3 ]7 b9 w& Q, Q% Z! h: t" }
  int t,s,j,i;( Z6 J8 Y. o' H6 N+ N
  t=s=(y1+y2)/2;! ^/ M0 `3 I4 P" K" x5 Q
  for(j=x2;j>x1;j--)
: u8 F1 H5 X1 F: ]/ F  q( w  for(i=y1;i<y2;i++){$ l2 K5 s5 T' H$ [7 [, q; u, \
  goto_xy(j,i);# R  O* k' w; k* p/ K# q
  putchar(' ');7 n/ C( g: Y+ W- m: p4 w
  delay(10);1 g( S# F5 C: X) E4 c' z
  }5 U1 y6 E, {- _( H2 C+ B
  }: n) w/ P+ X+ H% q
  /******************设置光标子函数******************/1 f0 `$ I+ F1 Z2 c1 Q5 g5 Q  Q2 n

/ P! o- C7 ^* n3 O3 V; Z  void goto_xy(int x,int y)  ]2 m- |; v2 V9 w$ D
  {3 B: F7 {/ {+ v  x) s( P: t1 H" }9 c
  union REGS r;& k* Y: E5 O) {& n" J+ M* y
  r.h.ah=2;! l* I; _9 e8 ^2 t* g
  r.h.dl=y;6 _4 @. B; l6 h9 w5 ]# b* j& S  J
  r.h.dh=x;, Z) L( K9 f0 c- h6 p  d$ \
  r.h.bh=0;
2 e- z) r1 M4 O( o3 i4 i: _% \- Y  int86(0x10,&r,&r);
( a* v/ P  y6 M6 P, K& I5 m% w  }8 d% _# M% B# Z+ v

& B+ t* }$ q  O, r$ R  /**********************在屏幕上打出一连串的a字母用于演示程序******************/: r/ W8 ?: g/ D( h' N6 a

  X% e0 o* @4 d' ^+ ~5 t7 Z" v  void puta(void)
3 S# P+ Z1 h" ~/ |  {
: P( o; b' K! I- \) @+ Z9 s  int i,j;
7 J0 x3 i7 I3 b9 l8 u  ^  for(i=0;i<24;i++){
( m/ n2 g" D3 o: q0 |& H  for(j=0;j<79;j++){" j) _3 d+ @2 U6 p  ?; P2 Q
  goto_xy(i,j);2 E: }3 ^1 G) ^; s1 @* }
  printf("a");
/ Z2 \+ Y' a& N  }
, t9 g, J0 g2 c% ^5 a$ l( k" Y  }
# x' M" o# B& D8 H. ]2 G& \4 N& g$ j  }

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