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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,0 g" c8 e! G, b! ?+ I. g0 y! D" i
$ s, x9 B. k- M/ [8 w9 V
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
+ y! H: S0 g5 ~0 z' Z4 O; r5 j% |% d( ]' a& z2 I
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 M7 e* V. I! Z1 f
  子函数及演示程序:* n& |8 v/ c9 T+ {1 ~3 w
' {0 y; @5 ~! v
  #include<stdio.h>
  `' ^4 [/ j8 G7 x" b( |1 @  #include<dos.h>
7 j" S9 M9 V1 f: _( q3 X2 o  #include<conio.h>
. T5 P, v5 T* p2 `+ T3 b7 _3 c7 k
  void goto_xy(int x,int y);. u) t8 {) y, w8 P
  void dcls(int x1,int x2,int y1,int y2);
5 V/ C$ v( G+ h/ Q: @  void bcls(int x1,int x2,int y1,int y2);
0 `4 y+ a& D" m: \8 R  void kcls(int x1,int x2,int y1,int y2);
4 @& {9 O5 C9 D8 a9 E/ m+ L+ d; ?; z  void recls(int x1,int x2,int y1,int y2);9 @' \- Z9 f* s* i; f
  void zcls(int x1,int x2,int y1,int y2);6 C3 D0 z+ C1 T4 S
  void puta(void);! ]7 \  B7 |+ \1 J1 k4 `4 E3 n, L

; l: ], T2 m" B: }
; l! \+ H$ w2 q' g, q& c0 P2 @  /*--------------演示程序---------------------*/4 h5 T3 ?5 y5 H( D& |; A! n4 Y
  main()) m: [$ \, r$ @. \' m" c2 @% M
  {
% u3 [. V) ~! }8 m. A  puta();6 o' o5 S: \, U+ K( ~! a) i2 S
  getch();% l) j" y5 H* X7 I! x+ y0 |
  dcls(0,4,0,79);$ u- h9 `* t1 Z, i
  getch();
! S" _  [0 ?# O5 g9 q  Q  puta();6 Y3 R) }; G+ H3 ?% o1 X! V! B7 F
  getch();
7 p. y' }( G9 f: y. F1 r  z! _  bcls(0,25,0,79);
( Y/ |  _1 g9 A  getch();4 r% u% |2 O) a) B& t$ v% e
  puta();" l7 N" C$ z1 E$ _/ r1 m
  getch();
, u6 I& b- |" A* }  zcls(0,25,0,79);
2 S# O3 ?0 s% I, L- p; j  getch();
5 Y; N  C2 _- Z% R/ Q  }5 c% a! {$ L% S$ K9 q  m
  /*********center clear screen(中心清屏)***********/
/ z3 R* Q0 s3 E% z2 a) s  void zcls(int x1,int x2,int y1,int y2)
% j4 `# u7 }  j7 [$ m  l- ^2 u: C2 y  {
2 F* z$ g' v7 z7 }- e  int x00,y00,x0,y0,i,d;! r+ w6 x7 S+ {
  if((y2-y1)>(x2-x1)){
, j6 \3 P" ^% c9 n) r+ Q6 j  d=(x2-x1)/2;9 @* T$ M; N  e3 s: [
  x0=(x1+x2)/2;" l3 x. U9 M2 R2 g" Z1 D
  y0=y1+d;. @5 T" o$ }/ o; ?( M# h7 ~7 q
  y00=y2-d;
1 p- S( B/ Q) b4 u  for(i=0;i<(d+1);i++)$ V; x8 ^1 G' b, c" Q
  recls((x0-i),(x00+i),(y0-i),(y00+i));
& I4 U# O+ i: i9 i3 O, W$ U6 N  delay(10);0 h% C$ Q6 E' l0 @; _1 M
  }5 q( U; }$ t6 ]9 E$ C$ u# t
  else{
/ N4 C+ j: u/ p  U  d=(y2-y1)/2;$ e( b1 J  A9 h1 u1 k
  y0=(y1+y2)/2;4 J( F& V/ @: ~8 b- z% W  I) o4 h
  x0=x1+d;
# r  G% D5 T/ E5 h1 U3 f  x00=x2-d;2 v2 s" V4 d- _  ?; _! B" _
  for(i=0;i<d+1;i++)" g7 E) ?. F( w  N/ B
  recls(x0-i,x00+i,y0-i,y00+i);
7 V: N" Y, z+ ^$ |3 b) u$ M  delay(10);$ E, Z9 [3 a  P# s
  }( Y8 G9 L+ z* a3 r3 W. `
  }/ ]7 {8 w6 S+ d- ?( x
& N; {/ t% }0 F8 H
  /************* clear rectangle side(矩形边清屏)***********************/
- F* |  x$ A7 i! x
; B7 f: W" p2 n7 E6 j7 ~  void recls(int x1,int x2,int y1,int y2)
. H9 P$ l5 N" i4 M4 f1 P  {5 d! ?2 L0 G- f: n. Q4 G- W
  int i,j;( ]5 D* F6 R* x0 s9 j2 u( d
  for(i=y1;i<y2;i++){
8 x( @# ]+ U7 N8 ]8 b9 W6 @    goto_xy(x1,i);
* w6 d3 }% \. {  putchar(' ');  S! L  E6 ?" ^
  goto_xy(x2,i);6 I- y/ D6 P0 g: h7 n8 o
  putchar(' ');
  p- Y* ^, |9 Y6 d) ^  delay(10);
: ]$ M( A+ W* P1 b  }
7 p1 a0 ~& P$ C* x  for(j=x1;j<x2;j++){
8 b8 \% S9 d7 [9 t0 R  goto_xy(i,y1);* d3 _$ D& i5 T
  putchar(' ');
: ?. t5 N" @1 c* n1 t4 q9 f  goto_xy(j,y2);
; F! G  I5 E$ T4 U6 D  putchar(' ');. |- R- q) h; `7 h" H
  delay(10);' s" O  U& k7 X2 {% Z* x
  }6 M: |3 @$ y$ Z+ ?8 `" M( ~
  }3 R% J. T" s  B2 J6 d# [
  /******************open screen clear(开屏式清屏)*********************/$ o7 C% a8 W0 n  E

! T' v# p# n& O3 w, W7 v! P* l  void kcls(int x1,int x2,int y1,int y2)0 N% l- A. s" W& u; V
  {8 h; d4 `% G! `7 q8 M
  int t,s,i,j;  F4 X( O0 S8 a) J- E: u# C
  t=s=(y1+y2)/2;
3 [% \9 M5 k1 i/ j2 p) j! ?  for(;t<=y2;t++,s--)- t, {- B* S7 D6 ~
  for(j=x1;j<x2;j++){
- M' y' U$ S: C, {" a; J: ?  goto_xy(j,t);
2 T* g8 F( E- j% Z  putchar(' ');
/ ?$ S5 k3 P) a. F' _% _7 Q# M  goto_xy(j,s);' S" l) N# D+ V4 i5 U
  putchar(' ');& Q  y4 Y+ z9 E( N) A
  delay(10);
: \/ R* M# M" [' L" Q  }  c, b. z7 _% a9 ]* W3 {
  }3 }& @! `4 g, C5 u8 M
  /*****************close screen clear*****闭幕式清屏*******************/
& J+ O: W" _# b3 p' V- h& G' h) o# |6 H% p- a4 d
  void bcls(int x1,int x2,int y1,int y2)( k4 e) v# L6 m3 Z& C$ C
  {  d6 d! m0 z* {- K
  int t,s,j;
/ z. Y% o; E4 i  E  t=y1;
3 S. I0 v5 T2 t' e1 W$ r  s=y2;
& r# g7 N! t8 o1 F; i  for(t=y1;t<(y1+y2)/2;t++,s--)
1 m' l& A" V& Z/ p+ y* \6 L  for(j=x1;j<x2;j++){
! p# P$ u$ q& l7 g6 }- D1 ^  goto_xy(j,t);
; R, k  z; \. Q: R( f  putchar(' ');% D( g5 w  u2 ]. R
  goto_xy(j,s);( f7 Z% w7 Z) ~6 Z5 t3 E6 W$ @
  putchar(' ');' s( V7 t* V8 {" G4 T
  delay(10);
$ b( Q6 W, y3 S/ t) D5 @  }
. F2 A( @# T# S3 j0 z# u& _6 V" A+ b  }
: p  o# K# k, f  w( P* K  /******************bottom screen clear(自下清屏)********************/% e- Q* }, r& @4 r

; z- E9 S1 `* U1 g6 a4 F  void dcls(int x1,int x2,int y1,int y2)
! u; R2 d1 p' W' @8 n5 I" z  {
3 N9 D: q/ n+ t# M; T  g, O  int t,s,j,i;
  O% ^. ^  w: f2 x3 j" o  t=s=(y1+y2)/2;
5 b- S7 {+ @9 L! |  for(j=x2;j>x1;j--)  q* A8 b; I0 s8 R+ H
  for(i=y1;i<y2;i++){* |2 r. S' @" E4 n  J" X2 N
  goto_xy(j,i);
/ u, x' n- ?% f: C2 N  putchar(' ');
- E. K% i: N+ _3 ^  delay(10);
' a* n- p3 W5 P0 N) o3 \+ k4 l  }9 o( u) `/ L; G6 D& m% [9 ^9 y% s
  }) x8 E3 Q: A: d0 D9 ^& b
  /******************设置光标子函数******************/
* [; @7 y$ N$ ~' J, f
: S9 g3 p3 E# o# n. K- d  void goto_xy(int x,int y)
' h6 I' u- Z7 p  \' M4 C, ~1 Q  {7 P- d  _% a) {7 t
  union REGS r;- E) S$ p4 A. u, O9 o  Q
  r.h.ah=2;
3 E+ v  p  z% X3 v$ [  r.h.dl=y;1 D6 Q" A. F: ^0 Q
  r.h.dh=x;
( K) @# ~' f. F% o) {8 W7 ~& O7 t  r.h.bh=0;0 K4 b( h3 i% ]1 l3 ?
  int86(0x10,&r,&r);2 m0 R' N1 n. l5 n7 {* C' Y# |
  }
" n3 k9 Y' \, ]& T9 w& Y) j' ?& _6 E5 H! a7 a
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; Z3 Z% s% g* n. Y# V2 l& N* ]% y3 T+ u3 o+ C" D2 _7 \# Y2 {
  void puta(void)9 i& _# }* o& I) b3 o/ j
  {
- l' O! `/ y' i7 |, i0 L, }  int i,j;3 d: P. L5 D3 N) X
  for(i=0;i<24;i++){
" s* B# ?; G! u" S; f. _# w  for(j=0;j<79;j++){7 W  A2 _  N3 X. R  q  D/ b1 y
  goto_xy(i,j);
6 U# Z, f+ j" w  printf("a");
* N) f/ m  Z! w7 i  }3 a  r4 v$ k9 E3 q
  }
# a: j: [; T5 a0 [  t  }

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