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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 _4 u0 S! ~8 P( ^; t% C- A
4 A( z. o( X' ~- r5 U. I  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 `. ]& h7 y+ }0 _1 n1 A
& o0 t5 Z. z6 Y$ C1 F  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ b! P. |4 F+ j6 z5 _% R  E5 F, @5 c  子函数及演示程序:0 D! s% ^: e% A: u- ~% L
. ^# J/ S" l5 O7 i: X
  #include<stdio.h>9 p# ^! p2 s; j
  #include<dos.h>  n, h  Q9 U% X* e0 v5 Y
  #include<conio.h>
8 C2 Y7 }8 L8 i! b: R5 O, s. n8 H' H& ~$ G/ a3 o% v  }/ U. j# `
  void goto_xy(int x,int y);) ]4 p+ i: X, t- o
  void dcls(int x1,int x2,int y1,int y2);
* ^/ G* K1 q; M1 M! x6 `: W  void bcls(int x1,int x2,int y1,int y2);6 v# N) b2 D" A' D5 [! L
  void kcls(int x1,int x2,int y1,int y2);
; j( \9 O' M4 V& f. ]' w0 y  void recls(int x1,int x2,int y1,int y2);$ g7 C. I6 Q) u' o# k% v) O* v
  void zcls(int x1,int x2,int y1,int y2);, @% a' o: E) e9 }. u6 a
  void puta(void);* C5 E1 n( K% l1 K5 t* @5 u3 O

% |! x* H( u' q1 t8 ?# \! [( |
/ G: `' i0 D4 P5 ?9 ~" H& M  /*--------------演示程序---------------------*/
4 _; s5 W, s. n: D; D" H  main()
" c7 y! |5 o5 X* n# C& ~  {
$ n6 [$ T7 `4 O8 T$ }  puta();
( k# ]' X+ N+ [7 G  getch();7 o; o8 D: H7 K% R* P3 ^
  dcls(0,4,0,79);
" d7 u9 f  \' c  T+ G4 C7 D  getch();8 X* x4 L4 e# d% P; @7 q+ B' x
  puta();
& y" Q0 I6 T: S' C  getch();
$ R8 g7 _: D: X. z2 m  bcls(0,25,0,79);
. y" P4 R- f) g/ m& n  getch();4 T. j9 I/ n: h$ M0 A
  puta();7 U: L% Z' @9 i+ [! s$ t
  getch();8 b& `- u+ G) k! k
  zcls(0,25,0,79);3 L4 _2 n9 Q  b& I; N$ r  E
  getch();
0 y$ l1 t8 Y: X  }$ e3 c" N; _; N( Z4 {4 n+ u$ F
  /*********center clear screen(中心清屏)***********/
- O& Q  o  W  O! A  void zcls(int x1,int x2,int y1,int y2)
5 A# B1 f; X2 U( U  {
# `* h# X( |& E% H# W0 Z  int x00,y00,x0,y0,i,d;$ t3 p1 \* U9 v7 Q
  if((y2-y1)>(x2-x1)){
  @8 e" `0 N- M$ e4 C$ u" b  d=(x2-x1)/2;9 @7 y# p3 ~' b2 e5 `
  x0=(x1+x2)/2;' T6 [  r4 @4 g& U: n, V8 u
  y0=y1+d;; s+ z% G& ]! j/ E
  y00=y2-d;
: I1 N: `1 U0 |2 `7 R  for(i=0;i<(d+1);i++)
8 q! t  U& ]: ~# ~3 l  recls((x0-i),(x00+i),(y0-i),(y00+i));
+ O; h% w+ F; z, j  delay(10);0 r9 D6 S3 p$ P% B, o' e
  }
4 R- j$ q( L, J, L' C$ j  else{
, i: S# [, ^1 D! `+ s7 T  d=(y2-y1)/2;
1 A$ Z$ ~! o  e  y0=(y1+y2)/2;9 ~% e) I+ Z% W( U4 X
  x0=x1+d;8 e2 S5 {8 P0 |* |% m, ]
  x00=x2-d;  P2 A+ m7 h# r! L: W
  for(i=0;i<d+1;i++)
3 t+ h0 H4 l( w/ _5 r  recls(x0-i,x00+i,y0-i,y00+i);8 _/ P" O( B) U. Y4 Z
  delay(10);* u. T, P5 J' D% d4 l& |* M2 C* U
  }; l4 y9 c  H0 f; Z. V* O
  }
7 q5 T# _' o5 }/ m6 S, N8 Z
4 W. Z& G7 u7 M! d/ j. g6 k  /************* clear rectangle side(矩形边清屏)***********************/0 v7 o+ n1 e3 Z7 V$ s7 c  F
0 H+ L3 o6 w* l4 ?/ v
  void recls(int x1,int x2,int y1,int y2)3 P  m3 u3 S3 S. E+ T. }. c
  {" w( ?; J6 [7 }" h" D
  int i,j;
! R* s% Y: F6 g/ J* ]1 i5 R% r7 P  for(i=y1;i<y2;i++){0 `. e2 E5 L# g/ G
    goto_xy(x1,i);
8 T& C( Q6 a# z  putchar(' ');
- Z( |* b# N: l4 D! a( m# M; m  goto_xy(x2,i);/ k' y/ m3 Y5 \1 n% |
  putchar(' ');
3 V/ g+ h* |9 ~) j/ }1 k7 D, i  delay(10);
; Y/ f) v9 ]( G% t' W8 Z  }/ N: Q. L4 \5 [; m# L- r
  for(j=x1;j<x2;j++){
8 N- n# `# U$ j8 y0 g( N  goto_xy(i,y1);3 ~/ G. K0 t: T9 p
  putchar(' ');
0 D; h- U' q2 X& H' i# S5 \  goto_xy(j,y2);
& _1 @% U* d7 F, _) f8 X' L  putchar(' ');1 ^, ]& m8 w; e( X3 ?
  delay(10);* O' p) u1 m/ \$ T: Z% W4 X& k
  }/ x4 w/ r+ A8 O% k: o$ _. h: e" {
  }
