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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* K4 _! Y) {1 R( c  R
' d, G  \5 D5 C% a  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 V2 ?5 ~  w  s
2 d3 q( j" l/ _! [+ r' {) I9 S  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
3 B$ x) b! t4 e2 D$ o3 L& f  子函数及演示程序:. X. m3 a5 Z7 g' E% x8 I

/ K: w& }+ ]+ G# f& e  #include<stdio.h>) X" g- H/ Z2 d* g; F& @
  #include<dos.h># x4 g, M& m, L7 C/ P* G
  #include<conio.h>
% d2 f" h9 c0 }2 b! N* M/ {" ^+ z- a* [7 y% m* x7 s
  void goto_xy(int x,int y);
5 O  o9 z; a6 f3 S2 t+ c  void dcls(int x1,int x2,int y1,int y2);
# B. f1 z% X% D2 B  void bcls(int x1,int x2,int y1,int y2);
9 v4 l+ Z7 R; d/ b' I( F  void kcls(int x1,int x2,int y1,int y2);; J! u0 T; X1 ?  v- y0 t
  void recls(int x1,int x2,int y1,int y2);
, y$ w0 u  ~  _) Z! C: }3 C  void zcls(int x1,int x2,int y1,int y2);: K, N6 U, e3 s' A: c6 Z
  void puta(void);7 W4 }" w! R4 G. v6 o& p

/ K$ O0 Y, h8 e$ t& K* }6 p  j7 P3 W
  /*--------------演示程序---------------------*/  x& s& G- b( ]5 C1 K7 W
  main()/ m8 \' l3 {$ s+ w. @
  {) m) d. h. D: V# A) m
  puta();
; A! V+ Q0 }: S5 _2 M# g" v  q  getch();3 O: |- }) u8 _0 S6 r5 G4 [2 v5 I. @
  dcls(0,4,0,79);0 t( y- p4 t% ~) s/ F: W
  getch();
. [+ @4 g. Q" r( v  puta();" f& M6 j) o9 L* h0 o
  getch();  u. {1 ^9 F( M; D: m- m) i. G7 L
  bcls(0,25,0,79);
- x) r  |& ?3 X4 Q  getch();
. K! G9 r) s' m$ B; P  puta();
, Q: H" N8 Y4 S7 G" D, ]" [0 A& X  getch();
3 w& A) l+ n( Y2 G  zcls(0,25,0,79);6 ?2 U2 `. q& G/ |5 h
  getch();6 T; |( i& K, l
  }
6 w9 y" ]( ~4 g6 r% F: ^+ i! ^  /*********center clear screen(中心清屏)***********/4 O' q% z4 n& W1 @4 i
  void zcls(int x1,int x2,int y1,int y2)( T  H+ ]& j- D
  {
1 O3 ?8 [# E8 y+ o4 V  U' G  int x00,y00,x0,y0,i,d;! X* ^1 K% Y8 s" h" q, V) ^
  if((y2-y1)>(x2-x1)){- t( l: e* O$ D$ H
  d=(x2-x1)/2;8 ?; Y3 O0 v" P1 |
  x0=(x1+x2)/2;% b$ ]$ n6 z% T# c! U
  y0=y1+d;( I% w) w: S, z/ }, h0 Y
  y00=y2-d;0 b" f3 ]. S4 X2 ?. M! _  C% X
  for(i=0;i<(d+1);i++)
- f3 J& ?* M( Z7 M7 v2 E1 K+ Z; z* r9 y  recls((x0-i),(x00+i),(y0-i),(y00+i));- L+ C: [+ Q1 C: w
  delay(10);
2 L0 A6 c- j5 e3 }* F* s* f  }! ]2 n. z  e! z+ Y
  else{+ F6 I. K/ G5 G
  d=(y2-y1)/2;: o3 L: j- {. u
  y0=(y1+y2)/2;
1 c6 n( I; j/ X1 G  x0=x1+d;
" _! \% H: I/ o1 N  x00=x2-d;
2 ]( ?+ Y9 E' {* Y2 O. U  for(i=0;i<d+1;i++)
8 _% p, j2 b# ^) O) Q+ x1 J  recls(x0-i,x00+i,y0-i,y00+i);& Y" e$ ]! g5 {2 L& m- B
  delay(10);
; }2 b& z2 q$ T) S1 g2 J  }
4 }2 o# Y+ I. m5 x9 D  }6 Y. R6 Y9 `5 A& \" p
) B" T% t, A9 F' Q$ Y- i
  /************* clear rectangle side(矩形边清屏)***********************/' w2 `; r! ]7 l2 g, x' M/ |5 E
