返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, h5 A9 o( u( b

, I3 u7 D/ H3 p) `  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里2 t. x* h, _$ P+ s/ g0 }
7 \$ {2 b- Y" ]' T9 T. k% v" K
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 O+ `- f7 P$ [- Q" n# E
  子函数及演示程序:( o8 s3 }0 j5 ~, C: }
) G0 z  P; g5 O+ k+ C: l
  #include<stdio.h>
8 a) W4 u, q1 F  w, W8 R  #include<dos.h>
0 e4 Q& ~! X/ `9 w5 q+ E  #include<conio.h>7 J! `3 b9 |- U1 j0 N8 Z$ ]
' M  }2 X( N! K; Z7 \
  void goto_xy(int x,int y);
3 a- }# ]4 L/ I* _1 V  void dcls(int x1,int x2,int y1,int y2);6 I+ {. ?! ?- b' o9 W; Z
  void bcls(int x1,int x2,int y1,int y2);
6 k8 a# ~+ p: `! ~* F' W: F  void kcls(int x1,int x2,int y1,int y2);
- E% F  m7 P) O$ K- t  void recls(int x1,int x2,int y1,int y2);5 x( m* F, p: Z: s) N: R6 Q
  void zcls(int x1,int x2,int y1,int y2);
+ U. V" k; L+ ]1 d1 n  void puta(void);
( j: g! d; w! Y7 Z" \6 ]0 x  e4 \  r! L: J' E, ~8 X% W! W
+ ?* T7 @9 c+ A1 h5 d# A( `# |4 a
  /*--------------演示程序---------------------*/" B2 K% W2 X3 e
  main()
, J8 o. r/ Q$ ]) s# R- N0 A  {
4 C7 R' E& L# z6 ]' I- M  puta();
' v3 [7 H) Z6 d* V* b  getch();
% V- r  O) R) c. B  dcls(0,4,0,79);
' Q. W0 i0 c( N  getch();
4 ?* F, k  L" j* M  puta();
5 w6 S$ v3 v3 M6 o) a8 L9 L* l; t  getch();
! g8 R# ]/ e( C) b0 r  bcls(0,25,0,79);
0 W  i3 j) ^. n; S  getch();
" \8 z: K2 a2 `1 o  puta();& C" S* c5 k' d: c9 x8 z
  getch();/ M  t( K3 X( Z) y
  zcls(0,25,0,79);0 Y* b& Y% v4 s/ G4 J; S
  getch();
0 v0 a! y' v. w6 z! W7 i5 X  }+ @" F, Q: l  z; X7 B
  /*********center clear screen(中心清屏)***********/8 x2 \* U5 r/ V! Y! N
  void zcls(int x1,int x2,int y1,int y2)
* W9 \. n- _: s+ p) u! E2 j: h; l; }/ X  {9 `' h7 |; v# Y) d
  int x00,y00,x0,y0,i,d;6 B# J% {0 V  B
  if((y2-y1)>(x2-x1)){8 t$ i' z9 v; n; P# K0 u( T4 z
  d=(x2-x1)/2;; b- d/ P8 I9 ?: [5 D3 m* f/ Q
  x0=(x1+x2)/2;
0 m+ n2 K- |& M1 u" r( }3 f7 @  y0=y1+d;
  d/ p3 t  O5 U+ w) F6 a3 ]5 b9 `) p  y00=y2-d;+ d9 C/ ^5 g* j9 X9 A6 E- n
  for(i=0;i<(d+1);i++)
