返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ q2 j9 a/ z% N5 }, K& M' a4 t  \2 _) _9 M4 e$ g: p
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" W, {; {; g8 d  Q% B4 O5 H( p4 z5 L
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. + U  o* [4 H) O
  子函数及演示程序:- B/ t- P5 B9 a( }0 t
3 t  Z1 R. ~4 s/ z
  #include<stdio.h>6 W( k1 K6 Z& E7 L6 ~6 A
  #include<dos.h>
7 x3 L, Z; R; K+ }; {7 p  #include<conio.h>
( T; M/ S, ?$ ?$ g$ v0 H+ R4 w. s4 m- k5 z
  void goto_xy(int x,int y);7 l" Y1 z+ `; _0 ]& z% R% Z
  void dcls(int x1,int x2,int y1,int y2);% }: k2 ^" `. t& h7 w
  void bcls(int x1,int x2,int y1,int y2);
+ N7 K7 O2 |; D" ^# w- \$ B. B  void kcls(int x1,int x2,int y1,int y2);, I0 B6 X6 ~& Q, ~5 q0 [: x
  void recls(int x1,int x2,int y1,int y2);0 b; q& J" `; E
  void zcls(int x1,int x2,int y1,int y2);) k) {, x2 p4 d5 g: }# U
  void puta(void);5 T5 z0 I- S9 B: K' |
' _0 m2 W" c1 S- r; Z
$ |% D5 t) F% P/ S' M0 V! \
  /*--------------演示程序---------------------*/  M( O/ r# b0 p9 C* }( R
  main(). I3 w4 t2 V1 @& F% I
  {
. t2 H' l  r' \: |6 J5 A  puta();
/ k/ f; p: q3 I8 N1 e  getch();
1 n; e+ G: [6 [  j& ^# m; d+ H  dcls(0,4,0,79);
1 X5 [4 u) \; r  getch();! u3 l- t) w7 f6 w0 T) j! t: P
  puta();% a+ m3 _9 |  x8 D) G
  getch();! ^! R: I, U" s, p
  bcls(0,25,0,79);/ \/ X& `0 f# X( D2 ^( O
  getch();' ]' T/ u" Y7 S2 Q
  puta();, Q' k  w' g$ V( k
  getch();
/ o' k. Z: s: y1 Q" E$ x, V. [  zcls(0,25,0,79);
  u% T# H. u" ^  getch();; s+ c0 C4 e" F- g
  }
# C* u9 o2 n" g) b" |4 X, ]  /*********center clear screen(中心清屏)***********/! y/ w# g2 ~1 C5 h/ Z8 n- L
  void zcls(int x1,int x2,int y1,int y2)4 F( T# u& x; ~
  {1 K% p' ~, M3 S0 _9 J0 H
  int x00,y00,x0,y0,i,d;
9 a5 H. _4 j: Z: w  if((y2-y1)>(x2-x1)){- C* `# t% u. \1 V- ?
  d=(x2-x1)/2;. ^3 u2 o. b* I8 q% o
  x0=(x1+x2)/2;
