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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, b% s& H  R+ x7 x1 e! J/ a$ H' n
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 N$ n2 Y$ i: v7 y2 d$ i; r+ k% X- o

3 t4 M: K8 R; o" L  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . T4 O* ?7 J0 I: s$ J. M8 _. Y0 Y
  子函数及演示程序:6 {8 H$ L( |' |; b% E7 N. x
7 x. A! M( V( e( X# m
  #include<stdio.h>
+ V) R" g1 r& _) @; G: O  #include<dos.h>( r9 j, l, K: T
  #include<conio.h>
0 {9 S' W; ~. _3 i, t+ F, V1 ?. R* R+ q* a( i2 V
  void goto_xy(int x,int y);' ^) ^+ h8 N; ]! c% u
  void dcls(int x1,int x2,int y1,int y2);
) K; t6 |& U  {- V* ?  void bcls(int x1,int x2,int y1,int y2);7 h( K' I+ r4 ?9 k! T8 {" g
  void kcls(int x1,int x2,int y1,int y2);& V1 g/ Q8 P- O  r6 N: x
  void recls(int x1,int x2,int y1,int y2);! Y, _9 W, U% S' i" l
  void zcls(int x1,int x2,int y1,int y2);
0 _/ ~, @6 A+ C2 T  void puta(void);* _+ T* Y: v* b* ~2 B5 o5 }

- K, a. a# D9 V" }
. j0 A# o) z7 r  /*--------------演示程序---------------------*/' F$ h! A% a  g
  main()
: q5 d7 f& e2 h. B$ w; l5 V  {: a4 n/ c3 N, c# y7 V1 d: x/ k# g
  puta();
; {' m4 p, F+ K& d0 a+ u6 K  getch();, R" N) ^3 p) @& E
  dcls(0,4,0,79);" [% R/ L: n" w" |% }) Z3 C- j# a
  getch();% I" O' m3 ^3 ?; d; G% t
  puta();4 n6 N0 T. s8 f  O
  getch();7 X8 a/ t3 l4 T: B
  bcls(0,25,0,79);
/ B' g5 \6 y8 M9 y( S0 h  getch();4 e# M9 S5 R0 ]4 s; D9 W
  puta();
( o; y- c/ j( V$ I  O  M1 ]  K. O  getch();8 Z( [$ c- W1 X# G
  zcls(0,25,0,79);0 m7 {/ X6 D3 @
  getch();( j  }& S, k9 j6 ?
  }
$ P2 l2 Y) _1 P! V" r$ \7 j  /*********center clear screen(中心清屏)***********/1 \& {& z8 K1 ]; Z6 o$ v
  void zcls(int x1,int x2,int y1,int y2)5 x0 D6 e  |4 L( H( C6 j+ f$ e
  {, v9 s$ b# G7 i  B$ ~; G4 G3 `0 g
  int x00,y00,x0,y0,i,d;9 T9 v5 x' J7 a* f( ^0 N' K7 e2 m
  if((y2-y1)>(x2-x1)){6 B' [0 Z4 x% K: Y3 @9 ?* B
  d=(x2-x1)/2;
: E/ q3 I, f4 [" O0 e  x0=(x1+x2)/2;
0 U3 A, L6 F7 F2 |% n  y0=y1+d;0 D, K/ F* ^9 `" C3 a' d  c) X9 ?5 x
  y00=y2-d;! o, I5 Q" l/ z
  for(i=0;i<(d+1);i++)
- d  f& E; T8 I  b5 h; \  recls((x0-i),(x00+i),(y0-i),(y00+i));7 U% l. K% p2 O7 T1 S
  delay(10);
8 K, @$ d4 \6 v9 e4 \. o! I  }
; s4 `/ ^: |) y, K! {) O; [) u( v  else{; a8 E# @, k! h: v, O6 d
  d=(y2-y1)/2;
) d; V+ c/ B1 C& g3 Q  y0=(y1+y2)/2;
! U1 M( [1 {2 C& N, c+ p5 e  x0=x1+d;
/ S6 V: u, A6 _0 e3 k. }5 a  x00=x2-d;
) I5 _4 k; q5 c5 w  for(i=0;i<d+1;i++)% v1 }6 |( w& I# b3 z" P
  recls(x0-i,x00+i,y0-i,y00+i);
! K9 F% J9 S7 q3 @( \1 f  delay(10);
7 t4 Y0 T) D5 N  }
' Y1 |$ R. A6 c8 w  }7 P- Y$ f: v1 F1 }) U
  U! W; s0 z9 i6 G7 J" e9 ~  G. p+ J5 K5 d
  /************* clear rectangle side(矩形边清屏)***********************/( v- b, ^( P; G1 t5 `- t% ~0 X
8 s' p, Q' P$ o& l$ {
  void recls(int x1,int x2,int y1,int y2)
  E2 G8 n. C* ~: b5 S: U  {# B2 h  D: u. z! w' L  ^3 j/ q
  int i,j;
+ _' c' P. w9 W  for(i=y1;i<y2;i++){' c8 s6 r* S; @% |6 {1 v; F
    goto_xy(x1,i);
+ e! O7 i  K: a, D1 _  putchar(' ');
: D& e) {- S# S  [* p. O  goto_xy(x2,i);+ P7 X4 z8 g8 U5 B# D1 s) U
  putchar(' ');6 |  f' G% Z% K3 R. P- R
  delay(10);0 o, d. V& l! _* Q4 R  n2 o
  }
% O1 H& p6 \7 w9 T8 n  for(j=x1;j<x2;j++){4 t4 M7 n# q( c, S6 j/ s7 m
  goto_xy(i,y1);
: _$ w6 P! K5 s# z  putchar(' ');: z' I" l! }  G* t, g
  goto_xy(j,y2);/ t# ~0 p- J6 w* k' P( V
  putchar(' ');
* {( U0 j- e* f" Z8 e& \9 s; A0 [  delay(10);
; F5 ]# w5 {+ _  }$ ]( t1 S+ H! i
  }
& u( G6 V; [1 D  /******************open screen clear(开屏式清屏)*********************/5 U% v7 j4 y5 A. D. n5 C
. v1 ~' {& T! j: W+ k9 D
  void kcls(int x1,int x2,int y1,int y2)% Y! e4 K# u, |) x$ i. `4 U" r
  {' R, \; n- O4 c3 U9 T. p  ^. c, K
  int t,s,i,j;0 q' W9 t& B# p! k  b9 r# V
  t=s=(y1+y2)/2;
8 w$ p4 [* @( B$ A. X0 P  for(;t<=y2;t++,s--)
6 L% h! L! Q1 {5 ~& \# l1 N5 O  for(j=x1;j<x2;j++){
. Z/ C( l) F1 P1 _, G/ |8 [/ R  goto_xy(j,t);
9 H9 F4 I& t  i% J6 L/ ~  putchar(' ');) L1 M( T: q- g- g$ {0 _% V4 G
  goto_xy(j,s);% a# ?7 Q1 C5 J% B2 W4 F! ^8 `3 w
  putchar(' ');  }1 w- P: P& V6 |  m
  delay(10);& W" E/ U! L# B7 [  s
  }2 x8 \! B5 W& E+ o" X7 A5 m
  }
. _; O) U5 z3 d' }  /*****************close screen clear*****闭幕式清屏*******************/
" c8 @4 X0 ~% w+ c  Y) k
. X6 J, B2 s/ h# G" p' b: F+ {  void bcls(int x1,int x2,int y1,int y2)) U3 d- U6 p/ H
  {2 P) o. p$ Y9 X; s: d4 U
  int t,s,j;1 r! K# n$ }5 L7 [5 L
  t=y1;
0 b7 a  j/ c; d# }  s=y2;" H) K/ D7 H. U' T+ Z7 r+ u" L
  for(t=y1;t<(y1+y2)/2;t++,s--)! K4 p1 }" ]. Z0 q" q
  for(j=x1;j<x2;j++){
0 B+ e4 W( J' G# e' k  goto_xy(j,t);
; V3 E( t8 q+ g- F  putchar(' ');- a- `4 c1 @" f2 w: O4 X  o
  goto_xy(j,s);
# g1 d1 h3 ?/ v/ ]0 g  putchar(' ');) \! k, i1 [) Y! u2 p
  delay(10);
1 x  @" S' {& D" S* g  }! T$ t1 y4 r0 n
  }! U# f& {& q& S+ g/ S" T& z  |
  /******************bottom screen clear(自下清屏)********************/
& R5 K# ?8 |9 b
, f5 N- o% B# |, A0 b  void dcls(int x1,int x2,int y1,int y2)
4 U8 J  q- z6 b; c1 o  {
. p; S6 C" }/ n* ]! S, E  int t,s,j,i;
* \! S) J3 h( v  C  t=s=(y1+y2)/2;6 x( p* o  [; v, P+ K8 s
  for(j=x2;j>x1;j--)/ P* B+ d# _# l# U
  for(i=y1;i<y2;i++){$ Z) P- q  D5 w8 W
  goto_xy(j,i);; L7 F9 R0 T  Z
  putchar(' ');
3 t7 q% Z+ x. A8 R  delay(10);# j, r# w9 [. u2 |
  }) w7 v/ `8 O' e. e8 v+ y
  }
; k+ S4 o& c# U3 x8 R( H. B  /******************设置光标子函数******************/
; ?: k, D  i/ X. p% u3 |+ l5 K1 c& o: E" X% O8 p% Y* y7 Q& r# @4 Q
  void goto_xy(int x,int y)% C" @& |0 R' v
  {
, J" E' X0 p) M1 m0 S1 E( Y  union REGS r;
4 ^: m: W. O' j; s1 M( k  r.h.ah=2;6 B% a7 G2 n8 w- o; m! G) n
  r.h.dl=y;
2 d2 m! ]- w# i  r.h.dh=x;
8 k$ m' a. _  l' g. M! G# I  r.h.bh=0;) r, [9 N3 [6 `
  int86(0x10,&r,&r);
  q1 g( P; O) R  E  }
  @5 p, D! l8 ^8 q9 T" d6 c
0 v* }1 _  A" b+ d  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 e+ Y  L2 c! i8 L* `* z6 p  H$ d. K* z4 ]- ]
  void puta(void)
* I5 P: N9 S8 n! K) D  {, }' ]0 g0 u- C8 O" G$ O' Y
  int i,j;: M. y) \! T" T2 P
  for(i=0;i<24;i++){
+ }9 Z$ u! ?% A7 ^0 k! V- V# w3 h$ w  for(j=0;j<79;j++){
8 k( I% D1 N' q  Y, ?  goto_xy(i,j);
* d4 H% `6 a: K8 E  printf("a");
; i) U$ k& b& X, n5 G  }/ D& W1 |% ~" h
  }; z+ }* f/ B/ z, O$ O
  }

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