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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% p9 p$ i% c) v* T- y6 R, Y# I
4 M- U: j' {$ J; y3 z: x  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
! f  R+ {7 w  Q2 c6 m
7 ^2 i7 \2 I; y  I  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ q1 G  Z1 L% D# Z
  子函数及演示程序:
) V6 u& L3 V6 M  R$ z) R( }
- b2 d4 ^$ Y& L7 {+ b  #include<stdio.h>1 ?3 i- A# b7 O1 v
  #include<dos.h>) H! P8 P& R. v# x. r  h$ G
  #include<conio.h>
  g) Y) W8 y% I  ~% `9 \# I/ f3 n( L6 k
  void goto_xy(int x,int y);" j' r/ A3 b8 z% p+ _+ ]
  void dcls(int x1,int x2,int y1,int y2);0 e' o4 f2 w5 e7 R  D+ }
  void bcls(int x1,int x2,int y1,int y2);
2 H+ z5 t7 q8 N( z5 n0 z  void kcls(int x1,int x2,int y1,int y2);- b  p6 p/ j7 D; a. ]1 o- r1 W' ]
  void recls(int x1,int x2,int y1,int y2);
4 j2 P5 l% [1 U; c& t  void zcls(int x1,int x2,int y1,int y2);
0 i# l+ F3 y7 g( A2 ~  void puta(void);
# {' J4 i" h* R3 R- G7 A
8 u9 W' _& G7 P$ b! B0 V# z/ F/ w: ~; S' X+ w, M
  /*--------------演示程序---------------------*/
9 D( P% u; c/ F  main(); }) |. T; R2 ^5 q2 ?1 L7 o
  {# H7 F, t9 v- V9 k( L
  puta();$ n( J5 ?* i. K  C: a
  getch();+ N; ~9 c& s0 f  K; M+ r" U
  dcls(0,4,0,79);
1 `$ C7 f, p" `! R& J7 n, E5 W0 a  getch();; ~7 z$ t# l3 }- {, a
  puta();
# C* {6 w# \$ {1 f  getch();. m% z  ], J+ L" d7 ^0 B8 f6 H
  bcls(0,25,0,79);' g+ K/ y5 S- ?( L
  getch();
3 L( G8 O7 T+ S7 J$ {3 @/ L  puta();- M4 u3 Y' u! N
  getch();
1 M  }1 W& R% i) v+ D0 y  zcls(0,25,0,79);! I$ o% t2 S  [, p
  getch();" Z# `2 J5 m3 q& v' ?) Y
  }! D! C& h1 s6 _, s' ^
  /*********center clear screen(中心清屏)***********/4 `1 ^; u0 J5 o
  void zcls(int x1,int x2,int y1,int y2)
. E2 ]& [1 F" V- m$ U% `  {+ U0 R+ ]+ s9 W* p* ~* e8 G
  int x00,y00,x0,y0,i,d;/ I) z1 c! c! \$ G) h6 |  E
  if((y2-y1)>(x2-x1)){
) a# Z& e& a, w1 z4 C' v6 g) H  i  d=(x2-x1)/2;
' q- C, |& Q; i1 n0 v, C! J  x0=(x1+x2)/2;
3 i$ ?. `7 D. T4 {  y0=y1+d;/ X8 s' R1 J# `, b
  y00=y2-d;1 S! u- `, |- k: E) N" x9 v
  for(i=0;i<(d+1);i++)
+ ^$ i7 S2 x( Q$ T# q! Z  recls((x0-i),(x00+i),(y0-i),(y00+i));* o% V- F% S. A( {; e. @. V5 R5 y- g# b
  delay(10);
3 P& d; p' a: N& G$ I  }
1 c- K5 r$ K4 P$ H' q, n  else{+ q$ e: q; }6 A# G
  d=(y2-y1)/2;- x, d; Y6 y) g/ b8 E
  y0=(y1+y2)/2;. Z# Z6 x$ D$ h. a
  x0=x1+d;
: s' j6 }7 w6 }  x00=x2-d;. V7 P7 t1 E2 I; I- K9 D+ I
  for(i=0;i<d+1;i++)
  S5 A2 B+ b4 v+ y& q# E3 t" a  recls(x0-i,x00+i,y0-i,y00+i);( F7 z1 B( G' ^
  delay(10);+ f- T# w# J4 D+ f
  }
2 S1 z. L+ p0 w, i  }) L) D) ]! g: v

( }/ ~% U, Y  U  /************* clear rectangle side(矩形边清屏)***********************/
! K4 @  T" w2 S% k9 c6 Z; f  w' J  m! l( |* S: E0 \
  void recls(int x1,int x2,int y1,int y2)/ D, G( R" C9 z" x7 h  ~% f
  {4 ?0 U) c+ r& S
  int i,j;
: y9 e8 X  D* c+ u* R1 G3 }) _  for(i=y1;i<y2;i++){, I7 E0 Q( O) b
    goto_xy(x1,i);5 C) y9 l  h! y! ^8 J/ X" u
  putchar(' ');
1 J% e) ^1 H4 n$ X; L  N  goto_xy(x2,i);
7 G" u9 q$ R& x- j  putchar(' ');9 q4 W7 B, _5 _) j
  delay(10);
9 v' U8 x- t4 l, U2 S) Q# ?  }
' y) H1 U0 k4 a1 b5 C8 u  i  for(j=x1;j<x2;j++){' H8 ?: B2 F+ m9 O: e
  goto_xy(i,y1);9 s8 f' w2 S  v9 I% j4 r( y
  putchar(' ');$ e/ d. k5 {- z( m3 q
  goto_xy(j,y2);
! `; Y7 ?: T/ J" u  putchar(' ');
- a( E( n( l/ Y7 F9 m, l  f  delay(10);1 g; k0 _* l6 L) F. \2 Q
  }  u+ a. m0 R6 B3 @; E1 F
  }, i- Y3 z$ b0 [# O
  /******************open screen clear(开屏式清屏)*********************/
( O. e. T  k/ G/ T) }& Z: i! _. Y% t9 T
  void kcls(int x1,int x2,int y1,int y2)3 s2 E7 {, i2 S& b/ w
  {5 S$ I1 H& t- Y% E. R3 Y/ A% }
  int t,s,i,j;
' r6 l; c( R/ I1 |5 T: U9 w  t=s=(y1+y2)/2;# V' K4 G2 k- E6 W* H, h9 {+ V
  for(;t<=y2;t++,s--)% c5 ~$ t' H0 D
  for(j=x1;j<x2;j++){
# N& m  ?: d, I2 o& Y! O; l  goto_xy(j,t);5 _7 W- t% ~- Y% c5 I
  putchar(' ');. Q( u/ N; U9 V- ]
  goto_xy(j,s);
# X& v$ T: p% j; T0 n: B8 [- P  putchar(' ');$ `4 d- s. n: A* S) ]  P6 A
  delay(10);" e1 D4 b9 j! w
  }5 @& ?! C' \, Y0 C- y1 Y! X
  }, N* N3 [) D) R' n7 R" @
  /*****************close screen clear*****闭幕式清屏*******************/% f8 R$ m6 ~& V6 p: w# x; L' g
