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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! K% {( ]. ^5 D7 ?! W: I  N% I( Z* Z. I
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, l3 V/ R6 ^* d
0 c5 G! s, Q3 G: A. r8 \: s0 s$ `  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# {3 s2 a! O5 ]  子函数及演示程序:4 q0 ]3 T5 K' w. D: z
# m/ T8 Q# J  ^- \- C3 O( r
  #include<stdio.h>
. g& N) b# N$ S  #include<dos.h>* V: x. [) \8 o9 x5 f
  #include<conio.h>
3 \0 t, ^( \  x9 k" A
7 d( @0 P7 ~1 |2 ^# @" K( Q# G  void goto_xy(int x,int y);
- a& X/ Z" P1 |5 r; E3 y  void dcls(int x1,int x2,int y1,int y2);
- f! S1 \) @1 \  \  void bcls(int x1,int x2,int y1,int y2);# e+ `- [; Y$ O+ L/ l7 Z2 ^5 n( w
  void kcls(int x1,int x2,int y1,int y2);
' `& E4 Z. u9 r( q( U  void recls(int x1,int x2,int y1,int y2);' m) O3 q* y) u# T! i$ ]
  void zcls(int x1,int x2,int y1,int y2);
5 `, a/ t0 t' B- j$ Z  void puta(void);
  g0 T) A: h) p
( a% P4 u1 H+ f; L3 P7 W& R% ~9 e. U* D" g1 s+ c8 Q$ A1 n4 j
  /*--------------演示程序---------------------*/
* k; y4 T, G, i: r, J: Z, G  main()# d* o3 Z( e7 D2 ^' [
  {2 s3 M. f, W( b% Q/ |' U8 f$ ~0 d
  puta();
6 w# [" O! B+ ~3 |* r& X  getch();
" Z  e, ~" I" a0 E' Y" y  dcls(0,4,0,79);) `( B1 V& b6 \! _' c
  getch();$ P3 k+ w$ w0 K! q5 W+ E; |$ ?
  puta();
# f! B( ]; ^  N  getch();
' `( R4 k( M/ G  bcls(0,25,0,79);
) b, U/ V( r$ G  getch();
3 w. P" @: i5 O( i4 i  puta();
( g+ g: P) \3 E1 `; _- o+ K/ r  getch();
7 Z! z! R" U$ l8 e" }9 `3 W4 p: W  zcls(0,25,0,79);' G1 P, T( [- z. ^/ @- `
  getch();
+ C5 T7 X8 \' X6 s4 C' V  }- x1 E7 {: X! W4 \( p
  /*********center clear screen(中心清屏)***********/
! p8 W! }- Q# H, ~) ^  void zcls(int x1,int x2,int y1,int y2)$ P9 s! E/ [7 ]7 C
  {
* A) E) A1 j8 b  int x00,y00,x0,y0,i,d;
- n; k/ H9 i5 H4 V  b  if((y2-y1)>(x2-x1)){% S( Q- u6 j' d# P" }2 s* o
  d=(x2-x1)/2;0 l! Q1 ^9 O, D8 D5 q. h0 N
  x0=(x1+x2)/2;( h: |# ?; c% I! X; n
  y0=y1+d;  N5 G  r( t7 x
  y00=y2-d;7 s) m$ k( h& a' |# Y! Q9 q* Q
  for(i=0;i<(d+1);i++)
2 r# d1 p" Y  K- j% T  recls((x0-i),(x00+i),(y0-i),(y00+i));
5 \% Q9 T# W6 Y0 J  delay(10);
+ c3 H- ~1 N5 \* Y7 q  }
4 b, O, I7 F( H" L5 J  else{
1 [5 v$ d1 L5 |0 M8 ]! O  d=(y2-y1)/2;' y& ?: @& x7 B1 S0 b1 v
  y0=(y1+y2)/2;# W0 h" W; P& Q. S7 x- ], y
  x0=x1+d;
* u( `7 U* L, `6 x7 l2 U0 q: e7 o' N  x00=x2-d;
8 b( n* ^4 g' U% p$ r' ]  for(i=0;i<d+1;i++)! ?  |, H) G. b4 W+ ^
  recls(x0-i,x00+i,y0-i,y00+i);9 v+ T& S" {1 n) Y
  delay(10);
( }# ~; q* x# g' o  }( ~. j2 B1 f& }8 g4 C
  }% f$ [) q" W, Q2 E5 z% v

6 {- i# B: v* B" l: t/ p  j  /************* clear rectangle side(矩形边清屏)***********************/
; B* M$ c: D" f  Z: N
. T+ t7 r+ q1 v% Y6 ^# u  void recls(int x1,int x2,int y1,int y2)
. h6 c, p% s9 G+ n8 `5 |) N9 G* X  {2 b# a$ J4 T& w) T. L' M* _2 F
  int i,j;
! M' E/ D( l5 s+ `$ k& ]( E  for(i=y1;i<y2;i++){
, W& S) O- R3 J' _9 v9 h* q3 Q  B% i    goto_xy(x1,i);& |5 V- ?' k, S0 I' M( R5 ^
  putchar(' ');
, `- _6 q, n) O: R6 P0 d  goto_xy(x2,i);
6 J% M7 M4 F  ^3 N  putchar(' ');
: P! b' n5 L; j3 \$ J: v, w! Z% J  delay(10);: k7 V3 `' s0 g* C
  }
" `2 ], g% M8 T/ g4 B" m: w5 b! T  for(j=x1;j<x2;j++){
8 v2 R6 c7 _4 |' \0 }2 d  goto_xy(i,y1);5 Z/ z6 y+ r( w* V
  putchar(' ');5 @; Y, T8 R/ Z4 Y
  goto_xy(j,y2);7 [' S1 X4 h0 I+ V5 R3 D* U
  putchar(' ');
6 a1 K5 {9 E) b0 J( N+ {2 W$ T, }  delay(10);
9 M2 T  x4 m; V0 B4 \7 D  }& j8 {. j& A7 c' h8 J
  }
& C& j% {: e" h3 |* {. w  /******************open screen clear(开屏式清屏)*********************/2 l* r" ^/ U9 \( ?6 g- n* _: b
" A; ]% L8 M% K. U6 t- `8 u
  void kcls(int x1,int x2,int y1,int y2)
$ @+ l1 D2 W9 R1 b- S& j  {
! L; V% Z& _. ~) F# A  int t,s,i,j;
+ E0 T  h# M" `' I9 Y- E/ C. w! u; l  U  t=s=(y1+y2)/2;
& O: ^' C5 V; t; j' C  for(;t<=y2;t++,s--)( n; o7 T! M+ _% c
  for(j=x1;j<x2;j++){
3 ]) ^' G2 `6 {9 K0 T; u5 ?  goto_xy(j,t);
2 g& ~: _2 |' R5 U! E+ `  E( w+ ?  putchar(' ');# W( [! d/ J5 G. j8 x
  goto_xy(j,s);  I0 r+ T, L7 ]$ B
  putchar(' ');5 u3 k. K# r2 r
  delay(10);5 I1 P8 f( V& c3 [' N
  }+ q: S9 M, U7 s5 T$ |; T
  }
! y, r/ ?' U1 `4 P  /*****************close screen clear*****闭幕式清屏*******************/
: N) Q1 P4 E4 N* \) d3 y9 d" D0 O$ c" u3 M& X. G
  void bcls(int x1,int x2,int y1,int y2)8 u( |  ^/ p8 u2 i* I
  {
+ {9 `# Q5 E3 m: j  int t,s,j;" g' a0 a7 M9 z
  t=y1;4 q7 h4 |. e9 Y5 I
  s=y2;: e" _' d, H( |% A
  for(t=y1;t<(y1+y2)/2;t++,s--)
! |8 E( Z7 i3 w, Y  for(j=x1;j<x2;j++){
% [6 d$ G* }1 J- ?  goto_xy(j,t);  V0 `3 D/ P/ S# B+ r
  putchar(' ');9 h4 p& [0 U8 f; l3 ~
  goto_xy(j,s);9 M) M! V+ I% j0 z6 z' i: s
  putchar(' ');) V& j6 Y5 {; e/ N$ C; I* N
  delay(10);
& S. Q/ Q  o; o9 D  }8 X+ u  }
( K1 a7 P; S0 i( P! b. y0 V5 y  }
; Z$ `' ^" u6 ~5 c  /******************bottom screen clear(自下清屏)********************/
# J4 s  k% T) h% n% m3 i# u' a& m0 N6 |! V) j) w0 l! u0 `
  void dcls(int x1,int x2,int y1,int y2)( m; {9 u2 g7 m/ l; n" N
  {) C9 J6 H" f' I+ Q% Y9 e
  int t,s,j,i;4 A: H/ v2 q" s; s
  t=s=(y1+y2)/2;
( Z6 F. l; F+ J  for(j=x2;j>x1;j--)9 _5 e/ Z$ [0 y/ x
  for(i=y1;i<y2;i++){+ s+ Y2 O0 D# ^6 `: V- \/ q
  goto_xy(j,i);
  m  P" p9 ^3 x2 ]$ q* W; g1 z  putchar(' ');) r+ k; N  t. G' s9 Z& F
  delay(10);
3 A$ S4 n+ E& t9 o  }; C) n- X" d4 i: N9 m
  }; v. W& l& w# e+ ^( B; K
  /******************设置光标子函数******************/
& N8 `+ H  k) ?# u! r1 X
+ Y+ j' `7 L0 T, @, {4 @+ I! G  void goto_xy(int x,int y)
) Z8 O2 t0 f$ }  r5 G  {
& p7 M9 ?  c/ \- Z" W8 h. Z  union REGS r;
7 }1 ]1 e' J4 Q  r.h.ah=2;0 e% Y/ W6 M' Y0 X2 O1 d/ x$ o6 Z
  r.h.dl=y;
; {' y) _4 s8 z  U* k3 H  r.h.dh=x;
( ?1 k! m; a3 j( I  V# t: M  r.h.bh=0;
; I: J" j) n6 S$ P: Q  int86(0x10,&r,&r);! u$ x/ Y$ r  k2 p* ]  M' z
  }1 X% s; ]# [8 u9 A% j* w

8 @' E" ?" Z: I1 r: g  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ W' P  e" K+ {& V. B. B1 I4 @) O1 o( |9 g; ?  k2 n
  void puta(void)
* A4 c; R4 a* [- ]. _  {  a& y  h8 C# X/ j& \0 ?
  int i,j;
# g2 |0 q1 D' E  for(i=0;i<24;i++){, t- q, B8 A/ k8 w
  for(j=0;j<79;j++){, s3 @/ K( l8 x- c
  goto_xy(i,j);
) S! C; B) r5 h5 u  printf("a");
) e2 V, K) ^: g# U! ?, V  }
& x. s: T5 \; q  }% m+ T! L) v- F( q& L1 c
  }

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