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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,: U5 {$ A4 E: \: `' E" |
  d' c+ F9 T- L/ ~7 [$ Z; {
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里  x, k4 Y5 n6 R

! d5 m8 u7 Z# `. ~5 E  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 D/ g$ o: A: I) T0 E6 \  子函数及演示程序:
9 H% E* Y0 i6 U# g- ]% u5 x! N) ^
, M$ q9 h: E* s# }$ M- {* P  #include<stdio.h>5 U* L# F6 h& l4 o# W( Z& E* x" H
  #include<dos.h>3 d1 V( J2 J' C
  #include<conio.h>0 t1 C. D& M4 A4 a+ _5 N
% T4 U1 O+ y6 D4 H9 S- ^& n: i
  void goto_xy(int x,int y);
2 _2 w9 }3 k8 q7 E, M; E  void dcls(int x1,int x2,int y1,int y2);7 b2 V0 h* v# Q) A# d7 T5 n
  void bcls(int x1,int x2,int y1,int y2);9 M$ e  s( T# c0 X* M) D
  void kcls(int x1,int x2,int y1,int y2);
1 t) i3 ]6 J/ G  void recls(int x1,int x2,int y1,int y2);
. x5 R9 O5 f: F# u) @9 H0 F5 ]  void zcls(int x1,int x2,int y1,int y2);
/ B9 M6 C, L2 ~  t  void puta(void);
0 U! L3 s' q9 r2 O, P1 W4 a/ @2 M& y" H4 d& X: J
% K3 V& g$ \/ q$ d/ \' X: O, B
  /*--------------演示程序---------------------*/