7 z9 F9 i  @2 j9 F  ?  y0=y1+d;2 r; v1 U1 Q9 t- D7 n" t
  y00=y2-d;9 h6 T5 z, [3 p5 p2 Y+ W
  for(i=0;i<(d+1);i++)
; o4 D" V' T0 M1 @( a' {) v  recls((x0-i),(x00+i),(y0-i),(y00+i));7 N4 n( {5 Z# i$ c0 {; V
  delay(10);
& Z& E9 v% u& `5 B8 Q  }
5 e: _2 X/ f2 g/ p& E  else{
: r$ G( `- {* v3 k3 U' K9 U  d=(y2-y1)/2;
0 i$ M6 I+ }. t5 f( o. ^  y0=(y1+y2)/2;
" {# a; T7 j  H3 j  x0=x1+d;% U' r' x2 Q& n3 q
  x00=x2-d;
0 b) t/ n) }) P0 x2 B  for(i=0;i<d+1;i++)
0 N( E% E! n: U% k+ r9 ?& X  recls(x0-i,x00+i,y0-i,y00+i);
% U; z4 b- d7 S8 a( A  delay(10);
  P" z. ]; v$ d+ f- ]" G* e7 C  }
9 k; |" S% e3 Z1 P4 L6 K  }
  \1 a* h% z5 h8 n  B2 r  V) m8 t. b( t5 o  C8 [
  /************* clear rectangle side(矩形边清屏)***********************/
- D' T7 _# t7 ^- p! i& a; U
! w6 H0 ?( w+ r/ V) g/ k* C% [  void recls(int x1,int x2,int y1,int y2). v% R! E& |3 x1 A8 i: q7 I+ m; Z
  {
1 \) [, o" J0 ?3 D6 h9 F6 S  }  int i,j;; B# \" u! U% u+ @7 e7 B2 s6 K- I( m3 F
  for(i=y1;i<y2;i++){
1 [1 P: j  P( Q1 w0 T    goto_xy(x1,i);' W6 {; X" w# P' \& X. P) G4 n: ?0 i
  putchar(' ');) I1 i& }$ e/ z/ R; F- `) r
  goto_xy(x2,i);
2 E0 r3 I' ~& H- {  putchar(' ');
* J4 Q/ U+ [" q+ {/ ^; U" n( L  delay(10);
8 Z, u6 N) U* F5 z) i6 w& x+ X6 p, e  }
! g) G) S) W- k  for(j=x1;j<x2;j++){
8 f4 T. q6 t) \8 p  goto_xy(i,y1);# p+ X5 n3 N! y5 z
  putchar(' ');1 Q# Q* h  @' D8 f8 c
  goto_xy(j,y2);
" Q. ?3 w. c# k. O: X" d, Y% L1 T  putchar(' ');
! h+ J. ?, i' r- Q6 U  delay(10);
7 \6 h" n+ E1 Z" N2 f7 C5 f  }
$ c7 _( _- R1 [) P  }' Q: B, M+ `3 N9 G" n2 U! C, \
  /******************open screen clear(开屏式清屏)*********************/6 k: d+ W4 ]; o/ I# ?

6 X3 |! l! O1 ]) {6 D0 ?+ ^- j  void kcls(int x1,int x2,int y1,int y2)4 B" S, V: v3 x0 v6 I9 [' b
  {
* u1 j! Q, K9 D- i5 \' m  int t,s,i,j;
, \; I3 Y' a2 O/ l" B9 U( T  t=s=(y1+y2)/2;% s2 V( x3 ^* K6 @
  for(;t<=y2;t++,s--)
) q$ x; P$ p4 d  for(j=x1;j<x2;j++){
; X& Z9 |% L& `( ~+ ]  goto_xy(j,t);9 u" _+ i2 _. r8 Y
  putchar(' ');7 F) }" P$ a6 r' V% l! T
  goto_xy(j,s);
( R8 O" P  {: X# Y9 \" |  putchar(' ');
& d5 [. ]8 c- f) n  delay(10);
4 y; q& ?8 H( H  }
) u: U  W6 j. S3 j- Z: e& S  }
' \& g2 p  v8 z  /*****************close screen clear*****闭幕式清屏*******************/( R% i& H# y, n& |6 U/ k8 t+ v: n

8 G0 U" y' f4 q6 u9 n9 ?6 l6 G  void bcls(int x1,int x2,int y1,int y2)
0 p$ [( I& U+ @% ]9 J0 P7 `1 m  {+ l, {; p9 B1 O1 y% ~8 Z/ E# z* N
  int t,s,j;* c* T0 K8 U( z! j, }4 ^/ \
  t=y1;$ M" d# F- Y5 A3 P. Z
  s=y2;
+ t( U  e1 [; t# b  for(t=y1;t<(y1+y2)/2;t++,s--)
& n* z2 ?' Q3 ?0 I6 N" O  for(j=x1;j<x2;j++){
  G; n! o6 k2 J0 F. }4 P4 Z  goto_xy(j,t);+ S. h" j5 i7 b$ B, y
  putchar(' ');7 s5 n  X- g$ }0 l5 ?
  goto_xy(j,s);  I+ x8 G" W/ X, k2 J3 y
  putchar(' ');
5 h$ c2 G9 V1 C( f8 H0 M5 w  delay(10);
0 k1 ]' T0 n: ~+ P* D$ R1 |) f- O  }7 h, A3 s8 {. c
  }$ l+ r& O' d! B
  /******************bottom screen clear(自下清屏)********************/" [" K& L0 v8 {1 r0 \9 v
; |8 q" \( b: k
  void dcls(int x1,int x2,int y1,int y2)
9 l/ r# o: l- z1 W" \$ W  {
0 w) k) o0 Y7 J! g1 P2 C2 b: K  int t,s,j,i;8 {* d" A2 g2 F6 f1 u2 Q
  t=s=(y1+y2)/2;
+ ]5 a# `6 e& |3 N1 U  for(j=x2;j>x1;j--): G+ |% u: s% H, R: o. t0 s) u; h
  for(i=y1;i<y2;i++){+ k! v2 W: y3 M% a9 M# z& Y
  goto_xy(j,i);8 ~; h0 M" B2 S- u* _; J4 s" x
  putchar(' ');0 `* Q) R+ w6 S- Q
  delay(10);* o1 b3 ?0 M# }
  }9 M6 V  z; p' Z
  }
2 x$ C1 N; q4 c; X  /******************设置光标子函数******************/( }, B+ _; G9 |/ m/ }1 s% G

# w. M! Y  M, E  void goto_xy(int x,int y): y6 |2 S) k' j! [
  {
* `# \3 _& N  G  \2 L+ R2 m  union REGS r;7 w* O9 ^+ X. M( t% J6 T
  r.h.ah=2;( h# p: E, ]- j' O! R/ o- ~
  r.h.dl=y;* F7 o' G+ v; J: C/ ]1 S
  r.h.dh=x;
$ M8 }& Y, p5 F  i8 z  r.h.bh=0;
. }3 w1 p# d& m6 b) i: X2 \) Z) {$ b  int86(0x10,&r,&r);; ^$ i3 o1 k9 H8 W. D
  }& v6 r. u" A: b. X9 l( P: v% G

2 E, |% Q8 a1 _) m  U7 t  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* ?0 y! M$ v0 m
6 G  B/ ]' k! a: _) C$ m% `+ e  void puta(void)$ ]5 C8 ]( p) V- d$ A
  {  h/ [% \  k7 }! n9 l& r
  int i,j;6 K7 |4 W3 ]. f! ~. p* ]' k' v
  for(i=0;i<24;i++){- ^' W6 ^, E; w: c& G% B
  for(j=0;j<79;j++){% v4 G7 e  X, Q2 C( K
  goto_xy(i,j);
3 t0 L/ V8 Q9 T" _/ S8 a& {  printf("a");
1 O# u+ ~( v: ^- w2 Q# Y" i* [  }* \; W1 P0 d5 S
  }0 }- i! A- {7 L. X1 P; h' E
  }

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