返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 Y# s7 l# T, c4 ?

1 \7 v& }! T$ J* `  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里( z. a2 u# m( K5 L  g# y# b* b
. O2 z4 T  W! _. L' T. R
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 }* M! q8 y; u: M1 ~7 a  子函数及演示程序:# c( j7 g9 G! @, I9 B

# l5 R2 X: W% K1 k0 c  #include<stdio.h>
3 D/ e* l0 @) `+ x  #include<dos.h>' J) h4 h% r) F- O
  #include<conio.h>" z5 O7 I: {+ B8 \1 v, X
' K, p1 _6 F3 Q8 o" ~; x7 v
  void goto_xy(int x,int y);! R  y/ A/ {- c  Y% k3 M- D0 |
  void dcls(int x1,int x2,int y1,int y2);
. u8 Z) g- m/ C$ s) E5 Z  p  e" Y  void bcls(int x1,int x2,int y1,int y2);
7 ~9 o9 V9 G& f1 t. u) D  void kcls(int x1,int x2,int y1,int y2);
  p" e+ F# [9 z; k  void recls(int x1,int x2,int y1,int y2);# R  h$ V' A. _6 `& m/ l& G0 {0 u
  void zcls(int x1,int x2,int y1,int y2);. J. [/ p* D$ l% z% i, ?! d- t
  void puta(void);
6 Y3 J) f3 b* g# Q7 F8 c# A" z; R8 F! j( b. M3 Z
7 Z' f, g: K4 b  ~6 _& b2 ^- \
  /*--------------演示程序---------------------*/2 w, _( u" j( \8 T! ?! e
  main()2 O9 u1 E) k5 w8 x3 C0 j
  {4 I2 c$ o- q* P/ f9 r6 v, n
  puta();, F- j7 H. P2 [2 ]9 a, v7 I" N& C' l2 u0 O
  getch();
+ ?5 T& m5 |+ ?8 ~  dcls(0,4,0,79);
( `# u. }6 e) }' H# u# h: w9 ]3 W  getch();
( O* H7 R% m: M6 u, s  puta();
7 O5 k: P* e+ T5 P2 u4 r  getch();! h9 a2 S, h2 z# `1 ?
  bcls(0,25,0,79);
; H* p* R4 @" k0 w& `  getch();9 T6 j. Z; y( ~4 v
  puta();
+ W" Z2 n$ Z) X1 R$ X2 q+ I* Y  getch();& @( L6 u! [8 C& D) W& N/ d
  zcls(0,25,0,79);
+ A/ e5 N+ d+ y. S2 ~6 |  getch();* D1 C% X  j# J# ]
  }
6 E7 I' x/ o' \. K% Y- f  /*********center clear screen(中心清屏)***********/
  h, g8 A, \2 w  @4 j3 k  void zcls(int x1,int x2,int y1,int y2)3 j/ w# t6 @5 [/ ?! f( }+ B
  {: J6 ^9 Z+ X: I9 e; y8 l' t
  int x00,y00,x0,y0,i,d;2 J9 r) V: N# R8 O  }& V/ w4 L
  if((y2-y1)>(x2-x1)){. W  I0 b+ c2 d" @6 p# D" G  L
  d=(x2-x1)/2;
9 c, `, b. R: ^, q) z8 O+ @  x0=(x1+x2)/2;
2 q! a8 S% ]2 q1 k) D$ h  y0=y1+d;% r0 k" G  c0 @; y: n( N* K
  y00=y2-d;3 v; ~: m' y# v! X
  for(i=0;i<(d+1);i++)
1 O0 E; [. f1 M  l2 V  recls((x0-i),(x00+i),(y0-i),(y00+i));& W8 c; Y$ B) m- O1 w
  delay(10);
# {9 E& i* k  T$ r% w  }: y1 T8 P' l7 k( x1 S. x5 s
  else{5 H0 C2 `6 W( s0 i7 c  W
  d=(y2-y1)/2;
$ M4 k0 M# i3 I6 X$ n% {: Q' o  y0=(y1+y2)/2;+ Q, r9 c7 ]: x% O- t2 ]% {
  x0=x1+d;" p' \& ?/ E6 }/ w5 @; F
  x00=x2-d;: H! A0 }( ^" a, K. Q! j
  for(i=0;i<d+1;i++)
# L9 A1 A! L5 y/ Q( I7 T  recls(x0-i,x00+i,y0-i,y00+i);- {0 {* O1 |2 Z' F- V9 o. A* i
  delay(10);3 \1 p+ X4 j; ]/ i3 T3 x
  }
2 h$ s8 e/ n/ g- E  }3 \: Q, u  O: I$ J8 a0 r
' m7 {) S+ Z8 B% ?. z3 ~4 T
  /************* clear rectangle side(矩形边清屏)***********************/
