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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( h# w# P: d. R- ^5 K) m% o* F& i0 O2 ^$ ^; m0 q" F' v
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" Y; I* a9 _! ?0 u- \- l' p4 h  Y; I+ J/ y4 x7 ?) s
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. N/ i6 j$ o" G* T; j4 l& d% u3 e  子函数及演示程序:  l( K4 F" ]9 k: [( N3 Y

* p. @3 G3 O3 C" d5 V4 w  #include<stdio.h>7 m8 c  H7 s5 ?6 b# q
  #include<dos.h>
3 O  t& ]( P  q9 Z5 ?( O# Y/ D7 m( J  #include<conio.h>1 h" H$ c' I% s) Y1 f

0 G! D% V  G; M9 u+ j  d, x5 j  void goto_xy(int x,int y);. }- j; v; |2 s* c3 d1 @/ J& U
  void dcls(int x1,int x2,int y1,int y2);
3 f9 H1 H; [6 U  void bcls(int x1,int x2,int y1,int y2);" S1 K2 h  A: O4 n# ]  U
  void kcls(int x1,int x2,int y1,int y2);
6 C4 L( _0 w' U& H; V, p3 B' {  void recls(int x1,int x2,int y1,int y2);+ T8 q: R' T# R5 h& i1 \  G
  void zcls(int x1,int x2,int y1,int y2);! Y8 ^+ P9 B! U
  void puta(void);
: s. \3 F0 w; g9 F1 ]$ H% |7 t
6 @, G* U. E5 a1 F& E5 I" H8 r7 c9 a5 |! R: s
  /*--------------演示程序---------------------*/
: l1 ~2 l- b+ v  main()! s2 G8 X4 G4 U* `5 [( g! n" ?) U
  {
. @7 o6 ]1 g! [/ }8 f: u  puta();5 o; G+ l2 w. Q4 m8 ]! c7 ?
  getch();6 n/ P% Y- Y0 W* t5 Y+ ^
  dcls(0,4,0,79);
$ Q8 ^' `) H. R  j- T6 g6 l* R' Z* B  getch();" s6 _8 H. L5 \( Q
  puta();
$ e8 y& N6 x& ~: l( v; n/ P  getch();
0 ]; l7 [  v- f8 d  bcls(0,25,0,79);
8 o/ h# G) a( c) Z2 o  getch();
1 K/ e- `6 o4 _& V7 S' e& X9 F  puta();
% s7 G6 T; y. p$ Y  getch();
! E) K- M, b9 V& I$ O  zcls(0,25,0,79);
* t7 o& h3 n1 n$ y6 Q) W  getch();
' _) Y& @5 J* n* C3 w  }
- D% z" \7 }7 X  /*********center clear screen(中心清屏)***********/
) i- E4 j1 t! Y  void zcls(int x1,int x2,int y1,int y2)% Q# x3 E0 V" D, d4 h. S
  {& A+ d# X& i/ Y4 m# P, i, w
  int x00,y00,x0,y0,i,d;0 z2 E2 W4 }3 {% `; ~( P( D% O
  if((y2-y1)>(x2-x1)){2 e8 s# n4 Q( y5 I! W+ M$ ~5 p; x0 }! c
  d=(x2-x1)/2;
7 l& T1 k! G- s  x0=(x1+x2)/2;
, n2 H. z& |: U% l, p% G! J  y0=y1+d;
% `" R0 M- R& u4 i  y00=y2-d;
, K9 H0 ~2 ?" j# v- k  for(i=0;i<(d+1);i++)# L) X9 w6 U8 Q! [/ q# B5 b
  recls((x0-i),(x00+i),(y0-i),(y00+i));
) H; Z( c; @8 _+ M6 c) p  delay(10);7 ?. z% i7 G0 u! I( }* |# b; M
  }5 I/ ^: U2 p4 f3 c/ ]
  else{+ i& n) W: d5 d6 W
  d=(y2-y1)/2;
) v& y9 N* ~; ?  y0=(y1+y2)/2;
& F+ j: F& j0 m4 P  x0=x1+d;
6 V2 o) S( }* u% X5 D7 T  x00=x2-d;
, X  S  Z- R( B4 l& l3 m  for(i=0;i<d+1;i++)) @% }. f+ t$ v* X2 Z- `
  recls(x0-i,x00+i,y0-i,y00+i);
0 K: R" c, G  I  delay(10);4 g: R! |  |' B4 b5 V
  }3 L3 l7 G7 U2 x; j4 y/ J
  }$ k7 E- N* b- i
5 k& s4 ~) W7 r& u% K
  /************* clear rectangle side(矩形边清屏)***********************/
. U, J, s+ G3 k% m, K3 g+ q2 w; v7 ?, B2 K, j
  void recls(int x1,int x2,int y1,int y2)( y! _2 W8 z  V0 l& B) f' j
  {4 u% B$ n3 i" s' C) w
  int i,j;$ Y3 X. X" A( M! I( z
  for(i=y1;i<y2;i++){- W4 j- r6 r  M
    goto_xy(x1,i);
4 G: P3 Z4 L' z- I! T; G  putchar(' ');+ Y5 C( k6 w; p& V0 I5 @
  goto_xy(x2,i);( e2 H. V, J  V1 A) b
  putchar(' ');6 Z9 i: h( b1 R' [( @
  delay(10);: V" l5 |) j# X" C
  }9 c1 D) t+ ?% }1 X& |) t
  for(j=x1;j<x2;j++){2 T% L1 y1 x  N# c6 [% k+ C
  goto_xy(i,y1);% {5 Q* a0 [3 B* ^$ {! N; T+ w& d6 X
  putchar(' ');
+ H- \# _6 Y. v% |  goto_xy(j,y2);
; p+ u7 C9 ^" r; w# i  putchar(' ');5 B6 ?* {2 ~4 S, v! u: g
  delay(10);
! @1 z, B& h/ a- a3 T3 j  }
" B5 q2 y. x; C' H. R/ e  }* w; m# I! R* d3 F" I3 O
  /******************open screen clear(开屏式清屏)*********************/
; p" G( R+ V* l, q9 ~6 W  V: d1 w5 |
  void kcls(int x1,int x2,int y1,int y2)  d6 Q0 x& r) Z2 k
  {
) X* W6 K' a# c, q7 H5 }  int t,s,i,j;2 u' _* h  {4 W" w0 D
  t=s=(y1+y2)/2;
2 j- @; C) ]' N! r& B/ O' Z  for(;t<=y2;t++,s--)
4 s* d; _, A, j$ c5 W  for(j=x1;j<x2;j++){
9 }4 T# E5 F% [+ S! e2 }  goto_xy(j,t);
( B" R1 H6 J& @4 H0 |" w  K( N2 d  putchar(' ');) X4 ]5 {/ D& W; a6 o. ?& [
  goto_xy(j,s);
  Y/ {' _8 L0 g3 a' D  D3 f  putchar(' ');- W0 e7 m3 s) w" ^
  delay(10);
! ]9 m* h7 y1 \( w" }  }
3 J9 \! o- w: d3 V5 `% c8 f, k  }
% M! Q# |5 I1 Y: v  s# l# z' o" X  /*****************close screen clear*****闭幕式清屏*******************/
8 J9 ?% a# m* k1 u' l+ M- ?/ X& W* A, n" a: K% K9 X
  void bcls(int x1,int x2,int y1,int y2)0 p! v) H& J9 d* i5 \$ _2 q2 ?
  {
6 a" c4 H5 }; d* y" w' O  int t,s,j;
5 u+ g8 b% @4 i, t% }  t=y1;
% ?5 b: Q" b6 @  s=y2;
' s* {& G* a+ P- K9 }, q1 O  for(t=y1;t<(y1+y2)/2;t++,s--)8 g2 E' T: F- y6 l2 |$ e
  for(j=x1;j<x2;j++){7 {  |7 a: u5 ~- D4 B, G8 [
  goto_xy(j,t);- \# Y3 l6 Y0 j9 Q$ ]& ~7 H. r
  putchar(' ');: s; k* B1 X' c% O
  goto_xy(j,s);( n  T. Y! x; S
  putchar(' ');
6 s( _, y$ m8 l& `) e  delay(10);
$ x1 f% \& ~$ R* n  }3 m; b3 |7 z; A/ L% {7 B' M
  }' A6 ?" i3 z6 j% K3 k
  /******************bottom screen clear(自下清屏)********************/
3 N/ H0 t1 y; S8 T. }. F- Y+ K( P, o- Y: t
  void dcls(int x1,int x2,int y1,int y2)2 W4 m4 ?4 u2 t% y2 x8 F
  {9 H- L7 }% r* c) P
  int t,s,j,i;
: `+ S3 F  M) i0 M- {  t=s=(y1+y2)/2;
& ^; t8 i  k! |+ f  for(j=x2;j>x1;j--)' X" h2 Y# X# D
  for(i=y1;i<y2;i++){* W! [3 o- V- ]0 E: U  ^  X  [# [8 b# i
  goto_xy(j,i);
. S6 }( t5 b% B  putchar(' ');; F! y/ ~0 K8 u6 w% h. J
  delay(10);
' M' A) \; O3 ~1 A+ s  }
# e; x0 d' R  [. }  }
( V) {1 r; s  X1 f9 d  /******************设置光标子函数******************/
( j/ l5 \/ q: r% V; y7 A: M/ E% z
  void goto_xy(int x,int y)
' U: F5 w& v, K* V' e- j) o  {
9 T# X1 m  J8 W% t9 }* Z  union REGS r;
" Y; o0 F2 E, x9 ~. Q  r.h.ah=2;
6 v/ W& H# M8 p2 ]% h  r.h.dl=y;/ |  g9 r% |( }+ U, U
  r.h.dh=x;+ w+ T% \0 F! X- f0 k6 R
  r.h.bh=0;$ g& o* Y! O, ^7 }2 B- ^) G
  int86(0x10,&r,&r);
  `/ t2 x; N9 a  E5 h- }  }0 p- l0 t! I  W5 G
5 U9 l& n; Z9 C9 P* C7 e4 f
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 Z7 i' w0 h, n

" j1 j7 G0 u8 A! z, J* b8 G' y  void puta(void)
3 B, W2 v+ H# D& T: V: @1 i  {! q/ E. o+ H3 Y0 H. M% m
  int i,j;
& Z; c# D* `  |& ?9 P  ~  for(i=0;i<24;i++){
( T0 j* w, H$ W( A* @' I! \1 L  for(j=0;j<79;j++){
. q+ H, l+ e/ Z  goto_xy(i,j);
3 l8 A! e/ W9 G: m  printf("a");
. V6 h2 B5 ^# K! B  }) \/ s2 d+ a/ I" {+ s2 o  k2 V
  }$ D  d: A% Y6 }/ h- T( Z$ G
  }

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