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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,* X+ _+ x" O0 P# m  I* h

1 u* D- x" S* s$ f/ h( [  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 T4 f) |# e1 u

. t5 R8 K7 L  P# ^* A7 k" u! w  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 @6 Z0 B) @4 n! U! D
  子函数及演示程序:
4 p$ U- D3 m+ A; F# Y: W% q! }( g3 ?
+ d1 _4 ^( v, a8 S* v3 N  #include<stdio.h>. a4 d  Y# P  z" H% B
  #include<dos.h>
" L: U! |. K" C! h- c0 s* A2 l  #include<conio.h>
& X6 w1 k5 B. w& O
1 i6 n; ~& P! v6 H* X! L  void goto_xy(int x,int y);
0 f- A$ @, e) ^) S, }4 Q* f& x: k  void dcls(int x1,int x2,int y1,int y2);
  {6 V/ w5 Q; F1 l# j0 y  void bcls(int x1,int x2,int y1,int y2);
$ \( S) K; b7 @5 o  void kcls(int x1,int x2,int y1,int y2);  |$ J! R- Z% M. i) @
  void recls(int x1,int x2,int y1,int y2);
- \( f8 H5 P( u8 B6 N$ B  void zcls(int x1,int x2,int y1,int y2);1 s8 [; E, b7 l: j4 g) @1 |
  void puta(void);
% t  w$ s, ]! X" a" ?' s" |/ `7 P8 p  M- |. S! ~$ f: Y" b7 w2 j% k% x1 ]
1 \" L9 z% f# ?8 h6 j
  /*--------------演示程序---------------------*/0 o6 ~% X) i+ W" `
  main()
; b) V- Q3 f1 ?8 i( f/ D! Y  {5 \6 k1 V5 q5 b5 o+ m
  puta();
" ~0 I$ B. G: P  getch();
9 \8 X; E( z) X: T7 z% K( Q  dcls(0,4,0,79);
1 M  Y$ @; T8 z( H% a9 `$ w  R% Y. Z  getch();
) g0 W4 R7 B* M  puta();
6 {: p  |* }& W% a  getch();9 i0 Y) p7 z- d2 T3 ?1 H  Z
  bcls(0,25,0,79);
' t" v# f5 m$ }+ ~  getch();
2 G: ~1 Y  R$ B$ x  puta();
; t( a0 J9 D8 }2 n  L  getch();
% F! U# w4 N1 G, Q0 m  zcls(0,25,0,79);
3 S7 R3 P) q% L3 D  getch();
- c8 \" w2 l# }" u  }
( a9 z3 K( u# B7 R$ f6 W/ P  /*********center clear screen(中心清屏)***********/5 E% e0 a9 {% s2 z
  void zcls(int x1,int x2,int y1,int y2)
3 ~) b) C% b5 @  {' h( t9 T% P' L3 j
  int x00,y00,x0,y0,i,d;6 Q; Q- n/ D" K3 S6 ]
  if((y2-y1)>(x2-x1)){
/ u+ p2 u) I3 \# t% S: b. z: @% j  d=(x2-x1)/2;+ J) {' O* n( a6 A: t
  x0=(x1+x2)/2;
$ B$ T3 N$ s: G7 _4 `  y0=y1+d;
  }' n8 x/ p/ R) v( |& [  y00=y2-d;+ w6 }6 b+ f' f+ d( T* V) Y
  for(i=0;i<(d+1);i++)
7 a/ D+ x7 q' h: U  O  `" u  recls((x0-i),(x00+i),(y0-i),(y00+i));3 z4 `) w7 u1 M1 B- {& Z1 x
  delay(10);7 M2 L- j# U, u1 z3 A
  }4 f+ }# E1 C! c4 H8 H
  else{" Q* S/ Y3 u  o- ^; s
  d=(y2-y1)/2;% f. p5 Z. |( N6 y8 l+ Y- _: H6 d6 y
  y0=(y1+y2)/2;7 V# }& [2 {( ?6 ~3 g" v' ?
  x0=x1+d;
. t6 ?9 ~; |9 H  x00=x2-d;
2 D7 [1 g* U$ E4 ]$ w' M& J  for(i=0;i<d+1;i++)
+ d5 J8 E$ ^. c- N  recls(x0-i,x00+i,y0-i,y00+i);
& J9 d4 L) [9 |& H4 \  delay(10);
2 y3 N6 F% B$ h! j  E$ O/ n9 z2 X  }; ]8 T! Z7 l! v! g+ H) V- a* T; o5 j
  }, x' Z. r4 P$ x9 o3 [2 \
" M5 Q- \0 ~6 z: A: J9 h
  /************* clear rectangle side(矩形边清屏)***********************/
) S. q8 F) r4 o6 d9 s6 ]8 g% r1 l4 e' E0 t" [# R1 u3 g
  void recls(int x1,int x2,int y1,int y2)  E/ f& `7 j/ ^
  {
  L$ _5 `$ ^3 ^- N' `  {; c  int i,j;
