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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 b; t; n5 ^) E) Y: A  i9 Q, ?% {7 X) }0 k: v. h
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 G3 t7 j0 F/ q. g- A+ K
" ^: f' O5 v) Q! m" U8 X
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
, O3 p$ @! I9 P9 N4 j  子函数及演示程序:2 J3 [: v8 \& h& n/ |* j  D

' q: I6 W1 r" T4 T7 B) X! W  #include<stdio.h>
$ |/ n, L* V) ?  #include<dos.h>
2 H6 q5 O) D6 B( x9 r$ d  #include<conio.h>
& S& g  Z7 x% k' z. ]0 C1 Y% q! j& ~. x5 U( W
  void goto_xy(int x,int y);. ~0 G) l2 y( h) q- z$ T. l
  void dcls(int x1,int x2,int y1,int y2);
. D% R8 s# L2 g, t  void bcls(int x1,int x2,int y1,int y2);( ?5 v( G6 n% r7 {4 q
  void kcls(int x1,int x2,int y1,int y2);
- [1 h" H' ]; j9 K1 k  void recls(int x1,int x2,int y1,int y2);( u; L; l. z1 H! i( w
  void zcls(int x1,int x2,int y1,int y2);
( p; s; M9 n6 k; W  void puta(void);
5 e, @  h) R7 G+ n5 s: c  E9 z$ U! d3 `6 L3 Z

$ P' N* I! R2 h# v* ?  /*--------------演示程序---------------------*/
* {' ~; D: `+ [! y: o% W  main()
7 v: J: N  }* X  n) C% }3 l  {
9 P# E# f0 A& ^0 J4 l1 s  puta();
# I! T5 w2 [9 c$ l9 G, O  getch();: g+ Y% N. |) i+ m$ W; N9 p
  dcls(0,4,0,79);. V- T# c9 M0 B$ R0 `2 L/ }8 b
  getch();3 k1 Z* @. H8 p( h+ H* Z
  puta();
  S$ P: N- A1 g2 D  getch();
! o$ f; M" W7 V  bcls(0,25,0,79);/ A% m7 z/ V/ c4 L6 J1 l
  getch();
; C' w5 z% \! x  puta();
3 m# h8 h2 z+ S. C  getch();8 h  n  c1 O% |3 I
  zcls(0,25,0,79);5 Z! r! F2 H& {( D
  getch();" t# B1 y9 y' m( L: w3 Q! N
  }& J5 ]* R/ z  \8 m: b
  /*********center clear screen(中心清屏)***********/
% `# a& ~( ?* x/ M  void zcls(int x1,int x2,int y1,int y2)
2 v, x$ M* `' c  {0 M5 _+ m* H: B7 r4 f! j" j" O
  int x00,y00,x0,y0,i,d;+ |) A( I  e! w3 p$ J0 ]
  if((y2-y1)>(x2-x1)){( o: C' @1 L9 k, I
  d=(x2-x1)/2;% V8 E" E7 E! q" e  Z: m- \
  x0=(x1+x2)/2;
3 J5 H; \! W7 |" J( v* h( C) V  y0=y1+d;, v9 a. V, L' j; n7 U0 F3 [
  y00=y2-d;0 {# {& k; \3 ]
  for(i=0;i<(d+1);i++)
. \2 a2 E! ]* a/ t  recls((x0-i),(x00+i),(y0-i),(y00+i));0 }# V. r" E  \! j) w
  delay(10);% E1 u. o$ P7 r
  }) x1 Y; [5 k! w/ [2 \5 o
  else{
5 d! Q1 O/ \% u  d=(y2-y1)/2;. ?, H0 D: M/ G  d) e" m0 u# S
  y0=(y1+y2)/2;
9 y. a) B6 h0 L8 ?  x0=x1+d;
2 m. p" k) l# Q! b, c  x00=x2-d;, M( S+ ^3 ~! T% R" ^) X) `
  for(i=0;i<d+1;i++)
* D0 M! E/ `3 o# t( s* m. Z( O  recls(x0-i,x00+i,y0-i,y00+i);
) V, ?: |, g8 u' M* ]* F8 F$ v  delay(10);
& b- p5 D' Q+ b7 ~7 P! j9 B  }5 u5 f- O9 \# X1 w% Y4 K
  }$ y+ {- ~! E7 z8 E- u

) W. o: `! z! ^$ a1 Y$ k  /************* clear rectangle side(矩形边清屏)***********************/' x/ e( w% {, ~) F# d7 z
2 @% h/ y& {& R+ D' q
  void recls(int x1,int x2,int y1,int y2)
9 M$ Q6 P8 N, D7 W1 y* w2 w  {! _5 a* G( l! s5 ^! R9 l
  int i,j;
! R5 w3 k+ `# c  o) d! A! A  for(i=y1;i<y2;i++){
& O* P* a+ E# h: T# i3 l) `    goto_xy(x1,i);
$ J/ p$ i4 l$ @" f2 t; S  putchar(' ');5 z+ A3 f& q3 G0 B! H
  goto_xy(x2,i);