# T. f2 p* W8 a( j  main()
+ o( n) n- G& ]2 m8 X7 k7 g/ _, w  {' j  _  k  @/ w/ e: H) K2 m
  puta();
% Y" o5 m) D* j8 ^  getch();7 Y; G+ H# }5 I2 J; O, z
  dcls(0,4,0,79);
  @+ g6 L7 r+ S' D4 E5 l; x  l* U  getch();
" A  }5 |( L9 a7 h5 F! D* _( m  puta();2 Z9 m' @# q- ?* D  C2 P
  getch();" u7 _6 A% u4 g  @( \# E
  bcls(0,25,0,79);
: [# |* z$ g  m: R  getch();
" R- y. q' P# \* k8 b  puta();
' y$ U* W, Q' v5 @  getch();
! s1 q  x/ c* f  zcls(0,25,0,79);! B1 ~; o4 \5 u
  getch();. [3 x" J& u& Q6 m
  }! x3 q5 H# ?, X/ y* B& e* v
  /*********center clear screen(中心清屏)***********/
1 c! F2 @" P, ~) u  void zcls(int x1,int x2,int y1,int y2)
9 P8 x3 x# h* ^2 i2 a  {
3 C* l& u- x% q' U2 d1 M  int x00,y00,x0,y0,i,d;
0 V( P# ^1 B" n! q. H) y8 T  if((y2-y1)>(x2-x1)){1 X" a0 s- ^, q0 t1 ?& x) W! o8 |# [
  d=(x2-x1)/2;* J* A; u$ x7 M# m$ h; P
  x0=(x1+x2)/2;1 ~, u  N4 {' k( Z
  y0=y1+d;: W. L6 L9 J& Q1 _& L0 w( |
  y00=y2-d;
: o3 s' X7 h+ f5 Z& B  for(i=0;i<(d+1);i++)1 N0 Q& i/ T/ u- s
  recls((x0-i),(x00+i),(y0-i),(y00+i));! u, J9 _; D! E9 \
  delay(10);
& w+ \: M9 C9 n( b! z  }# i6 j+ z7 M5 V% v' k- O( D
  else{
$ f  @! ?. z8 o& ~& A5 P$ J  d=(y2-y1)/2;: b, h, Q0 w" b0 k/ l) |
  y0=(y1+y2)/2;
) A4 u* i. \6 X; l/ I% H& ]  x0=x1+d;
+ a( C+ @- n( C. L5 I& o* P# c! Y  x00=x2-d;5 N7 z7 z) A# f  p: I
  for(i=0;i<d+1;i++)( I3 e: \$ z! _3 M; i! V1 |
  recls(x0-i,x00+i,y0-i,y00+i);+ c8 e, w; X" P# t- a
  delay(10);* O% _, {3 `' H  v4 b
  }
5 u# w9 }+ c. A; `4 H5 y  z% N1 O  }
; j- Y4 R: i: R; @
: a. J$ E% I' q* e/ C% r  /************* clear rectangle side(矩形边清屏)***********************/
7 r; w; j. D- a/ x' E7 Q* O
( d  A  Y) H& a' _! K9 g% p+ |  G  void recls(int x1,int x2,int y1,int y2)
, b9 J$ P, }; x) V! L  {! m6 X, `: Z. k
  int i,j;( z7 F  I  x1 o
  for(i=y1;i<y2;i++){
% C6 z# M4 ?! v% w, [& ^* R    goto_xy(x1,i);
# u. ^' S8 I$ N8 a- I  putchar(' ');2 ]/ V4 S8 U7 ]& o
  goto_xy(x2,i);
& \$ `: o8 ^! }& b1 X2 m* d  putchar(' ');
$ R( x% L$ G+ ]  delay(10);
3 f3 F* W7 g/ l9 F/ q  }; U# J& V. W* l4 }% l& q+ G
  for(j=x1;j<x2;j++){# g+ T2 y7 u% t/ U6 b
  goto_xy(i,y1);
% F# V" I2 k* |6 p" ~- w  putchar(' ');( I2 l$ B2 V9 ]" F% i. b1 H! f3 ]
  goto_xy(j,y2);
: m/ Z" ?7 @( `7 L  putchar(' ');
  ^$ v+ t6 h" q  o, |3 t4 b8 b/ d  delay(10);$ H0 {2 k) |8 l7 ^8 [
  }% j4 E" J3 c5 F; ^/ E+ `
  }
4 `: c9 o8 |9 H) E6 D, k7 e& R  /******************open screen clear(开屏式清屏)*********************/3 r4 [6 T! I( W2 j

, B% W3 M' f* p' B3 u3 ^  void kcls(int x1,int x2,int y1,int y2)
" Z( X+ s" [$ \  n- W  {3 \0 m9 I/ F. t# O! c9 O
  int t,s,i,j;
" [& x& i; Z7 U  j. z  t=s=(y1+y2)/2;
8 Y) C( V8 Q9 n7 |! l3 j4 I  for(;t<=y2;t++,s--)
0 Y+ Q5 y& U5 f0 _( |  q  for(j=x1;j<x2;j++){
+ A6 p; h& M% x% l# J) A  goto_xy(j,t);
  m, N; d" H4 X( y4 Z8 ?  putchar(' ');$ P# u- {7 M; z1 X
  goto_xy(j,s);
, f' q, d; H6 U$ H$ F& G. o, x( z$ l  putchar(' ');* p* y% P* j* @( F
  delay(10);6 \" r- ^& g6 E/ _& d. y
  }
- h0 X( J" p# [4 J* H+ J) M  }
. |% m" r3 g$ }  /*****************close screen clear*****闭幕式清屏*******************/) D% k: [0 u& }) |
8 t' o+ T% v5 s1 c6 S: X, W: y/ L
  void bcls(int x1,int x2,int y1,int y2)$ @1 e: B! \  @/ a
  {
/ O. c6 r; k; K7 n* S3 u2 V  int t,s,j;
: c5 }9 X: V, x' S: M1 P  t=y1;
/ P( t+ z5 \  }  s=y2;2 D7 k9 B5 }  E/ p: `0 E! z: T
  for(t=y1;t<(y1+y2)/2;t++,s--)
8 s1 h" f( w) S9 X% I( x  for(j=x1;j<x2;j++){/ w( e2 L1 z3 c
  goto_xy(j,t);6 Z* M& a2 I! H+ f+ T
  putchar(' ');
' b0 L" D7 b0 r0 g  goto_xy(j,s);3 g. E  E- M) _0 R3 ]. p1 d! d
  putchar(' ');
( O! L9 x- `+ t4 }; @2 C1 w2 m  delay(10);
8 J+ Q. i: s" p  }: R! [' Q: C, X; V" {2 L) n
  }
6 k" e- L) Y9 P# I  /******************bottom screen clear(自下清屏)********************/; H& ]8 Q/ y* I- h( a

9 x/ |; r& u4 `, J7 @$ t- d! w& Y3 k4 i  void dcls(int x1,int x2,int y1,int y2)
0 V+ Z. \$ E% k  {
" `1 @, u+ j5 R8 W0 q, o  int t,s,j,i;
, m$ t4 \& p# L8 R6 k+ t/ Y+ E2 }  t=s=(y1+y2)/2;- I! Z/ u7 f6 ]
  for(j=x2;j>x1;j--)
- ~9 E9 H% h$ u9 O/ Z  for(i=y1;i<y2;i++){; j+ z4 b7 h( M7 x% i+ L: P
  goto_xy(j,i);+ _7 J- j3 {. v0 u5 Y
  putchar(' ');  T8 C9 d0 q( |0 E( Q
  delay(10);( h8 c& O1 x' A5 w
  }+ N6 f6 ]5 }" L2 V
  }
2 ^  ?9 N" ?. d8 f% c6 @  /******************设置光标子函数******************/5 Q! v# U4 J5 R) \. X
; b; P+ d( Y- U1 v
  void goto_xy(int x,int y)
. |* S. p  ^9 y: a. W9 v5 O! J3 q0 f  {2 T" S! y9 e- \, v$ D# R
  union REGS r;
+ i' ^! [$ }0 C" {/ m  r.h.ah=2;# l4 G( r/ S  [+ l9 b$ b. r2 n
  r.h.dl=y;
  B" O# P0 Q9 ?! e  w  p% ^, W7 }1 k  r.h.dh=x;8 y' {$ l2 f1 W0 @% ^+ d/ o' ?4 ?, ^
  r.h.bh=0;; J6 S. E2 }/ V: [. S: D' F
  int86(0x10,&r,&r);
% d+ i, ^1 h3 ~/ g' U  }. [" k: `% F. C0 u+ R4 K9 J

/ q. Z1 n: w: O" e$ g" S  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 ~( U) N7 _( J; s5 r) a
" h  H1 V: A2 U  void puta(void)8 T6 n; y  j4 a
  {
8 q7 G% ?% Y& X9 e) x  int i,j;( |5 R, Z6 {4 q: i
  for(i=0;i<24;i++){( [+ Y  h/ g/ a+ K0 ^
  for(j=0;j<79;j++){' i5 u8 R( g7 m3 p1 V6 B9 |
  goto_xy(i,j);
9 k8 |4 p0 d3 F! r  printf("a");
  X* J  c5 k; l4 W3 S$ U: z  }8 a! Y$ f2 s4 [
  }9 P1 B7 G. _1 g& W8 i8 t; A1 M
  }

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