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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 A6 @) n- Q7 g1 w! [# ~9 B
4 U, v' B& x! T) v$ Q. p  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& a3 _+ S/ a: @5 I
* ]; E3 L7 K; T2 {! j! s
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ Y3 y2 u% ^/ R3 M  子函数及演示程序:
5 P0 R% f% G; G! }/ K9 d8 U# P( y
  #include<stdio.h>
/ l6 |1 N2 t1 S: j! C# K  #include<dos.h>& G6 u) O5 a' o
  #include<conio.h>1 @# u6 P( O, W! g% \4 S

; \% _1 `+ U% F* V3 l" z  void goto_xy(int x,int y);
! ~. t2 G; k8 y+ m7 a  void dcls(int x1,int x2,int y1,int y2);) w) @0 |6 l& E& R, V  M
  void bcls(int x1,int x2,int y1,int y2);9 Z8 E0 _; b  k2 S1 j( |3 j) ]
  void kcls(int x1,int x2,int y1,int y2);# F0 p  b: a  b9 T2 B6 S4 x, s- D0 i
  void recls(int x1,int x2,int y1,int y2);+ O% x% y* s3 h8 Z; S& j( M
  void zcls(int x1,int x2,int y1,int y2);6 `, S2 J* J  [1 Z! \) o
  void puta(void);( p$ O. U$ K9 s/ N' V6 @, {
3 n9 D; q+ L# ^$ z1 ]2 Z$ s- I

* I$ Q  y& v: n' G  /*--------------演示程序---------------------*/
3 B0 B: }  O: E/ e+ F  main()  N: N. _& D1 v9 a0 J# o4 Y
  {; ~, X' V2 O+ b; q
  puta();
6 C" n. k9 C8 O9 o* Y  getch();
5 I) k: H" {- ?, k& Z  dcls(0,4,0,79);# o  V4 ~" q8 v& O1 ?: M
  getch();
' z( e7 e0 o( T+ X1 O  puta();
$ p- y; i) Q1 ]* V  getch();! f/ n/ x( i- h: d* j
  bcls(0,25,0,79);6 [& ?& G2 y) m3 y- B
  getch();: m$ N4 ~% ^4 c
  puta();& n& ?! p2 m  u; T$ ]$ A
  getch();- a2 N2 ?6 ^. I3 \: Y
  zcls(0,25,0,79);
/ A; x7 r# Y$ R2 K/ G  getch();
5 i& V, X% t# C5 m6 [! ~9 C' q  }0 I/ B8 S+ K1 i- E0 Q# q
  /*********center clear screen(中心清屏)***********/  ?1 J" K2 B$ @- }3 F# Y( h. E  Y
  void zcls(int x1,int x2,int y1,int y2)
