返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# k0 u0 t" O: S  N0 a( Z
2 e0 p. ^; y$ K9 g  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
8 u' L" ?4 A# v& g) x# l, O7 s5 n8 X+ o" o3 k$ V2 ?/ r- Z3 \' {
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" R/ ~( A# o" e+ _  子函数及演示程序:3 ]3 P& d% ^$ b+ N
, D: V+ q; n1 w8 y
  #include<stdio.h>; B$ J; e* F5 K, P1 {: \& N
  #include<dos.h>) f1 B) a2 [# [2 Y1 r" Z
  #include<conio.h>$ J; ~% l6 p0 Y0 X
4 `9 E' V, C+ f6 C$ h  T/ O+ N. a0 g
  void goto_xy(int x,int y);  X5 L8 Q7 k6 u' K
  void dcls(int x1,int x2,int y1,int y2);# C/ R0 ]: K: z
  void bcls(int x1,int x2,int y1,int y2);
( q6 ^& w( n8 o3 O" x" d3 y) X$ h  void kcls(int x1,int x2,int y1,int y2);
7 X& o, p$ E5 e! i  void recls(int x1,int x2,int y1,int y2);
: F, x/ n! ?9 Q0 _  void zcls(int x1,int x2,int y1,int y2);8 n4 d% e. |9 p! `5 T
  void puta(void);- I6 q" X$ H% ]: _* x; O7 k

