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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
) M! G' `; R& n. q! D( S
' A4 ~& X0 R& ]% G/ \( d* \  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里7 u; q$ c: ?/ w. }0 m& m

) n  G7 j, U/ }$ f* |$ X  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : e+ l7 r0 ?3 ]# c; o  u
  子函数及演示程序:/ \8 g0 |" e& i9 z) p) H: R8 c5 X! s

! t- X3 o2 _1 W2 H" T  #include<stdio.h>" \- K/ r  ^6 Y' V
  #include<dos.h>
; V/ e' V. @* w' s3 p  #include<conio.h>
4 c/ v# {) [! N* o; z/ ?& F  x
4 [- S9 ?) _8 D$ V  void goto_xy(int x,int y);& g5 g% n- {6 ]* T; T
  void dcls(int x1,int x2,int y1,int y2);0 S- Z/ J  d0 Y6 g0 {4 P) k
  void bcls(int x1,int x2,int y1,int y2);  j, {! d8 d8 c" `
  void kcls(int x1,int x2,int y1,int y2);
) w" @. l! `4 p+ b- z) C' q, H  void recls(int x1,int x2,int y1,int y2);
$ p+ P+ Y- L$ g5 A, U0 a  void zcls(int x1,int x2,int y1,int y2);$ D8 P. |. m, b
  void puta(void);
9 F0 V) u# U, E9 k2 l3 q1 f- {1 l+ u7 r! m' _/ q* p

