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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,2 n6 _: q/ z' T/ n* ?

3 {1 Q# l" \5 J+ X1 B  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 L$ V4 A% g- y3 R7 @% U
; K# \7 |5 B! H; s. ~4 g9 b
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : R& v9 }, d! w/ c% T# B' _
  子函数及演示程序:" B7 D9 n( F$ L* L7 C& u0 C% U

3 H& _5 g" }) {7 K  #include<stdio.h>
) A5 e8 p! m! R: p' F; s  #include<dos.h>
  {7 r0 S  q* {; W0 ?( r  #include<conio.h>
8 ?- ~( U4 E& R) N: P# D( a$ l4 f; h/ B7 a4 ]* x
  void goto_xy(int x,int y);8 r- _2 ]' E4 c& @
  void dcls(int x1,int x2,int y1,int y2);
5 E* V: [- `7 S5 M* x- j9 T( u' h/ X" [2 E  void bcls(int x1,int x2,int y1,int y2);
  B' ~: A- N& w1 A  void kcls(int x1,int x2,int y1,int y2);7 }- ~' v5 G1 K* v; z1 n
  void recls(int x1,int x2,int y1,int y2);
- Y- i8 i$ o& K  void zcls(int x1,int x2,int y1,int y2);
3 O2 O* ?/ q" t' K  void puta(void);
; k% l: ?) Z+ |: W+ O
; W/ ~0 I. G, c4 B" a
5 f: a! ~# }: l* M  /*--------------演示程序---------------------*/8 b' `9 D2 ]$ h
  main()/ s, r  `  O$ ^( \
  {
+ j+ g0 W; e2 O# `  puta();
3 k3 E7 a* S$ g7 b  getch();$ j% u1 _" [7 L6 h. _$ z/ W
  dcls(0,4,0,79);
/ L3 a' J" D9 s, S: f5 D0 p1 [  getch();
4 Z7 F/ L4 p* m4 \; ~  puta();
! f6 c* Y9 D9 e" }  getch();; l0 A" s* K( A: ]/ ^
  bcls(0,25,0,79);
# k( {2 A) u6 [) _; p5 ?4 |  getch();
+ v5 w2 L% U- E3 N; I* B- n  puta();8 z0 {" o& c" d; }% N: X$ ^/ d
  getch();$ ~# j& c' a) A/ w% q9 P
  zcls(0,25,0,79);. \9 [' A) h8 D1 J
  getch();
, o0 a2 A; A  f5 U5 C0 u0 m  }
, m  O8 Q- f8 ?; d4 Y) R  /*********center clear screen(中心清屏)***********/0 {; `& w. `8 K
  void zcls(int x1,int x2,int y1,int y2)/ s: f0 c1 R2 x5 V2 Z' E
  {& H1 M/ Y/ y  K5 C  S/ X' U
  int x00,y00,x0,y0,i,d;
) A8 E: c" i' j! M( C( [/ Z8 ]  if((y2-y1)>(x2-x1)){( B4 J) R( R( t- W( v2 h" |8 j7 y
  d=(x2-x1)/2;9 p; V# }/ y% z9 S
  x0=(x1+x2)/2;+ x$ Q, w# a9 C0 {; r+ b
  y0=y1+d;
7 z$ D9 n! W6 X8 r  n& c" C; s" S  y00=y2-d;& r- _( _7 @, S3 r, B3 E
  for(i=0;i<(d+1);i++)
% V+ V: y; e. c" H/ v! Y  recls((x0-i),(x00+i),(y0-i),(y00+i));
0 C4 S2 @* A. P6 L5 I4 H  delay(10);2 N7 P4 r% B4 g# `% ^# @
  }
9 I" d) F4 A9 ^  X* E  else{( H5 z) v; A$ L; G% I# Z9 d
  d=(y2-y1)/2;: e/ l6 K9 S0 C$ R: E7 a
  y0=(y1+y2)/2;4 z/ o$ D0 w0 {% B* [7 j0 b
  x0=x1+d;: f% K# s! ]) r+ l/ l
  x00=x2-d;
; T! U9 B% C; }7 l  \- y  for(i=0;i<d+1;i++)7 I( y) K; R, o1 x! }3 P. D
  recls(x0-i,x00+i,y0-i,y00+i);# T% W, b7 X9 G
  delay(10);
; {/ D" b2 n$ p  }
2 Z. U; Z" z% I. I* Z  l( N  }1 _. K! ?+ Q  p4 W0 V, {" M

" G& N9 c1 \' f; q  /************* clear rectangle side(矩形边清屏)***********************/' O! a' s7 h) u: Q: I7 w, y

/ ~. c  r2 z" p6 Z$ a6 ^  void recls(int x1,int x2,int y1,int y2)
. T5 m1 o! ~# P3 h7 B) D  {$ Z" P* d  v& ^% B3 Y2 n! ^' @1 g9 i
  int i,j;# H' K6 I7 I8 q5 r( ?2 B
  for(i=y1;i<y2;i++){, E& \+ j7 C: \5 k' o  Q# z# B
    goto_xy(x1,i);
* p6 k( I! M2 X# H0 U) @. A, k$ J  putchar(' ');* q1 X: m$ z, B
  goto_xy(x2,i);
' @1 l) X  O0 n$ w3 q$ V: Q* W  M  putchar(' ');  M5 e+ o& n; T' x6 J0 L9 W
  delay(10);
: e- L$ a5 Q8 {( p: C  }2 e# ^: `/ J% I
  for(j=x1;j<x2;j++){
+ J( H8 G+ L* |4 `' k  R  goto_xy(i,y1);
* h# S) |9 P# E  putchar(' ');. j; D7 x0 C1 {4 I
  goto_xy(j,y2);
# U% O( a! y1 N  putchar(' ');# S1 b$ ^. P5 d, t- h
  delay(10);
+ f3 x. f7 x/ Y5 f+ w" \  }
5 t! g8 G6 |2 |' b( e" M  }  s. G* ?9 {5 W3 Y2 e
  /******************open screen clear(开屏式清屏)*********************/
4 M7 ]. y0 l/ S4 a/ k
2 @' x0 z+ M3 C% J# m! G  void kcls(int x1,int x2,int y1,int y2)
/ h1 [" \  D/ H( j5 e  {8 R/ F* s" d: M1 O) h& x* ?
  int t,s,i,j;! I2 I% C; ]: {- y
  t=s=(y1+y2)/2;
. B6 k/ ^( r, f. I/ ~3 ?  l) V9 E$ P  for(;t<=y2;t++,s--)
9 P' ~! R% f+ k. t8 G2 F. Z6 F3 j  for(j=x1;j<x2;j++){* }& w4 V) W' J3 I/ I
  goto_xy(j,t);
0 y7 b5 V6 o  \& Q8 E& l7 U  putchar(' ');7 z( ?* K) ?7 V, p, E. M5 u' N
  goto_xy(j,s);
6 A  i& ?3 T5 k  M) J; D1 [  putchar(' ');
. h3 B% L) V+ P/ V2 `" I7 }7 I  delay(10);8 I5 D9 g. N% z7 H( ^- m
  }/ I- d4 |' h; D9 }! O/ O
  }
+ @8 p- R! a& f  /*****************close screen clear*****闭幕式清屏*******************/
- O" G2 q4 T1 P8 R, ^" y7 B
' I3 {$ H" S8 I0 z) A0 b% w8 g3 g  void bcls(int x1,int x2,int y1,int y2)
; [/ Q2 [% E. m! L1 e  n) c2 J& t" V  {# ^4 f0 T3 s& c  j* _
  int t,s,j;+ e5 |2 X5 A1 q; _# P& d, I! E; I; [
  t=y1;" D/ i& q1 c3 r+ `
  s=y2;
( P" d! }( G6 H& M# J: h  for(t=y1;t<(y1+y2)/2;t++,s--)5 N. I6 e+ Z1 f4 @7 v. x4 m5 K" S
  for(j=x1;j<x2;j++){
8 m4 E4 O4 q8 L; B. |  g  goto_xy(j,t);
9 f8 @7 U: U+ d$ O3 Y7 T  putchar(' ');
& t; n0 w/ o* {9 D2 s  goto_xy(j,s);0 f$ X0 B$ T; g* \1 h
  putchar(' ');  T) L2 i" k5 _- @4 z3 j0 c( S
  delay(10);: x2 M# [$ J/ |9 j% w4 c
  }
  A, c( i! X7 F* t: Q1 o1 ~9 q  }
3 O6 Q1 k. r! P1 T! i, o  j  /******************bottom screen clear(自下清屏)********************/
6 Z1 n2 c/ A8 [. N5 x& d4 {! x3 b, h. Z
  void dcls(int x1,int x2,int y1,int y2), [1 T+ z2 n9 H( ]' E: X+ L# Z
  {
6 J6 W0 J& K4 g: u; @( K0 h  int t,s,j,i;* I- L' g6 w% U$ M: A9 L$ ], E
  t=s=(y1+y2)/2;  l1 r0 T& h2 r' H( Y8 p% d4 v& U
  for(j=x2;j>x1;j--)/ F3 q, z+ R* N, Z- l
  for(i=y1;i<y2;i++){" b! I# u3 V- }) h3 a* v1 `, ^
  goto_xy(j,i);
. z1 m) Y+ ^; z! W4 ?/ i0 c  putchar(' ');
5 L( O( O+ z; H; u. n( M1 ^5 q1 J  delay(10);' a. {5 Z( Z) }
  }0 H& `+ L4 D0 m5 h+ b% ]
  }, `1 K5 d; K7 j
  /******************设置光标子函数******************/% C# ~! g8 N$ Y8 V! ]) n3 m
  ^: j- D# @- I4 F. w
  void goto_xy(int x,int y)
- |+ n0 M/ y6 [9 M  {- y' T- [: h3 c9 J
  union REGS r;& v/ E( k' B. r( S# q! `
  r.h.ah=2;4 [' ]& u. s  t
  r.h.dl=y;" I0 i# p. I/ k1 @, a
  r.h.dh=x;8 a! p. Z; i: p
  r.h.bh=0;
; e* e4 d4 M4 N; c; c5 y  int86(0x10,&r,&r);
7 q/ `- O3 g* _* x  }+ d- C  B$ M) U# M

4 N, O# \& e) V" w2 ]  /**********************在屏幕上打出一连串的a字母用于演示程序******************/- n) |' |. {: R$ K5 [+ g+ \# \: \

  A8 q: B5 J  d  K  void puta(void)& ]) c0 l7 N% a8 D
  {' }; I5 \- z) ^
  int i,j;& f: a' m! [( {8 }( ~
  for(i=0;i<24;i++){* N  D& B5 S* ~) x
  for(j=0;j<79;j++){  ?* |- \3 t1 t: l, v5 ]  U
  goto_xy(i,j);
& J* x1 F  ~! K2 b1 _  printf("a");
3 u+ h8 g( u7 F( r. m- N% c. e  }
) W% v1 D( [2 Z4 u5 _) D  }7 \* k  [9 b1 u/ n$ j# A
  }

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