; G7 P* O& U3 \  recls((x0-i),(x00+i),(y0-i),(y00+i));
  ^3 c2 o2 a% p1 z3 {! j  delay(10);8 h5 u3 P! z: r( g
  }
  G; h* ~  C" K* F8 |) h  else{, H2 w% c4 ~8 |. D) }/ p9 `
  d=(y2-y1)/2;+ s% _9 P. L2 I- R
  y0=(y1+y2)/2;
: ~" O3 f  m9 X2 D) h& G  x0=x1+d;
4 M$ t% S! J! w  x00=x2-d;% A! K( {, j  i) Q3 c7 G
  for(i=0;i<d+1;i++)5 o; b9 ]0 x5 Q% S" z
  recls(x0-i,x00+i,y0-i,y00+i);
- F4 H: c2 a! Y3 p  delay(10);! {% n! h! w5 [3 d  W
  }
! s2 T% M' H2 s) E* w0 {# q9 p  }$ d: |" }9 a6 P
" M0 t; d5 w# t+ ~
  /************* clear rectangle side(矩形边清屏)***********************/2 P. a( \+ U, \) S: V9 o4 K
! V+ p" Y7 q. Q0 H7 K: o- L
  void recls(int x1,int x2,int y1,int y2)
5 z- a$ n" K2 G  B# ?& I2 v  {2 m  _- N$ h6 S9 U# Q
  int i,j;
5 v& [* M7 L! ~7 l+ ~  for(i=y1;i<y2;i++){
4 ~7 r0 s8 }% _& c9 J2 S4 s6 N    goto_xy(x1,i);
; L0 K1 [" m, ~$ W3 h  putchar(' ');( @0 @- w, O' d: N% B
  goto_xy(x2,i);' [, O. G+ J5 S
  putchar(' ');
( e9 g4 g9 X4 A. S; L7 C! E9 x  delay(10);
7 i; U! F5 e2 r8 S5 l  }
" a9 O; J4 q5 ?, E% K9 t9 ?  for(j=x1;j<x2;j++){5 {0 c) H1 I' G- [
  goto_xy(i,y1);
! @# c- a& u( c8 p9 @2 M3 t  putchar(' ');8 {( Q, \, T3 v8 i
  goto_xy(j,y2);9 T" B) L& X% c7 r: }* g
  putchar(' ');
$ S; y$ m# n7 m  delay(10);# S7 I- }( t8 q% t
  }
( \1 F; S5 v. a& p% K! a- X  }$ ~% D, r7 C8 Z" R- B( w
  /******************open screen clear(开屏式清屏)*********************/
  {& V# a* W  M: B
# g2 t0 r0 H5 V% T' B7 W* `  void kcls(int x1,int x2,int y1,int y2)- l0 j! b1 z$ f
  {
0 i$ ~1 I& ^6 w; t- K7 P1 E  int t,s,i,j;
$ I* S6 n7 ~' W& q5 O  t=s=(y1+y2)/2;( ^5 O4 X$ @2 z  ^2 e3 E2 w' _
  for(;t<=y2;t++,s--)
" u4 w: P; [# V/ {9 u* Y, g  for(j=x1;j<x2;j++){
$ P8 o; ~2 E! l' [1 n  goto_xy(j,t);
) i# `8 U8 }& I: c3 _8 o! ]  putchar(' ');
" g: R: v. H' N. f  goto_xy(j,s);
5 B# a* R1 k' ]/ U' i8 M0 y  putchar(' ');  B9 O/ ~5 ]! W: L2 v# Y0 i
  delay(10);6 G9 X. ^  R2 ]) Q1 B
  }9 c) ^6 P$ T4 O6 I# T5 B
  }
) O+ }5 D  E: M$ F  /*****************close screen clear*****闭幕式清屏*******************/. [$ D9 j% q1 V+ t. G

4 E+ n8 {- a+ Q. V  void bcls(int x1,int x2,int y1,int y2)/ r7 i! c( q7 Q/ {, }/ c
  {
4 f" |8 M% P7 s! |/ J& l+ h2 m  int t,s,j;& i4 W0 k+ D0 }5 Z, T; b1 D( P
  t=y1;
7 _7 j4 {7 L' i; t, W5 `  s=y2;
8 q+ }0 X* k: m  for(t=y1;t<(y1+y2)/2;t++,s--)  x/ D( `2 w6 V! e6 A
  for(j=x1;j<x2;j++){; h9 |* i5 T8 N5 x+ n
  goto_xy(j,t);/ G) z. `9 i1 C2 h4 e! N
  putchar(' ');8 Y  e4 @' U+ S9 L" e% Q3 T, U
  goto_xy(j,s);
! q! j4 `$ y: K  putchar(' ');/ \  u* I, d7 A* E! v& P
  delay(10);3 K# i: u8 C. B6 O: A% w
  }- P, ^0 V+ W/ N+ X; [: z
  }# a5 L/ l7 M( w/ L$ t
  /******************bottom screen clear(自下清屏)********************/, ^( M; ^$ m0 l3 \! F+ _8 X
8 t% [9 n9 Y, ~$ j
  void dcls(int x1,int x2,int y1,int y2)
  K& j8 w8 ^9 |" R  {
. a/ b- ?* A3 b/ n- D/ w  int t,s,j,i;
! h; c/ o7 T; e6 B( T! f  t=s=(y1+y2)/2;
$ O* n) n: u2 F4 M1 r) F) I) _  for(j=x2;j>x1;j--)
+ Z# l0 `2 Z6 C( {" m6 ~' k% y  for(i=y1;i<y2;i++){
0 M" K; T, f" _* m; N  goto_xy(j,i);
1 @- D" l6 H* s$ r' H  putchar(' ');) n! r+ t1 I) w1 z9 ]) ]" `
  delay(10);; ~8 w  E8 d. s2 x$ ?
  }
+ d: O* ?4 z0 d3 C( O- x7 c  }) z: A* T% t- X: [' z
  /******************设置光标子函数******************/. ?; y- c9 e! C7 G! H/ x, g( Y. t
/ Z2 O; Z' a" I
  void goto_xy(int x,int y)
( V5 K4 j) W- c9 x- U" U, H  {/ {) P4 @) b7 O2 h0 d
  union REGS r;  G; Y" ~8 J% i4 E% U: W
  r.h.ah=2;
: r/ A! z9 y/ ^9 B4 y  r.h.dl=y;
5 e  d6 Y$ l. P0 |+ k  r.h.dh=x;$ p9 L% m' p- X7 T9 w5 X, v7 r! B' l7 B
  r.h.bh=0;, ^: T8 f5 r# H8 S( c! N
  int86(0x10,&r,&r);
) r" o, x& i- _! p  h! [  }' j5 e8 S2 n" c3 x, p* U& D! x& o" T

6 j$ _0 U: }& I% ]$ M1 y6 g; F  /**********************在屏幕上打出一连串的a字母用于演示程序******************/( l! w$ f. |" p

3 J2 a1 L0 f/ P1 ]3 k. x; D# U  void puta(void)1 s" _9 j+ ]( s! O
  {
% V) h' v% {  Q2 x8 ^  o  int i,j;# v$ i. L& M1 P/ B! A  w* w5 c+ ^3 @
  for(i=0;i<24;i++){6 C& k* h1 Z. G" H3 r, v. i
  for(j=0;j<79;j++){
- V5 `( \. D7 I, u$ G  goto_xy(i,j);
- A! \/ ]! G0 m' H3 P  printf("a");/ J) _: Z9 j1 s/ L% u: |4 w
  }
4 \2 ^" K- f7 w( E  }
4 Y: d* D8 a/ v  }

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