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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 w+ s. n1 d1 K. ~: `# _  V
  U. \) d3 b& s$ C4 D$ C  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ B5 {. _) I- |( E4 n- W" ?  P
& V2 ]' ?+ x3 {* P3 ]; t1 F
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 m& u8 a# c9 h  子函数及演示程序:7 |) V) O6 r* y
) g7 b( K# n- L, f
  #include<stdio.h>/ O! c) S( N# l, @$ }% u
  #include<dos.h>
0 y' [2 F0 q0 u8 w& W  #include<conio.h>
7 q! Z$ b$ L2 Z; o5 v5 X! f4 e* @- o1 ]1 f% x) E
  void goto_xy(int x,int y);$ \. N/ W  N9 h9 b
  void dcls(int x1,int x2,int y1,int y2);
8 Z7 U7 ~0 F; C$ X) d  void bcls(int x1,int x2,int y1,int y2);$ l+ s; m2 R) B! b9 ]4 i2 z7 O
  void kcls(int x1,int x2,int y1,int y2);
2 i, F  r' V' c% n8 U) u6 A- Y  void recls(int x1,int x2,int y1,int y2);
0 ~6 c; q5 L4 y1 ~  void zcls(int x1,int x2,int y1,int y2);
, n* I4 V5 L( Y. ?5 q" A  void puta(void);/ q0 L+ d/ M2 n0 B$ o, U
  m  y( H4 u& K' _5 i# ~) {
( L! x/ _3 R3 d+ A6 q4 l' o
  /*--------------演示程序---------------------*/) N5 y9 z. t6 d/ A
  main()
, P1 ^5 T" I$ e/ D, I% `. G  {
! c; ^) ]2 v, X; V* B6 n  puta();
' X6 I3 r5 I, p5 i  getch();
) X- A( v6 u+ \% m  dcls(0,4,0,79);
# i  |: y' f5 C4 D& g: t7 _  getch();& w( T; Z- T) D: A! g$ F
  puta();/ Z; y1 y7 d. G4 T2 D0 y
  getch();
5 p8 e: @+ f' y. N) T6 h  bcls(0,25,0,79);/ T( s$ `( D7 C& J; g0 l2 v6 E
  getch();
8 |5 M( M* ?, l" k# [  puta();  R' ?9 k0 {4 s3 G& B4 }: h& Y# y% K0 ]
  getch();
, T9 u' E0 E( n  zcls(0,25,0,79);
1 L7 Z& H8 e0 A8 f0 \  getch();
9 O/ {3 H4 D- n! x  }0 F" `" `  [8 v
  /*********center clear screen(中心清屏)***********/
7 V. R. k% K# v  void zcls(int x1,int x2,int y1,int y2)
: h2 {# @$ t. q( R4 [7 |  {( ~1 ]; b! f% d7 V' |( u, b0 w
  int x00,y00,x0,y0,i,d;" e1 O; ?8 s  n- ]7 {) @4 `
  if((y2-y1)>(x2-x1)){& U) ?: I1 O* u  g$ n9 E
  d=(x2-x1)/2;6 k& G5 U, b% U; q% b8 @' ?
  x0=(x1+x2)/2;# f, c/ i* Y; h; a9 U
  y0=y1+d;
1 \/ B# C. W4 R$ v) v8 w  C, b! O. Q) ~  y00=y2-d;( j. i0 P" g" m% I, t
  for(i=0;i<(d+1);i++)
  U0 j& z3 o& |1 H% b; D5 I  recls((x0-i),(x00+i),(y0-i),(y00+i));+ p. m( _* f  ?  h# c  ]# Q
  delay(10);2 z( N* M3 \* q
  }1 d8 b2 j5 S9 l5 K' n' i
  else{
# M, Q2 W: [& l5 j" O  d=(y2-y1)/2;
6 k) T( S1 @0 c8 L2 n" p  y0=(y1+y2)/2;, z' }4 c% R3 h, U9 V
  x0=x1+d;
6 }# c; x/ p$ R: p7 I  x00=x2-d;
/ V" V/ R4 M2 m3 G  for(i=0;i<d+1;i++)$ y- a# c: D' m4 D
  recls(x0-i,x00+i,y0-i,y00+i);
1 c7 O9 L7 p9 @% E  delay(10);
, r( s/ T, p, ]7 c  }( B! c- K; B4 z0 M! N; N% g
  }" J8 B8 t  G/ ?3 X  \+ d
4 h; B; g7 _2 h! T4 c3 e, ]
  /************* clear rectangle side(矩形边清屏)***********************/
1 r0 H' ^; |! x: c
3 K7 h# ], v8 @" m: S4 [2 N  void recls(int x1,int x2,int y1,int y2)/ Q( v/ {3 C3 Q6 I) T/ _
  {3 X* [# O1 i; r* ~
  int i,j;& {0 c# K: I6 x- D" f, w
  for(i=y1;i<y2;i++){+ K: F& o9 [3 s
    goto_xy(x1,i);
$ y5 O5 V$ e3 [' P  putchar(' ');
+ n9 Z8 o. g3 Y( T: ^8 u. M" x. e# a+ U  goto_xy(x2,i);
+ `9 X1 Z  h' w! N* D% @  putchar(' ');; H1 U3 v, d3 s7 `! E! Q7 w
  delay(10);
$ R+ O# e* A5 g  }
; H' I' b7 w( r; {+ k9 W' y  for(j=x1;j<x2;j++){1 A. z# R- A5 J8 o) a: q0 p! U
  goto_xy(i,y1);. `! d) B0 K9 ^& L
  putchar(' ');" o* F+ \& _* l( o
  goto_xy(j,y2);4 \$ x7 v4 C) K& b% H  v7 K! ?7 l6 ]% {
  putchar(' ');
1 ~4 H6 t" x( k% g  delay(10);
' h$ `. C& L' c5 a) `. d: a7 y  }7 ]' [% }" Y# Y, G
  }
8 q6 d6 y# K: }- |  /******************open screen clear(开屏式清屏)*********************/4 A* y, H% e- F' |
" ~2 R! x' p# m3 b
  void kcls(int x1,int x2,int y1,int y2)
+ Z4 N( B, A" ]/ e& W* Y  {
& T+ o$ V# c- ?* F8 c9 e1 E  int t,s,i,j;. P8 v! b) V: _' H" a. k8 o( H
  t=s=(y1+y2)/2;$ u3 _6 {2 Y" J' B- r
  for(;t<=y2;t++,s--)
$ _3 C5 m2 ]7 b: w% u  for(j=x1;j<x2;j++){; q: r  m0 b$ j$ \
  goto_xy(j,t);
" i8 O0 z* B  C; F  n  putchar(' ');
  u4 B( K1 b/ d  goto_xy(j,s);
4 d. M: g+ m  S6 r  putchar(' ');
! v7 B0 i' X9 s0 p) Y  delay(10);4 W. I6 ?; {0 F
  }- t2 S9 g+ z5 E
  }
# p1 ^0 M7 `6 l0 U  /*****************close screen clear*****闭幕式清屏*******************/
3 f& Q6 f) L9 [( a# o) Y9 r  v
* r( n( t) C. x7 R/ s3 w9 a+ n  void bcls(int x1,int x2,int y1,int y2)
0 @5 Q: l- S$ a  {  a5 y5 r5 S9 d; J) u
  int t,s,j;
) v# K4 u# |# P  _  t=y1;3 G. f% `. v$ X% |
  s=y2;$ [! E9 x, w& y/ f) P! g
  for(t=y1;t<(y1+y2)/2;t++,s--)
2 `6 m* F2 @, u6 O0 V& \  for(j=x1;j<x2;j++){
7 y! n( r, k" Z1 I3 z4 @& G  goto_xy(j,t);4 B$ |, n2 E1 q# u5 N; Z% \8 G: v9 G
  putchar(' ');$ W) c9 c* f$ S, O
  goto_xy(j,s);
0 T5 j4 V3 P& x! }0 B7 |% E' F# o  putchar(' ');
0 k! R# R; ~' }" l. |* t( |- d  delay(10);9 [- t* |$ @  W! e* r5 C' |
  }3 L" s- M" T# u4 B, _; f0 A4 j; I8 o, c
  }9 o: h5 _% o+ q) V/ p
  /******************bottom screen clear(自下清屏)********************/
) `* h4 p6 f  n( y* {8 T$ p/ i4 L; j0 u6 Y2 U6 l
  void dcls(int x1,int x2,int y1,int y2)
& }7 K+ G0 x# Y' W" G3 {6 N  {
6 C* S2 f$ I8 ^  S  int t,s,j,i;
. U' r# c9 ]7 |, q& j; H5 |5 g  t=s=(y1+y2)/2;
. V% _0 ~; T8 }% ?  for(j=x2;j>x1;j--)
1 ]9 v, q! U& O8 k0 d. ?- z; u+ Z) H  for(i=y1;i<y2;i++){/ d- w& R  ~! e$ U
  goto_xy(j,i);: R1 }8 }* D- Q# j# T
  putchar(' ');% z0 Q  ]& `5 ?+ }; b2 W' Y
  delay(10);
: X4 B, P8 x# d9 i  }
" b! u0 \. [" P' H; Z9 Z  }% z  e6 |( l% o" ?0 B' j1 M8 \8 I. M
  /******************设置光标子函数******************/
. \% o" X; E# Y2 ]* I9 y' Y* ^; x% f" f2 b
  void goto_xy(int x,int y)
& E; }5 g. F- f5 y7 y# D8 m  {9 ?. d1 t! u% w+ |0 y9 b
  union REGS r;
5 o# Y0 f3 C' n' y% }1 G  r.h.ah=2;
  J5 U4 p- B0 ]' S7 _4 F2 a  r.h.dl=y;
7 O, m2 ^" Z  A5 B1 G  r.h.dh=x;
. s* _/ Q% a6 a( E9 W8 M( P. D8 J5 m5 q  r.h.bh=0;0 ~& n3 V: J% I2 ^. N/ P
  int86(0x10,&r,&r);
! U9 Q. c$ V& K$ O9 O: s3 Z) n4 |9 y0 ~  }
: u9 @6 P% A1 W4 ^" _- d* t. _& l* S0 `
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" c) _  a% A- _
. V1 I* w( i# j7 \1 ?. E2 F; \  void puta(void)# j" j. b, R- t) f
  {3 Q3 j& B( C9 i8 A! t& _  r# U
  int i,j;
; D, N* n* W4 P4 o7 A. x+ t  for(i=0;i<24;i++){
! v6 N( H  b5 Q' x  for(j=0;j<79;j++){: ]3 C9 b2 L6 M& C
  goto_xy(i,j);9 m( V0 m) @0 L! _/ W& u
  printf("a");2 q1 O& |; N1 j% H6 Q
  }+ }' W. I/ w$ Z% k& \6 r+ N
  }
0 E0 Y  Z1 k* @8 D  }

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