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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 B6 o4 K" |  Z4 \2 K+ u5 i
3 W  a1 ^3 Z0 |- N* u8 G/ I  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 e2 R5 y5 A% k" z1 U: D8 b6 C! e' N$ a0 E! s% y
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
$ X6 L2 r- B" m- M+ g! e% y+ b  子函数及演示程序:6 Y  T" G% J2 }2 C. |
# z) i* A% L( |# J5 ^/ Q
  #include<stdio.h>3 O) K6 ?1 z4 V1 Z
  #include<dos.h>2 R0 `1 T: c* N' B6 S9 t6 @
  #include<conio.h>
1 K0 P; v/ r1 m! {
+ a4 Q, b; i1 U/ |6 x  void goto_xy(int x,int y);
" O( W+ O2 i4 I4 N, A  void dcls(int x1,int x2,int y1,int y2);* B3 g: A  U! R
  void bcls(int x1,int x2,int y1,int y2);. Z4 D* P( T* j& S$ ~* q; u' n8 O! E
  void kcls(int x1,int x2,int y1,int y2);2 b4 u) e0 D, h  [
  void recls(int x1,int x2,int y1,int y2);
9 I5 K, |: W( J: }& e( R  void zcls(int x1,int x2,int y1,int y2);5 s0 z1 I) W* d4 y, ?0 W
  void puta(void);  {- f/ r  D! A. j6 M

4 s0 j  e+ V" B! c4 N( c, W: B! D
0 d2 }+ `# F) v  /*--------------演示程序---------------------*/
, y0 F3 B  X' c3 T3 Q1 T5 g7 |  main()/ S$ K5 X4 _+ j& A- ?1 q+ [0 U
  {( O/ |) u: x2 U% a; X5 e( u
  puta();
& E1 E, R( G' e7 _9 ?  getch();
$ E4 F$ X: W5 Z- J  dcls(0,4,0,79);
4 v  K1 Y1 j3 x2 n- X  getch();" d& r1 S0 J3 f
  puta();
5 q% N& g# t* y. q; }6 z  getch();
- O' h8 v! i3 }  M9 U1 C7 W  bcls(0,25,0,79);
; L8 B3 R- h9 {% f. {$ L  getch();# n: u' A9 Y! I" l1 D, L
  puta();$ @6 J# X9 {5 U% t8 y# u1 n$ ]3 z
  getch();+ G; h: N: M  T. }% C* Z* |
  zcls(0,25,0,79);
& @/ T1 j6 r6 l1 g2 u  getch();$ f7 p# E7 K+ A' x- K4 i
  }! r: r( `9 a/ k
  /*********center clear screen(中心清屏)***********/* D6 h' f0 i8 c! i; w
  void zcls(int x1,int x2,int y1,int y2); C) o& P, E3 Q# x- N5 t  Q
  {/ B* y+ _/ u5 ?* K0 F
  int x00,y00,x0,y0,i,d;
3 W4 s6 L6 b6 r% n. V% A0 @' E. H  if((y2-y1)>(x2-x1)){# x$ R1 s* q0 k) Q! j; p
  d=(x2-x1)/2;& E# C0 k3 J5 M; }
  x0=(x1+x2)/2;
! H- G8 h: ^0 Q7 ]4 y! s4 d4 S  y0=y1+d;
' Q( u# }: G3 ^1 }- F# ?' F  y00=y2-d;
! c! M0 [: Y5 n. H0 Q7 M  ^  for(i=0;i<(d+1);i++)
" m4 C. h# q: O3 q2 }- ^' E& ]3 H  recls((x0-i),(x00+i),(y0-i),(y00+i));
$ Z% A1 O; M7 g" B6 M9 R  delay(10);" ]5 b0 H! H4 o( f
  }' @/ ?2 \- _1 a' j$ i; `2 I
  else{
0 u; ]# v4 r9 q7 J" k  d=(y2-y1)/2;
& F3 [0 n7 Y% B6 x/ p  y0=(y1+y2)/2;
4 G  p$ s/ ~% ~  x0=x1+d;
) t9 k' m4 E3 a3 ^7 ~0 Y  x00=x2-d;
8 _3 E% J4 Q5 N6 x  for(i=0;i<d+1;i++)
1 p* u, Y4 ]3 |' b" X0 n  recls(x0-i,x00+i,y0-i,y00+i);
5 r- i3 d1 o/ \  m  delay(10);
6 p) U; S  f3 {. X' w9 O+ A8 ]  }
7 A4 J  }2 C9 }' f  }
6 g2 e1 N5 j, E7 b
6 _' b: p$ [3 f- y) Y6 M" i  /************* clear rectangle side(矩形边清屏)***********************// }( |- m, b  W# Y9 M& _. D

1 Q( g% x' A9 o( V" U; O  void recls(int x1,int x2,int y1,int y2)% ]1 f% S6 w7 J- l% R( \: Z! D
  {( `. d: O1 N# r$ P% l7 g4 ?8 ?
  int i,j;
5 N# \& T5 F6 H0 v4 H  for(i=y1;i<y2;i++){
9 n6 ]% j; q  T( t1 ~1 f    goto_xy(x1,i);' ~  O& ?$ D, ~/ S7 [2 u- V
  putchar(' ');" |& I0 w" y% b4 [% Z) q) d
  goto_xy(x2,i);
8 r( v& q' V9 i0 B# r( @7 O! z  putchar(' ');* b; i* I: P. {2 H, h, g
  delay(10);, k! M4 ]2 J" V' ~0 O/ Q" o1 A
  }' E) r, r4 L1 b- w6 ]2 \
  for(j=x1;j<x2;j++){& u; ~$ O) @0 \# \; T8 |# D
  goto_xy(i,y1);