- t, U" g0 H+ O6 y. v3 I0 C2 G# H1 I6 S5 }4 `
  void recls(int x1,int x2,int y1,int y2)
) T; S4 I8 b, Y( u7 T  {
# S) w! k/ M* Q  int i,j;/ i3 C( A3 E' ^/ T* K5 x
  for(i=y1;i<y2;i++){
2 m5 s5 I9 Z7 X  [- b& R8 E  A    goto_xy(x1,i);
: L2 _/ T* p" A, l, R' v7 D  putchar(' ');
' b7 r+ F) X! A* m  goto_xy(x2,i);
9 ^  N/ R4 l7 c( n* C' [  putchar(' ');: _9 j: _& {) ^) P% ]
  delay(10);, a  j: {0 J' R& h% }" o* Y
  }! D2 O' D0 y0 ]! _  d3 i% r9 e1 u
  for(j=x1;j<x2;j++){
  u3 C' j2 }5 t. }  goto_xy(i,y1);
5 n2 e8 k0 f2 k: y% Q  putchar(' ');
6 O+ x( b! c. F/ _  goto_xy(j,y2);
9 U5 ^4 m) A, Q  putchar(' ');& d) I( a5 I5 K/ d! G/ R" v% P/ j
  delay(10);
$ f# W8 [* `- f  }9 n$ h  |# I. O$ r  _9 `; k3 U
  }
0 p0 F$ B# G7 d3 k: n  /******************open screen clear(开屏式清屏)*********************/
) I. z4 s( A0 n: l2 x7 X' Y* E
  void kcls(int x1,int x2,int y1,int y2)
5 [7 B7 P  D: o1 m; `  {
9 t/ F8 s5 U  b* q5 G  int t,s,i,j;3 D# L4 L" q6 v# k2 p3 y) G
  t=s=(y1+y2)/2;
) p; k! y4 ~7 ^1 B3 V) u- F2 O  for(;t<=y2;t++,s--)6 M- @- ?; `0 n9 @1 v7 u+ I5 H0 Y
  for(j=x1;j<x2;j++){! g! I% {, x. R
  goto_xy(j,t);
* |: N- P. F1 a% A  putchar(' ');; W9 R+ j/ D( `% S! a! m+ f
  goto_xy(j,s);4 M/ r! ]$ J1 `
  putchar(' ');
6 [- q+ _' a- I, t8 V% ]# s5 ^  delay(10);
" |) Y/ _$ Q' z8 W1 e4 T  }
2 s8 r( @, q# ~8 |+ ~! i  }" U  K/ a" a) C( D8 p9 e. `
  /*****************close screen clear*****闭幕式清屏*******************/
- f  ?  K4 p9 ]6 A- [. S
( v- X: Z3 i, n1 Z  void bcls(int x1,int x2,int y1,int y2)
  r" U( g8 l2 ^- t3 O8 u# h' W  {( }1 J* o  C- D! L1 Q; P
  int t,s,j;. m. a5 {( T2 @3 F* w0 \; a
  t=y1;
0 C0 v5 q+ [/ w  S2 A) e  s=y2;' y$ p& h4 v- |7 d- ^, [
  for(t=y1;t<(y1+y2)/2;t++,s--)
* U0 ]4 a; b5 T, i  for(j=x1;j<x2;j++){; M5 U; m' L' b  d: D
  goto_xy(j,t);. Z3 _5 J7 g/ d. V" N" e( v1 p
  putchar(' ');; q3 n5 @6 e% ]: Q* q* j; X
  goto_xy(j,s);' {# f, t1 J) q
  putchar(' ');
# y. U5 S4 S6 \+ n- p+ f- |  delay(10);+ Q3 v" i! C. P" @( A' K6 m
  }( r# L- f4 W4 I; B
  }
& H3 B: N. j6 o  /******************bottom screen clear(自下清屏)********************/" o: L0 G  E2 d+ i+ c

$ D4 |9 d4 ]$ L' F+ |  void dcls(int x1,int x2,int y1,int y2)
, Z+ F& t3 S; r  {0 M/ I: O- n1 C' i: ^- Z- v+ w
  int t,s,j,i;
# a  _$ Y. |9 v7 W  t=s=(y1+y2)/2;
, j$ l# l+ l1 r; x9 z  for(j=x2;j>x1;j--)8 @; s6 C3 G: w1 b- {! g( ?
  for(i=y1;i<y2;i++){9 i9 X: f. \* [$ R3 P
  goto_xy(j,i);+ |% T# U1 |) @5 m3 A) @0 U( u7 _: O
  putchar(' ');
( e* F5 G9 f. c9 h; C( K9 J  delay(10);
7 D2 }2 `, x/ X( G8 l  }
% B! ~" p+ S# w" A  }
: {+ Y; x$ H8 ]# n) |- Q  /******************设置光标子函数******************/
& J$ {& M3 w( @6 g7 j- S. D
+ H2 r9 V1 [4 K1 @( _0 T. s  k  void goto_xy(int x,int y)
0 k0 d$ ?; Z' U' M/ i! M  {
1 Q0 m1 L5 [4 t  q  union REGS r;
5 {6 U7 L4 ?$ ]& y5 K0 w/ ^3 O  r.h.ah=2;) Q# ?3 a( S8 X; ]% G
  r.h.dl=y;
/ E8 k+ E, ^0 H+ D9 k  r.h.dh=x;
8 k+ M/ F3 o2 J4 L5 [8 C5 g( y  r.h.bh=0;) P( u$ @, b9 G
  int86(0x10,&r,&r);
, _/ ~4 {" t, X) }# F/ H  }. H( H" A1 ?6 F) c7 Z0 _$ G" d
8 }8 j# Z  f3 i8 Q, n
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/5 M* w/ x$ Z( R) }

" R/ ?& q, [* C# S  void puta(void)6 `$ h6 W8 L  H2 ^; R. ^
  {
; M$ |+ \4 l; o; s0 O( C* m7 [7 r" C  int i,j;
+ Q7 L& k) F3 b4 w) H  w  for(i=0;i<24;i++){! G, y4 a# U. t# }* r$ M
  for(j=0;j<79;j++){% }2 Z% E% E: J" g3 \5 n* Z! h% B
  goto_xy(i,j);
8 ~  U' q) A$ f, ^  printf("a");' N( v7 r4 @7 s5 a* V3 |% R
  }, x' ^* K7 _4 p$ V3 S+ ]3 j" b; C
  }9 C5 R+ s- G8 {8 \" `% L
  }

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