返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 m, e; {. A+ s, p$ p* N, |  k4 S6 z
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( E( g7 Q- v. U- ?. O1 \$ Y: M9 b0 _& T4 \# e5 ^) F
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
, ^/ D- `: K1 t1 e9 G7 [0 \& |  子函数及演示程序:
2 j' q* P$ q+ f8 g- s, r0 w
7 e# M/ d/ r3 T( ^# D  #include<stdio.h>7 m+ }9 F! I3 h5 k6 v+ ^
  #include<dos.h>
0 p7 V: W5 A0 ?' N7 Z$ B3 p  A( `  #include<conio.h>- l# z1 C0 L3 b# l6 q. D

+ Z) S1 S* ]5 R6 `+ v( ^  void goto_xy(int x,int y);! K' u! W( C8 L6 }2 Y* [
  void dcls(int x1,int x2,int y1,int y2);: b, z2 r7 _" E) T+ n
  void bcls(int x1,int x2,int y1,int y2);
% C8 C% @- Q" y7 ]7 o9 N& o# c  e  void kcls(int x1,int x2,int y1,int y2);5 W: L+ R. \- @' w5 g
  void recls(int x1,int x2,int y1,int y2);
) s7 G  K5 b3 e+ S  void zcls(int x1,int x2,int y1,int y2);
- `& Y: B6 q- u; C3 J  void puta(void);
( z7 m2 a6 w( i
& x" ]9 t2 e, p/ q$ \7 C- n# m5 A) \9 o4 G3 X
  /*--------------演示程序---------------------*/
% S; h$ A2 v. Y4 g  h: m  main()8 @9 e" i; `' K, s, D6 d
  {  t* X: `6 s7 {: y; |# h" A
  puta();
) O- \$ g: q4 e  getch();
+ p" X8 h* |1 s5 L' U$ O9 P  dcls(0,4,0,79);6 M: a9 Y( `% a$ _6 A9 t4 E
  getch();
8 y! c1 J+ b2 N7 [# h6 h/ V% N0 W  puta();
5 @4 W# e4 j8 B* \' H0 A  getch();
) K& N4 d/ E- i6 k  bcls(0,25,0,79);
+ F: o. N' ?8 w. V4 A/ ^. l" D$ y  getch();
% l0 c( A- t9 i6 f$ o6 I% [  puta();: `, }+ u- N& D) y# n
  getch();2 m/ f: P* u8 B& T7 n- r9 w
  zcls(0,25,0,79);
9 P. \: q8 f9 ?  q! @* q  getch();) F6 i: e7 W9 t/ ~
  }
. f2 d1 I  c7 ]. C1 i. T  /*********center clear screen(中心清屏)***********/$ [5 o" n* R$ x# G! A, y
  void zcls(int x1,int x2,int y1,int y2)
1 R0 N; Z2 r# a/ A' y0 e  {
! |3 f, ~4 F3 h  B  int x00,y00,x0,y0,i,d;
) G' W9 [$ c3 o  if((y2-y1)>(x2-x1)){; b0 ]$ |% @: U% m! n% k; H$ M
  d=(x2-x1)/2;
  I* e7 _3 w' n7 {5 U: G2 R. H1 V  x0=(x1+x2)/2;; R1 i: M% `- m. g$ s' o. |8 }# b1 L
  y0=y1+d;
9 e/ S# P& u( u9 D7 C5 z5 r. S  y00=y2-d;( Y; k6 r" u. D! z8 f4 \
  for(i=0;i<(d+1);i++)1 P# A$ s* X+ `
  recls((x0-i),(x00+i),(y0-i),(y00+i));
+ \8 N# {: |; O  delay(10);8 m0 C' S" d( N. r
  }
3 y: a$ K, u, `  else{
2 ~4 r, w% L( h( D% o2 I2 k  d=(y2-y1)/2;
. P! C1 @" }) s( M% e. m2 ]+ l: V  y0=(y1+y2)/2;) {, X" \0 [; Q
  x0=x1+d;
5 `. F) T  D9 i8 u5 z  x00=x2-d;" c* K5 G) Y) P6 x
  for(i=0;i<d+1;i++)
. p1 J7 \# b" X( Y+ R8 Q  recls(x0-i,x00+i,y0-i,y00+i);
: |' `9 Y1 y- \  i  delay(10);
! O9 q0 O1 \: G. w  }
8 _6 M( Q; [( h  }) Q9 `# t  }( @* @7 ?5 _  K1 A3 G% v' L
  m3 P9 }* I$ p  M2 p$ c9 X# W
  /************* clear rectangle side(矩形边清屏)***********************/
8 q) ]: v6 l& Q  U3 s0 E* z1 m9 f1 S2 z" Q* g% a0 C) s
  void recls(int x1,int x2,int y1,int y2)
$ C; N8 {* @$ ^  {# h  }- ^6 S" L: b! U
  int i,j;# o! p$ f" Z9 A
  for(i=y1;i<y2;i++){
& a; m% }: k2 A5 c' h    goto_xy(x1,i);3 [. `: V* ]: l. S4 g2 F; C$ m
  putchar(' ');
: a% V6 h8 \- |5 z' l. [  goto_xy(x2,i);
' d: h! C. t6 G. a$ b  putchar(' ');
' T# u# a' Y. e( T& ~# \/ K  delay(10);( r- m8 M/ v' D, s6 c+ X
  }
" ~+ h, B' N( z' Z3 I4 H2 Z4 W  for(j=x1;j<x2;j++){' t8 @. M! e# t4 o; L
  goto_xy(i,y1);, Q# F1 c; G2 d) H) b/ D
  putchar(' ');
: S0 [7 X3 v9 w  goto_xy(j,y2);, B7 z; Y7 G- m, W
  putchar(' ');
$ U7 J  B. O1 D% P0 K% M  delay(10);$ \3 c. t+ O. o: W( O
  }+ s7 E, J% w: z8 a- q" t+ W
  }* f" l% v" |2 n) q+ q6 R3 \' b
  /******************open screen clear(开屏式清屏)*********************/0 `3 K+ E/ B: ?& t# ?- ]

7 N/ }( \4 g( {  void kcls(int x1,int x2,int y1,int y2)
& a8 c+ x5 c$ d  {
- {: @. }! l5 r7 w5 |+ L6 M6 q( X  int t,s,i,j;
( H  p. H. I2 S* O  t=s=(y1+y2)/2;2 r/ L" E  a3 a9 X3 w/ `; L! Q& @" O
  for(;t<=y2;t++,s--)  s3 ]- \; K  ]9 w" h+ R
  for(j=x1;j<x2;j++){' V* X  v% g" i, |: ]7 W
  goto_xy(j,t);. A' T6 f# O2 m' R2 O
  putchar(' ');
2 e, T% r4 [* Q, O5 }! i  goto_xy(j,s);; B1 L9 `, |5 c# @
  putchar(' ');! ]. s5 \1 N+ q% s' _9 W$ _) a% A
  delay(10);
  a& o' g6 \% P! u* R6 Z& a8 _: {  }
2 F* m5 t5 F+ y* b% {! s* B* C  }
6 S7 ]& k$ g! }5 O  /*****************close screen clear*****闭幕式清屏*******************/
9 P( U% E; r0 |4 Z' j1 z0 {$ ]$ H+ m0 J8 h: k% {( P- v/ W
  void bcls(int x1,int x2,int y1,int y2)8 A+ j$ s' D8 @" R! e
  {
7 _/ r9 A# }% U7 V4 B2 \  int t,s,j;# I9 |- {7 D1 D0 o' b- m  h+ v( l
  t=y1;$ F: w2 j% [* {. U- \% X
  s=y2;. O  [0 A" V) `: h6 l
  for(t=y1;t<(y1+y2)/2;t++,s--)
; b( E) b. K! H8 u/ J& W' w  for(j=x1;j<x2;j++){
1 z& U* F: `0 g% y8 N: X  goto_xy(j,t);4 Y# w# L( j' @
  putchar(' ');4 R9 d2 D$ @, K
  goto_xy(j,s);. O; l; n& O0 T1 Z' Y
  putchar(' ');6 t* }) n8 \- l7 d$ A
  delay(10);: s$ [& c! L1 Y& N
  }8 i7 G' n0 x; h9 o
  }* l0 Y4 c$ h/ F. _; [& }
  /******************bottom screen clear(自下清屏)********************/0 r' j4 i- K# B2 v
; ~+ e* L% p" S; a8 T( D, s+ q
  void dcls(int x1,int x2,int y1,int y2)
0 _, o( Y. Z' J% E$ ^# R  {
2 p; u$ _. V& U" _7 D: D( E  int t,s,j,i;
/ p  q1 `. {9 {4 j1 V/ [# @8 T  t=s=(y1+y2)/2;. L" q7 _; ?, ?+ Z4 c
  for(j=x2;j>x1;j--)( z& P& E/ G! n4 ~7 F& H6 M- w
  for(i=y1;i<y2;i++){3 A$ {# y2 y; z/ b: D- c, B
  goto_xy(j,i);  n* j- c. C0 }5 `! U9 R; `
  putchar(' ');
, b! u& X' `0 O0 P$ W2 O3 k. a  delay(10);
) O: w2 }) e8 }& I  }2 b: r  _; I8 ^1 |, t% e
  }1 u- r/ @) v! s# l* Q! Q/ P) N
  /******************设置光标子函数******************/0 n* }. z% X. r6 N) M  q& v2 F, C

