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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 m8 K- n7 H: I! h' i( n! A; e+ v
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里( X! r  p: q( _9 L0 T

) y; h: I; z; E% j9 D" z  ~' N9 J  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# F- c5 h9 s8 f! T  子函数及演示程序:* Q( l/ y7 }. }) ?; M+ z$ ?
3 E9 X' H1 \( x# w+ j8 U+ c' ~6 }- c
  #include<stdio.h>
  C% a9 i5 B3 c7 d  #include<dos.h>4 u2 E; D0 j8 B" a4 K; ~2 y
  #include<conio.h>3 j# y$ T& D0 _; c9 U
; {8 T: @) w' C& U% W5 x
  void goto_xy(int x,int y);% o, T- S! u- h9 o' f) n4 U, X6 z
  void dcls(int x1,int x2,int y1,int y2);# G% B% A6 k) c' y- L7 `
  void bcls(int x1,int x2,int y1,int y2);
$ |6 J7 b) Z3 R* j! ]; `. R  void kcls(int x1,int x2,int y1,int y2);
. x% d) V1 d* ?4 H7 C  R  void recls(int x1,int x2,int y1,int y2);
0 o1 }' _3 D/ V) r) _  void zcls(int x1,int x2,int y1,int y2);
5 D' h# z# y$ P! w/ E! b# H  void puta(void);
- w9 u  P( X5 z1 z; k$ ]; m; B  y: x1 v- V$ Z8 T: E! J
# v; h! `! g: e$ [  s4 ^( F* U' S6 V! Q
  /*--------------演示程序---------------------*/5 B" l7 G+ @4 X% n: `) H. Z3 l
  main()) p: q2 M$ U$ m( s" b- r7 P0 w- i4 \
  {- x. L  o" S' }5 o/ T7 ~; s% M
  puta();
/ _9 q. r& l5 g4 }- r4 j5 H) \9 _  getch();- o  Y1 \0 t  d4 x, z% `  Z  q
  dcls(0,4,0,79);
2 Q+ X, I( W" t  z4 j8 ~9 ]  getch();
9 @- l- }+ f* \, D  puta();0 v; M1 n9 [1 v$ q) d8 o
  getch();
6 k; F! L& C& j8 i! v0 h  bcls(0,25,0,79);
  @1 }6 _3 @: W  getch();" n4 q+ _) r8 d' x3 o- i  L' h, K! P
  puta();% p# V; N% T" B
  getch();
5 W+ L+ o) m" m9 V  zcls(0,25,0,79);, ?  T5 j4 s& b# ]( w
  getch();' [. E+ C' @% K3 v
  }
" D* o/ T2 P( Q! z  /*********center clear screen(中心清屏)***********/
& G2 I7 }; w0 ?6 L9 {. @  void zcls(int x1,int x2,int y1,int y2)
. K+ z% C  U6 [3 k7 D( [$ y  i  {6 f+ i; s  b# f( ?- j; H
  int x00,y00,x0,y0,i,d;' X  E1 G7 Q7 v
  if((y2-y1)>(x2-x1)){
- z9 ^, P' E- x9 @7 @  d=(x2-x1)/2;2 i8 ]% X1 o, h
  x0=(x1+x2)/2;: }% {6 [; U7 h: s/ h+ p) Y
  y0=y1+d;
  @" _' G( a* f! `9 F0 \  y00=y2-d;& \2 `) c; w) O3 T5 d0 e
  for(i=0;i<(d+1);i++)( L) @$ F+ s' l6 P, s5 e: P
  recls((x0-i),(x00+i),(y0-i),(y00+i));- h/ w# v- m( m& ?1 a1 I: A, z
  delay(10);; d  S/ D( Q7 Z, q  T! z  ?
  }4 C+ {- {! H) P2 \4 I) G2 P$ D
  else{4 t6 H9 F" Q1 @+ r* r. _
  d=(y2-y1)/2;
$ O% _3 S. I; G/ w  y0=(y1+y2)/2;
9 [0 z0 o. V, @# m( d4 y  x0=x1+d;
1 r0 ^1 K; Z7 s5 r% i  x00=x2-d;4 ^3 t' Y( W. o9 z% b/ [( `
  for(i=0;i<d+1;i++)0 Y$ k4 Y( n' P* Y* C  X0 ?. s
  recls(x0-i,x00+i,y0-i,y00+i);
; q3 P$ Q' K( [4 v: X$ c  delay(10);4 O5 D1 ^& O7 L( t
  }
% I( l$ d: @6 q& G7 S/ `, Y6 [, f  }
) W. X' o! g# |5 ]( \3 S5 \* g
% R" U( f1 w% C; B9 _  /************* clear rectangle side(矩形边清屏)***********************/) L  L3 E5 p, E7 i  N

; X/ D8 \. u0 V" w; y5 K  void recls(int x1,int x2,int y1,int y2)
: v4 Q2 l" v8 J  {' J# b: E3 ~$ U! x
  int i,j;
, ?. V+ G+ p' W. X1 F( L0 t7 s  for(i=y1;i<y2;i++){
; M9 l4 h! F; s/ H    goto_xy(x1,i);9 a% U4 ]# j* \/ U
  putchar(' ');  `. s" ]6 Y3 ^: b# c3 K" Y
  goto_xy(x2,i);2 l) D5 g- o" V3 Z3 o
  putchar(' ');