: E) C, \& N( Y9 Z8 @9 ]  Q3 w  for(i=y1;i<y2;i++){
! o. l7 w; f& P5 l    goto_xy(x1,i);( V% X2 k- B1 @) C
  putchar(' ');0 J8 l9 E8 H- V$ R
  goto_xy(x2,i);
4 e% {/ K* A1 X( r  putchar(' ');. V9 g5 t  w, K1 b  m; D
  delay(10);) ?& T8 x9 e; ?* G! ?
  }! [7 G0 v1 y3 b5 C
  for(j=x1;j<x2;j++){
# v0 A; _0 I+ a( A  goto_xy(i,y1);
; i- R- e1 _% r( H: C* h/ V5 p6 t! V  putchar(' ');% n' c8 t4 M& D: w0 O
  goto_xy(j,y2);
. M: C, v6 h+ o% e+ P7 U  putchar(' ');
8 M6 W8 Q0 g* m  delay(10);
) ]3 F: _% m3 \  }4 e( B! u  ]& |6 U% k; ]
  }1 A: t( ^" H* W# T0 b9 l2 ?
  /******************open screen clear(开屏式清屏)*********************/* [& q& \+ y/ P* ]. V- g0 @1 |% [

% ^# {0 v# p0 u  void kcls(int x1,int x2,int y1,int y2)2 F+ H8 a$ R" f- O
  {
  T& L0 b3 ~$ j0 O4 [3 x$ M% E5 [  int t,s,i,j;! g" `$ z6 Q) \" K- N: F
  t=s=(y1+y2)/2;7 g) Q  g% Z$ [; T
  for(;t<=y2;t++,s--)
4 s; [' C6 i& P" d$ P* e1 A! Y  for(j=x1;j<x2;j++){
. i6 n  C* K2 e4 i% k4 ^5 }0 h1 f  goto_xy(j,t);/ j; I1 h' ^1 A8 K  {6 m) ~
  putchar(' ');
4 g) B) [$ g, J  C5 d) h  goto_xy(j,s);
" L& m; c, d& U) Z  putchar(' ');
  d) P% q! G. l" T# h  delay(10);; ^( O- L+ r( F9 Y
  }
( Q+ Z: J. @. Y3 R" k$ T- e$ s  }' h3 K2 R6 Q" B1 y& j# V/ P4 @
  /*****************close screen clear*****闭幕式清屏*******************/4 L6 ~1 [. \& Q% |
1 t" z7 k& W: o
  void bcls(int x1,int x2,int y1,int y2)) h* |1 i0 Y' o  B4 S, s' Q4 V# J0 z
  {2 v1 }0 D! {9 y" O6 k* ~3 H
  int t,s,j;
7 d& u( G' T! P- X( C6 m  t=y1;# C8 Z1 h' o* Y0 ]5 a2 L
  s=y2;9 ]/ z$ v: d$ t9 R( |* N6 M
  for(t=y1;t<(y1+y2)/2;t++,s--)
/ d) i. t$ k7 U" k& e7 `  for(j=x1;j<x2;j++){
3 }: I! k+ I( Z* }( H, P  goto_xy(j,t);/ k7 b$ ]" z0 c4 w' h$ ]- j/ y/ O
  putchar(' ');* M6 s7 z8 K$ v8 v2 P
  goto_xy(j,s);
4 Z+ ]; z& C; s. p' e- _  putchar(' ');' r! x6 ?+ Z9 y2 @' C
  delay(10);2 W& P1 m- T* B/ l0 L
  }( t$ `. e  R6 T4 s. f: ^
  }
  K$ S# e* F' s0 I; j4 L: P& ?  /******************bottom screen clear(自下清屏)********************/
; \! R! z. Y4 _/ k: \
" t3 ?9 o0 D8 w$ F, r# P  void dcls(int x1,int x2,int y1,int y2)
; [, ^# V( Y9 c0 P8 ?+ P, |0 E  {! U* u; M6 z4 W0 q5 `  S( K; f: c
  int t,s,j,i;$ N+ l7 n; o3 j, `+ e
  t=s=(y1+y2)/2;
) n: `% \1 e5 ?3 r. z# I  for(j=x2;j>x1;j--)
; w9 y; ?: Q8 J0 _7 X2 @* H  for(i=y1;i<y2;i++){
: b8 r2 Z: n! P; ^  P. z  goto_xy(j,i);
6 b& u! b0 O. P7 T: e1 [7 B  putchar(' ');
8 h$ A1 T" |/ r+ f" ]  delay(10);
+ _! c# u/ F* `2 v6 V0 d- D+ r/ S0 X  }) m( D( Q; @1 U% x
  }
' R3 J: }6 v" u7 K4 {  /******************设置光标子函数******************/
2 v6 B  D9 @! X
( l, v. w: m5 k+ E% f# F. M  void goto_xy(int x,int y)% `5 W) C& K" L! C8 C
  {
! X3 |+ ?$ X7 H% j7 c  union REGS r;. a) c, \" I3 z. A$ z
  r.h.ah=2;, l1 K9 k; G/ \# D  d8 k/ {
  r.h.dl=y;
, h; k4 V7 `5 f  r.h.dh=x;
, f: V, {. G3 h: T6 @7 W7 J  r.h.bh=0;
' |' x7 v1 O0 Z+ ^5 m  int86(0x10,&r,&r);
% K( s7 z+ U# \+ u8 V! L  }
# A" F& Z  D7 C, ~+ B
: z  g+ J0 I8 k" B/ B  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 G3 s4 |# l4 `! G9 F- h) W' s- N1 a+ C' |& U& C
  void puta(void)
2 b3 V+ ?. h% y" b7 j% T& M+ [7 d  {# l3 g( i) w/ W! W2 P+ I
  int i,j;
2 d0 T+ O2 o3 ^! b  for(i=0;i<24;i++){
# I) P& T- N0 K5 |! {/ d) i  for(j=0;j<79;j++){- w+ i; c* O+ C% G
  goto_xy(i,j);' h) ], N, R3 B+ w8 _
  printf("a");
: U4 k. Q8 _1 f7 s+ c  }
) X8 c% C& r* _  i/ V; D% H' L- g  }
1 [3 @/ X' h7 U( f; f  }

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