返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* O( t5 R# C" _" i; T8 ^5 H
2 |8 g# u5 h" E9 P  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 I$ o9 I/ y  D- z

/ `0 S( x2 m8 u- f  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
( y* w' ?2 B/ X0 O2 ]1 c9 P5 z  子函数及演示程序:, T8 ~  p) d5 Q: T  _- C

# g, U7 c3 w, V  #include<stdio.h>
, ~  ~5 _& h, K! H& O  #include<dos.h>6 }& w- q7 X. [; F5 X- s3 P, ^$ N/ x4 B
  #include<conio.h>, U, w! u: l) a) `& o# H9 e* Z0 D

# p2 k  m. t. T! Q4 ~! V) ?  void goto_xy(int x,int y);5 \5 I' D; X, L: N& W
  void dcls(int x1,int x2,int y1,int y2);
7 b7 J. }+ D" J  v$ F! P  void bcls(int x1,int x2,int y1,int y2);4 [- p- D: w( v3 t& C
  void kcls(int x1,int x2,int y1,int y2);
' d( E! S  t0 D; _: b  void recls(int x1,int x2,int y1,int y2);9 \, Y% E# `9 Q, m; D: g* v
  void zcls(int x1,int x2,int y1,int y2);: z! ~( ^" m* _! ?7 \) O7 {
  void puta(void);
* {' d5 _0 L7 ?$ C" O7 t9 s
: L' M. u  V6 T$ u. Z3 ^% o, {. l) B! U# s5 N- O' P
  /*--------------演示程序---------------------*/
& m8 N) F8 r, }- M- l( W6 q/ l  main()
5 U1 W# B6 p- B0 d/ E) U9 C  {
# R( }& S( V1 k! @7 A  puta();* @0 G3 S. `: s5 W5 V# N  f8 v# i6 @& D
  getch();
. z# }3 p$ S1 k) m% _  dcls(0,4,0,79);# A( Z, L. `) G
  getch();
- w! a% t0 r  Y# i  puta();
% I) T; ~; S- L9 p; |  getch();. E  l9 x& _- T' d6 N& W; y
  bcls(0,25,0,79);
. U6 o( a2 Y8 z7 f: R( ~( b- h! @  getch();+ |9 q' M5 X5 g4 m+ z* o# h
  puta();
$ U: P0 {4 b" t$ R- ]  getch();: b3 V' O! K; X. m  F6 w$ a4 c5 h
  zcls(0,25,0,79);, O! c& q9 n: E5 x
  getch();5 u- \2 m% F' f! `7 E$ L% H% E
  }& h/ X2 {5 G( V1 {
  /*********center clear screen(中心清屏)***********/9 Y9 Q7 N0 R& p1 K' W/ ]
  void zcls(int x1,int x2,int y1,int y2)' w+ ~. p  C& Y/ t1 x; K: N
  {- B# @( @! v0 b) u) o# u
  int x00,y00,x0,y0,i,d;
) _2 `/ q9 t# {* e8 p' n+ {5 Z; j. G  if((y2-y1)>(x2-x1)){: n/ d" r6 ?5 X' L& a  k3 N
  d=(x2-x1)/2;) m, k) D( ?. T2 K3 q& q
  x0=(x1+x2)/2;
' h9 T2 d' _$ g$ p; w  Z  K; v  y0=y1+d;
4 S4 \# q7 F: ^$ Z& P  y00=y2-d;
3 _2 H( F3 [3 ?5 X0 ?- w# D# F) n  for(i=0;i<(d+1);i++)
+ \4 p5 v, ]; M+ r3 [  recls((x0-i),(x00+i),(y0-i),(y00+i));
6 |1 a, b0 s8 u+ u- C) J  delay(10);
) o6 Y9 S3 J7 Y3 ~. f) P* g! ]  }+ o1 k. C; x' L
  else{5 D% c) w$ K/ D2 E# `
  d=(y2-y1)/2;
. W# S$ a; ?5 d- ^4 X3 [  y0=(y1+y2)/2;& T8 |) k8 [3 \8 u: [2 p
  x0=x1+d;4 t# q% p# i, s9 J7 E- _+ c* a
  x00=x2-d;
  V/ p  M6 z" N& L5 y. i  for(i=0;i<d+1;i++)3 s% z* X! s2 E* C6 v! I* ]) R$ z* a
  recls(x0-i,x00+i,y0-i,y00+i);! m3 M3 k. B2 d. V* @
  delay(10);
# b6 y- e9 U- g5 O! M  }" P  ]7 J9 \& P7 A1 ^; J7 p/ G3 I
  }, r) a( S% c/ }7 g% O& ~
) I# d  Q7 J# T3 _6 Y
  /************* clear rectangle side(矩形边清屏)***********************/
4 K% g! @7 b* h: {' j* G- w3 J% O" b* W& o/ z+ F) S/ x
  void recls(int x1,int x2,int y1,int y2): i8 {8 }7 y: g
  {- @& o6 N; R) a- k3 H  J
  int i,j;
0 e0 L+ O0 k+ z/ C4 E$ N; g2 }' `  for(i=y1;i<y2;i++){3 Z# G$ H7 R" g' F
    goto_xy(x1,i);
1 p: J' L  u' C- `  putchar(' ');2 L% R/ \& f) h) s5 G2 h$ Y* x
  goto_xy(x2,i);& j+ _& }& _# S6 J; a- `
  putchar(' ');
9 |* ]% Y- C. u6 B5 {% j  delay(10);
/ L7 ]& L5 C. X  }. @+ ?3 H0 d/ F/ }) s. m
  for(j=x1;j<x2;j++){
# l+ k4 d- _2 P+ K  goto_xy(i,y1);4 n% I5 o4 a4 T
  putchar(' ');
+ C) |: j/ |9 t& P  goto_xy(j,y2);/ z' Y7 c, B  H( R. z: U
  putchar(' ');