# t: e5 w8 G, B' e' v5 D; f( }
  void bcls(int x1,int x2,int y1,int y2)
7 G1 y) c' F# \" Q( e/ H  X. ^' g  {
# n8 v0 }' @2 ^: b4 f  int t,s,j;
. f* D* U& L& `/ Y2 N  t=y1;5 E% R8 |% F; n' [- k
  s=y2;
4 a3 ?" {, N1 a9 h* z+ y  for(t=y1;t<(y1+y2)/2;t++,s--)
$ H, k' A4 q4 h5 [+ Y, V  for(j=x1;j<x2;j++){
0 x+ q; V3 J) K, Y9 }. z! U" }  goto_xy(j,t);6 @6 J8 ?  n( {7 G0 \8 r
  putchar(' ');4 s. g8 S0 I* `+ ]1 ^
  goto_xy(j,s);. V9 K& q3 V. A+ I" C3 b# g
  putchar(' ');
* z4 e1 u! u2 R+ f; H  delay(10);
" u" h/ B5 w+ }3 M, A  }1 Y2 ]0 H6 S% ~0 z$ A" M
  }
' V! K* X9 X6 f  L  /******************bottom screen clear(自下清屏)********************/9 a% U5 _% `! y/ `) Q
5 f! W" R( x; k7 w- @( w& }. }
  void dcls(int x1,int x2,int y1,int y2)& ^: H' M4 w1 z" |) y0 t
  {
4 J2 z: S1 G& h- K0 g; V, B  int t,s,j,i;
: i, \, t+ J- W, x2 y5 X8 M3 f# {  t=s=(y1+y2)/2;. n# K; o! D: E, y: A6 i* c, X9 d
  for(j=x2;j>x1;j--)
7 ~1 e5 Y4 N3 L! K) p  for(i=y1;i<y2;i++){
/ H+ j: R- w: l3 b( D6 C( S' m- D  goto_xy(j,i);. v  v( o+ t8 u$ g+ d' \
  putchar(' ');& R% }% `7 H2 c- {
  delay(10);! q; {: e% s' D/ n4 V* J. ?( ]
  }: t8 E; N4 |* o# T) t, A2 c
  }
8 I: N5 M7 ?6 P+ |  /******************设置光标子函数******************/* O8 \3 G5 l& t$ H5 V9 i# M3 Z
1 n+ ~8 L$ ]) v) w+ E" P- x
  void goto_xy(int x,int y)
! t+ J$ y: b0 D9 E" \; m6 o. T+ L  {
  s, v2 j6 r3 b" D1 w  union REGS r;6 f  S! y& u% [8 B" z$ x
  r.h.ah=2;
8 }# I1 s( M* P; l* c; V  r.h.dl=y;
  k+ b4 k5 k9 _3 i  a+ ^  r.h.dh=x;$ r* c/ W( g+ M+ q
  r.h.bh=0;2 E* `5 R0 }0 y! Q
  int86(0x10,&r,&r);: \3 [9 o& a7 [+ O1 F4 Y( ~
  }
6 P% d$ Y& y  \+ S2 \$ D" ]9 Q/ ^' U; ?6 r1 g
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
9 Q0 f  i3 \9 M# d! G% z& V% x$ g2 {0 G% R
  void puta(void)
5 p/ }4 e3 F% a  {: j9 N. o5 j1 _8 {
  int i,j;
2 h8 T. T  e$ d. n- }; l  for(i=0;i<24;i++){' c5 r. Y  M7 d2 L& ]% Q' Y/ q6 ~! R& O
  for(j=0;j<79;j++){8 {, w0 h2 E6 A. f
  goto_xy(i,j);
4 j/ `* E& j2 n) B9 i  printf("a");( U* i$ X- ^2 b) R. l
  }
+ q& u1 V+ A. S  }+ F7 ]# Y  j" L2 n6 O
  }

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