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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
4 }+ R7 N8 r+ b% H: @$ S4 d. x' _7 `- g- k4 K6 A5 ~
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' ~( [( v5 N) }0 T$ D/ I
0 s. q5 T! ?" c1 ~
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: y9 p5 o& Z' L, W" K  子函数及演示程序:
4 L* N, ^" r4 ~+ _. M& z& l8 [( `! X; d! _
  #include<stdio.h>8 o: ?% O, D# ?* C
  #include<dos.h>
3 S  J5 F2 ?$ y( n7 V4 y' f8 v" Q  #include<conio.h>
9 Y5 q5 a1 w) w/ H- L# i3 |
0 d7 D7 B6 ~% N7 \% i% k8 m* j  void goto_xy(int x,int y);5 W" h9 j/ Y9 l, c8 L5 x, z$ n
  void dcls(int x1,int x2,int y1,int y2);( ~7 l/ @0 w9 J% a+ r) i
  void bcls(int x1,int x2,int y1,int y2);
4 h" q, ]5 |8 C) x5 R0 }& x  void kcls(int x1,int x2,int y1,int y2);
' A5 B7 K1 i% z) F9 F: G/ x  void recls(int x1,int x2,int y1,int y2);- }" H) h! g4 Y$ p6 Z* z
  void zcls(int x1,int x2,int y1,int y2);* y* W5 |7 [; H  H" ?
  void puta(void);4 f) \! T: W; ^2 u1 I; _- r4 p
1 f5 I$ [% F  _4 g6 s

, z3 R! c6 q* H+ Z: |; n  /*--------------演示程序---------------------*/9 l' N# J5 O# v8 L/ `
  main()
. G/ \* e0 z# u: O6 Z* i7 j  {
2 S" P' u( a( S. Y! ]/ R; Q  puta();
3 ^) e* q0 Z; Z$ O  getch();
1 ]. N. W  J, b- C  t  dcls(0,4,0,79);. Y/ R! q: }; ]% Q) [" T2 c
  getch();9 ^' J' B' G+ y, @2 y6 `; ~6 Y
  puta();% O* ?; w" N# N, ?( y+ f: V
  getch();
5 V4 B) D* k7 _! s  bcls(0,25,0,79);
7 z7 H9 j' g) A  getch();% v. c: i, [+ E, K
  puta();6 p; d, p$ ~- }$ S/ G
  getch();
/ V" A- O, x5 |& R9 R$ x  zcls(0,25,0,79);
7 E) D! C$ C7 U( j% u  getch();) `: F4 S* E) E: ^- b' Y# d
  }7 p3 z) ^4 ]7 o  [8 ?4 ]
  /*********center clear screen(中心清屏)***********/' o: N; @- k: P6 T9 U$ N+ N
  void zcls(int x1,int x2,int y1,int y2). y; p  M0 U, L7 S4 v
  {$ V( C$ G* [# H6 E0 s
  int x00,y00,x0,y0,i,d;( X& e2 R1 i7 \( S
  if((y2-y1)>(x2-x1)){$ f! A2 @3 q" i$ y! n
  d=(x2-x1)/2;
6 p0 E+ c6 b( R% r  x0=(x1+x2)/2;
( O3 V/ d' |+ j5 `  y0=y1+d;' {) ~8 ^2 @8 ?( \' s5 _/ j& c
  y00=y2-d;
& a0 w/ q' P0 s* q" g  for(i=0;i<(d+1);i++)
, [5 b5 r- |% e: z  recls((x0-i),(x00+i),(y0-i),(y00+i));. t4 `: m' n7 @
  delay(10);- W7 S4 a( ^* O
  }
  v' p% c, f* U- z% a  else{
& R) g5 f9 h1 J7 c7 e  d=(y2-y1)/2;8 G$ O; R* [* C! ~' N9 }- Y  S
  y0=(y1+y2)/2;- M( H( K* H2 w8 Y1 U, @, E
  x0=x1+d;
. V# ~8 b" W" i  s: @& S  x00=x2-d;
$ J' {2 |6 x4 m. Y; \$ U3 N  for(i=0;i<d+1;i++)# L; N( v6 w. ~% x5 N! P
  recls(x0-i,x00+i,y0-i,y00+i);" ]8 x" |4 N& N+ |9 h
  delay(10);
, i8 t5 \" C: A6 V7 f0 l- j  }  Q0 R9 d  F7 r! {% g" O  J
  }
; o7 Q' ?* }0 N* @6 J
. M* o$ ]6 A5 w0 `  P  /************* clear rectangle side(矩形边清屏)***********************/) O" G& e9 e5 H2 o

* l& F* O8 i/ c% x$ a9 H7 I  void recls(int x1,int x2,int y1,int y2), ~2 B7 O+ E; Z) ~
  {  G) ]0 N% b3 z) O
  int i,j;