2 u: y: ?. K' \$ E- W  E  /******************open screen clear(开屏式清屏)*********************/
: u( z" [. I5 Q! ^. z! t0 o: A' e7 ^
# E+ `3 ]6 J" c0 w  void kcls(int x1,int x2,int y1,int y2)
/ c6 y. G! h7 S$ d% Y9 K  {7 k* W( d0 Z: p$ B
  int t,s,i,j;
' ^3 i& F$ ?8 ^* H2 x1 X0 a" R, G  t=s=(y1+y2)/2;6 U& C5 i8 d6 i
  for(;t<=y2;t++,s--)
' B, R' p# m  @7 l+ {  for(j=x1;j<x2;j++){* d9 |! x) v' M3 a
  goto_xy(j,t);: w3 p1 Q2 [* {1 X
  putchar(' ');$ v2 [& ]( J0 o0 m* s
  goto_xy(j,s);9 G. S9 d2 A$ Y6 T/ _& ?6 u
  putchar(' ');" V( O5 y7 x: c, j
  delay(10);
* w+ h. L0 ^# f6 J8 E  }& j2 U$ v. ]" W. U" j$ P8 {9 J* b
  }: K- e& B3 J% ~: [
  /*****************close screen clear*****闭幕式清屏*******************/
: C* B* e3 k3 z! ~
$ u8 g0 Y- Y% ?4 s5 {  void bcls(int x1,int x2,int y1,int y2)2 V- E9 R# S: R* o3 v
  {" l" E: E/ b3 g$ k8 p4 Z. U( K' ^
  int t,s,j;
' o. ^" ~( H( i: x/ Z8 i& K  t=y1;
. f1 M! L1 r5 l" D0 g  s=y2;
$ X/ y8 k8 U5 a' H  for(t=y1;t<(y1+y2)/2;t++,s--)
# K! d2 E& p, N0 c  for(j=x1;j<x2;j++){
2 C6 X1 m: K. ?! [5 f! u4 b" D5 t  goto_xy(j,t);
$ K; K/ h+ D% u5 ~  putchar(' ');
! R( n( u; t- y9 ?) l, w" {  goto_xy(j,s);6 T" s4 ?' @- H8 h. p
  putchar(' ');8 W+ K  U% E: m$ h! P
  delay(10);
! {- s/ s! {7 V2 g  }
: {3 E  I# w( V# u7 i  }9 z) E/ r8 d6 F6 M% L
  /******************bottom screen clear(自下清屏)********************/0 j. p% \3 W6 p7 J  B/ b7 o$ M
  U% i# Q& n. {' C
  void dcls(int x1,int x2,int y1,int y2)
' O7 }$ L5 q1 f! t  {
5 u; J0 @3 b; @4 N3 I8 m+ a  int t,s,j,i;# w$ i  S" D4 I1 C7 Y( Y
  t=s=(y1+y2)/2;
/ }% b. e# L9 H9 y; {* n0 T  for(j=x2;j>x1;j--)
5 H. O! \0 X8 B* I! h  for(i=y1;i<y2;i++){2 G9 Z# y$ {# f! d0 v
  goto_xy(j,i);
# A" W9 r9 w7 Z  putchar(' ');- M3 p1 x) j. |  q
  delay(10);. y2 K& d, \  w: m+ n% v
  }/ e2 y* C3 w9 P! g
  }
' L7 ^, D3 @- a6 G% B  /******************设置光标子函数******************/1 F  U* s2 k+ A; t7 I; t3 _% H
2 y- z3 e8 F! S1 J4 t
  void goto_xy(int x,int y)
- o1 _% N- V2 V0 l  {
! B& ?: W6 p& h2 {8 m8 {8 N2 A  union REGS r;
* B& R* F7 y  Y; e6 c4 u8 F: D, [  r.h.ah=2;
/ l' a5 H. I- o+ F  `  r.h.dl=y;
& c. t* y* L( B9 Y' b1 S& d  r.h.dh=x;3 F4 i8 O8 v" W
  r.h.bh=0;9 R* I( h" Q& r2 G' y( D& {6 a
  int86(0x10,&r,&r);6 X8 K! ~$ f  ]6 P
  }2 \- e" t/ B4 }/ Q: ^8 R
5 K! Z- i/ f' p! x: h9 {. |3 D0 D7 T# ~
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 l% M- r; R3 e$ O4 s: _, E+ b, h9 R3 }
  void puta(void)
' S9 E2 k9 S9 d3 L& g' y3 Y& J" e  {
& I  i5 p2 x( [: \. u0 d% n  int i,j;
; G% C. \; G0 ?1 M; }, T$ J; b  for(i=0;i<24;i++){8 u: R+ L+ S( P! I" D
  for(j=0;j<79;j++){6 n: @1 p5 W& ^) u1 \& @6 D
  goto_xy(i,j);6 y  Z( r; E' n  f& J
  printf("a");
; ~8 s! v! P$ w5 F. F& Q( T  }
* b) s4 @/ h' d5 l. z0 _  }. g0 J3 H. u# }* f. j6 a2 c, k4 p
  }

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