7 U  k( r* b6 }+ B* w# t5 l  putchar(' ');
, ]; Y. g3 }2 W8 A' a" V( w  goto_xy(j,y2);
$ L1 `/ C6 W. p' O3 U+ l7 [  putchar(' ');3 p9 t$ a/ Q/ U# K9 m( t
  delay(10);
1 N( \. V' q7 `$ D9 ?3 G  }
3 i& X0 n1 D; ]$ c* h1 {  }
) Z$ A! }" }/ Y7 O  /******************open screen clear(开屏式清屏)*********************/+ x5 B" k9 _1 s2 C
0 P, \' G3 d% O  F9 q/ ]2 F+ J
  void kcls(int x1,int x2,int y1,int y2)+ [- m0 _2 h! G* t* k4 z
  {
5 w3 y8 R. k0 f. s1 {, M  int t,s,i,j;; U8 I+ R& j4 \" ?& |
  t=s=(y1+y2)/2;
# D+ Y$ ^9 p4 E3 }% }  for(;t<=y2;t++,s--)
- z$ ?6 f- L$ Q2 g* b2 V; Y) {  for(j=x1;j<x2;j++){
3 y: y% I9 A  e% v: O: f  goto_xy(j,t);
8 R0 N4 _( {& n- m& W  putchar(' ');
5 c+ a, U4 V9 P% u  goto_xy(j,s);1 i' a& P6 \$ I2 T* W( m
  putchar(' ');
4 q2 ]2 K2 \. R6 M6 b0 H  delay(10);
) M7 B9 T  b" M4 d8 p  }
3 Q1 A5 l; N7 E  }: Y. m5 h9 b9 M# f" J1 \+ G" V: [
  /*****************close screen clear*****闭幕式清屏*******************/
# A- ^; [" a0 p/ X) T: I4 `
8 H8 Z) w! i$ Y$ F( z% K  void bcls(int x1,int x2,int y1,int y2)
  |/ o' G3 S# q1 p) A  f# h1 U  {: D% N0 N/ j+ `1 y8 Y1 b1 ~4 T! U6 Z
  int t,s,j;
/ W! Q4 t( ^4 @3 m. j* S  t=y1;
4 q0 R9 n/ W' ~: p( [  s=y2;0 D1 ^& H% N& H  D0 _4 Q
  for(t=y1;t<(y1+y2)/2;t++,s--)
& ?4 L" C' f8 D/ q  for(j=x1;j<x2;j++){
& j6 l/ W& \# o7 v- ]! u/ A/ H  goto_xy(j,t);! T& \* W8 y% ?3 `0 Y& L
  putchar(' ');; `* p+ x. ~3 |, _: d" S0 Y; p+ u
  goto_xy(j,s);
% X5 m5 l. p* G2 [  putchar(' ');2 a! g% a( i1 g& q" b! A
  delay(10);
/ T" s' ~, c" U1 r# K" r: A  }
1 M* a$ X+ Z/ q3 _, V: R  }) K/ w4 a8 p3 ~, P) Z+ ~0 I
  /******************bottom screen clear(自下清屏)********************/' p, m; X7 \: `3 L2 H2 G

2 }2 \" Y5 B1 G6 h" G  void dcls(int x1,int x2,int y1,int y2)+ {; ?* }8 l5 d3 T% j) |4 _
  {
- Q. a$ E( [6 P! d  int t,s,j,i;
* k( i; ?5 h! W  t=s=(y1+y2)/2;- T: ?4 p! u1 c7 o) I+ V
  for(j=x2;j>x1;j--)4 p2 c/ t) N9 ~" T5 Q
  for(i=y1;i<y2;i++){0 u/ z% N& z7 l
  goto_xy(j,i);
& |" Q" ?2 g8 R* C; _2 Y  putchar(' ');' _* }# U3 @* A7 {/ f5 ?! }
  delay(10);( E0 f" v0 E! R
  }
6 p0 B! a: M( e3 t  }
8 W) Y! t9 V, F  /******************设置光标子函数******************/) K7 A4 w' ?$ ~3 n9 G
' q2 z5 O  {5 F5 a
  void goto_xy(int x,int y)
2 j+ @; P$ ^+ Y' w. ]" a' r' G  {! ?2 k0 ^! B" I# n" b2 ^
  union REGS r;1 _; s; D" G9 A5 X( U6 ?) d
  r.h.ah=2;
5 V& o3 w/ L, [. W7 z8 |  r.h.dl=y;! ~1 ?, Z. S) d$ [0 E
  r.h.dh=x;: z" ]0 l3 W2 w! M. l3 T# E
  r.h.bh=0;
+ O0 T: E. M2 g0 z5 J% ?  int86(0x10,&r,&r);
- v2 H% u+ r8 t* b4 e  }6 ^7 y5 v+ ^8 a
9 J1 D4 u2 e/ y3 W
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ f" m* g( B6 \# v2 e7 d9 d
  u2 n. m/ b! f) F) L2 K6 p
  void puta(void), {- X5 u; n7 f& c9 R
  {
! f  O& _! D0 N+ ~& z" k* A" ~* D  int i,j;
' x) V0 Z8 C$ W- o3 f  for(i=0;i<24;i++){
# b+ z1 c, t& _# @8 B/ Y& Y. ~! d  for(j=0;j<79;j++){
! X6 \+ `8 I. S) J! W5 r2 G5 _! `  goto_xy(i,j);% y1 a* T4 j5 @! f6 ?) _
  printf("a");
# w  `  O4 P9 Z7 Q  }
  e, O: g2 y4 ~  }
; H7 _& R- g/ w8 Z" s  }

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