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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* j' V& m, q8 S7 `9 s: d( T
' O; M: r: ~4 j% E  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
8 i6 `: H9 m, U# u. X6 [8 G& f6 f: c# |/ w9 V
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ( ^. K: H/ V: S( I1 j% I1 [2 @
  子函数及演示程序:' _1 {4 \. }2 M* e
7 c7 l9 \9 z5 X
  #include<stdio.h>4 y. y6 c+ j! {( }# u$ h$ D7 X
  #include<dos.h>
& u! z3 a8 ?# t3 Z2 [# q  #include<conio.h>
" A7 S+ T2 G7 N7 R* j
% h! n3 Y& H2 ^! |0 u3 x( \  void goto_xy(int x,int y);6 T9 ]5 G* w8 m4 b% E) P
  void dcls(int x1,int x2,int y1,int y2);
9 C- E; z7 {9 x  void bcls(int x1,int x2,int y1,int y2);
6 X& b* L% |' t( z) F; T- s" V  void kcls(int x1,int x2,int y1,int y2);
- c# a9 b5 i$ k4 }5 Z. Y6 u% c( L  void recls(int x1,int x2,int y1,int y2);3 k1 o1 z) P1 H, @
  void zcls(int x1,int x2,int y1,int y2);1 \0 V# {  ]6 J- {3 g; C, c
  void puta(void);
0 i8 c6 V3 a+ h" {' a  h
7 ~; S9 U5 N0 A  N* e
5 @: M( F  D! \+ S3 e! X  /*--------------演示程序---------------------*/+ x/ b! }: p. Q  A+ l* U3 r
  main()
- p. w  N% D" R& Z+ Y  {+ r& @6 T$ P6 [7 y5 F. T' S
  puta();
- X% U3 ~* w$ c* J  getch();$ K0 U6 P' t9 q9 Q
  dcls(0,4,0,79);4 ^2 s, h7 L- a; F/ ?
  getch();5 d& r9 u3 w& m# _( \5 f1 e
  puta();1 b  M- P- H: b2 W- _
  getch();: G4 m) G: l# Q! K, x
  bcls(0,25,0,79);
8 z' I- `6 j6 V5 [+ S2 D+ y  getch();4 N2 u6 S* s/ P8 ^
  puta();' Z# M' Z: J0 z4 q- [0 I
  getch();9 G0 T5 g, W: C* K, P. ?( J
  zcls(0,25,0,79);
# O! M; K1 C( c8 C# y; {$ x( B  getch();: Y, ?6 t# H; x8 C
  }
4 U- F7 C6 ^7 j1 L: s8 ~5 I  /*********center clear screen(中心清屏)***********/% u* ?3 M" d1 j9 l4 g& }6 L" S
  void zcls(int x1,int x2,int y1,int y2)
8 \* C# {- ^; r; d  {/ x4 B7 \5 r  K4 G5 ^! w
  int x00,y00,x0,y0,i,d;
; b  l& L& l# w# Z$ R  if((y2-y1)>(x2-x1)){
7 U/ t! o0 k, @5 t( s2 B; u+ k- u1 Z  d=(x2-x1)/2;* s) m" X  J! J, b5 P1 v: e
  x0=(x1+x2)/2;" r! m2 p7 m9 T, c/ g# }/ ~
  y0=y1+d;; V) e: N7 B3 n) v+ ?
  y00=y2-d;" V9 G) m, V- F  \( F  U
  for(i=0;i<(d+1);i++)
# F' M* Y5 Y0 O1 |* p- j! P  recls((x0-i),(x00+i),(y0-i),(y00+i));
% _/ w( n& m: q4 z; b- W+ s  delay(10);
/ F+ F( D& U4 A6 _' L: L  }, j2 N6 w) J; Z7 c& M: `, X
  else{0 L3 j9 F2 E% [) }
  d=(y2-y1)/2;
7 y) F  Z7 l$ ]5 D; _# p# _  y0=(y1+y2)/2;5 s' {* D2 U! m% G) x4 S
  x0=x1+d;
" m# Q$ s9 ^$ y  x00=x2-d;/ J8 M& y+ X3 d1 m, b' x. j
  for(i=0;i<d+1;i++)
  A) g) B; n; \6 O( p; q- i  recls(x0-i,x00+i,y0-i,y00+i);
& T4 `. F9 c1 |$ b7 t' Z2 x  delay(10);% K2 B0 \  m+ z  {3 j2 M2 B" I
  }4 C( o* R0 g/ Z! G( ?) Y
  }
! _6 o) I) p$ K* H1 \
7 q& Q* ?7 j0 Q+ Q; }  /************* clear rectangle side(矩形边清屏)***********************/
. P5 B3 u* T" E; v& z+ W; c7 s) ?6 T7 L* i7 ~$ t5 z, x
  void recls(int x1,int x2,int y1,int y2)
/ s  J% }. j: t/ Y  {: k& ?* s3 z( W! ~
  int i,j;
+ g$ M) u+ Y: R  for(i=y1;i<y2;i++){
, H/ _" V; L! h8 H3 u" ~: g    goto_xy(x1,i);
4 }7 f+ L4 u6 @/ F9 g6 \9 ^' @  putchar(' ');
& ]& Z3 R' x- T/ G  goto_xy(x2,i);
. s: X3 Q; `6 l0 q! q/ j, D; R! k  putchar(' ');5 P, J6 V& ^: `( g0 N( _- K
  delay(10);
5 I) R1 @5 u9 W, U- u  }
1 H4 n4 G: J) V1 a" k+ ?+ |  for(j=x1;j<x2;j++){8 C, \% Z3 A2 K9 I+ e( g/ O+ m, |
  goto_xy(i,y1);
5 |4 T! V1 w/ _( _5 E- T" b  putchar(' ');
6 S: x5 x) Q  `' |& B( N  goto_xy(j,y2);( r* k7 D: Q3 y/ ^* f% n
  putchar(' ');4 r5 \5 k, P; O# w" I+ T: y1 X
  delay(10);% R) D( |4 D5 ?) r
  }
