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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 k% a' {8 G3 |& ?

( Q+ o0 k5 O' M& y( s8 v  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 r2 e8 P, H4 m
  U* J- u0 m  f+ ]$ z2 O2 k
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ; C) j. ^  @) N' F
  子函数及演示程序:; y; U% U9 q: B3 U+ O* i  I" e

4 P  k, Q" e: c: y( s6 K  #include<stdio.h>
5 E) G2 L" i% t$ t  #include<dos.h>
/ f* Q$ a% D6 g. B  _" h! P( c  #include<conio.h>
1 X! }' ^" ?# I5 L
4 E4 V# B' D5 {  void goto_xy(int x,int y);5 c* X! r. w0 M" B# G$ `9 M' c& N
  void dcls(int x1,int x2,int y1,int y2);
5 ?4 z2 ]6 o8 I- [/ j& Z. s/ a  void bcls(int x1,int x2,int y1,int y2);
0 ~" C- g4 k1 n8 A4 M% @. j  G% I  void kcls(int x1,int x2,int y1,int y2);
8 q* ^, M0 Z- M( Q! l  void recls(int x1,int x2,int y1,int y2);
5 v: U) R7 G  O  void zcls(int x1,int x2,int y1,int y2);- R. x- k  m% \( `  F2 o& q; M: S. O
  void puta(void);
2 t, K+ i3 s- r* v$ ]
4 n2 L; N; m1 H+ z" w  A8 X, A7 J4 q2 L+ C6 B* ?. G
  /*--------------演示程序---------------------*// K5 ~% m( a3 y6 K# _/ }) o' r- [3 r
  main()
5 H. n* {: Q" F$ l* Y  {
$ }! M! x3 c! o" E) t  puta();) B( z4 F) `  h3 b2 I) G' r- {* Q
  getch();
2 k5 l* g/ D  L  dcls(0,4,0,79);
) h& @4 p0 S/ x& O  getch();
5 `- N! P. p( w  puta();7 k/ n7 V2 S4 f# O8 d
  getch();: Q5 A; D! y4 b. c- W2 N
  bcls(0,25,0,79);
( x% l+ ]& X4 Z! U' {) Q  getch();
& o# g% @8 G4 t9 H$ Z  puta();
1 [1 L4 n$ p% U/ N" J; A  getch();
5 F# {. U+ E: m6 W  zcls(0,25,0,79);
+ p' W0 t% b9 W' T- [+ |' Y! [7 D  getch();
( l, X. r8 t+ P  }
# g- H3 z1 H# b$ B: ~  /*********center clear screen(中心清屏)***********/; {" o0 k+ o5 |: G4 Z
  void zcls(int x1,int x2,int y1,int y2)
; k( O0 x' w+ c: s3 w  {
8 K  \5 e2 c1 s" Q4 L  int x00,y00,x0,y0,i,d;
, S+ h# V( L3 G- \8 a  if((y2-y1)>(x2-x1)){
! u" E, J8 t2 p  d=(x2-x1)/2;; G, {& }. B1 K4 w! K9 E. }8 s( N5 W
  x0=(x1+x2)/2;8 l0 ~/ Y0 D# c$ d1 \1 t
  y0=y1+d;
  ?+ B8 M4 @% i' C" ^1 S/ e  y00=y2-d;
: a' K. b. ~  Q5 d  for(i=0;i<(d+1);i++)# R( J& y# e7 X7 \) e1 e" @
  recls((x0-i),(x00+i),(y0-i),(y00+i));
, }  Q. V1 i1 Z5 y$ N- q9 z  delay(10);, ^" V1 V; A) A, H5 \
  }! m5 N1 S& c' X( D1 e, c+ n& [2 _
  else{! e& o  a5 x1 ~) T$ ^8 B
  d=(y2-y1)/2;' q% B8 T. ~# G" M
  y0=(y1+y2)/2;6 w) E' D, H5 U% P8 M) n8 p& V
  x0=x1+d;
5 P' Y$ [. Q; v7 q' m  C  x00=x2-d;
( v4 x+ S( V6 m2 b. L  for(i=0;i<d+1;i++)2 D3 T4 J2 U8 J3 e
  recls(x0-i,x00+i,y0-i,y00+i);
( X5 c9 B" u1 n$ ?5 ^  delay(10);2 k% H  K" `; B+ o
  }
/ ^+ b, c' k6 p% r# v  }
: `) V* m0 L' }% V8 a) k7 m8 u9 T
  /************* clear rectangle side(矩形边清屏)***********************/1 t% u' ?) P4 l0 b- g  n

2 X5 c( E; `8 x: G  void recls(int x1,int x2,int y1,int y2)1 Z8 R: |# N" G" J0 Z+ S" N0 l; m
  {
5 W& l% t% e+ s% r. F+ T0 F, O) U  int i,j;! D. ?* N6 I" e9 o( G( \
  for(i=y1;i<y2;i++){
# E# f, J2 I6 V* y. I- j! G    goto_xy(x1,i);
8 C9 \  C" U8 Z# [5 n  putchar(' ');2 E) U0 o# @! U" S. q; H
  goto_xy(x2,i);
- g. j2 O: K3 |& h6 e: v0 t7 ^  putchar(' ');
1 c6 q4 K/ b" ~; Q5 s  delay(10);
' S( A* z6 N4 R; S  }
) V' F! J. a0 G+ i, S+ G  for(j=x1;j<x2;j++){7 {. d7 G2 S- ?  m- ^* N
  goto_xy(i,y1);
