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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; T6 K+ ^" r8 W  `0 U% w& a% d, N& e3 j5 {. a$ G- [
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, u3 l& I  G: N7 n4 x1 m

5 p+ K8 h& j2 ^8 E' F( `1 z  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.   h$ o% X, F. Q/ m; t) j
  子函数及演示程序:
/ P! O6 [3 i3 T5 q1 p
& s5 r' s. n9 T# T$ E  #include<stdio.h>4 u  R7 ]4 Z+ N3 g$ C. k& ?' e
  #include<dos.h>
4 W) O: N4 n7 s( X# E( a5 ]% B! W) Y$ I  #include<conio.h>
7 t% ^; C9 v7 H5 o" h- f( D' ?/ V
4 e. ^9 T8 T0 {5 m5 i, m1 l1 r  void goto_xy(int x,int y);2 [1 ?2 z+ }/ @7 F$ _
  void dcls(int x1,int x2,int y1,int y2);
: x3 S" [( B8 P8 F1 F0 B  void bcls(int x1,int x2,int y1,int y2);- r! x9 @5 W/ v+ g1 z1 o* U. W' k
  void kcls(int x1,int x2,int y1,int y2);
& s- M# M/ H. A" e1 Y2 T  void recls(int x1,int x2,int y1,int y2);# ^/ Y9 _+ B  L$ n* I
  void zcls(int x1,int x2,int y1,int y2);
2 m5 d7 ?* B9 _8 m' J) r  void puta(void);2 q9 o" {4 S% ]1 n8 W

- d  L/ N! n. a7 R# B' d0 N
: r/ p( D$ s$ U9 X  /*--------------演示程序---------------------*/
% t  k7 ^+ o, p8 F, U  main()
5 [/ D" s( X4 i: O4 s1 n. z* d  {3 r$ m, U& W  G' _
  puta();
. u/ f/ H5 S7 Q: V( G, V7 O  Z  getch();& ]9 E) f! U1 y  y% }, k
  dcls(0,4,0,79);
3 ~# Y8 V/ s3 Q$ m( U% p& O$ ~  getch();
8 T# C& d3 _' M0 @  puta();
: p- z# r" Z; W$ h0 c9 a. V8 a  getch();
# t3 Q4 k- @9 O! e' ^  bcls(0,25,0,79);
; k2 h; q; r' D3 y. V  getch();
( M, P/ u) P- ]  puta();; q  y3 q. F1 V8 A9 R
  getch();
' c/ D0 z# k# \1 O2 A  zcls(0,25,0,79);& T! s0 R# ]3 z
  getch();2 m, p0 f, J; A
  }8 E* V6 t( @5 V' Q
  /*********center clear screen(中心清屏)***********/6 T! b# r2 n1 `# [; h4 |; B
  void zcls(int x1,int x2,int y1,int y2)
+ b/ ?- T, i  K+ Q  {
0 G3 P; O& y7 O: E: o6 \! o- E  int x00,y00,x0,y0,i,d;6 p  z3 @1 A# _) s
  if((y2-y1)>(x2-x1)){
$ l1 f+ I0 \$ m6 M- g& x# j7 ]  d=(x2-x1)/2;
9 v5 H. [$ l9 x  u  x0=(x1+x2)/2;* A8 L" Z0 `& C  @1 f; U5 ?8 Y
  y0=y1+d;% t9 Q. x) P1 _5 @/ D3 P6 M5 G
  y00=y2-d;# z  f. g4 v4 @% O* I+ ?
  for(i=0;i<(d+1);i++)
1 @' J* \0 w# a& H1 ~  recls((x0-i),(x00+i),(y0-i),(y00+i));- \+ U6 O% G$ N2 V2 z
  delay(10);
3 X. i( ^+ `8 E/ M' m: ]% a  }
2 N- r1 ^2 l. A  \  else{
  b' K  }8 U! S1 ?- E  d=(y2-y1)/2;
) Y3 [' l5 W! F! h1 P9 M8 ?2 M  y0=(y1+y2)/2;
6 |0 e; \5 p5 j+ V  x0=x1+d;
2 E0 R& S7 H6 d+ V8 G. r  x00=x2-d;
- H6 Q2 c3 b3 G4 s7 E5 U! V2 ?7 G  for(i=0;i<d+1;i++)
% k9 l0 Y" |  U  recls(x0-i,x00+i,y0-i,y00+i);; B- ?. j& T  s" n
  delay(10);5 z& q5 y& U9 D0 I0 m, s7 `4 ^, d
  }6 g& Z  N9 N  Z% t; j8 j3 \7 }& f  J
  }
5 }. z9 B0 G& C) A9 K8 @! g3 [* O8 N# T+ j8 Q0 p% t
  /************* clear rectangle side(矩形边清屏)***********************/
3 s7 m! P2 M% T1 Y" F, y2 ^7 [5 U  _8 s2 ^$ D1 ^- C3 P
  void recls(int x1,int x2,int y1,int y2)
; V) z" `$ t  \# i2 f2 u  {2 r# Z/ W7 _! H2 g5 v# @: \
  int i,j;
$ O0 B3 r/ F% J  for(i=y1;i<y2;i++){; `1 s, t5 {9 Y6 [$ J
    goto_xy(x1,i);  d# {0 F! D# u1 m8 A
  putchar(' ');
  z5 ?7 i/ a  `3 K' Z: P  goto_xy(x2,i);
! Y7 d; \# x1 H  ^: |4 N% G; A  putchar(' ');
$ n/ I, P# K+ {" s! N4 N  delay(10);! Q; z, I, @+ i& T  J  k
  }