# V  \( f+ u2 H2 s6 s) [6 _  delay(10);
7 ?& B# e, ^2 Y, ~  }
' ]3 z) z: p7 ^' ]( r  }4 ]3 G" `7 ]5 b5 b. q  a
  /******************open screen clear(开屏式清屏)*********************/
) Z/ N& h+ v; u8 k. Q5 h5 I1 Z9 m) Y
  void kcls(int x1,int x2,int y1,int y2)
* A1 t( T" s5 j, L  {8 d2 w/ D, Y  Y( n) J
  int t,s,i,j;
/ E* R( b' E; }! Q/ O' r% u; I  t=s=(y1+y2)/2;& }8 s8 N8 O& y6 W* @" {3 E' J
  for(;t<=y2;t++,s--)
( E$ r7 @; k1 w' ?8 C1 p  for(j=x1;j<x2;j++){
) v) t2 M! B% S+ G( Z! F2 j/ k: t  goto_xy(j,t);2 X  O  n, k" ^: u( k5 {* ^& \
  putchar(' ');" b  n/ w- W. v2 D* C, {
  goto_xy(j,s);# {% A- G  G- ^! c, G- @
  putchar(' ');; M: W  A) @! Q2 J5 ^6 R# x2 _
  delay(10);
& L6 G2 W; [9 I( y$ R) ^) x- o  }
3 z: z5 U  F* g  }3 H; `  L% y6 v1 s1 g
  /*****************close screen clear*****闭幕式清屏*******************/, g1 R& c# M( q4 a2 i6 G

% @8 ?% \7 V: N6 {6 r& D. z  void bcls(int x1,int x2,int y1,int y2)' Q" q$ J0 E) i+ i7 n" l" j/ ^/ g
  {
4 }5 e9 j8 V! n/ P% Y9 s5 l  int t,s,j;
7 j( L+ u& A0 u; ^. D  t=y1;1 `7 F2 c7 |2 ?0 W# C
  s=y2;
3 P! g8 k7 Z: [8 l  for(t=y1;t<(y1+y2)/2;t++,s--)9 Z1 o+ C. C$ ?; h- L
  for(j=x1;j<x2;j++){
; |" Q+ s7 D7 Z& U& ]  goto_xy(j,t);) A/ ^/ k/ j4 m  X7 T9 @6 n
  putchar(' ');
3 B+ Z+ [% n" J* u- P! O  e, J/ W1 U  goto_xy(j,s);- X$ r. Y5 ~6 R
  putchar(' ');! |% p/ C7 F$ b0 N" I
  delay(10);
( Q; v8 Y: |8 O! w  o( `5 W  }
, O% ?9 L6 w. G6 k. s  }' P$ q/ c4 L8 K2 \: m7 C
  /******************bottom screen clear(自下清屏)********************/
, T5 j  N# H7 L5 ]/ n5 u& F' d& b; l
  void dcls(int x1,int x2,int y1,int y2)
6 @8 r4 s7 t7 Q* H  {
! t) `9 S4 T1 x) s( w  int t,s,j,i;$ ]' F( R9 v2 n- ~& Y5 W
  t=s=(y1+y2)/2;
3 j0 W5 ?5 a3 h( w& Z: S  S  for(j=x2;j>x1;j--)* U) a, P+ m. `& c9 O. q" F
  for(i=y1;i<y2;i++){. \4 }2 ~4 i" H: \3 X0 ^& l
  goto_xy(j,i);
5 a* \7 y7 ~/ }! |6 j  putchar(' ');* j; |( t& t* i  Z6 }5 U
  delay(10);
( n6 _. n; b$ ?7 ?& m  d" }9 H: y2 e  }( y9 `4 m9 d% R$ O" c
  }
+ u) H- N. W8 z  /******************设置光标子函数******************/& F4 Q" s5 S' G& t; n) g. }! Y0 @

! T, M/ |8 {! `4 b; g+ ^4 ?  void goto_xy(int x,int y)
! o. A! ?5 }& e6 N  {; |0 U: h/ X. L# U3 ?. w2 l& k1 X
  union REGS r;: h6 T1 S! b2 y# Z6 U
  r.h.ah=2;
( E% v( l& ]9 Q: S6 l- F; L  r.h.dl=y;
0 M! u- M3 N: V$ w5 A; @$ x; q  r.h.dh=x;
2 D% P8 i) Y3 k% d6 y' j% r  r.h.bh=0;
" H5 \" {/ ?* ?% L6 P4 M* K% M: D  int86(0x10,&r,&r);
/ q3 S- k5 @2 Z# Q6 z- u- v$ Q  }
$ Q& g9 |+ t- S3 |+ p2 Q0 l- j6 g, f
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/# a$ I/ P% g# ^2 F, P  {

0 m6 M( b# Y2 a! Z  void puta(void)' U8 G5 W; [; z$ h/ X- A% Q8 u
  {
. w6 q5 Z' [" X6 e( f: ?( A2 _* t! K  int i,j;
4 \, C2 S7 f' o3 i6 A  for(i=0;i<24;i++){' g: b4 t: |& {) L- u
  for(j=0;j<79;j++){
3 T- U) V% T( D$ t0 {/ Y8 Y" M  goto_xy(i,j);
0 |" l1 D6 Q+ I7 G2 N8 |  printf("a");
" I! ?5 H* K8 G( ], K: t  }0 B0 S, [, g7 Z* H' G( m' L
  }! @: Q- k. O2 v5 x4 P% k
  }

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