# ~: e8 t4 j  P0 X  putchar(' ');
3 j  s: z3 h* [# q3 L2 C  goto_xy(j,y2);
1 j: |, v9 t+ i9 P  O" l, U  putchar(' ');; H1 |" ~. n' Y; c9 k1 b- ^; h8 p+ T
  delay(10);: }2 p8 L1 }$ q" m4 O% @
  }0 I. F$ U4 B4 [' ^7 S' e* S3 O
  }
( ?, H2 \3 h* V( v  /******************open screen clear(开屏式清屏)*********************/
' k2 }9 G  M# j6 }8 k- M0 C3 ^
5 ^3 y# C  d9 t* _! _  void kcls(int x1,int x2,int y1,int y2)
6 q* o% t8 [- D0 z0 F/ h0 [  {% h/ e4 e; b. d2 F
  int t,s,i,j;
+ u2 h% k) I8 j( U, a" I: @  t=s=(y1+y2)/2;
9 t- F/ H4 M7 V' E1 ]  for(;t<=y2;t++,s--)
6 ?! O: Y& b' K9 a# g# s  for(j=x1;j<x2;j++){4 N+ X6 m' H* @6 R. H( O
  goto_xy(j,t);7 y  t+ j4 S$ _# \3 ^
  putchar(' ');
( \5 |( o/ ?7 O% _  y4 G, |  goto_xy(j,s);
; k. `6 m! S: ~9 ?5 |  putchar(' ');8 D9 |+ t4 @1 {+ d+ D% B  V  B
  delay(10);" B8 b4 ^" n, @0 c/ I& x
  }
5 M% a' Q; Q3 Y& J1 `  }. l: c8 ?( Z' u. R
  /*****************close screen clear*****闭幕式清屏*******************/' X( [  a, K3 x8 A5 @1 O9 ]1 Y

( t7 W$ |# P* H- q3 @0 R  void bcls(int x1,int x2,int y1,int y2)
5 E. o# n' T' x5 M" L' w  {9 b$ p, N8 ~# y: `
  int t,s,j;1 {+ u& x4 P! Y( O7 I2 W
  t=y1;
3 t. m* ]2 P- C1 w2 k4 `/ m  s=y2;: g0 N1 ^) I4 M) V  c% u
  for(t=y1;t<(y1+y2)/2;t++,s--)9 e/ M! F. r& U6 o. B
  for(j=x1;j<x2;j++){
- r6 k" @  Z" j. |  e! z8 `( Q  j  goto_xy(j,t);" e- C4 `0 N% Q
  putchar(' ');
' j$ f5 W  c! Z8 T( i2 d. o  goto_xy(j,s);$ r# @# x0 g1 R' \! B$ W5 G
  putchar(' ');
/ d+ q7 r4 o5 x8 W4 U  delay(10);" V) ~2 e% @! N% ?7 z+ R- y) K
  }
- E5 U3 D& z9 c( P  }
5 V7 i/ m2 z8 ]  /******************bottom screen clear(自下清屏)********************/" h+ N: j% [" f

/ _' Q$ `8 @# A- ^4 G% r7 A  void dcls(int x1,int x2,int y1,int y2)
4 f7 d. t, V: G! i, o% m  {. R5 S. w% N7 b% D& \
  int t,s,j,i;! I# l5 W9 J% A. `
  t=s=(y1+y2)/2;9 @" C0 Y2 p) [5 f
  for(j=x2;j>x1;j--)- E9 X+ @* M9 A" b  G1 z2 h: v
  for(i=y1;i<y2;i++){; ?/ U" ~' J2 ^% o, T* @/ p
  goto_xy(j,i);
, H9 z0 [: g) y$ c2 n  putchar(' ');
& j0 G2 ]# i% `! j: G  delay(10);( B" m, [/ J" [1 @  j8 c0 N# u
  }
8 N& T% u5 X8 Z. [* @  }  I; n+ N% o. V2 }0 P( C7 u6 X7 E
  /******************设置光标子函数******************/( P- K2 d; U( c: E7 a! R
3 m  Y5 H& A1 \7 B7 V+ c$ s- R5 X
  void goto_xy(int x,int y)6 _- G' ^  P1 Q/ _0 k; Q7 ^
  {% h4 x- C6 V$ m) Y2 L: ?( r! y" N
  union REGS r;
- ]6 Z! ]& k: m! F4 M  r.h.ah=2;- x: W2 ?: F0 J  G
  r.h.dl=y;) h$ p$ ], s# S; M4 V
  r.h.dh=x;4 D) O) a$ T) O  |* I6 c
  r.h.bh=0;1 F' f! U- N; J1 r1 `) m
  int86(0x10,&r,&r);
, T+ r# O2 Z( E5 d6 V" n  }
5 m8 \" @% ?: E
. n: s9 U3 B- u9 X: a# Y  /**********************在屏幕上打出一连串的a字母用于演示程序******************/1 j, f2 f! J4 T# O( q) P9 @

, t9 N. y+ T# w" ^$ l& j9 v9 F0 E  void puta(void)5 i2 A; D$ B7 O
  {
8 Q0 }) a1 C0 k0 k  int i,j;5 Z- i8 W: t: v% \
  for(i=0;i<24;i++){
5 a2 }9 r- y6 e8 T  for(j=0;j<79;j++){3 E& k4 p; v2 t% l
  goto_xy(i,j);
  L. G; X7 |' }3 y  printf("a");
, g* @( p& c1 h) X6 A  }9 s/ L7 I& S4 R2 U. I5 B
  }5 g9 Z; r- b" m6 F
  }

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