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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* z" a/ Y2 P5 S7 d8 t; b0 n6 J4 c& u. V
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' x7 p0 D! P( S

7 n; z" D, L# }' c* t+ L  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
8 t+ y  ^" H, @, }5 `# d  子函数及演示程序:
( c0 m0 r6 q% ]$ x4 p* M  m3 ]1 _0 u( L
  #include<stdio.h>! W( _" P2 g; M. m0 B# _
  #include<dos.h>
; m( I# t. d2 N; @  #include<conio.h>
. P- S6 ]' N9 G* }+ `
% ]1 F# M7 c% M- g  void goto_xy(int x,int y);3 O5 @! A2 i" M& V% K7 c* K$ R
  void dcls(int x1,int x2,int y1,int y2);
8 j: j  f; w0 Y6 x/ k! R  void bcls(int x1,int x2,int y1,int y2);
0 n& ]" Q9 Y* C& G6 z. H  void kcls(int x1,int x2,int y1,int y2);
$ ~5 A2 y4 ~. ^9 [1 ]& x7 {  void recls(int x1,int x2,int y1,int y2);. |+ ?; T7 _/ h( B+ T5 M
  void zcls(int x1,int x2,int y1,int y2);) N, m# v+ o5 g
  void puta(void);
! g# h- Z% S- i" B7 Y& `) W( Q
7 s! Z" L6 A$ G0 Q, n+ F, F) Z
, X+ Y' }9 s2 ?# R  /*--------------演示程序---------------------*/; ?8 M. u  c8 s
  main()
' A3 ^" P9 h% v, w  {
0 m8 w3 _* o5 S1 K7 R0 Z9 m  puta();3 S6 G, E+ C  P, r. R5 ]3 |$ }
  getch();