' t1 ]; t  K4 \8 g  putchar(' ');" h1 Z! T9 {5 X7 _
  delay(10);0 E8 j) w3 v7 ~
  }9 V% W( p- k4 j( ?" r- b
  for(j=x1;j<x2;j++){" [- _; |& H  ?6 A" T
  goto_xy(i,y1);
" F- w' z+ Z9 t: f/ [8 H/ G  putchar(' ');
8 [8 R0 n9 }( J- h3 u( I  goto_xy(j,y2);
; u1 }( p' v# ~) Z- Y1 c  putchar(' ');7 P& X/ X0 X& v0 G1 _- ?  S* d
  delay(10);5 ?& z( }2 E# \- j6 }! l$ M* ~( G
  }
# ]* O9 S( z0 {) I0 E  }
; i( A9 i* H2 [: L# a0 q0 Q  /******************open screen clear(开屏式清屏)*********************/
' |% H0 _+ f5 Y0 C* {0 m2 L+ N, |$ U! G
  void kcls(int x1,int x2,int y1,int y2)" s+ t4 k. h& j0 ]/ c
  {
4 q3 B6 D" H; B+ R4 f7 z  int t,s,i,j;- L/ |$ _1 e$ t( |% U. i
  t=s=(y1+y2)/2;  b# I5 B  }; y- b: d, B2 v. a' A
  for(;t<=y2;t++,s--)
) L2 E4 Q3 v! o) `  for(j=x1;j<x2;j++){
* \7 L0 q3 n' }9 G  `0 H  goto_xy(j,t);( D! U( V& t0 p  ~0 }# Q6 P% I
  putchar(' ');
9 K! |2 H1 Y* f! e2 w( Z# L7 k# P! w  goto_xy(j,s);9 B% p; q8 {2 |5 G7 Q
  putchar(' ');5 Q  \( l2 h* H# \% }% z
  delay(10);
3 a- C' ~' w, W* r4 B6 J& d+ U4 E8 O  }$ \. g3 R# g+ `9 S; _
  }, c8 V, m, t& x" ]# f  c
  /*****************close screen clear*****闭幕式清屏*******************/
" ~( M4 r8 {; f1 Y. {! @$ ^9 w. y
  g1 ^) I" a/ Y; X, c3 L  void bcls(int x1,int x2,int y1,int y2)0 P/ c/ w- N% `7 l
  {/ n& t5 Y6 h, j& K: A  a; R/ r
  int t,s,j;; F) l* g7 a! {5 N* @2 t2 K2 G5 X
  t=y1;
, D+ K) L  D9 g: f5 R  s=y2;
6 h/ E% i9 Z2 O) Y  b. X  for(t=y1;t<(y1+y2)/2;t++,s--)( D9 ~( [: P! [
  for(j=x1;j<x2;j++){
$ D- X6 w. k5 l* v& r" R6 r" |* l  goto_xy(j,t);
6 R( P/ J- L% F6 O- @. X# |  putchar(' ');
& t# s4 h' N* i6 B4 P+ t  goto_xy(j,s);
, `9 H* ]7 L: z' l" k1 D  putchar(' ');" h  P& Y; o$ a3 R8 p  h0 M
  delay(10);
9 A7 [+ c3 L0 U( L) M8 B7 _4 o  }
0 f  R9 c6 _* |0 K2 l% m/ k5 f, ?  }
% U/ q+ i# e/ `' }& F  /******************bottom screen clear(自下清屏)********************/
! Y& o5 O7 c6 G8 B* ?" O" [5 P& Q0 {3 ?" u+ K+ |2 d9 v+ D2 c
  void dcls(int x1,int x2,int y1,int y2)0 I1 t3 ~8 ]. A# D* m0 N# O; |
  {
' V% J& y& |. C2 ]) ~* h  int t,s,j,i;, H# i8 Y3 p0 `$ M& R- b
  t=s=(y1+y2)/2;$ E: I5 Y) m( O  P, e
  for(j=x2;j>x1;j--)
: ^( a) A" G+ s; o/ O" Z, `  for(i=y1;i<y2;i++){! |- I# S7 M8 Q; ]8 w+ U
  goto_xy(j,i);6 o9 N# C, n& }- g3 e
  putchar(' ');
/ p7 d; Y' i: _$ u  delay(10);1 D" E& n# G) x* L; W5 x
  }& R& ~" w! ^: R4 w
  }
; R3 x8 v7 Z! C& Z$ p/ N1 E+ f  /******************设置光标子函数******************/
4 W6 W. V3 A# {6 d5 [, z( u% c7 q5 u' G9 x
  void goto_xy(int x,int y)$ R/ i0 h8 c! }6 i* {& J. R5 e" f! F
  {
8 H: `# ]+ f! h2 L, F" b  union REGS r;5 U: Q; J, i2 c3 I$ n# s
  r.h.ah=2;
, U/ J( K/ y! E. U2 p. k  r.h.dl=y;
- y7 H( P" W% n: Y  r.h.dh=x;9 M; k! r9 J5 Q4 C' m) N$ O4 O
  r.h.bh=0;
9 L3 b3 _- I0 T- Q: A: V* I' `0 O# M  int86(0x10,&r,&r);
' l% q6 ^/ g1 t& J* w3 c  }
, d# {. z( y$ P7 M. b% C* W1 a2 K3 Q6 H) ]/ y
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ Z6 O  p9 ?. O8 l4 V" k3 F' {. y  C8 `' i8 ?* Z; Q5 D; L
  void puta(void)
% X7 R6 I: c# L  {/ k# E. I. L) D- a: `* |* U
  int i,j;  Y# r# @+ S: K+ F5 {1 T1 k& J
  for(i=0;i<24;i++){. L( Q) v/ \4 B/ `- r0 J5 H5 }
  for(j=0;j<79;j++){
$ Q( L2 M- h9 d1 V0 S1 X: o; u  goto_xy(i,j);
" W* l8 l0 t% G  h+ [  printf("a");, H8 R4 f& P! e& k6 j- ~1 `. ~
  }  ?+ Y$ i5 g6 I: `9 z, h& d
  }0 N9 g9 Q4 Z. z' S6 Z8 o- |; L$ C
  }

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