& A+ U: f8 H2 x9 J$ `! s+ R' Z( H
1 s2 D9 B) e0 ?  C  /*--------------演示程序---------------------*/  O# m& [+ ]3 d
  main()3 \- \. N, N1 v4 o8 z
  {
: q! a1 ]; Y0 I4 G- u  puta();
9 k7 ?& ?! }# y6 d5 E$ _  getch();. H7 U! m$ A# ~
  dcls(0,4,0,79);
0 M5 [2 z: q  S6 \; P- G. G" ]. b  getch();
/ K% A$ k4 x$ R& @& E  puta();
6 r& i# p/ V: ~' B  @  getch();% Y2 ~* ?" s( Q  F" b, q; J; H
  bcls(0,25,0,79);
2 U8 `( d8 P. O* {  H! N  getch();4 b. y  J, i: G3 v+ {" b
  puta();
& H/ P; m8 [$ S3 w5 m5 C# G  getch();
. E5 @; w" R9 X1 i% y5 R6 p3 n9 h  zcls(0,25,0,79);
; E+ L$ y0 f% Y( C/ i  getch();2 a; i! W$ I2 E3 x0 [) [, Z
  }
7 e: K' U; i  c* D( J) w  /*********center clear screen(中心清屏)***********/9 r- D( X9 |3 e; R3 \. c  Z, r
  void zcls(int x1,int x2,int y1,int y2)
1 S+ j) r. I( k  {  M  H! q' a3 b, ^/ T
  int x00,y00,x0,y0,i,d;9 G8 K# ~2 |' R0 ]6 K( X4 F
  if((y2-y1)>(x2-x1)){5 i4 l0 h9 X9 ]9 O( H
  d=(x2-x1)/2;
4 f4 e  m5 {( `' U+ J1 T  U* R$ r  x0=(x1+x2)/2;
' U- Y7 ^+ I" H; W" m1 b5 j% V  y0=y1+d;
& _% ~6 a* J+ W  y00=y2-d;
7 f7 w. p  f; s& z! o  for(i=0;i<(d+1);i++)
3 J5 e, g/ x6 y/ E2 O  recls((x0-i),(x00+i),(y0-i),(y00+i));# s4 |0 D$ `7 C2 Z
  delay(10);
# c8 P0 c0 Y3 G% w' h  }
1 j8 _* |* I( f8 h3 R! ^  else{* E$ @: b5 y5 W9 X$ L
  d=(y2-y1)/2;0 |* A: Z5 i( e5 G4 i7 L
  y0=(y1+y2)/2;
, p- Q, A3 T" u) w! u, C! Y. V2 T  x0=x1+d;6 b; ], q8 @: o, D% x* P
  x00=x2-d;
3 Q" S7 L$ d9 `* b, y  for(i=0;i<d+1;i++)
0 U9 y" m- t; o' Q  recls(x0-i,x00+i,y0-i,y00+i);
# n. G; |3 Y. y4 n  delay(10);
, ~$ V: S# u! G  }3 c) ~8 u* E0 l5 B
  }
. C5 g5 M) N8 X  A) g6 u
* f$ K& W5 F/ j  /************* clear rectangle side(矩形边清屏)***********************/
' R% V, b3 Y; ]+ _+ E0 v, ]  m  v" [* B8 w& T& n. g* d
  void recls(int x1,int x2,int y1,int y2)  `% F9 F& m! r# C  M7 |
  {# r5 ^0 ^9 l+ N+ v0 K: k, X) |
  int i,j;3 S% k6 c) Y+ ~+ T
  for(i=y1;i<y2;i++){
* _( C2 B, Q2 }0 ~6 V# i    goto_xy(x1,i);
3 R- Q+ }" A9 a1 ]  putchar(' ');
0 N- P  [  Z4 N; P1 S  goto_xy(x2,i);
; p0 u+ h0 i4 H, F% [1 I  putchar(' ');
, \: E. ^4 c3 U$ e/ Y  delay(10);
* e6 x3 V" x0 u4 y$ Y  }+ Q6 g# D- v  e* W  g% ^
  for(j=x1;j<x2;j++){
( h+ Z0 ~' c8 T/ n1 P  goto_xy(i,y1);
3 E7 R( o. O  H( @9 H: E0 p  putchar(' ');. e3 O( b! M$ M
  goto_xy(j,y2);
) X) c, {" A* K1 z4 U$ C/ e8 P  putchar(' ');
+ m& S" i- a8 s. l- n/ C  t7 E7 H  delay(10);$ I6 q2 X- F! v. J( B
  }. R1 j( P" y7 t6 A2 l- ^" z
  }
( J& J( Q, s, O3 {2 `5 j  /******************open screen clear(开屏式清屏)*********************/6 @- B2 ^4 A% n& m% |4 g
% k6 L) s# H: A
  void kcls(int x1,int x2,int y1,int y2)
0 S$ Z  A; |% N' F5 ?  o  {- s6 t2 T6 y; w7 W6 @- w% `
  int t,s,i,j;2 G' i6 Z$ J: X; V9 k" x, i6 x
  t=s=(y1+y2)/2;
4 a! \! T; t3 j) }( ~  for(;t<=y2;t++,s--)6 x8 Z4 y0 z$ b5 t3 V
  for(j=x1;j<x2;j++){* q( Z/ ^2 j' L# i* s& e& R3 O  P
  goto_xy(j,t);
8 J; r7 u! T9 f  W9 I  putchar(' ');- {1 E) G8 h2 r- f5 R( G, @2 K
  goto_xy(j,s);& Q  j, |& A0 V7 I4 \7 U
  putchar(' ');. s6 M+ Z6 o0 C  K, d4 |% d
  delay(10);9 R" i3 N: e3 T3 _% Q! @3 Z
  }
" J7 ^3 h0 h1 _; r( P; X8 ?' _  }9 }8 m- i7 N/ N6 l# u
  /*****************close screen clear*****闭幕式清屏*******************/
/ H. ^; A$ t1 s5 K/ z% j9 n/ b! O  K& c$ Q" ~1 L4 e- b
  void bcls(int x1,int x2,int y1,int y2); d! D" w4 Z: D" I
  {! O: h- n: n( z
  int t,s,j;1 z" d6 o0 p: p" o
  t=y1;2 F, j% b- P! q7 a
  s=y2;7 w. p7 H% O0 k( g, F, e
  for(t=y1;t<(y1+y2)/2;t++,s--)0 h( F; v" f' e
  for(j=x1;j<x2;j++){) p2 f) M5 _9 j( l) ?
  goto_xy(j,t);6 j0 m3 C7 ?, \* i  O
  putchar(' ');9 x  r- b% d9 y3 h# i* v  t
  goto_xy(j,s);
* [2 r) M1 ]4 t( q' n  putchar(' ');
0 Y9 f, P2 f7 T8 p  delay(10);3 ^! W3 S# O1 O; |( }; r- L
  }
1 i! q3 L; e; y7 p- h0 G8 R1 w  }. _8 t2 y# b/ t1 q0 G* r4 c3 k% T( I
  /******************bottom screen clear(自下清屏)********************/* t. g5 d, p# i7 k6 N- r, g% Z* ]) ^, t

3 E8 d! f4 {/ D# D/ q. q  void dcls(int x1,int x2,int y1,int y2)
1 k# l( P, G4 g$ S9 N1 t, Y  M  {7 g1 Z% C7 o8 u2 [  C% @2 c4 X
  int t,s,j,i;5 d8 m7 M; V: q
  t=s=(y1+y2)/2;" x/ u( w: ^8 q3 c
  for(j=x2;j>x1;j--)" @3 z$ b7 B# M; ~+ I0 S, Y
  for(i=y1;i<y2;i++){
! K- {4 w# ~3 H5 ^7 J9 a. {  goto_xy(j,i);
- D# _0 V$ w) Z$ o  putchar(' ');
& |5 ~* \- r/ Z. K, T, k  delay(10);
+ h; O2 z" h0 j+ E! ~" Y  }
& o" z2 H3 E' ]* t) B& I) {  }
+ e0 R2 L- z. m( t+ \7 \5 l+ M+ i  /******************设置光标子函数******************/
! F' |$ K9 i6 T( S- w( y" D
! O2 F/ s6 T6 f( ]+ x4 c  void goto_xy(int x,int y)
: z# R, z, w' ]1 `  {9 K) K1 Y- \7 S, r7 \
  union REGS r;
. Z* R1 J" N. v. g  r.h.ah=2;
& }* U$ O( Q! a  r.h.dl=y;% i0 o2 h2 U' R; H: q
  r.h.dh=x;" T& Y2 T' V, J# z6 v
  r.h.bh=0;' X$ K8 q- X0 y# B
  int86(0x10,&r,&r);
8 t6 e" g3 s4 e. B" h  Z  }- w4 ?/ o9 T% L2 z3 K- |, r  d5 R. r
7 s$ `8 y2 N7 }/ s
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/; H  B  E) U2 ?2 v9 }+ e- \

& X, n: A7 T' i& D, Z/ ?  void puta(void)
' e, N8 u( `: d4 b9 x) f+ P. q6 B  {
0 O8 l3 Z+ i0 u  int i,j;
6 ?$ S7 ?1 n  p' h* B" t  for(i=0;i<24;i++){
! T7 n* G3 F5 A! U  for(j=0;j<79;j++){
; G( [& o9 e% f/ |" f  v  goto_xy(i,j);0 h3 @2 n8 L) Z
  printf("a");
8 S) ^$ ~  P% P/ k' m  }0 O; k& b2 x: V
  }- F5 X( Q6 d1 U; _
  }

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