' h7 F4 Z6 N: x* L' X+ b  {
, L" u5 |& y# {5 Z2 [% k  int x00,y00,x0,y0,i,d;
: v$ `# B- X0 b* K' g9 h0 Y  if((y2-y1)>(x2-x1)){4 k7 Y/ O: A, c# I3 C: ?* V7 q
  d=(x2-x1)/2;
$ v2 k1 `) Z8 c) h' x" |2 U* ~  x0=(x1+x2)/2;3 [: E/ e* ?" v% W0 t5 A
  y0=y1+d;+ T. t8 D  B8 j9 p  b( g9 O
  y00=y2-d;
; v" ~6 H& J1 Y! H* m  for(i=0;i<(d+1);i++)7 k( W! }: o/ p, B, j
  recls((x0-i),(x00+i),(y0-i),(y00+i));
+ k4 ?& N/ U& c# ~1 Y  delay(10);
& f: _. Z  G; B  }: a3 i* E3 ]% i% ^. D5 i0 b  `
  else{" ~" }% X  ~" X
  d=(y2-y1)/2;
& }1 z' V, L( U( o9 E% J/ n  y0=(y1+y2)/2;
2 O5 F" ?1 Y1 b7 o& J  x0=x1+d;
2 g9 z* u8 C9 \" |( z+ Y& l  x00=x2-d;4 _1 P% F- m0 Q. F' `% \; P
  for(i=0;i<d+1;i++)
  N/ `: Z1 h& q  recls(x0-i,x00+i,y0-i,y00+i);
$ g7 f% V5 V& H* p, K, f6 p; q  delay(10);
1 U0 V- q$ u( H+ \+ L: i  }
; P! C7 D. v) k7 N) l/ S9 Q  }
' X. R, B* R* E$ n5 L$ X7 ~) G
2 E6 a8 ?) ^1 I5 q8 R/ r2 \  /************* clear rectangle side(矩形边清屏)***********************/
- j8 i$ d1 v+ [, b! S
: _6 f; q1 F* R  void recls(int x1,int x2,int y1,int y2)
2 X. ~+ N$ m* L* a  A4 ^  {
1 w* R+ c; W" v8 L6 U" c  int i,j;
$ ?4 |, ?( D7 J# a  for(i=y1;i<y2;i++){
9 P# k! R+ E2 J9 F8 _    goto_xy(x1,i);7 r  [9 P) r, E0 {! e  \
  putchar(' ');; P, z; n' a3 I2 [% b
  goto_xy(x2,i);
/ k" c  D7 c& m3 A" J# [  putchar(' ');( |7 U- ^3 k4 ]6 U
  delay(10);
) }: r) c; q+ k! r$ K  }# b0 i: e* \* x8 q# z9 U
  for(j=x1;j<x2;j++){
4 H$ b$ A/ G8 E+ G5 G. A+ Y  j  goto_xy(i,y1);  l5 r$ U% R. k' E7 u
  putchar(' ');
& E9 T. w, [+ |  X6 X# R4 t' H  goto_xy(j,y2);4 J$ z9 U9 u4 r7 d. \
  putchar(' ');6 Z9 R9 D3 ~8 X7 W& p  |
  delay(10);; a/ S/ w, [6 Y% q/ y
  }2 R. l7 c5 a9 m
  }
$ D: H( f* ]! b  /******************open screen clear(开屏式清屏)*********************/
- _+ a3 l8 J2 K
/ w8 C. `1 c0 _: D  void kcls(int x1,int x2,int y1,int y2)/ O; N, ?: p& H
  {5 l# s# k2 y( }) P! S
  int t,s,i,j;' O+ ^6 c0 q" q5 }+ i$ l
  t=s=(y1+y2)/2;
3 [! U1 J- s4 `( f; B  for(;t<=y2;t++,s--)
* j& i0 E& z' H* X  for(j=x1;j<x2;j++){2 J0 K# G' L# e) u. _  E" r5 e& d' N' B
  goto_xy(j,t);6 C" a, P( q0 d4 _: n! U
  putchar(' ');' n6 N* J+ b( r; A: o  s- o0 g
  goto_xy(j,s);( }  y6 ~/ R- N: k- h2 b! Q
  putchar(' ');
1 L  p, a9 n& n9 x3 x  delay(10);
7 {  d1 Y8 ^6 [% v) n  }, {7 F' e* ?! y: P& M: y
  }+ E& v2 q9 ^/ z7 e# B8 L% D4 ^+ b
  /*****************close screen clear*****闭幕式清屏*******************/
2 I8 L/ ?$ f  |% a& b7 y# A0 F* T; v& ^5 {$ c$ q8 u
  void bcls(int x1,int x2,int y1,int y2)+ n0 J) u  P, }9 n8 `: u9 i, @+ Z
  {
1 M* v; \4 C& W% W( G3 _  int t,s,j;: r2 [) q. c* t$ ]2 b
  t=y1;
9 @4 d: ~) U% n3 F5 N0 C  s=y2;
0 r! l$ X2 M& d+ z9 H  for(t=y1;t<(y1+y2)/2;t++,s--)5 B; z+ t! C2 f' y& s
  for(j=x1;j<x2;j++){  S7 B% v% i$ j
  goto_xy(j,t);& |! E/ J2 s( d
  putchar(' ');
  y( J% v+ N, K3 J* A) G) P  goto_xy(j,s);) p2 c4 e. O8 r0 a
  putchar(' ');
+ l  C' H* T" s* L  delay(10);  S# A$ j' R, G  Y" m- G
  }
+ F  J1 H8 |2 V/ p1 l* `0 g( `% B$ Q  }
, K! M& T. ]/ Y; X/ B/ ]' X  /******************bottom screen clear(自下清屏)********************/; d; o7 f, j* y6 w  G; N

6 p1 r  c( h7 f, d2 Y5 m- B) B  void dcls(int x1,int x2,int y1,int y2)
3 x0 X/ o/ l4 e- g# A/ t- _- ^  {; }- \: G7 w$ M
  int t,s,j,i;, |9 R! `; p, C/ U/ |
  t=s=(y1+y2)/2;6 r) h  I1 h6 |2 n* J+ d
  for(j=x2;j>x1;j--), S; ~$ e& K9 [4 X( h
  for(i=y1;i<y2;i++){
7 N6 [* F* B1 |* [  goto_xy(j,i);
' h6 a3 H- f8 E# i4 {+ ]  putchar(' ');- L3 U( t/ X' d. O' m4 i
  delay(10);
6 y  {. O' T* S7 {  }" J3 Z% t; e9 f$ E- i  F2 L
  }, K, n* E9 T9 P1 x, U
  /******************设置光标子函数******************/
1 z/ E" Y/ ^+ K
1 P, }; i* g) c6 R! p& ]  void goto_xy(int x,int y)
0 ?! T$ L, ^: b" M# R" ]: h  {& r2 Y9 z7 M. e9 Z1 w, T+ S
  union REGS r;
2 [% T- V7 E+ z7 k, ~( t/ O: A  r.h.ah=2;
8 Z8 {4 i& f5 T1 o& K  r.h.dl=y;% {8 b$ s1 R' C2 x
  r.h.dh=x;
: O, C3 \6 i, f% n6 q  r.h.bh=0;
! ^* K2 X1 q% ?6 Z  ^  int86(0x10,&r,&r);, p, n8 P* x! k: |4 N8 G
  }& y7 f! L+ v0 @& b! l1 v/ i9 {; {

! }0 b# C2 t8 g4 |2 a. _  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 J+ m- b/ i( W, F# E( T$ O5 u% x! b: U4 z
  void puta(void)
1 [! U8 ]  y* J8 V* G5 e: T# I  {
3 T3 U+ A/ ]+ o! s) f  int i,j;% ^6 F" Z) @+ ~/ O6 z% X
  for(i=0;i<24;i++){
, k2 @6 D: m( U8 `, E6 }  for(j=0;j<79;j++){  L# V0 Z1 h5 E  d9 E* N
  goto_xy(i,j);
, S2 k7 ?; I8 {7 y/ L  printf("a");
/ V5 ^7 d; b( K  }
0 S4 c: h# ~0 Y1 E6 k: o  }
/ E. I! s# i3 J) G  }

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