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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% j; J- e  P6 Z% z% B
/ ^4 k' \% o' b, s5 C" J* V4 `  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& Y; `) o1 \9 Q* h+ T

. q( A7 ^# m$ o  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ G- z3 H: A: V: J2 ?0 Y$ s* s  子函数及演示程序:
1 g: x  `4 l- \; L3 I2 v7 J/ \' X6 Q$ a0 F# Z1 A0 ?( Z$ V# t0 R/ K) J# ]2 C
  #include<stdio.h>
( w) M* c( U- P  #include<dos.h>! F8 ^7 Y& v/ f0 X& C  o+ Z
  #include<conio.h>$ b. ~0 R3 e- S9 g' @; y" k

" m9 v& a/ w. o  U5 W! _- r  void goto_xy(int x,int y);! d& \- c3 g$ C; T3 F% R9 M
  void dcls(int x1,int x2,int y1,int y2);
/ @- z, F$ F6 J! _  void bcls(int x1,int x2,int y1,int y2);
/ Y$ O+ m2 S0 S- T* o; O; `2 ^$ P  void kcls(int x1,int x2,int y1,int y2);
% K6 T- }3 A1 m8 w7 `' P! k  void recls(int x1,int x2,int y1,int y2);6 D( y1 I& H& u- u/ |" ~9 s: V6 N6 M9 r
  void zcls(int x1,int x2,int y1,int y2);
- K- z2 r) W* S, W; @  H8 ~6 }0 ]; `  void puta(void);0 E- C- E3 \5 x$ k+ f8 v
; u- ?+ V! Z" X( P4 s. C+ }+ d  ^
1 ~5 D# O: P2 S7 P$ V- b4 q
  /*--------------演示程序---------------------*/1 ?: d$ j& @- h3 [
  main()
, f6 f; ]) e/ G- v  o. R  {
$ g4 ~* t' q  R% M# [; k: u; V  puta();1 R% ~6 t7 Q' K5 V  m  ?
  getch();3 m, s$ M1 {: g
  dcls(0,4,0,79);
+ Y  [# D0 s9 v8 D2 D$ V  getch();# c7 W# ^1 Q- K1 C
  puta();9 Z& I* z, ?" y6 F3 u
  getch();; t( @- I1 V0 [. h! p
  bcls(0,25,0,79);7 j! y9 j% E3 ~
  getch();
( q; C% S; ]; N- i; M$ o  puta();$ ~6 Q( E: n, z9 q" m! i" L
  getch();
2 C. e3 ^/ d+ l9 _4 A! w) Y  zcls(0,25,0,79);2 {5 s9 Q" g; p$ t  K
  getch();3 A+ `$ G) r( G
  }2 Z' v' v( i. a* \% B
  /*********center clear screen(中心清屏)***********/
1 _' k( m/ t2 Y  void zcls(int x1,int x2,int y1,int y2)
7 F2 g" I. ~  u2 e3 }% }  {
4 V4 y" ?! J( v* i" Z8 c  J  int x00,y00,x0,y0,i,d;! l8 j8 g& R2 v2 h- L' {, m; f
  if((y2-y1)>(x2-x1)){% T6 r4 X5 K' A/ U- a* E) c: `" Q
  d=(x2-x1)/2;# H* O; T0 G2 }
  x0=(x1+x2)/2;$ `4 D3 I+ n% f( Q$ I
  y0=y1+d;
! B& Y- e" @( `7 i6 y% z% E  y00=y2-d;: s' ~- d2 Z2 C" Q# h6 Q
  for(i=0;i<(d+1);i++)5 Z! m" s" g9 e. D
  recls((x0-i),(x00+i),(y0-i),(y00+i));
1 X) j0 I" o9 K$ n  delay(10);, R% k: q5 L1 \; F% }* s, N0 [
  }
# F) s! @- D' h" b( K  else{
( `2 G# |& x0 ]- I, k" s+ X  d=(y2-y1)/2;4 O; E1 C  r, q0 `; p' e
  y0=(y1+y2)/2;
& o5 |3 D5 g- U' W  x0=x1+d;$ o1 ~9 H' i5 H9 I" M/ u
  x00=x2-d;) A% }' }: d# h4 {9 {
  for(i=0;i<d+1;i++)
0 M$ g. l$ V& w% g- ?+ Y7 ~  recls(x0-i,x00+i,y0-i,y00+i);; R5 U5 G8 @; z% v5 H3 v
  delay(10);8 _6 C% ]; h" Z, {7 c" o
  }& v+ _, v' d, s6 o6 s
  }3 Y3 S0 {1 q% l; c8 I1 C

; [0 c: t! q9 U- J, N5 S  /************* clear rectangle side(矩形边清屏)***********************/
$ R! O# z( `/ w8 A" ]' i- ]1 {$ F, r6 S7 L9 U
  void recls(int x1,int x2,int y1,int y2)/ i* ~$ u6 j3 e8 ?; `
  {
$ F; t* J( x. G. c( ]  int i,j;- |- [6 L! |2 |& j9 _
  for(i=y1;i<y2;i++){+ i% z7 H4 Z7 u4 j
    goto_xy(x1,i);" L9 [/ k' r/ |$ N
  putchar(' ');
9 d9 ^. O" ^* z/ L8 B  goto_xy(x2,i);
  E) ]1 X7 T- }' a1 _, G& T  putchar(' ');) T" }# d7 V* O2 p
  delay(10);' C7 w# h+ {: I' N
  }
; |, n% Z4 i7 n2 X  @  for(j=x1;j<x2;j++){
3 d9 ~2 N+ z7 {5 w  goto_xy(i,y1);
3 h0 S. B' ?2 W( q- _! }  putchar(' ');
+ v* Z  i; ~. r$ Q& `( Q  goto_xy(j,y2);
+ {: t9 ?3 I6 U0 f/ T% Z  putchar(' ');9 i" @$ v8 |4 f* \9 h. D& E
  delay(10);
: j/ J6 y" u- R  }+ Q0 T  a1 j+ i& N
  }
' J; N( F) z7 a' X  /******************open screen clear(开屏式清屏)*********************/9 ~# v6 j; z+ l3 Y3 ]7 @

! h4 @6 h: ^$ K: z7 M, a  void kcls(int x1,int x2,int y1,int y2)7 l- b& ~" g9 B2 T+ t% `
  {8 w  q. V* K- Q/ ^
  int t,s,i,j;
1 i! C2 G2 M# v* o  t=s=(y1+y2)/2;% r" B( Q; d" p3 }' v  D
  for(;t<=y2;t++,s--)* f# N) g8 I$ f  E/ g8 X) P( V
  for(j=x1;j<x2;j++){' V  E; g6 S# F! n2 w9 x+ u5 P
  goto_xy(j,t);
. O+ w. i( V" Q3 A  putchar(' ');
% j: U+ W, }  ^6 c# C  goto_xy(j,s);
0 H7 {: {: N- y* l4 Z3 n  putchar(' ');
2 R5 s* R0 D% L; c' z6 {+ y6 f  delay(10);
. w) V/ S7 W$ ~! U& N  }
0 Y! b0 Z' O( t- z# F  }1 |6 Y0 X8 _$ M
  /*****************close screen clear*****闭幕式清屏*******************/
! f1 z1 [1 R7 j/ v, y
) X& v/ Q6 ^3 {3 @1 o  void bcls(int x1,int x2,int y1,int y2)" w. X$ R3 T/ u$ i
  {
# S. n' d' f5 v( Y5 F  int t,s,j;6 M$ Q. B3 R% M, P* Q
  t=y1;
8 Q/ Q& i6 b" f2 D  s=y2;
; Z5 R5 S% ^& V8 x3 m* `  for(t=y1;t<(y1+y2)/2;t++,s--)
- B. i4 c& @4 p8 r7 b" |- u  for(j=x1;j<x2;j++){
2 z9 a: _9 `! q9 x9 v. `0 E' Z  goto_xy(j,t);' R& M6 H7 V4 Q8 ?+ t: c
  putchar(' ');
+ C1 J+ J9 _, F6 }; y+ r+ d& a  goto_xy(j,s);
+ S/ v5 H" d4 d  putchar(' ');
! T7 B, ]/ ~  E  delay(10);6 G/ W5 x* m& d0 x8 j6 t
  }2 v0 g% C- E% ?4 y5 ^' e4 [  U
  }
& J  I0 e# K/ C# L  /******************bottom screen clear(自下清屏)********************/
1 u3 E& c1 I. z3 g! |
. v. c* C1 n8 `: _! a4 M% s. f  void dcls(int x1,int x2,int y1,int y2)
# N' t# }& o* @  {
# c/ v( E4 z' ?  Q9 C  int t,s,j,i;
- x. x, m! x9 v% {$ `( x  t=s=(y1+y2)/2;
# b" h  ~" l0 ]6 A  ^5 A  for(j=x2;j>x1;j--)
) u* K# G. m& M) }  for(i=y1;i<y2;i++){
" |4 t& U; K6 Q  goto_xy(j,i);' D, O5 c+ Z0 ^2 |
  putchar(' ');/ e6 a' y$ z! w7 k' k' b
  delay(10);  V! ~) h1 k* _  q
  }3 [7 l8 U: m# M
  }7 H. i0 ?  Y' W2 }1 u; U0 ?
  /******************设置光标子函数******************/9 ?: q9 g: a: U' e. p* l% y

* {6 Y% e6 s- r3 h% t# i% C. v  void goto_xy(int x,int y)
+ N3 `9 {0 `1 I8 l  {
# s4 @- D2 F2 q7 E( W  ]% A  union REGS r;
* [5 O# M+ k2 Q+ E  r.h.ah=2;% _2 J" r4 h  {4 C. Y
  r.h.dl=y;
* K# Q; ]8 p* K# I# G7 q; M8 s" d  r.h.dh=x;
$ b: \. O. W/ o/ E3 M  q  r.h.bh=0;
6 z: h: @) P* @3 V  int86(0x10,&r,&r);
- ~: S! r" a) T1 Z" o  }9 ]. A! [! w2 T* n& \

6 s3 s4 u( Z0 O" ]9 a& ]% F  /**********************在屏幕上打出一连串的a字母用于演示程序******************/! ?$ a. r0 q' S: t

) k' i4 r/ J' n- A8 `0 Z9 x0 o1 h3 V  void puta(void)
  }' o3 r1 ^9 \& i4 M1 F  {
' x- z! H# p3 ]1 G/ X  int i,j;
/ H1 I4 |& ^2 t; R- r  for(i=0;i<24;i++){8 z8 f7 g4 g/ H& `& |+ ^
  for(j=0;j<79;j++){( d+ G, Y5 ~/ b4 }1 ]+ ]. W
  goto_xy(i,j);
: b9 f8 \- X- e: q  printf("a");
% a. D1 x2 y, t' t& P  }/ P$ s$ n7 O: a3 K+ C# \/ n7 W
  }
" o% R! G, B7 l7 u" @& L  }

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