4 q0 G# ?- `! x3 ~, {3 Y  delay(10);
% z% L1 v" b/ X  }
1 p1 w7 f) B/ \0 q  for(j=x1;j<x2;j++){* b# o: o! C5 k. X& B9 t4 a! t) d
  goto_xy(i,y1);+ T( x+ @& W5 q2 y4 \  n& D
  putchar(' ');
9 {8 w# P7 |# A" O  goto_xy(j,y2);
  e6 `! ]# [# Y4 p/ t/ s3 G4 k  putchar(' ');. q3 S, b" }9 N! G/ q
  delay(10);; p" b7 n" _  _! y! \
  }
! I/ U" X3 s% t9 d  j* Y1 f  }
3 f; T, D. K0 m" J7 K& y  /******************open screen clear(开屏式清屏)*********************/
/ ?) Y8 q5 G0 q8 W
3 @  r7 }: W* z6 S1 D- c  void kcls(int x1,int x2,int y1,int y2)" A6 s4 P, }9 l- G7 `" |
  {
5 @( y* M- j) m7 h  int t,s,i,j;% z) i8 q. Y; i- ^
  t=s=(y1+y2)/2;
; q* O1 k. ]3 ?7 U  for(;t<=y2;t++,s--)
7 q6 c/ X! V2 \! ^+ q3 A% l  for(j=x1;j<x2;j++){
  X. d8 Q) w/ Y. h& a3 j  goto_xy(j,t);% Q( I9 p5 o% R+ S: |, j
  putchar(' ');
/ f/ a9 s2 J) |) \' f8 y  goto_xy(j,s);
' V5 ^6 q* q: n. L  |& B- T  putchar(' ');8 ]4 t5 i4 B! Z. z
  delay(10);
( R* B2 x4 I8 E6 n' {9 P  Q1 l5 C  }
+ Q) u* F" d' i. Q0 `  }+ x: o. I5 d$ R
  /*****************close screen clear*****闭幕式清屏*******************/
6 D2 R# p8 P- l( p0 k" c# x& b, G* L; i' S  l
  void bcls(int x1,int x2,int y1,int y2)
$ V) `- D: \% r/ B- H8 ?9 B  {
0 Z: g, W! c/ b( D2 }: s  E9 s1 @  int t,s,j;
* n: n: }0 X8 e4 h9 e  t=y1;
9 l* C* k% i" d0 H; Z' m  s=y2;
: x1 R! @$ @* X& H1 i  for(t=y1;t<(y1+y2)/2;t++,s--)6 K& n$ {$ r9 M- C4 u9 W3 `% @# l% B
  for(j=x1;j<x2;j++){! J* T1 v4 S  W* P: r5 J
  goto_xy(j,t);
+ I9 I# [; U* D' d  putchar(' ');
( t5 I0 T6 r0 D' [' x  goto_xy(j,s);* N- h7 N4 S% X& ~$ {2 o. A
  putchar(' ');- h# j1 O) y+ a$ X
  delay(10);
1 K( J, r2 T: i) l1 N) Q  }  b2 b% ?0 |3 w) W: W/ f
  }, Q' q3 ]( S( |/ h1 P  A% C
  /******************bottom screen clear(自下清屏)********************/
9 _) a! @( m: I: x$ [7 X# i+ S; b6 k: d" }) Y+ J4 O% S
  void dcls(int x1,int x2,int y1,int y2)
& \" @$ x7 f; X, }7 g0 v8 S  {. I# b* S) r/ @3 o
  int t,s,j,i;
4 Q1 c& j  U6 `3 h. {  t=s=(y1+y2)/2;
- p8 L- }- n! L; e6 `  for(j=x2;j>x1;j--)
2 T! K6 q' C: D3 G% M1 ~  for(i=y1;i<y2;i++){
) I9 v8 S! _5 d9 y  goto_xy(j,i);1 ?( d% C( g0 V- {/ H8 J7 X4 D# o
  putchar(' ');
( s  P5 ~+ \/ z2 u$ D  M) _  delay(10);
% b3 K5 ]3 P- {. D3 k  }
- U3 }) A! a5 K9 K# g  }
) C' m# E1 m& J# Z$ T7 p  /******************设置光标子函数******************/
$ z; i% H* w+ g* A
; G# }8 c0 b/ [  void goto_xy(int x,int y)
# V* i$ H: `; }6 A0 g4 x- R' p% @. S  {
4 h, g2 v1 q9 x, v. ^  union REGS r;
/ l; f( q+ R7 F. [& U# m  r.h.ah=2;
- g4 W  [) \3 A9 y0 R  r.h.dl=y;
4 k. ]& `2 ?# l2 b: M  r.h.dh=x;
; B% F, D. n! m9 r1 x6 M  r.h.bh=0;" x$ O- E8 e+ Y9 C) a8 H8 E
  int86(0x10,&r,&r);6 o$ f8 M1 |- _" x- M9 h
  }# v3 B, Z* D% v) C9 o: d

0 x- X" r" `9 ^/ b( o  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 l4 l. f4 Y6 a! z( R' O0 p9 U0 a0 k3 p, F+ e
  void puta(void)
6 L* x" U4 H9 s) `" E9 k/ Z/ R' ^( u  {
* O. v) b* \/ [+ V! Q" }. u' Z  int i,j;' c' W& d7 k4 j5 I9 C
  for(i=0;i<24;i++){* C0 ^- P! U' j9 B7 I
  for(j=0;j<79;j++){
8 w& L2 q# F- W6 F- R1 H  goto_xy(i,j);
. q% Y! |; B  a' }8 o  printf("a");* s7 L: b* M; ~* H4 ^
  }  D6 ^+ y# C+ N3 p
  }
/ O7 D( S- i) ~* F5 Q( q( N6 N8 c  }

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