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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# h7 L" u' n" X# z$ x0 t( m- u0 a
. h9 Q! G3 Y* @" H7 y/ R  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" H9 c+ u. f, Z0 \2 R( x3 f+ H# D; g2 m) m& E: h) ~
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! j/ S1 W& p. u: f  子函数及演示程序:
; O4 l4 s- F7 E5 i6 \) F9 I- d- M, Z' ^
  #include<stdio.h>
! w8 f# a$ i; N6 y, J( j6 Z, J  #include<dos.h>! I# x* n( ?- |( `8 u; Y5 Z8 g
  #include<conio.h>3 F2 v' f& @5 g& Q5 b
; N! H3 s  m+ W% x( m2 ?
  void goto_xy(int x,int y);! W  ~+ U& ]( |5 A
  void dcls(int x1,int x2,int y1,int y2);
+ v3 }5 y( Y: Q# F) w- y, N  void bcls(int x1,int x2,int y1,int y2);
8 |4 c  B5 D0 H  void kcls(int x1,int x2,int y1,int y2);
1 d/ |7 P0 M  n, K7 }) d  void recls(int x1,int x2,int y1,int y2);
( K, A) f) l. a/ A* ^5 h( A  void zcls(int x1,int x2,int y1,int y2);
0 c) l3 ]) q. W& E$ p  void puta(void);" X8 `3 G/ L/ r0 `' G1 w4 v
' |! Y8 h' [& z6 E8 m% y

! G) i- Z4 @6 n. A& _9 y/ c5 Q  /*--------------演示程序---------------------*/3 n4 a! R1 C" _; s9 h( M9 |
  main()& |: C5 Z* y8 W5 m  }  m+ ~
  {
# B3 d  i3 e# y: d  I/ J  puta();8 P) t5 P& Z4 c  K
  getch();
8 A* t: V. v8 S  dcls(0,4,0,79);5 B- f5 l% u1 F, ^) B; G2 r5 V: T
  getch();1 _% G. ~9 Y9 ]) ]
  puta();& i* [; B& U$ D
  getch();$ j7 [( p4 x& E/ Q7 n0 E
  bcls(0,25,0,79);0 e8 x$ H$ h: T7 V1 y
  getch();0 l, b* Z2 e% v- T  D# x  U4 N
  puta();0 K. T4 m6 v# c' U, Q5 _- B
  getch();
( V7 q  W- b: O/ \% m5 e  F  zcls(0,25,0,79);
2 g, s0 F2 G1 I5 [; r9 F/ M  Q  getch();
. w  _6 h) h9 D! E  }# @/ ^6 a2 R3 J- f0 K3 c# L5 a- Q
  /*********center clear screen(中心清屏)***********/# i. n+ `6 v# q& P+ F
  void zcls(int x1,int x2,int y1,int y2). U0 O. q7 c4 u) X, L& g' n
  {
5 k4 {. F' Q2 l/ w3 p  int x00,y00,x0,y0,i,d;" U2 l9 D% i* J- ^
  if((y2-y1)>(x2-x1)){
8 c  u& ?0 q" ]% U" @  O0 O. \  d=(x2-x1)/2;* [- B' h! x2 H) R5 `9 o
  x0=(x1+x2)/2;
. {1 z) `$ s/ @8 z  s  y0=y1+d;" O! ^+ S% j( x4 \
  y00=y2-d;
# c- v, x5 X' q# [3 w  for(i=0;i<(d+1);i++)
4 o: C1 A' N+ t& a  recls((x0-i),(x00+i),(y0-i),(y00+i));
: U# S& k( b3 _8 A0 S- Q  delay(10);
& q! r- U! N( M  }# \. C# U+ \) x- x- Q8 I/ u
  else{
. o" L. E8 D- S* `  d=(y2-y1)/2;
. h5 q, H  a4 |$ m+ z# e; |  y0=(y1+y2)/2;
( ^1 k  f/ b0 G% U5 z9 Y  x0=x1+d;5 |# o0 B2 M& a6 T% r+ M& v( @
  x00=x2-d;
- l2 a& z. W9 q9 Q  H0 w& \* Q) {  for(i=0;i<d+1;i++)
- H9 A3 M1 D9 X& B  recls(x0-i,x00+i,y0-i,y00+i);( d% Z' X" W! ^
  delay(10);9 T. |4 _% p8 s$ F) c, j+ C
  }
7 J/ X- A  y% l  }. K* ^2 I# [* @! Y4 Z6 P! d6 A' V; ]
+ x) h9 \# u& t# E& c1 y) ^
  /************* clear rectangle side(矩形边清屏)***********************/
; U  g4 H. H( [4 `& M, |* ]
1 T. Q, ?3 w3 b/ Q& A  void recls(int x1,int x2,int y1,int y2)* W- U* \: |1 W7 J
  {0 W- [* [6 R' a" i
  int i,j;# a# w9 w5 a0 }- ?/ f4 Q% ~) O# g
  for(i=y1;i<y2;i++){
1 U) M, r1 D: G) q    goto_xy(x1,i);5 l3 C/ ]/ ^; c+ n. }
  putchar(' ');
1 T/ C0 _' C6 P- P  goto_xy(x2,i);
% h2 ~) s' e  |  e1 i, \& D4 z9 {  putchar(' ');
8 _8 D6 N' C' g. j/ J  delay(10);
- {) |$ C4 d4 u3 l! M% v  }
$ V- g8 w8 H9 ^7 {8 V& _1 d  for(j=x1;j<x2;j++){. G2 c; w9 u6 m& Y
  goto_xy(i,y1);0 f% x- ]0 V5 N" n9 K
  putchar(' ');( j' T# U/ D' w$ L, I5 ?
  goto_xy(j,y2);6 [! q6 k$ u* d+ d" \: x
  putchar(' ');* r2 X4 K% e. |$ ^. }- _( u
  delay(10);9 ~: M' T+ j0 ~+ A+ p0 m( O9 A
  }) N) ]" w7 Q0 U0 t& w7 }  C
  }
. b+ a/ n$ Y' M) y9 b0 a0 F  /******************open screen clear(开屏式清屏)*********************/
% a- a8 y1 @; X, ]4 R* ~# C3 j$ Y( U& N/ q" `' A% P- K. t
  void kcls(int x1,int x2,int y1,int y2)
( P9 n' n9 I$ t  {
; F& p% o% p$ u- O- M  int t,s,i,j;
% x1 n2 c: V! V; d' Y, i  t=s=(y1+y2)/2;4 Y9 t4 q5 F) q
  for(;t<=y2;t++,s--)( b* O. s+ q" z% z) I. e
  for(j=x1;j<x2;j++){
9 p7 C; S4 [% h" Z  goto_xy(j,t);
( Y/ p* ^. V- ^  J  putchar(' ');
* u$ ^1 p7 {) g& S& E1 \  goto_xy(j,s);: _; \" D* A- g$ q3 A! n
  putchar(' ');
% u2 m+ V! |5 U% `5 v( e' ~8 o  delay(10);$ @( J1 o0 P( L5 X% m: u+ p. N
  }, Y) p0 K1 i" T* ~6 L! }! q; }1 q3 }
  }- ]% `6 |6 t" v! X+ T- D! L, D
  /*****************close screen clear*****闭幕式清屏*******************/
: Y: L( c0 O. I" U9 m9 B
, F  {9 X% j0 b8 m! ]" g: q  void bcls(int x1,int x2,int y1,int y2)
2 J- k2 Q  A* N  {! [( z) `  q& {1 p
  int t,s,j;
* n' X' l3 t) b+ g( V  f6 L  t=y1;
6 ?0 s0 B7 l* ]% ~" z9 z' u; P  s=y2;
  X7 ^7 w! x) X2 c- K  for(t=y1;t<(y1+y2)/2;t++,s--)
2 r; D' P! n& ^+ y5 \. z  for(j=x1;j<x2;j++){
" M" h7 Y9 P( i8 h( R  goto_xy(j,t);! K" h  {1 c; d
  putchar(' ');
* h4 S/ ]# `; F: k  goto_xy(j,s);! Z0 \# H; L  ?' [
  putchar(' ');, T  [& q$ ]) n- J. E' l/ l
  delay(10);. u) _. G) W# ]
  }* Z  o0 }7 c! V5 U% P
  }. Y! P9 F: u# Z: j+ o- t3 g
  /******************bottom screen clear(自下清屏)********************/
! ?6 {) o) T" k! I! V, x0 f7 i
: }! |* }( t3 N1 m9 ~6 H  B  void dcls(int x1,int x2,int y1,int y2), K- o+ f+ S3 h
  {' \/ g) N" K. a5 R' U
  int t,s,j,i;* }8 q% ?- x) Z
  t=s=(y1+y2)/2;! ~6 s& X% s' R. l) V3 g- h' D
  for(j=x2;j>x1;j--): N" e3 }( ~6 {& J1 v
  for(i=y1;i<y2;i++){
6 w) y" e# d! ?- P" t  goto_xy(j,i);( O( D0 e- }" k5 z
  putchar(' ');: Z0 Y' \$ P! @( _
  delay(10);
- J2 A0 S, T' H5 N  }
* ?5 H' {  R7 V3 h* S3 `  }5 R* F3 ]; M" Z2 T* I1 V- _
  /******************设置光标子函数******************/
9 N" g5 ~$ d- y$ d+ f+ t" N$ @6 n' \& R2 E: j" ?$ ^' Q1 o
  void goto_xy(int x,int y)2 P2 U8 e, K; p" Z+ y0 c
  {; R/ Y4 r+ r/ h$ w& D- h4 y
  union REGS r;5 X. P- e5 U: M) X4 E
  r.h.ah=2;
' F+ y( z* I) t6 o# \  r.h.dl=y;7 O1 `7 J4 L& t1 N( ^
  r.h.dh=x;# s6 V1 y; J, S$ U8 F
  r.h.bh=0;
2 Z4 t; d# o# k# _  int86(0x10,&r,&r);
- D; |5 a! a" |  }) q' g; Y' k" c8 _' i
- d' U& }* w# y3 S6 `0 T
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/6 d  J4 k; g, N( c% |$ Q

  c8 G8 }& T# B7 Q- a5 w  T  void puta(void)
9 D2 v" _8 Z3 M* r" i7 {  {
; w/ q+ i( m# F* E, z( s  int i,j;" ~0 h% K" T! N% ?
  for(i=0;i<24;i++){: j! v7 Q5 C# u9 p; Y; Z
  for(j=0;j<79;j++){& H3 J* O% i  N  c" A8 B
  goto_xy(i,j);/ x; c4 a) K; h% E7 y+ P7 V: @
  printf("a");
. X8 y$ h& i1 _4 R) f; Q: g  }5 M- \8 W4 F& r- p
  }$ t# u" q8 v. _: j8 H" X
  }

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