4 s0 n3 H: k$ c' Z( ^
  void recls(int x1,int x2,int y1,int y2)/ z0 [* D" Y1 A
  {
$ s% Z% Q' j5 x! j- T; S! t  int i,j;4 |' _6 r  E0 U; \9 P, ?% T3 G6 s
  for(i=y1;i<y2;i++){: `8 e" u" w5 o4 V4 U
    goto_xy(x1,i);2 [7 w( }' l' h8 m4 R' a
  putchar(' ');
  S7 q8 x$ a* u0 L  goto_xy(x2,i);
; T# g2 N) m8 ]4 I/ ]5 N8 T  putchar(' ');
+ \( F3 C' n# x+ k  delay(10);
; W& v! n. W: K/ k) q5 k9 F) K  }9 l3 E! N4 J% Q* E: g
  for(j=x1;j<x2;j++){
, C) D4 X$ A4 h& ?( z  goto_xy(i,y1);
. g& d& b3 z# o9 A  putchar(' ');
* I3 {- ?3 }8 f! Q) g6 h  goto_xy(j,y2);
1 W9 O! \  R3 m  v# ~  putchar(' ');
- z5 Z3 B3 U3 T" M0 K# ~0 r3 J& {  delay(10);
$ u3 R6 ]  s4 L( Q  }( B( r3 @& c+ y/ f$ j, j7 y
  }/ ]& A/ Y' J7 _9 k: H3 O
  /******************open screen clear(开屏式清屏)*********************/
" X/ Z" I. j2 [/ X8 P% Q' Q2 p7 W3 G
: t$ x' ?# }$ b% \5 j  void kcls(int x1,int x2,int y1,int y2)
. F) B/ C& m3 I4 b" K6 k$ ?  {4 y3 U2 m8 w: P' t
  int t,s,i,j;4 ?. o3 ^' e6 `
  t=s=(y1+y2)/2;
% Y+ x6 W. s# O9 P; G0 T  for(;t<=y2;t++,s--)
. t  O- ^6 K5 d+ Y6 R* o9 q  for(j=x1;j<x2;j++){
" W) ^+ w: v! o0 B: \( U, O6 x  goto_xy(j,t);3 h2 J& Y4 ^' s( `
  putchar(' ');$ T3 [& V# M5 q' k3 c$ Y9 Q( {- b
  goto_xy(j,s);
& f- r9 }8 m+ k$ R  T0 W  putchar(' ');( x3 }/ n6 U7 h9 J
  delay(10);3 s5 |4 h5 F6 n+ o. C3 w
  }
8 q2 j- [" `3 r' S; s+ r  }# a/ c1 C$ F' s0 q9 q; P
  /*****************close screen clear*****闭幕式清屏*******************/( b" K! ]* S- F6 `
$ F; @7 T$ l& B( `  R* D
  void bcls(int x1,int x2,int y1,int y2)7 J6 f9 Y& R% t) T( i- E1 i/ H& n  h
  {
2 K$ K  g) a" Q6 t& U( J* M  int t,s,j;! z$ B. S! ]0 q. \- |$ {0 x
  t=y1;4 C2 P! h( X$ O5 }) `
  s=y2;1 H6 V6 [( k* m: k8 U  M2 W) F
  for(t=y1;t<(y1+y2)/2;t++,s--)$ l& r3 `+ l0 s8 @1 u; ?+ X( y
  for(j=x1;j<x2;j++){
1 b: B/ x2 g7 K  goto_xy(j,t);
: v1 `3 l$ H! k& l0 a  putchar(' ');
1 _) [) w$ i' v+ t  goto_xy(j,s);$ o' H1 h2 M/ K
  putchar(' ');) `$ I0 C# D4 n7 d. C' [! L. E
  delay(10);. o' B# C& i- V+ i; V( H
  }; \, v# k& ^- @6 f6 X- W
  }
. H( i$ I/ g# o& Q+ Y  /******************bottom screen clear(自下清屏)********************/4 S& L5 u9 P3 @  t

. @0 c: u6 N+ u* [7 K, @; \  void dcls(int x1,int x2,int y1,int y2)5 J- T8 m4 L: j. A) i
  {
! M! h# k6 U, t, J  int t,s,j,i;. G3 `& |3 o6 j# u! T5 o" e
  t=s=(y1+y2)/2;4 k! I0 g- ~% k3 A& u6 M* n* X
  for(j=x2;j>x1;j--); T/ x6 u6 B$ j' M% y
  for(i=y1;i<y2;i++){+ d* v( h  Z8 X) D3 z) U
  goto_xy(j,i);
' R% M7 a; Q! F' O; p, C- @  putchar(' ');0 C, J, X+ Q! s% ~5 q5 a' Y
  delay(10);
; }# D% a5 ^$ F3 N2 p) q. K  }/ ^2 Z$ q3 }9 h# d' h: h
  }3 x" ^1 }6 d7 T& ?) Z, u$ z# s3 B: Q6 y
  /******************设置光标子函数******************/) a3 S5 \% \6 `6 s$ f# `+ h7 ?

/ ]. ^2 U( D9 F9 T  void goto_xy(int x,int y)
" l2 x6 F2 U3 l) i) P/ M# c2 N  {
# }0 L; D1 E3 \7 l  union REGS r;
4 G* f' A6 ]2 T, _/ _6 O! n7 Q/ h. }  r.h.ah=2;
  I4 x2 ]" t! y  r.h.dl=y;
/ a0 c4 E$ {' b3 }, X  r.h.dh=x;
. E( i' K! N1 p+ J: p  r.h.bh=0;
0 M, z+ o! v$ C- z6 v+ y" N4 S3 i  int86(0x10,&r,&r);! o7 E7 e" ~+ j8 o- m+ K* R  J
  }3 r) I4 l: _$ d& A
3 ^4 Z( C" ?  g# ^
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 }6 ^. ]  I+ ~" s
  g- A4 l2 D) b; l5 @. W7 `/ J
  void puta(void)
( k) a! N! G% f* S  {
7 F1 }( V; w9 |" X8 M8 I% Z6 g* j( k  int i,j;6 Y# H, c8 u3 Q) Z' [/ |% v
  for(i=0;i<24;i++){
" \9 H# f; ?5 j6 e8 b  for(j=0;j<79;j++){* w) v# v* t2 r1 W: |  q7 l# u
  goto_xy(i,j);
5 [4 N( |5 W  a0 T. v) R% r7 g" Y  printf("a");
. c- N$ C2 U+ P) j* W1 R4 S9 l  }8 F; U1 }6 C5 N2 g) G
  }; Z4 z/ m* |1 f0 l- u5 @9 R7 V
  }

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