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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( Z; u! B7 c* K$ F  s7 D8 l/ Y9 S! Q6 T0 Q; J0 \4 J2 l2 q" {0 K+ U" c, F
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 x( Z! _& D  ]8 V, W, ?0 r

0 n; _' c. A) d; n6 D' G) Y3 ^  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 6 f. X6 w# h  B- c& t
  子函数及演示程序:
6 s  X, E3 N7 Y# F$ k, f
; |. @) F$ l. H) b) S  #include<stdio.h>+ B6 Y7 [+ y5 i4 h2 e9 K, }
  #include<dos.h>* b& k9 o! h, H" |/ g4 v: f' X
  #include<conio.h>) `9 j2 Y% O, y/ h- g2 W& X
" d9 E& c+ n$ x, M" C" m8 g
  void goto_xy(int x,int y);
* X1 \/ S; E" v' L5 E0 C  void dcls(int x1,int x2,int y1,int y2);& U8 v6 [2 U$ i3 g1 r6 T! _& A3 t" {1 o
  void bcls(int x1,int x2,int y1,int y2);' b" F! Z0 F- M$ c5 c+ p  X
  void kcls(int x1,int x2,int y1,int y2);
, Q: r1 l7 v# P9 u9 ^" P  void recls(int x1,int x2,int y1,int y2);
6 I9 \, Z9 R% [/ b! G' Z  void zcls(int x1,int x2,int y1,int y2);
* P% ^* n' p% i: l5 Q  N# g  void puta(void);
3 A8 Z' ?! q/ C6 n- W
' b* f3 J# C) o$ Z, P+ u/ V: c$ E' m
7 ~8 m& w3 N8 y3 @  /*--------------演示程序---------------------*/
2 b8 T* M7 E2 S9 |; z3 C  main()
8 o$ N; M# H9 g, m5 A4 E& Q  {
1 i( M$ G& H% {- B& T  puta();& A& Z& h) {4 g2 Y
  getch();' ?! Z& w# z$ Q- _, N: b: w2 y' m1 g
  dcls(0,4,0,79);
+ I2 S' B% ^% x8 q  getch();
. W1 e. c1 ?2 l( Q# U$ G/ F  puta();
$ w, ]3 s0 o! l6 L% o; b; A  b  getch();
  ]5 u+ G+ e7 F% l  Q8 x+ G* w5 f  bcls(0,25,0,79);) C4 g6 b# J6 @: f4 n
  getch();: ^0 R- D* w  m' o8 F. V8 C8 @8 E
  puta();/ `+ C* {% X' {; n/ o* y; J
  getch();! b. n! W( K+ T
  zcls(0,25,0,79);
; T6 {: E0 }. H1 ^7 v" ]  getch();
; |1 F. k1 P0 U4 h  }
6 R* S3 l* j5 G* h6 M  /*********center clear screen(中心清屏)***********// _( I6 t* c- y2 D0 d6 D" k
  void zcls(int x1,int x2,int y1,int y2)
$ ^0 K# o. `% Q4 |  {) n4 p, W. E# n4 e
  int x00,y00,x0,y0,i,d;
- ^/ v* U; M4 ~2 j6 T/ Y  if((y2-y1)>(x2-x1)){+ G) E1 z" f/ p' ?' I
  d=(x2-x1)/2;; J. G" l8 B/ [; P* Y$ l# F
  x0=(x1+x2)/2;
" |4 |, h. u% M% b! u  |  y0=y1+d;( p2 h0 W1 U5 Y) X& h( x0 W7 N7 t
  y00=y2-d;' b5 [6 h5 u# @4 |& e( K
  for(i=0;i<(d+1);i++)4 @  N9 @  s( {/ Q! K  u& G) T
  recls((x0-i),(x00+i),(y0-i),(y00+i));
! H, @% z- P' U0 {( z  delay(10);
9 U% z8 B3 J# ^& {: M+ F7 E) s  }- |1 h5 V# I4 z$ ~5 [( P
  else{
# m4 g' Y+ t- K  R8 V  d=(y2-y1)/2;
, m* z0 u- ^3 H, Y$ R  y0=(y1+y2)/2;9 `% g9 p& s& Y/ E. u0 X6 U: a
  x0=x1+d;9 {" q  J8 |7 s
  x00=x2-d;! v1 C3 W$ I. W& I! X. P
  for(i=0;i<d+1;i++)& r  w9 s4 D( Y' a
  recls(x0-i,x00+i,y0-i,y00+i);
) Y' S5 g! O1 F. ^. s9 R2 J6 P5 C$ X  delay(10);/ x1 [8 r0 X- g. V3 U! a5 {/ S. r
  }
" z: Q! b  M2 c- N0 s0 O" b+ c- n  b  }
1 C6 q" ^- |, C) a5 x2 E$ p# L9 E. l7 D' K, @2 ?  z. G$ X
  /************* clear rectangle side(矩形边清屏)***********************/) Z" N: o' ^* ~2 o: W# M

! K2 E  `' B1 n' r+ f" \" e8 [  void recls(int x1,int x2,int y1,int y2)# J5 E" Q' q3 ?* o
  {0 ?) R; y8 j0 O* q# f1 @$ P: O
  int i,j;  z1 }1 T; T. A4 B- w  P# w
  for(i=y1;i<y2;i++){7 t; ?) O, \$ B4 F
    goto_xy(x1,i);* }1 v8 ~% s* g' w" J  F( C: e
  putchar(' ');2 X1 C+ F5 H7 v# l
  goto_xy(x2,i);
% w. o" m9 [+ G2 [  putchar(' ');6 J2 n: v' V: j" \& K' g6 |
  delay(10);" Q  ]8 q3 w5 s1 |1 @- f
  }* D: W2 e3 X  G
  for(j=x1;j<x2;j++){
' C( s5 C6 A6 H1 Q9 t0 w# p( o* v- Q  goto_xy(i,y1);
9 V% |' l7 n9 s  putchar(' ');
- k% w1 B8 y$ d1 {6 N0 L4 l) Z  goto_xy(j,y2);  A3 x- \# J# r& M+ u2 e5 Y
  putchar(' ');
( P( Y) y6 e* y/ P  delay(10);0 `  p- y; @) ~2 g$ c' l! b2 I8 k
  }
% Y6 F4 z3 }: n* u0 j3 w% L3 H7 S3 Q  }5 A/ y: \9 K6 D. J
  /******************open screen clear(开屏式清屏)*********************/
* e$ w8 }! o! K+ w1 O
0 @& f  _! C5 I! V* u! m0 ~: j  void kcls(int x1,int x2,int y1,int y2)' x9 K/ G. H8 b$ ~
  {: J; k7 B4 R6 a' _% N
  int t,s,i,j;
' o4 `/ a$ ?4 Q" F# I6 Z  t=s=(y1+y2)/2;
; A/ x9 U& K( {5 Q: X* z5 {0 s  for(;t<=y2;t++,s--)
: O; |; K8 r+ i( d2 s; z  for(j=x1;j<x2;j++){' e+ G: s" g' Y+ t3 O3 G
  goto_xy(j,t);$ l# i/ R, @/ _$ o! D. v
  putchar(' ');4 L% ?* a5 M5 {
  goto_xy(j,s);
; w# ?: W: Q& N! `+ P' b4 e# n6 ?  putchar(' ');" [' C$ r, D5 Z+ k( d! Q
  delay(10);3 O  [/ X9 R- y
  }& n3 g3 |9 j3 v4 a( F
  }+ E( m; `7 R1 N: _" z
  /*****************close screen clear*****闭幕式清屏*******************/
3 J4 ]( h$ H  s. D% Q) O* K, d) S" u" T$ L) Q
  void bcls(int x1,int x2,int y1,int y2)
7 y; I6 }3 K6 q( x  {
7 z, \1 O/ {( ?8 b2 n3 [  int t,s,j;1 D* V. k, b5 ]
  t=y1;
7 p' r& p7 T' d: v% X& p  s=y2;
$ }0 {( G# D0 |8 }  for(t=y1;t<(y1+y2)/2;t++,s--)
8 n, l* h) k, U: s4 \  for(j=x1;j<x2;j++){# g+ @- [- A2 k% e
  goto_xy(j,t);
9 z+ R' M$ u* X. x  putchar(' ');; v$ X. m* K5 c
  goto_xy(j,s);# r7 C: K4 j0 f4 n9 X/ U' {* W
  putchar(' ');* s2 [" R7 ]6 p4 E& y7 p
  delay(10);
8 g8 O, D- M) M; d  }
' ?! b: e8 g; E# a( z7 @5 S  }& S! ?- e: s& m5 Q" N+ e$ E4 d
  /******************bottom screen clear(自下清屏)********************/
9 ~+ @) w. F- K4 V- F" c
' l# D7 V- J/ a3 m" C' y  void dcls(int x1,int x2,int y1,int y2)) m4 [! B4 }% Z2 p# Q2 s* T6 i
  {( [/ d& z# Y0 ^# z, r& L8 d) [0 i6 x3 r
  int t,s,j,i;/ R) D$ p+ Q) E+ D" e! K  T  @
  t=s=(y1+y2)/2;
4 q- k3 k7 Y1 J! p9 S, C, i/ z  for(j=x2;j>x1;j--)9 D" ?; Z0 `/ `
  for(i=y1;i<y2;i++){. e3 K2 [- K! s: m/ O2 C
  goto_xy(j,i);' A1 }1 A- M* T' H
  putchar(' ');
, e3 ~) Y3 p7 P  delay(10);
. G9 t# I% ~; I# k/ Q  }, ?3 A5 T( m* y* |! i  `
  }
8 ]) W( j' t- j3 ]/ y  /******************设置光标子函数******************/
) x: E: \3 w0 Z9 d" `. ]
, K2 U  k. q2 o  void goto_xy(int x,int y)! s& ?7 B1 P" l) h# Y2 @
  {
/ R3 Y6 s7 w6 M4 F* x  union REGS r;
2 j! c1 ?9 f6 j5 u  r.h.ah=2;
7 n" E, \- A. I7 v  r.h.dl=y;
5 M- j" |9 S, n3 D! Z6 ~  q8 S9 ?  r.h.dh=x;& V& J, j9 V/ h  L7 q
  r.h.bh=0;
; _1 `% d, R; H  int86(0x10,&r,&r);
! Q: q( s+ l! h5 B  }5 O( \3 C8 j' r
; e! ^2 |/ y+ r! X8 l. n1 g2 Y7 Q4 |9 S
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/* D$ w% _- h4 r

' g) [0 O# w2 Y  J% }# L  void puta(void)
& _: `# W/ B& Z# K# H  {
" B. P- h6 r6 A, r2 u' _! u  int i,j;3 B+ u& t  C0 @/ r
  for(i=0;i<24;i++){
3 W5 j4 |" u( t+ S4 w; }" G  for(j=0;j<79;j++){
% }% q. O6 Y$ @( a' V: `3 H* `% f  goto_xy(i,j);; @) N) z' a+ g4 m, k' r8 j
  printf("a");- R7 [: D8 b7 ^# d1 {$ ^  v) T: H. \
  }% `2 E4 j0 _: F$ Q1 _: e
  }* @$ {  Y" h6 J& b! k
  }

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