' V, E6 |( f8 C  for(j=x1;j<x2;j++){8 z3 G3 O: o. h' O4 d9 G
  goto_xy(i,y1);
* d7 B" m7 {9 V$ t+ a8 N( g  putchar(' ');' [0 X6 t: i# X
  goto_xy(j,y2);
/ L4 s( D  H3 T0 c  putchar(' ');
& P, N- D# O2 u" w4 j  delay(10);
8 N( L  H7 i4 i+ x4 U  }: U! O3 J5 E' F3 Z
  }0 X6 t8 c7 N( u) r, I
  /******************open screen clear(开屏式清屏)*********************/
  r6 T( s% S7 z* {+ b  H" u: F/ @" [  h' g" u% E* H
  void kcls(int x1,int x2,int y1,int y2)
" K: u. R4 I; ]9 {3 n/ A  {
. ]3 Q" ^* X0 _; @4 R  int t,s,i,j;
4 R  ]3 |5 \: y& l0 h  t=s=(y1+y2)/2;
! Z! F" n) _  n5 I9 ~8 }: n9 P  for(;t<=y2;t++,s--)8 K# x( l! R9 ~' i! o3 S  t
  for(j=x1;j<x2;j++){
8 {* o# G' e, ~+ }# w/ t0 m1 O6 X  goto_xy(j,t);. ]6 H& D5 f  r
  putchar(' ');
  k% L$ w; e8 g; \5 c2 M2 W  goto_xy(j,s);! R& ]3 H% k7 ^8 O: O0 E" I: [( s- |
  putchar(' ');
9 L; Q0 a: H% T$ `. `' J2 F+ G( k  delay(10);
1 [: ^: D5 F3 S4 c2 W' n/ S  }
: X) p9 m; D2 w/ ]; b  }
$ `- K7 d, ]2 k6 L8 }: U  /*****************close screen clear*****闭幕式清屏*******************/" [# a  e5 P# }% g; g  P

, c+ ~9 b1 d2 e; R7 l. B* N! {- p9 s  void bcls(int x1,int x2,int y1,int y2)
! t% s' h! S9 y$ v) L  {
3 N: n' n) k0 S$ f  int t,s,j;5 E6 e3 ]. w0 {8 L) m3 n0 D$ Z( @: z. f
  t=y1;0 T* h! e  W' }' O9 X5 g
  s=y2;$ S, f3 T1 q& ?( [. O7 ]
  for(t=y1;t<(y1+y2)/2;t++,s--)
1 M" U% |! J" L* P4 ]- z/ p  for(j=x1;j<x2;j++){4 A' u* F6 \" O9 T& _9 r7 e
  goto_xy(j,t);0 [8 U6 L4 o6 e8 z
  putchar(' ');) e) I% e/ w  x* @
  goto_xy(j,s);
: v) z- c  }2 s. F. U8 n  O  putchar(' ');
* S( I; v1 x, t7 |  delay(10);
  q3 L4 A* d$ p  }3 A9 i6 Y9 V* o2 b  c: q
  }; _: I/ ], j+ a3 W0 L0 \
  /******************bottom screen clear(自下清屏)********************/5 V- Y4 D" w( v7 ]1 i
9 ?% ^; V) i$ ^) W
  void dcls(int x1,int x2,int y1,int y2): _/ V, _' A( @) }/ _1 {, C$ n5 U
  {* d& k' J  I. {0 _  W5 g. P; M7 A$ N
  int t,s,j,i;
* V! Y8 l% S4 L1 J0 o  t=s=(y1+y2)/2;) m4 d; z3 A  _, Y+ c
  for(j=x2;j>x1;j--)8 z1 r' F, |, }' D, I
  for(i=y1;i<y2;i++){
6 ~8 h6 @3 G: Q  goto_xy(j,i);+ K# |0 I, `2 A( @& l
  putchar(' ');! Z% X, I+ }8 X1 s/ L: W
  delay(10);
3 F( v0 j6 \5 k4 F1 ?  z. V  }4 m- D: P! p  v) O, C5 D3 e
  }7 W  z" x2 A5 e/ t9 G- }% p
  /******************设置光标子函数******************/
5 x5 w8 J. H% g( L! K3 v' p0 k& w& y2 H0 d2 u5 O
  void goto_xy(int x,int y)
3 U! c3 q6 t0 T( G. }( n  {
# S  J& X( b' ~" m* A3 v  union REGS r;+ A! d) E, _8 S! _$ X( {; G
  r.h.ah=2;
# ?$ i# p. r5 c$ p3 ?2 j  r.h.dl=y;
2 ~0 ~+ I9 X5 g1 q3 Y  U& V+ H* U( D  r.h.dh=x;  `: {) }: @1 b+ V  D& F7 f
  r.h.bh=0;* j4 k8 B# m  v/ P' Y
  int86(0x10,&r,&r);
, d- r8 o* O6 T# _- v; b7 t; u! Z  }# X5 P: P0 f' R8 V2 _

: N3 f: j" [% u  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" `' ?4 I: a2 d' y3 x: v, H# S  A% E) X/ V& _
  void puta(void)
! X0 w( N% A  A  g/ W  {
, W" M/ |. S& U, W$ N/ [& h  int i,j;
7 i, V# Y' ?) w) O/ T  for(i=0;i<24;i++){1 o, c) @3 a5 \- U
  for(j=0;j<79;j++){- B. _; k) Y( F% E8 j" B/ {
  goto_xy(i,j);2 V8 b1 X3 L' K! S+ Q$ m* [
  printf("a");( J! k0 ^: [! b& s
  }
4 J5 u, Q. ]9 n9 k( c  }+ v3 d; p& P- w; o* ^  c
  }

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