返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," z; Y" Q" r- n8 m2 `9 w" T

, `# a" e; Y, m: S0 t  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' F6 y/ {9 ]: u9 W+ S, n% h; ^
7 }+ d4 T) j2 b6 A) `% }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 X5 J) T& [+ v( p, _
  子函数及演示程序:
: m* B" b6 Z% A! b
' P3 q* k; Q3 U, @" G( D  #include<stdio.h>5 X/ I4 |2 r" Z' z' Q
  #include<dos.h>
) i0 i- a4 g* l6 M2 ~( o/ K  #include<conio.h>
1 U0 m% S, d% @4 l0 \! V+ O* }  Q( e8 {6 N4 a
  void goto_xy(int x,int y);. |3 q2 t* A: ?0 |
  void dcls(int x1,int x2,int y1,int y2);8 y, @* R1 N: |1 S
  void bcls(int x1,int x2,int y1,int y2);6 F4 Y  R. O% E5 X! o+ j
  void kcls(int x1,int x2,int y1,int y2);
" G( X5 A, K( y4 N6 v. j+ N  q  void recls(int x1,int x2,int y1,int y2);" M' q+ s+ p: o* C( U; {7 [  r# m
  void zcls(int x1,int x2,int y1,int y2);$ U* y& P, m8 w
  void puta(void);3 @/ n1 j  D2 u# @$ Y, C' _8 f# T

; c6 s* h2 Z7 h' b# c* _& q& b# K8 @9 H7 N3 _: H" `5 i
  /*--------------演示程序---------------------*/
! o: x1 o; n& @0 d. ?  main()
, P0 W" R- {1 f8 Y. t/ _) S  {1 e$ A5 q5 _/ T  e  e' V
  puta();
9 \5 \# o" w/ f! e1 _% y  getch();! h, J7 G4 M0 K  `2 V: @1 A
  dcls(0,4,0,79);5 u1 e# g$ T" ^* U5 D) w, R( h- t
  getch();) l) [5 V. N1 L2 k. k1 Q+ U
  puta();: g; C; N3 r, u
  getch();
. _$ U' L" P* T/ z* q9 o; ?; s  bcls(0,25,0,79);3 `# |$ w" x% U2 T8 m
  getch();1 H1 D% u7 D6 m. F) H: G
  puta();
7 D9 W$ t; ]- W2 [  getch();
. ?2 u& a* o2 L% u  i! v/ L8 r  zcls(0,25,0,79);* [7 h8 Q5 E- j) u4 }! D) O, r* B
  getch();( `; |/ H9 i6 c0 j6 r
  }& C1 M; G/ Y7 p9 Z, Z- D
  /*********center clear screen(中心清屏)***********/
2 ~1 o4 Z4 E  \4 e" \  void zcls(int x1,int x2,int y1,int y2)
% {0 M% k* l- ]! L0 f  {
% a! B  Y2 L# o$ s3 c& o  int x00,y00,x0,y0,i,d;
: H% I0 |5 S  o  if((y2-y1)>(x2-x1)){5 e* i8 z6 `' T, m
  d=(x2-x1)/2;
/ t- p: h4 z8 Y1 f% B# Z& }  x0=(x1+x2)/2;
/ X: _7 c5 ~2 u( q- A4 e7 q  y0=y1+d;
0 O  t5 I+ t+ o' \9 F% d2 q4 \  y00=y2-d;
& Y1 A: j- c, n: @  for(i=0;i<(d+1);i++)
8 j' f. Y+ f3 _. f$ d8 S9 g  recls((x0-i),(x00+i),(y0-i),(y00+i));
. \- p& I5 h+ n: [' T: J' C  delay(10);
* A, ~0 i' c3 G$ Y2 k/ p  }
- E! n% U$ `( k) a2 |. {7 e  else{
6 ~" L4 \; Q0 a- ^& C% h! _  d=(y2-y1)/2;
4 J+ K  ?( o* i  r. p/ P' l" G  q* a& n  y0=(y1+y2)/2;3 m. w+ a" b7 a: j6 r/ a
  x0=x1+d;
: D) W/ f$ z* z1 |  x00=x2-d;& G- d; P$ C& {. [4 N% e6 j8 P
  for(i=0;i<d+1;i++)5 v& \" h) z  Q; s
  recls(x0-i,x00+i,y0-i,y00+i);
6 D" c+ H' F: {+ }. \8 h% Q  delay(10);+ Y1 D+ R& N. k. a, O0 k
  }
! B4 i1 @: I9 `7 S( l; {  }* }6 C4 k' s0 g
/ t" T' W1 [$ r9 `, V" V$ F) ^
  /************* clear rectangle side(矩形边清屏)***********************/4 c9 e  r% C- a* n  m
( X0 ^% j. b) C* e9 C  i# o: f
  void recls(int x1,int x2,int y1,int y2)
- C' {2 ^- g. G1 x7 H2 Z& Q9 l" t  {9 z2 X& i9 e8 U  F: g7 n# W2 n; k" s
  int i,j;
% D/ @8 A) W" |$ X  for(i=y1;i<y2;i++){
+ R+ F- Y0 g/ B' G' i    goto_xy(x1,i);% R0 }- {( k( u! R+ r
  putchar(' ');# _, x5 u  u4 G0 m) ^
  goto_xy(x2,i);
+ T- w+ k4 q6 U% P2 S' u# s  putchar(' ');! }# G5 x1 V$ k0 |2 Y0 i
  delay(10);" l/ ], j( a' U. a" x) K0 T
  }
4 u: v( _0 P8 B* \4 G; r  for(j=x1;j<x2;j++){
  C& e+ _+ r" t$ E  goto_xy(i,y1);, a  P' D5 i+ p4 L4 G3 e0 m
  putchar(' ');
$ y  V  p, @& T* k% h  goto_xy(j,y2);
) d4 W" i/ i* H5 v! m1 ~6 R  putchar(' ');/ ?& Z* F) E& a& ^. a
  delay(10);: L3 F/ l' J, f9 ]3 Y* k# }
  }
: O, i: S! L) q% d) O  }1 H) ?- r' t5 h+ O4 n
  /******************open screen clear(开屏式清屏)*********************/& f; a$ U3 J: I7 K( p
7 ^( U! Q; e! u" h
  void kcls(int x1,int x2,int y1,int y2)7 Q) H( N4 t' p# ^# x1 y5 T
  {; |# {# s- Y) [  F
  int t,s,i,j;5 v) X( f3 T7 m% o
  t=s=(y1+y2)/2;& }+ W* k# V0 Y4 ^* |* x! E& z
  for(;t<=y2;t++,s--)
/ y* \! j+ I+ z4 w  for(j=x1;j<x2;j++){0 K$ _% Y( V3 W8 p1 H8 I5 {& ?: `* X  ^
  goto_xy(j,t);# ~" v8 S* [8 F" F  d0 D
  putchar(' ');
6 M! S# l! L- T6 Q$ X7 `2 G  goto_xy(j,s);
: x2 e" V; o' P1 D9 O  putchar(' ');
5 Z! o  G3 l+ P; O$ C  delay(10);. G  h7 `; h+ E% {+ U
  }8 F2 [  b, @* _' r
  }
6 h! z5 S* A: `7 @% j; o( c3 s  /*****************close screen clear*****闭幕式清屏*******************/
7 i( Q- `% m, a4 b( G  D2 w" e' r" J* H4 Z( J. g
  void bcls(int x1,int x2,int y1,int y2)
$ f& k- b+ l2 a  {6 O; ~  a1 D; _: A7 a: t" n
  int t,s,j;
, @  M  b# r5 [  t=y1;5 D8 m5 t. }" y$ r  p0 k
  s=y2;
2 u+ n/ U+ j- y  for(t=y1;t<(y1+y2)/2;t++,s--); ], p+ N- t3 d6 d/ c) X4 Q+ e5 d
  for(j=x1;j<x2;j++){
# c+ ]: m/ s: B/ Y; i: Q  goto_xy(j,t);
( V5 V# c9 z- y9 |1 d2 o  putchar(' ');! b1 U' C6 E% \3 g3 e) ?
  goto_xy(j,s);
9 A4 |4 ^' o( q) [9 {  putchar(' ');$ y% ?* N( z/ @6 l
  delay(10);
; ], a* \: M; n( W  }/ M6 x- R0 l9 s7 y
  }
, K; m4 g* u! B2 @2 q  /******************bottom screen clear(自下清屏)********************/# t8 v5 i1 @* I
" u& N- _% m. V  [) a+ r
  void dcls(int x1,int x2,int y1,int y2)* a: Y, l8 s  i
  {
8 J- f% C0 m: Y  int t,s,j,i;
; m. \% d/ V* V" p% x  t=s=(y1+y2)/2;( f& j4 g. S, t4 J5 E
  for(j=x2;j>x1;j--)  q1 Y& N1 ]. D9 n) m( W
  for(i=y1;i<y2;i++){
- I, Z$ m, s  q' r$ U. Y  goto_xy(j,i);
7 K& A: }" s" U3 Q  B  putchar(' ');
9 i$ |3 |$ Y6 D5 S: m2 y0 ]. A4 d  delay(10);
: |/ O) H" _7 w* N, U- P8 I  }
" F+ n5 B; y$ C% k  y0 F( e  }0 }+ \3 d; t. t/ X7 i- B
  /******************设置光标子函数******************/
) @6 x/ d6 l* l# _- U. v( o3 z9 P# M( z$ L  O: g5 S, b
  void goto_xy(int x,int y)
2 j% s/ P  B- V( J4 ?) {  {; ^3 }5 S! j" Y2 V4 U4 o6 k' N
  union REGS r;4 h' P3 l! w. R" B
  r.h.ah=2;
% n$ n' H4 i+ A- [2 y+ F7 V  r.h.dl=y;) v$ D# Q0 v1 c; @
  r.h.dh=x;
0 o; `/ ^! l" q  r.h.bh=0;
; B. z7 t# T* {: x: V( s8 G/ i  int86(0x10,&r,&r);
/ u/ e3 r& o* i* K6 ~  }
: x9 M& @  J" ?3 @0 E* C0 `: S# |1 S& L9 p
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/- \  ]; c' J/ [. ?: X2 _: J# F
; w4 W! _' U! L
  void puta(void)  P' y/ b5 {. u7 d( M3 X% ~/ }
  {
4 A- b$ o8 I! z, }) a, A1 t& K  int i,j;1 H6 Y! p' E2 e1 e( H8 `7 v
  for(i=0;i<24;i++){: j& x/ I& k# `0 x1 P& f
  for(j=0;j<79;j++){1 S; @# F# p; y2 p  C/ [
  goto_xy(i,j);7 n; b* |2 K3 o' h/ s, K- B& I9 q
  printf("a");
7 {! _: K8 c( a# {: l, [7 H" ]. E  }: T, M0 E1 D7 k! V
  }
) I: ]. M( L. S# q* |  }

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