( A% e; O) l* v' [1 y  dcls(0,4,0,79);" \/ A# K6 {/ k, h( I6 H
  getch();1 {4 |! ~5 x& O
  puta();# p7 L8 {* i  L  j3 W" _. ]% f# I
  getch();
8 T8 i1 {! h: Q( J% i  bcls(0,25,0,79);% S# G1 Q. X; b1 o7 V
  getch();
3 l# B3 O$ M1 N5 d9 L4 ?  puta();) d; e1 v& K1 `* E$ }% c" U) n% b
  getch();% A1 f9 ]5 F9 {1 `
  zcls(0,25,0,79);
, u; R5 h2 u5 T+ W9 a2 x  getch();9 S( @+ G" _& s! Y4 Y+ @  D
  }  b$ U8 i$ O9 |3 H! Q
  /*********center clear screen(中心清屏)***********/) ~! c; k# H" b: D5 }5 p
  void zcls(int x1,int x2,int y1,int y2)5 y4 C9 M. x. O" a9 ^, ~9 }
  {
( [* q. C+ l" `& q! _2 k  int x00,y00,x0,y0,i,d;( y# y( F0 ]7 ?6 c
  if((y2-y1)>(x2-x1)){6 w, P, k; `6 o& s$ v+ R+ D5 F1 ]* Z
  d=(x2-x1)/2;
5 l# i& q  N  ?) j  x0=(x1+x2)/2;
* t" h( K: H: x+ P3 Q2 R9 }) N6 j  y0=y1+d;* z7 G7 O0 o0 B( F
  y00=y2-d;6 l) z: E7 N$ R3 `# ]/ J9 G
  for(i=0;i<(d+1);i++)* I  O7 p* K1 [9 f  @
  recls((x0-i),(x00+i),(y0-i),(y00+i));
1 W8 U+ o; w. s" H- Z% B2 N  delay(10);
9 d, M! V  b3 w3 R. \8 ?9 H1 a( ?  }' [& B$ A# j9 I4 w
  else{
( W2 [8 E  x; z, v8 n. V  d=(y2-y1)/2;
6 o- L9 ^( G. k. |- ~  y0=(y1+y2)/2;: j- a6 j& t! J7 F
  x0=x1+d;. z/ q- ^; Z1 Y- S, @/ \
  x00=x2-d;9 n: ], E- O; D  R4 p) A& C
  for(i=0;i<d+1;i++)5 v/ |$ D% [: `' ~2 [7 S' [5 ^
  recls(x0-i,x00+i,y0-i,y00+i);
; _! X$ c% K# l7 p* {$ s  delay(10);
9 I4 @6 {1 d& J+ v6 j8 ^  }6 z  B8 u7 o7 |4 X; Z' W
  }
" k& y8 b. i. W! y& y" f6 B: V) P& x8 a# o
  /************* clear rectangle side(矩形边清屏)***********************/$ a2 {' P; J2 Q. o

$ [, C, u9 ~5 N2 O  void recls(int x1,int x2,int y1,int y2)
& h; y: R5 P6 l* W  {: t. W- {4 R* |* c- d2 R6 ~
  int i,j;
* G* n5 w5 T! [7 F# v% j2 |  for(i=y1;i<y2;i++){
+ z# r4 X* w) K; [9 f    goto_xy(x1,i);8 }; F) b, a( p
  putchar(' ');
9 |. V& i  z& l. r+ n- X* d' i  goto_xy(x2,i);
! ^' w5 [6 A, [! u% n3 e$ \9 W/ R6 b  putchar(' ');
) X) t8 N% V0 [1 t9 M/ a  delay(10);  i7 U: R# o4 T+ F
  }3 B9 {! S) `: x$ N) O' [; I8 ]; M
  for(j=x1;j<x2;j++){5 h1 n; v& K# P8 x3 D$ k+ j: w. |
  goto_xy(i,y1);" U/ l/ Z$ ~$ M0 I$ u
  putchar(' ');
& b1 J1 Y* M6 N; B5 [3 n4 S/ N$ W( F  goto_xy(j,y2);9 R' b* ^' m: z, L- T
  putchar(' ');: \( D% E) C. d. n
  delay(10);
! p6 p  ?/ G" E  }
6 r$ \) @$ b. g& q; L" v' A8 \( O  }
; Y* o) `+ A5 M8 j  /******************open screen clear(开屏式清屏)*********************/& Q0 {/ R) L3 U6 Q5 ^0 V# R

  D5 {2 Q1 q# U1 G( K  void kcls(int x1,int x2,int y1,int y2)
% w2 t( a  `3 x* C2 R3 t  {
7 Y1 m' f- L1 \# Q  int t,s,i,j;" _; w. n0 E6 S. U& `  `" p. v
  t=s=(y1+y2)/2;
! e+ S6 P+ J& P+ a7 [" j  for(;t<=y2;t++,s--)* p* \6 i+ Q/ O; d, _+ ?4 j! [
  for(j=x1;j<x2;j++){
. m# k0 n- [$ M4 \7 q8 V  goto_xy(j,t);% `7 z% \) U3 o. e* P
  putchar(' ');& h3 i& ^/ S! |
  goto_xy(j,s);
) I% v7 H4 w4 F  putchar(' ');. j2 ^$ C. i' K; r4 Z: o
  delay(10);, y2 {+ Q  C  A# Q7 c- g+ Q& o4 k
  }, F: u9 j" [: F# ^
  }
: s5 U0 O8 w) s* g4 J. R# b  /*****************close screen clear*****闭幕式清屏*******************/! r7 j1 ~2 p3 L* b2 k
4 L' F1 s" K( c
  void bcls(int x1,int x2,int y1,int y2)
: c- k% j: }% u  {
: R. F" ]% k2 L& D# J% Y  int t,s,j;
: Z1 |: M) C( w0 O' h1 b5 Z9 z  t=y1;0 o1 v* m: ~. P4 C7 s5 W
  s=y2;
) `/ \( y% s+ U  for(t=y1;t<(y1+y2)/2;t++,s--)
3 Z$ e( z: p. ?/ Y' x  for(j=x1;j<x2;j++){
' c* l5 m0 E& D! T, e1 o4 S  goto_xy(j,t);
. U* Y+ V) h+ V# D5 t! w* P1 X  putchar(' ');
( S; B: o$ P# P+ J  goto_xy(j,s);
+ M* V# o: G/ C, r4 ]; @3 f. j: ^  putchar(' ');
! ]$ X& f6 q% ]/ E8 [6 e0 r9 L2 ?  delay(10);0 @; f% o( K: @* w" d4 b. \" o1 [, B
  }
: a' R3 F: O- p  }9 H' ?8 M8 z+ T
  /******************bottom screen clear(自下清屏)********************/& t6 v  u1 Q9 ]5 E* M

9 {! g1 L' v5 q  void dcls(int x1,int x2,int y1,int y2)
. t* E, m6 ^- J9 c) |% \  {8 X0 B3 [( S' N2 Z; a
  int t,s,j,i;  P& |3 I% U/ @& r
  t=s=(y1+y2)/2;
& Z" b* L# |+ m) `  y' t* z( R* t  for(j=x2;j>x1;j--)3 L* e, ^: S. P1 k
  for(i=y1;i<y2;i++){
; t$ e5 l( q  H& c. N+ J  goto_xy(j,i);1 }( \$ P* E7 ~
  putchar(' ');1 s$ X" `( C7 r2 G- B+ i: X0 }& G
  delay(10);
7 s3 G+ ?+ t5 j, F8 F9 g  }. R* D8 s' Q0 P$ s6 {
  }& n6 }7 b7 c6 g7 ^6 s- Z
  /******************设置光标子函数******************/$ x( `7 o/ Q* E5 ]5 f. t8 u0 `" T
" J* J. h. x! E+ x! ~- S5 {; ~
  void goto_xy(int x,int y)/ k9 Y) r3 d) Q: X1 R
  {* T, y% |; g0 z0 Q
  union REGS r;' K) F9 H' Y+ ]# h
  r.h.ah=2;
( A* r. V' w5 ?/ N& T9 P  r.h.dl=y;, M* i+ {* U0 G5 g/ m9 c+ Q
  r.h.dh=x;
7 z' Z0 k- z8 x2 c/ l8 F2 v  r.h.bh=0;' l, s) N! ^' E& ~: D
  int86(0x10,&r,&r);
3 {% m$ w& T! l0 v  }1 L7 G9 U$ F* ]- m

* y  `0 s7 Z0 N  n/ S" y. i  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 t1 I2 s' E" P: E, m0 U+ h

  p. N1 d$ p' ?$ n; P* D1 m  void puta(void). ?. J" U/ T- S& [
  {
# f4 h, d* u9 C# U- N: }( f( F  int i,j;6 d  x. X. L2 ]+ A, B$ @: f2 n, h' M2 ~
  for(i=0;i<24;i++){
' {2 W: [7 y" Q  j4 E! S  for(j=0;j<79;j++){% R3 K- W. f) t
  goto_xy(i,j);' f* l, Y) x) |: u7 v% \* O
  printf("a");
3 }5 q$ {' h3 c  @6 I& N  }3 w" L0 \7 P/ V1 y+ j
  }
, l% l; M, E4 U$ @# V% X  }

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