. v- j" B4 g& V/ U, A  for(i=y1;i<y2;i++){
$ p! N$ R0 ^6 F1 k7 z+ e* E( [    goto_xy(x1,i);
" b! S  y2 @" {8 |! S7 g& o( j  \/ _  putchar(' ');
" K1 ]4 p: J# X' u  goto_xy(x2,i);
! r3 u% X; E/ A( A& d: G  putchar(' ');5 e2 P2 h$ ?1 X+ p! ~9 @0 @
  delay(10);
8 d' b" w* |& u, v/ r( O" u  }
; P. S/ M3 I2 N# W4 A" j  ^, G  for(j=x1;j<x2;j++){# M/ d+ Q- ~' o' h3 o" s
  goto_xy(i,y1);6 d% Y- u( B5 i" ?; w$ {
  putchar(' ');
* }# D5 A9 s$ i$ A  goto_xy(j,y2);2 J5 r4 b) Y4 O0 u! P' H7 j/ ~* v
  putchar(' ');
! g9 X  P0 D8 d) Q" v5 Y' F/ s  delay(10);
. v0 K% ]* i- v" i7 _, Q3 D3 l+ m  }7 h# h: j" X1 v4 B: Q( ]
  }" g4 W' n/ M6 ~) T  `5 y3 K
  /******************open screen clear(开屏式清屏)*********************/8 C7 s# T9 K2 ?3 ~

8 g) O2 k. F/ L( V# L0 @  \  void kcls(int x1,int x2,int y1,int y2)2 J- k! Z; `. k8 i) l0 p( ~
  {6 n0 O6 N+ x; _% l1 g! j  q; l: P
  int t,s,i,j;% M. I+ m, }- V
  t=s=(y1+y2)/2;
, L4 i& m9 G6 o  for(;t<=y2;t++,s--)
8 U. [* x+ S+ m" K+ _  for(j=x1;j<x2;j++){& U$ l3 S; w3 O6 i
  goto_xy(j,t);
, a1 t# o3 X5 Z& b  putchar(' ');0 `; K* w7 Z, g9 l- Y- {
  goto_xy(j,s);3 {: ~0 O) B3 W' Y* |
  putchar(' ');
! Y8 j+ {. l' h0 `! p! ^# x" V* i/ R* `  delay(10);. q; _6 [! P( a( Z8 A% b
  }1 F& S0 ]8 I* _& C
  }
8 b8 F' n  c) _. q  [' j. O  /*****************close screen clear*****闭幕式清屏*******************/4 b6 f1 J5 S8 D' ^" [0 K$ u' O8 d6 x
( n) |: I7 `& h9 t
  void bcls(int x1,int x2,int y1,int y2)& g' Z5 [8 m; R' j# Q. ?. x5 n
  {
3 Q% I7 I- |4 Q7 w  W2 D* j  int t,s,j;( X3 T4 i1 f% R; Y, H) q8 d
  t=y1;+ w/ l7 n% L% g- h. x2 J1 t
  s=y2;$ [6 P# J# W' X2 ^- `2 Y
  for(t=y1;t<(y1+y2)/2;t++,s--)2 Q! c; F6 S8 l' g4 g4 u
  for(j=x1;j<x2;j++){0 z( p' R: ?& u. r, K' W8 ]( h, ~7 g
  goto_xy(j,t);
2 o) u" ?" u" `3 z* P( J4 d  putchar(' ');
- [, t8 T. s! {  goto_xy(j,s);
, I% z; M/ h5 k1 D$ n/ O7 \  putchar(' ');, H: Q& |! Q! S! y- l
  delay(10);* W9 w, S9 g3 B
  }
5 |  S7 [3 c8 `. j& S  }+ s" S! P5 D7 J# R4 n7 v. l
  /******************bottom screen clear(自下清屏)********************/5 b+ d% c+ w4 a6 d  m2 c% j

# n0 ~' [$ \( g2 x6 o3 P  void dcls(int x1,int x2,int y1,int y2)
0 h: z7 i, ?' y6 T, ^) I2 ?7 c8 V  {: m5 x7 t' _* V3 \5 ?. ?4 b! H8 L
  int t,s,j,i;
: z) R  c( {/ q5 Y) O2 `: ^) {# I2 w  t=s=(y1+y2)/2;
" N; ]0 t+ {( Z  W) L" b6 t- S  for(j=x2;j>x1;j--)
+ V- [1 @1 h& t! J' l8 c  for(i=y1;i<y2;i++){; ~% w( [" _3 a
  goto_xy(j,i);: u  H  a& f4 F( i# n5 G+ F
  putchar(' ');  a  {: \( m! A# f5 Q+ }" p" F
  delay(10);
  c" E: @" s, U! U6 Q  }
# w, b- }/ O0 x! r  }
% a) V7 [- G" G. F0 ?- ?  /******************设置光标子函数******************/7 E) s$ p  @: m
- c- d2 e. K4 V5 m
  void goto_xy(int x,int y)
+ Z# R! w3 o! b& a) b  {
& [1 m! A4 W/ I5 B( W2 m: ~  union REGS r;( v; A% _& f+ {$ f; Y1 ?, X7 J
  r.h.ah=2;/ l/ D+ I/ p6 ]+ c" F6 D8 C% L0 T
  r.h.dl=y;
' n3 K! W3 X, d8 k  r.h.dh=x;
4 M: a) d0 {- ^4 a  r.h.bh=0;% U8 R7 F$ g+ |- ]
  int86(0x10,&r,&r);
3 \7 R% a9 |8 E1 E6 }  }9 N0 K: x3 N; i7 d0 Q3 O" O1 t: j

" _/ S1 f! ?+ k5 p* h  s3 v  /**********************在屏幕上打出一连串的a字母用于演示程序******************/; T0 K! p1 g9 r( a0 T
: \7 b# z9 H7 x9 ?- E; \7 Z% e/ }+ i
  void puta(void)+ l: j) Z; x0 e, O; Z- Q3 X
  {" ^9 p; w& }, U' h+ Y+ [7 Q
  int i,j;# T1 G% S. Q) x% @1 E
  for(i=0;i<24;i++){) ]5 q0 l8 o* T, E) D% v6 o" s# Z  k
  for(j=0;j<79;j++){$ f: e' V8 S8 g8 @0 F
  goto_xy(i,j);. L( x3 {* h; z
  printf("a");8 U0 Y4 Y* Y6 e  A) o
  }# C. n0 ?' F* V& t8 t# w2 _1 ?/ f
  }
1 K9 U  O* N* @! i, _  }

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