$ S8 S7 b  Y3 Z, Z9 }$ P: ~# f0 _. R  void goto_xy(int x,int y)" G" o: o' f" P# b" j9 C5 f- L& ~
  {
: b) D# \1 Z3 j' n: @# }. B) i$ b) v  union REGS r;
7 c1 R$ @, q" F$ B; V  r.h.ah=2;
, r9 X! @/ b6 f1 W5 c  K9 z% P* p  r.h.dl=y;
1 q! Z( S( m: Z" S, l3 ?% h  r.h.dh=x;
8 }( s% o1 ], t  r.h.bh=0;7 c. ~; C( Y" `8 `
  int86(0x10,&r,&r);, x0 S- n% S1 [4 p$ O: }% @8 F' d
  }7 U8 }4 N; |3 X  ?  n% r) N! v
$ B4 d% i( g2 R/ _. `9 t, a
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
# h+ Q0 v. l7 p6 X% {- W; B0 x3 H* N9 n1 m0 r, W. K8 D- S3 V
  void puta(void)
: p5 C2 s9 D# a0 X  {
7 [7 k0 [4 U0 R" L4 i- _  int i,j;. ]0 ^/ }+ v4 v
  for(i=0;i<24;i++){/ q8 N8 c. @  o7 s; U
  for(j=0;j<79;j++){
# F$ {! Z! @- G+ j  goto_xy(i,j);6 w9 Q* i; Z. H3 _
  printf("a");' o  A1 b) w1 |4 @+ h  n; G3 C
  }
. U( o* z. y3 `  }1 E, s  ]& s5 B( P" J
  }

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