& l3 R; |3 E2 a8 E- N  /*--------------演示程序---------------------*/
9 G( |1 S3 _9 o' E" z/ j- s  main()
5 t+ h! H" W% V0 `& z  {+ }. V2 |; k% |
  puta();" Z& n9 I: Q2 |6 k
  getch();
4 q9 {# H7 \( B! H" Z6 E  dcls(0,4,0,79);& @4 b  k- B$ \! c& x1 v! Y
  getch();
# |: p: n/ A6 W/ H/ j  puta();! ~8 E: k$ {" y; n- v7 _* _4 E
  getch();# Q4 V6 z3 C/ r. }! r5 O
  bcls(0,25,0,79);! f4 v  H6 w( G! E
  getch();
3 g  y9 q  D: F  puta();% G( a# a* b% I( @! Y
  getch();
: f8 i+ Q; p5 u( {* A8 T  zcls(0,25,0,79);
% y/ q( g' N* S8 I  getch();
. A  S- R/ N3 x4 a4 r% Q  }' l3 x& u; |( y# r8 K
  /*********center clear screen(中心清屏)***********/
3 i1 M3 R! \8 J  void zcls(int x1,int x2,int y1,int y2)
5 D8 X  O: x6 A  {1 Q5 S! M) ?. U# Y
  int x00,y00,x0,y0,i,d;/ ?- l& G; \" M9 {. m
  if((y2-y1)>(x2-x1)){
2 Z( z  e7 J4 w/ g; Z  d=(x2-x1)/2;
; o) M: ]- S! c3 L8 y- B  c  x0=(x1+x2)/2;. \- C) B* K5 x/ b, c8 z: U0 p
  y0=y1+d;- T' L# J, L4 |
  y00=y2-d;# W; v9 `6 G, X7 ^; I+ ~' M: }
  for(i=0;i<(d+1);i++)
3 Q$ l, H  w5 {5 S5 |3 J& S  recls((x0-i),(x00+i),(y0-i),(y00+i));: h* {3 D2 _8 r" w8 a2 s
  delay(10);% m! W" k" ~# O4 _) X/ u& L# P
  }6 g7 y; u/ [4 [; @0 U
  else{, z1 n, H9 m3 `. Z9 j
  d=(y2-y1)/2;
/ h) l" ^4 R5 t9 g$ ]: A$ I: }  y0=(y1+y2)/2;
* E( O% o" h$ b' {' @2 ]( W  x0=x1+d;" y) Y2 W  @& ~6 k( I
  x00=x2-d;4 T0 c0 q  |/ _+ t& t) D
  for(i=0;i<d+1;i++)
8 ^! x4 n$ H( j/ `3 X  recls(x0-i,x00+i,y0-i,y00+i);% H+ e5 i  B0 j7 k; ]' x  A3 c% \6 X
  delay(10);0 h- N# y. V+ c( X4 u& _
  }
& p4 {5 w; m; K! w6 U, p3 Z  }
9 X/ `! L2 K" F: I  V* v1 x+ {( {2 q! F/ X
  /************* clear rectangle side(矩形边清屏)***********************/
* q# X# h5 q, C0 l: D/ I. j! O9 N: ^0 V! u9 u$ y& Q# F
  void recls(int x1,int x2,int y1,int y2)6 j# O) K0 j( R% k8 |
  {9 Z3 K8 t) s4 I6 \
  int i,j;
- `( t* j1 [; V5 F* ]. l3 G  for(i=y1;i<y2;i++){
( `% _( O3 \  Z0 E: r9 r3 Q) v    goto_xy(x1,i);# d  C6 z# ^) D2 I' x3 a
  putchar(' ');0 n$ A: j) @3 X' J7 b" |* g, w
  goto_xy(x2,i);7 P: _8 m7 W( R  X) i
  putchar(' ');
# k3 T% L8 r( r  delay(10);
+ a  f; R* x/ j& G$ V  }, o4 o* p1 L; y% U
  for(j=x1;j<x2;j++){% F6 k: Q: i8 U4 c: }/ j* U. b
  goto_xy(i,y1);2 A7 Z, }9 \$ K- t6 S( ?
  putchar(' ');4 q& h9 D1 F) X* X/ X
  goto_xy(j,y2);
: s) p: z, m" f; h3 \9 |  putchar(' ');- n& ^1 ?: U: m+ a3 @
  delay(10);
$ {. C/ ]* Y& ]( e0 C) {, T) a  }
4 J# `6 r, C" F6 F# N  }
  K* Z# w3 @9 R8 X. I  /******************open screen clear(开屏式清屏)*********************/
' }; t7 j0 `: g) v4 c4 y5 B7 n$ g( P. D" W% Z# _
  void kcls(int x1,int x2,int y1,int y2)
9 T5 @6 ?; j( i8 H& i$ S( z  {
5 K: l  g; D2 l4 U! `+ ^9 u* [: P  int t,s,i,j;
, P) d# }: i& A, p/ j: n' y# v  t=s=(y1+y2)/2;' ?9 f' O- Q' f4 P% ^
  for(;t<=y2;t++,s--)
! E& D% r) l4 u) x: D1 ]  for(j=x1;j<x2;j++){
3 R; c; a3 b/ E0 ?. V  goto_xy(j,t);
- n( S' E0 q1 P2 s1 \  putchar(' ');  ^) R; T8 l! @% S
  goto_xy(j,s);( @& X4 D, H7 w9 X5 k- q
  putchar(' ');; g1 R4 C* F" v; N8 M) l/ V
  delay(10);
- ?! {) I/ m5 M0 S" v5 r  }
. q8 M6 f. d* b1 `) [' z) k  }6 B: ^( o7 w5 Q0 ~" w0 R; o0 R$ N
  /*****************close screen clear*****闭幕式清屏*******************// x! `6 `3 ^* W# z# B: H; ~" D- U

0 C& W, x; I# W0 q# G2 l- w1 O  void bcls(int x1,int x2,int y1,int y2)2 V" x* |  C' R; U+ E( d
  {
: m) E0 C4 L; {  L1 p  int t,s,j;0 \/ r! H6 T9 j$ ^: q8 i. h5 E9 w! D
  t=y1;+ Q) }+ {- J' ~' ~
  s=y2;- s: g* v: D5 z7 L9 k. d
  for(t=y1;t<(y1+y2)/2;t++,s--)2 f: K9 w5 P5 p1 J* M7 O
  for(j=x1;j<x2;j++){9 g  ]1 H8 y& a. Q8 Z
  goto_xy(j,t);
% K0 I$ e& L1 n: _( u. h2 P( `  putchar(' ');* C( Q, X! n5 I. m8 ^9 N
  goto_xy(j,s);) W- e4 g- t) |8 q
  putchar(' ');& K. J, D. [3 \: b  ~# H" a
  delay(10);1 Q- H1 \; s$ d& B$ z& S
  }
" {+ o+ O, Q4 |8 u8 T  }/ [, w: O) u7 m5 f* p
  /******************bottom screen clear(自下清屏)********************/- J5 H8 l  Q9 |3 }2 V3 W8 n/ B! a1 z; a
. C8 y- w7 j7 V  n
  void dcls(int x1,int x2,int y1,int y2)
; ^: J7 W7 z: {  L- h, i- c  {2 K  k7 K0 N8 y
  int t,s,j,i;
$ `7 a7 s8 C' [, e- H* O: I  R  t=s=(y1+y2)/2;& D. E' g, D8 g2 Q0 Y
  for(j=x2;j>x1;j--)
+ a9 o6 w1 o. F9 Q1 i; j: }; C  for(i=y1;i<y2;i++){
# U8 {' X# R; Z% b  goto_xy(j,i);
2 Q+ v" D/ J) ^! o5 J$ r2 V4 |  putchar(' ');
  {9 m1 q. Q8 [2 k6 Q  delay(10);
" b& Y) k5 n! |5 ]- p- s  }& S' k  I0 ]2 _# i$ T
  }
* \6 i  s; ^3 y2 `* Y; x  /******************设置光标子函数******************/" D; B  p" H3 k/ o5 A8 q3 Z

' w/ E, c. E0 N- @# A$ \' ?# @2 Y+ X, m1 c  void goto_xy(int x,int y)' `6 f& b) ?0 y/ j2 ]
  {
6 n! {' \. h3 R% ]1 O  union REGS r;
7 B6 n2 @' m4 h0 }  r.h.ah=2;! K0 A% ]! f4 o: G2 I% A
  r.h.dl=y;" q' y& v- b' J  M) C5 W
  r.h.dh=x;3 K/ v2 E. o$ f, w6 D- w0 d
  r.h.bh=0;+ k1 b+ n- e& u# u8 O& Q1 r) y
  int86(0x10,&r,&r);; N6 I$ V" h# u  m/ |% A* N
  }# `. a/ J; I( A* L6 y1 }
/ L2 z( H) c  {4 K& n( H, n
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/: D. v2 M/ ^  H4 r; ?, w9 D2 x

3 e2 L0 V- f1 H  void puta(void)/ ~& O$ m+ v# ?! ]
  {
7 t# `' S& `3 Z" f  M4 w/ G  int i,j;% w: X' k& @* J7 Y
  for(i=0;i<24;i++){4 A) w1 L/ D( G$ t1 ^2 w) z4 P
  for(j=0;j<79;j++){  t# M: L) U" w5 r) @; ?
  goto_xy(i,j);3 m5 x* ?& }4 B
  printf("a");
6 U; ~" M& d& D  Z, B  }
7 d" K, C2 N! x6 u7 M& E! O  }
7 i4 B3 i" N* l$ K$ T  }

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