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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
. @, M2 h$ s  s. F
: Q/ r' w/ X2 v; m  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里2 E/ f% E: i9 k  Y' ^2 Q% N- g& K. }
- Z, o! _* o- T3 U  n) S
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 i4 B# J% B3 L
  子函数及演示程序:! G' L' g5 O- _9 Z, U- a5 E& a
" a1 t1 ?9 i1 y* J) G0 _/ s, x+ H& b
  #include<stdio.h>% ~3 n, t, K7 W/ \4 o0 K0 H
  #include<dos.h>
+ T! p4 y1 d: |0 _! h  #include<conio.h>  v0 f2 ?( Y; i9 E! O6 o

% Y  @& q# O6 L3 S2 M; |  void goto_xy(int x,int y);
) o9 P6 n/ k4 b3 q$ ^. u  void dcls(int x1,int x2,int y1,int y2);
+ ]5 w' O' Y4 y2 b/ k  void bcls(int x1,int x2,int y1,int y2);
, n/ U. r# j) `. T- d- [  void kcls(int x1,int x2,int y1,int y2);# I9 C1 k" `9 v2 P! j* Y- W: I, S
  void recls(int x1,int x2,int y1,int y2);% i. o% I0 t; F! `
  void zcls(int x1,int x2,int y1,int y2);$ ]) T  x! N" i0 X0 \+ O2 \" k
  void puta(void);
! w- ]: H6 U! M5 Q' U) t4 G+ W* f: d1 O  l$ ^0 O
2 B3 s) L3 {5 p2 R" O# E! C  {
  /*--------------演示程序---------------------*/- h4 R' o5 D' u6 A9 E* f( e
  main()
) g6 h$ ^6 Q: s# C0 y/ m  {5 u  k* ?+ u7 _9 d3 W' A1 q  Y9 e
  puta();
+ h) U4 S* x" M  getch();
) `6 ~# i6 f8 z6 e7 j/ e- d  v4 c( t  dcls(0,4,0,79);* g( ?% L$ I1 Q* ~
  getch();6 N4 K1 C  b6 _8 x# b1 f% S9 I
  puta();; P  F: m: ?% ~7 ?
  getch();; P& r4 s. p, d0 }* m
  bcls(0,25,0,79);
+ }/ }3 f4 T3 G  \3 x9 y4 D' y  getch();
9 k" S& j; E( D. w  puta();5 H, L  a5 R( _5 y0 q! Z- |
  getch();
, Y, I& {. s: t8 X& y. ^3 P  zcls(0,25,0,79);& U  d) w& t/ M1 }  w
  getch();
( ?5 t% o! t/ n& m2 H  }
8 C6 u& a$ M, j1 v; x  /*********center clear screen(中心清屏)***********/
$ Q2 p$ m4 ]# i5 x6 Z- I0 }  void zcls(int x1,int x2,int y1,int y2)
7 I( T, d. J# F# Q  {
  B8 y8 u/ s+ D7 Z; Y0 j* t  int x00,y00,x0,y0,i,d;0 _5 U' ^+ ]: V) a
  if((y2-y1)>(x2-x1)){3 t# |# d) t" [  \6 @9 v
  d=(x2-x1)/2;' S' e1 w) u% u* x9 g, a
  x0=(x1+x2)/2;
* h7 H9 N% }! L# w1 g2 c2 R  y0=y1+d;* l3 e" H# z( i! r
  y00=y2-d;$ P4 P$ u: E. I; l5 g0 g. E
  for(i=0;i<(d+1);i++)5 W4 p2 n, a9 M
  recls((x0-i),(x00+i),(y0-i),(y00+i));  Y' P( s, o# p( Z/ @+ K2 |
  delay(10);
