返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& Q. K- |6 G3 T, {  Y& }. G- V3 ~
( k1 `$ q+ [9 g( g6 m8 P9 u  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ [$ t# I  B9 r1 O+ \, w
+ t2 g" N5 E$ o! `) X8 t5 V) s  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 y) Z4 H) [8 j' a( D2 K
  子函数及演示程序:
% Y' m/ F' @) ?6 n3 L9 y3 p
9 Q3 s) Z: \4 u4 H4 X# J. j; ?  #include<stdio.h>
) k3 O8 v  l* J' k4 q, N  #include<dos.h>
* T5 v$ H" P' S1 ]5 |+ J1 S  #include<conio.h>, o, i" m6 f' E' r) e3 G" n) Q
! j+ ^+ }, g. S6 E# D7 _1 r$ M0 W
  void goto_xy(int x,int y);
/ K3 N( A9 W$ Y$ N3 {7 y0 j  void dcls(int x1,int x2,int y1,int y2);0 X7 n$ Z. c/ v  x3 T0 W/ D0 Y
  void bcls(int x1,int x2,int y1,int y2);
; x6 X1 p! i  P* I, V* l  void kcls(int x1,int x2,int y1,int y2);
$ Y5 s3 r. x* C# _; R& A  void recls(int x1,int x2,int y1,int y2);
1 _- M+ B1 l0 T/ Y2 C, I  void zcls(int x1,int x2,int y1,int y2);5 F, P+ \+ J/ |/ g% N( D: i
  void puta(void);( o7 Z$ v6 ?  S# i* T& H2 \
' c! s0 z/ {% ~' z

& m1 g( n/ x; m2 [: e( K1 z. z  /*--------------演示程序---------------------*/
+ Y* U5 t" p; @+ n4 ?7 x5 ?" z  main(); }* b0 N$ D/ P. d/ U0 f. X' M
  {
1 i/ M  t4 s8 w, i  puta();# l9 r( L$ N5 N( c( I. l3 @7 N
  getch();' I! E2 R3 }" Z4 f5 Z# }
  dcls(0,4,0,79);
  x2 O' s1 n6 N" t4 ^  getch();5 j( }% q5 Q! L" u
  puta();
4 _1 S9 f* L; Q. e' r- X' @  getch();
& N. {2 `0 @6 q$ e2 ]  bcls(0,25,0,79);
- N" g9 N/ w0 O2 ?5 u  getch();
2 E; R4 r$ R4 j6 ^  puta();
4 O$ G% G) a  S, U; l' h  getch();+ o7 P& H% a/ M8 B
  zcls(0,25,0,79);5 \2 g  \3 ]7 O) A3 k! T
  getch();! f: l8 f. p  k0 M2 {
  }7 ]% H6 Z3 A. W2 ?5 a/ i
  /*********center clear screen(中心清屏)***********/
# s3 p& M7 d- n, e# h9 g+ ^  void zcls(int x1,int x2,int y1,int y2)
5 w! P; L6 A+ w  {6 [8 ^: {6 k/ p$ d
  int x00,y00,x0,y0,i,d;# V7 _' M) a+ ?$ E% g& F
  if((y2-y1)>(x2-x1)){3 D, x, n; o2 R' J0 c; |
  d=(x2-x1)/2;
% K& x7 O: g0 }/ U0 J$ ]) M  x0=(x1+x2)/2;3 ?- s& X: J9 H# a( u
  y0=y1+d;4 y6 p- h0 z4 j# R, h& @
  y00=y2-d;; M- V# s! [. t+ J5 |$ ]; j
  for(i=0;i<(d+1);i++)
1 f$ I( R: n+ c$ K  recls((x0-i),(x00+i),(y0-i),(y00+i));$ n8 g  B* U8 x; _) R
  delay(10);- @1 Y7 B/ ^. e3 r7 ^
  }: F1 i1 |% G2 ?; y* ?: Q; l+ x
  else{
6 q8 L4 q' `' s: A( q. ~3 X$ ?  d=(y2-y1)/2;0 p; c% [* i3 K" J
  y0=(y1+y2)/2;
' J4 U5 h" x6 q) m2 z( }3 m  x0=x1+d;
8 Z) c3 W  R/ r  x00=x2-d;
8 P0 B2 g8 M2 X0 k& x: n( R3 c  for(i=0;i<d+1;i++)( {( S( p2 P+ h
  recls(x0-i,x00+i,y0-i,y00+i);
* O4 o. o/ N1 a) u3 \  delay(10);
0 z: V- e& b$ I  }$ @' f% a7 z/ P9 F4 k2 Y
  }
; d) C& x, \  S3 x, t  H+ Z
7 [( g% k8 B' t( n/ t# j  /************* clear rectangle side(矩形边清屏)***********************/) @& b5 @5 O4 }' f( J* o7 |
* _& V+ I6 X# J
  void recls(int x1,int x2,int y1,int y2)
& Z* S) x7 T1 u8 Y0 d5 Y$ N  {% j3 v% \) [5 N; |9 G9 Q1 @/ |
  int i,j;
5 K' U# [7 Y% \+ z5 V  for(i=y1;i<y2;i++){" \* }# ~; s6 N/ I
    goto_xy(x1,i);9 Z, r& P' `8 s7 O2 z
  putchar(' ');  n* e+ S1 ?  C; U* o9 Y. b5 n9 p
  goto_xy(x2,i);
. Z* q/ Y( \4 j  putchar(' ');5 s: Z) m# B: z
  delay(10);$ ~$ r* k6 x" O& O  p6 \3 S; z7 h
  }# `% j8 n3 S9 m/ f7 T
  for(j=x1;j<x2;j++){
) _) A1 [( Y/ Y& L  goto_xy(i,y1);
; Y$ ~7 Z: ]7 I6 Z+ C+ [  putchar(' ');- o6 v3 y# q( X8 E
  goto_xy(j,y2);. |  O+ D- p! K) @
  putchar(' ');0 M# c/ T3 R) b" d+ k
  delay(10);
( n( Q  F  `! w; B# d! E7 G  }
- q6 F& |6 d  o- L# W  }2 y/ ~% H! c" z9 U/ Y& s
  /******************open screen clear(开屏式清屏)*********************/
- W0 j! {$ m& I; g2 w  m/ X+ S0 o1 Z8 i! l9 D- a
  void kcls(int x1,int x2,int y1,int y2)
3 b' z/ z6 C( Q) v. J* ]  {* T3 Z. E; f5 z/ I1 q
  int t,s,i,j;( L7 f' R+ p9 P' c6 o
  t=s=(y1+y2)/2;
  t" @! S7 x. z$ H  for(;t<=y2;t++,s--)$ u/ \% @9 X6 N% Q- `* I5 n
  for(j=x1;j<x2;j++){
  J$ p* E, Z' D  goto_xy(j,t);- `; h% w8 W1 }1 P( r
  putchar(' ');& Y1 z# `# `2 t$ K7 l
  goto_xy(j,s);  z0 e5 C$ F3 W  b
  putchar(' ');% a3 I, s3 X9 K, ?
  delay(10);1 O5 q- _5 j& k) K6 P! F3 |8 p
  }7 H9 S5 K5 P6 P# v
  }
( A2 G) e3 c) i5 Y  /*****************close screen clear*****闭幕式清屏*******************// i0 k5 p1 n" h" {' V

7 q# A' T/ N( H5 D: z  void bcls(int x1,int x2,int y1,int y2)
" t1 s% q% ~8 o6 ^8 @5 [4 a6 U  {& F- ], ]7 O  Z4 I0 [. H. D
  int t,s,j;
9 Z1 m, d+ q7 |1 v: M  t=y1;+ D8 y& W4 R. f7 g# t5 u. g
  s=y2;
! c& G2 }8 o0 R. a$ R1 H  for(t=y1;t<(y1+y2)/2;t++,s--)8 v" R( M4 H5 m# H3 W
  for(j=x1;j<x2;j++){3 ~- L  \" K, W' _3 w/ q( ^7 u
  goto_xy(j,t);
' ~# Q& ], q  N& p* d9 f: e  putchar(' ');5 O; J) P/ R6 i  Y1 X- K0 D1 ^
  goto_xy(j,s);( t! r! j, ?3 ?6 n& s! K0 I/ ?
  putchar(' ');  S1 V/ f- D) @2 p/ @- ?
  delay(10);
+ v# P  k6 K# ?; c+ L  }
1 j: R# }5 E- A3 L  }- Q1 q- _! Z% }8 Z
  /******************bottom screen clear(自下清屏)********************/
) d- F7 m* W9 T) f: t+ N, i4 Z  v# f9 L( Q
  void dcls(int x1,int x2,int y1,int y2)" d0 n, J* t, `9 Y. X$ ?# |
  {3 Y5 c' j. q. r$ B( X
  int t,s,j,i;
  T  r- c5 }/ X8 k# g7 e4 e6 P  t=s=(y1+y2)/2;4 _, I$ O0 B8 D' J/ x2 i
  for(j=x2;j>x1;j--)7 C% v9 S2 |: Y) x
  for(i=y1;i<y2;i++){1 R8 G3 H9 @* f
  goto_xy(j,i);3 W+ v. |( u6 f
  putchar(' ');
( l  J' p* p% R  delay(10);
; e) `+ C! R9 ?) J9 V. w  }
8 ?0 Q7 {/ Z0 g2 Q8 R  }
( T& h$ y9 H  ^/ U% U; I& k  /******************设置光标子函数******************/
+ j# Y2 t5 x/ U, U, |1 x: i) d3 P: N5 G
  void goto_xy(int x,int y)
$ a# B1 f0 F% `6 e  {
' P& y! Y/ K: A" h2 A% X4 P  union REGS r;8 D$ E% J7 l: H7 F. G8 C" \
  r.h.ah=2;
( x0 P5 O$ l2 |# V% f) `  r.h.dl=y;" r4 J1 i+ Y3 m$ y" F; ?* f
  r.h.dh=x;
) R" v) S# I) E# [# l" i% ~6 b  r.h.bh=0;4 j3 Y9 L. a, w8 A7 G% `1 k
  int86(0x10,&r,&r);
$ p% b; ]3 Y! `; G4 s  }: h4 m) g% {) W0 I' {

& q* h. x0 ~  D+ @  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% M, e0 P: r* t; K2 f4 o) ?- |: C" s$ G3 ^' {2 Y. u
  void puta(void)
  b# _7 \: K1 C* j# O, J" ^1 ~  {) P1 X# f" A& n1 Q. ?
  int i,j;
1 \# j$ @' _% |0 c" [5 B  X  for(i=0;i<24;i++){
8 m5 X  R0 L  V( k) T  for(j=0;j<79;j++){5 u* z2 g. V1 W0 T8 c; J) W# c9 A
  goto_xy(i,j);
6 d# v8 w0 p- A+ P0 s: l$ z9 T  printf("a");1 e2 K: {" C# e9 w4 ~7 B+ H
  }
" Y- K8 Q% W" X8 A' M  }
+ u6 {0 R* z& O( Q. ~5 j- m  }

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