& {( C9 Z, C1 d: c2 ]5 G1 r- ^  }
+ \5 t9 W3 y/ v- ^3 o  /******************open screen clear(开屏式清屏)*********************// Q; e& M; e/ m( [
: S' S$ H) J) X
  void kcls(int x1,int x2,int y1,int y2)! F* J# B; T+ c2 ^5 X
  {7 L8 c  r! T% H0 p. [
  int t,s,i,j;
" S- I2 w- e3 K9 j* f( j  t=s=(y1+y2)/2;( Q, N5 W2 ^+ i
  for(;t<=y2;t++,s--)9 L) g( o% _. ?1 M3 a8 I# r
  for(j=x1;j<x2;j++){
, y* U7 j; _& _9 [: f# C: }  goto_xy(j,t);
. z! P) k) r5 x7 {6 O( T/ m  putchar(' ');+ Y" j1 b$ K4 F& |
  goto_xy(j,s);
. w, I# }4 t8 G6 a: ?  putchar(' ');
, Q6 `' W# N6 A  delay(10);
" F( L5 ~* ?) S  }
: {6 d: @/ w8 A$ o. ~  }, m. A# N6 |' v% t
  /*****************close screen clear*****闭幕式清屏*******************/
+ W# o! X3 _& M7 a  Z9 e
+ h3 ]- n$ ^5 l- K+ D  void bcls(int x1,int x2,int y1,int y2)- p) i7 r* G4 B. \# l8 N
  {
8 x" M; _' ]: C; A2 V  int t,s,j;& f) g9 R% E# \3 Y: ~
  t=y1;
' R' C3 d' ]/ d) t  v7 i5 z  s=y2;
8 d8 M* O7 u1 `2 ~, n1 T  for(t=y1;t<(y1+y2)/2;t++,s--)9 t( k# k% |% h; [0 o% z
  for(j=x1;j<x2;j++){
# E5 h  C  m4 Y/ b0 D! n  goto_xy(j,t);. R, |# N$ |1 e
  putchar(' ');
1 A* G% s. ~1 v5 S  goto_xy(j,s);
. H* p9 O' K; \! T! @  putchar(' ');
' l; b5 {& z3 |# X) D  delay(10);: [) i0 `( U) U' g% J
  }
' M' ]$ n7 }, U) {- f" o  }( n$ L" D" N" [7 X' m1 T
  /******************bottom screen clear(自下清屏)********************/
: U; i5 C! M$ u9 K0 [/ ~3 {# @# q- F, o$ f( V! f
  void dcls(int x1,int x2,int y1,int y2)
7 R1 H; {1 s3 a0 Z5 o4 A  {/ O  b& F: c7 }  o& r0 o
  int t,s,j,i;0 Y4 G& |5 w1 y) `
  t=s=(y1+y2)/2;
+ P' H7 A' w9 ~3 N( }  for(j=x2;j>x1;j--)
- O( M& k3 m8 b; e/ {1 j* k  for(i=y1;i<y2;i++){) p5 \! i. I3 B5 O" Y
  goto_xy(j,i);8 t) |5 E& _# [. f
  putchar(' ');# B4 n- g/ P3 S0 y
  delay(10);4 @3 x* r; V* [% m$ ?( K" x8 l8 I
  }
4 `; t0 n+ \  A$ g6 ^6 E& |6 [  }9 `# [( \- \- s- v( O* Z$ ?
  /******************设置光标子函数******************/
6 X* L7 M. |: p4 x% [8 O0 P
' C& U! D. F% e* M5 k6 U" J$ `  void goto_xy(int x,int y)& i: n% j* y6 Q1 Y: @
  {8 K. Q1 Y4 u# M4 |  M
  union REGS r;
0 B# r- g  O/ n7 }. S4 C. l% e% i( U  r.h.ah=2;
& ?' I  d3 `/ ~  r.h.dl=y;
' z' C, ]6 Q; O) U/ F6 Z5 D: A5 S( q  r.h.dh=x;
& A% b0 h/ {, k' M) R, Y. h  r.h.bh=0;
8 H- H0 X- R8 h. v2 H  int86(0x10,&r,&r);
! x* }6 A3 H( G5 h, d* W+ u8 R. I  }& R) t/ s& I- x

, q. T0 e9 C3 |( P( [) q  /**********************在屏幕上打出一连串的a字母用于演示程序******************/9 _; |# ]. l  B) t

* k; b! G* e* S3 }4 d' @  d! z  void puta(void)2 Y' m) g: r0 f# o. E0 P# j
  {3 r( I" i( b4 y" l! E
  int i,j;
+ v4 H. j; Z/ o4 z" s  for(i=0;i<24;i++){* @/ `$ w6 p# Z% r( ?* I
  for(j=0;j<79;j++){
% c( C$ [$ P# x4 F+ b  goto_xy(i,j);, A) U4 v' V+ s7 A: J
  printf("a");
1 h0 s1 r2 z( B! y5 P6 P  }
/ Q  z6 Y1 T2 T8 E) I  }
. C1 E7 \; R2 \6 f' S  }

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