2 n- u- |# Z" d- P  }
8 \/ I+ W& V( M  else{9 L# p9 W* U* K
  d=(y2-y1)/2;/ c& m5 v" j$ E0 B
  y0=(y1+y2)/2;
/ E5 J  F. z! C! {) ~  x0=x1+d;
2 [/ k/ A* _( e3 j  P! v  x00=x2-d;$ R; H) B* J2 g; I, j3 W, r
  for(i=0;i<d+1;i++)$ G4 S5 l1 i$ S* X! `$ [* ]
  recls(x0-i,x00+i,y0-i,y00+i);0 L1 o7 e7 u# f4 I1 n# \# t! G, z1 C/ ?
  delay(10);1 d2 F/ \; g. t1 O; \/ N/ ^
  }# o$ ?- v" H2 m+ n8 W0 b" w% p! k3 f
  }
/ L  ~  o- H7 x0 v: O% @( @
6 Z# d$ V" ]5 k& Z3 g/ F  /************* clear rectangle side(矩形边清屏)***********************/4 `1 H; m4 w, W( ^

, C) U' `; f6 M  void recls(int x1,int x2,int y1,int y2)# ?, w+ [% U1 c7 E6 }2 {4 A* j! P4 X
  {8 M8 j' D) R6 l  ~0 {: a
  int i,j;& v. F6 B" j& O
  for(i=y1;i<y2;i++){
0 C6 G8 P0 h5 L, T" `- H    goto_xy(x1,i);
# `8 a) B" W. T9 z8 _$ j  putchar(' ');
7 m; g7 z, l& j* C  goto_xy(x2,i);( C' @! K- s1 F, g
  putchar(' ');1 @: a  M* z0 g' l
  delay(10);
4 Z  G- u5 J; X$ F0 y- C  }
* V5 x6 B4 P' R. \. E" U  for(j=x1;j<x2;j++){
* V  B) S5 [9 U/ E6 L- u  j: C  goto_xy(i,y1);: g+ U1 q) D: B, C, [4 u6 a) ?
  putchar(' ');
) b9 H( ?) M  c) F  goto_xy(j,y2);8 @% j! ^1 a0 d6 b; }+ [8 G
  putchar(' ');% A. d- Z$ Y  h6 c( t5 ?  `$ N
  delay(10);
5 ]& N3 m* K5 ~8 \0 @' c9 ~8 y  U  }
* ?& N6 R& f- r% E6 z/ T9 P  }4 p4 I. g0 E7 |9 ~+ ?/ m7 V
  /******************open screen clear(开屏式清屏)*********************/
) x4 ?/ [5 ?' A3 j) \9 a4 h/ U, i% _; {/ B( I! \. j) L" Z+ B4 A# K
  void kcls(int x1,int x2,int y1,int y2)
3 O& c  o* l" k) g* g# e  {( L  p. V0 X5 S% b7 P, b# ]  }; y1 K0 T6 P
  int t,s,i,j;
2 K3 }8 F. h, y, l  t=s=(y1+y2)/2;+ l  t6 y; s! [9 K: _3 ^6 C
  for(;t<=y2;t++,s--)
7 I; I2 @3 p! e, M" [. R  for(j=x1;j<x2;j++){7 E# B$ m- j0 Q' o: a
  goto_xy(j,t);7 o0 O8 K1 w& `6 \: S/ [
  putchar(' ');9 i' G* J1 k: I' D) G& ~
  goto_xy(j,s);
) i' e0 L% D6 G5 |  putchar(' ');6 A. j) z+ d) T* ^
  delay(10);4 v3 u  t$ U7 V" v3 d# Y3 j
  }
! o9 j# J& a) `1 G! b  f0 [3 s+ G  }" ^" s7 i: R+ W0 H
  /*****************close screen clear*****闭幕式清屏*******************/6 _# O, p4 o/ s3 m% P; U' a
' o' b9 A0 u' b+ t" i* @
  void bcls(int x1,int x2,int y1,int y2)
6 r3 [" ^( b6 t  J3 ?  {; K; O$ m/ ^3 `7 Y/ x
  int t,s,j;
( k; c& A' n! V/ l5 _+ y1 Z- e  t=y1;" _! A0 o4 F  K/ c6 m
  s=y2;, d' y  G8 w. H: x: i( T9 G+ M
  for(t=y1;t<(y1+y2)/2;t++,s--)
) I; O: }' a& h. O+ d  for(j=x1;j<x2;j++){
; V3 H2 y; W  o! t; k  goto_xy(j,t);7 R6 m2 m$ m2 z+ w# A, _
  putchar(' ');
4 r; B: z9 y' D( p( i  goto_xy(j,s);) }! W) y! Q  J% _. s" C6 J) Y* J. v
  putchar(' ');, L/ k! N- P; `9 ?; U6 ]$ r
  delay(10);
5 @* O4 i% T' j& R0 V  }$ y* x$ Q1 O: b
  }8 Y3 S, G" i. Z/ I/ z
  /******************bottom screen clear(自下清屏)********************/) Y1 g3 z) f' W$ J+ r
/ Q' ^& f# j: z% u* H; i
  void dcls(int x1,int x2,int y1,int y2)
# |% L. l- ?( ]5 l/ }  {9 U0 {; }2 s5 w4 K$ j. s4 ]+ E
  int t,s,j,i;, n/ |; Z$ X2 l4 y
  t=s=(y1+y2)/2;; {& x* h: r2 d3 T& a
  for(j=x2;j>x1;j--)- [  m* x7 P5 g% j. X
  for(i=y1;i<y2;i++){* ^' R# r! T9 S3 ?! W) z
  goto_xy(j,i);# H% A7 m# m' M+ s& E/ [0 G
  putchar(' ');4 l. O. t6 u& K$ b: B
  delay(10);2 K4 h! ?4 U' c6 w
  }3 d" z& }; {) {, r
  }. v+ \1 @& c& I5 [& N
  /******************设置光标子函数******************/
. x: o# \* b0 R# \9 w  t, T1 M( R' ?0 z" W. ]
  void goto_xy(int x,int y)
5 Q- h* I) M; Z( o  {! N; c# Y0 O; _# L
  union REGS r;
2 w7 P1 X; D0 v) y  f; {  r.h.ah=2;; x0 z* i) Q" ~3 P4 F
  r.h.dl=y;) {7 F* o7 V$ S3 s
  r.h.dh=x;9 y/ F& z; a, i+ Y% n& V6 R
  r.h.bh=0;
9 f7 v2 r% i1 ~  int86(0x10,&r,&r);5 n. S8 m/ t; J7 Z
  }
' Q5 k$ y2 b7 I# |$ w
/ Y% f( {! V, X6 M  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 T: J$ `6 X- x( S

' u+ z8 Q" |) T0 ?3 ~: A! }. V. Q  void puta(void)" _) [. C! C3 B. Y3 q6 B
  {
1 w% x% `! o/ H4 u  int i,j;/ k/ \9 V3 E. r2 G$ v
  for(i=0;i<24;i++){- d) E: O, A0 z1 {
  for(j=0;j<79;j++){# S! T+ U+ f& I( y) ?5 z
  goto_xy(i,j);
4 T# v+ J$ A( }) L1 J& B+ d1 o  printf("a");
& b* w0 M. A0 P2 g" h  }
) q' I$ f2 L; H3 I# ~( H1 A  }5 [+ k& J/ c" \1 ^( ?2 P
  }

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