返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% e/ U4 a# _! q0 W! I4 q' h7 W+ q6 q: E; w; A& W
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. c  Z3 u2 {+ m. n' O+ X+ W; c
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 f& ~) U! ^4 E. [/ I" s$ F
  子函数及演示程序:) ~4 }1 i3 U7 N7 W$ [1 L; L0 v/ _

8 C, e% W( H, f/ m7 m( |  #include<stdio.h>
$ M: D. O2 M. w& g; X+ w  #include<dos.h>
7 Q- z" H3 x; l/ p  }7 A! E  #include<conio.h>3 g  u0 |$ E5 T1 I$ h- z) b

! G) {# G) W2 N7 B$ q! B+ M! Q  void goto_xy(int x,int y);
3 z) |5 _% Y6 `) [  P  void dcls(int x1,int x2,int y1,int y2);; E# Q& N# g. _& r3 f
  void bcls(int x1,int x2,int y1,int y2);
6 T" ~! B; l; K" j) q$ G$ r  void kcls(int x1,int x2,int y1,int y2);
" G7 ^; t7 Z& J7 R  void recls(int x1,int x2,int y1,int y2);% r" f* o% k# l8 z9 W/ F
  void zcls(int x1,int x2,int y1,int y2);; N5 ]1 Z/ C/ Q1 z; r- i
  void puta(void);
0 ]+ e9 p$ c; g2 w" W6 f+ A6 a
4 F6 F2 |5 \: J6 d8 x2 O5 d( Z& W7 j* U. u
  /*--------------演示程序---------------------*/
( K  n, I% l. o0 u) O# n  main()7 ?2 \2 r, o6 P, @& M1 ]7 W
  {+ H. n9 Q: F  B' z  R
  puta();
- G* b# A  P2 }/ z! m$ S/ E  getch();% L/ T6 {$ }3 q' C
  dcls(0,4,0,79);
( d. Y" k' g5 E* u  getch();# D8 p% N1 a7 S! a5 f
  puta();
3 U! G  B: c; _. I) B+ u/ f2 Z  getch();
) ~! K7 @8 @* b9 Q  bcls(0,25,0,79);5 ]5 E& x) E. ]/ s5 e" O' M1 r. Z
  getch();
5 N" A* X5 k" o8 k/ Z  puta();2 ?. t1 c/ M) U) W
  getch();* v$ G7 w" v: J8 [9 L
  zcls(0,25,0,79);
0 U' A. m: N' w: n* R/ t( A2 D  getch();
; N0 X4 ]: s( R0 Y  }, [5 P8 v5 Y" }* l6 j. O$ Q7 W
  /*********center clear screen(中心清屏)***********/
) \/ r6 n* L9 J% z  void zcls(int x1,int x2,int y1,int y2)( ]1 M0 o' F; R: y$ [' l4 U
  {
0 i3 H9 r( H  d4 G  int x00,y00,x0,y0,i,d;
$ o5 l8 R. Q. {" P, C9 u4 O  if((y2-y1)>(x2-x1)){6 }4 ?1 P$ Y( v& j+ Y, ^! l+ K
  d=(x2-x1)/2;. l5 G5 p! ?) Q" }: c! _4 \, z4 B! d9 C/ Y
  x0=(x1+x2)/2;
8 e; E) Y2 L! a  A/ F3 h  y0=y1+d;' V6 @7 r( W: |8 j! o9 K8 g
  y00=y2-d;# ]9 Y4 v' N# B2 X
  for(i=0;i<(d+1);i++)
! S& h, b5 x6 M6 ]  s( T8 y! S  recls((x0-i),(x00+i),(y0-i),(y00+i));, j: W4 {1 j1 y1 l
  delay(10);
  N: X; e, |7 x4 `5 {. V) T  }# [5 t% k$ u$ r
  else{
& ?2 c  _; X# _% ~2 ?- s  d=(y2-y1)/2;
4 y$ F4 @; l3 K- x3 T" p  y0=(y1+y2)/2;$ R6 [- X" V8 @6 [
  x0=x1+d;
7 I+ u; i5 V7 U1 v' [: b  x00=x2-d;6 v6 Y( Z  J1 k# Q6 [
  for(i=0;i<d+1;i++)
& F( F9 {. h  Y4 t  recls(x0-i,x00+i,y0-i,y00+i);
/ C' p0 T1 z& W* v( b6 S% W  delay(10);. ]7 v. ]1 G* p: h0 ^* {# u5 A& |
  }5 o- G+ S$ {( m8 p
  }' b8 v. A# P  p7 W5 b' H$ `0 [

/ Y, P: K# w8 |4 ~- K$ J& u  /************* clear rectangle side(矩形边清屏)***********************/3 T' Z+ `6 N  s* u8 }" A5 @# ^$ s+ i7 c

) d1 h4 M5 G; c5 @. M  }! _  void recls(int x1,int x2,int y1,int y2)
- c5 R, P8 ~5 Y8 v7 k  {3 J; x5 ?6 l- ~) n0 ~
  int i,j;0 Z4 n' Y0 b* L4 c
  for(i=y1;i<y2;i++){1 S7 ?  s( U; B' G
    goto_xy(x1,i);
0 M5 Z2 t5 h: N7 L8 {2 O5 Z  putchar(' ');
3 L# [, W8 a" X- W3 T3 O5 `  goto_xy(x2,i);2 y3 |& z. M7 l- Y  S0 P) G
  putchar(' ');/ W2 J4 ~1 Z3 r! b% S) l
  delay(10);
3 T2 u* {1 Z% k( a/ ?9 U, r  }
2 x# O4 k  a) D6 c# ?9 y: L  for(j=x1;j<x2;j++){! G* R8 h! F- e5 L. ?. u1 Y5 Z
  goto_xy(i,y1);1 N+ X) N% U  }  d  Y7 `( H
  putchar(' ');6 h" ?/ }$ s) `
  goto_xy(j,y2);- q+ W6 @: {8 n1 i4 q
  putchar(' ');
4 u+ a7 y# W2 B: O# N5 M. q  delay(10);* j- D- G5 J& {' q( e5 Y5 u; s
  }
3 A  A8 p" A8 z' a, D  }
" y. E+ {/ }6 h9 o# r  x4 N; R, {( |  /******************open screen clear(开屏式清屏)*********************/
) N% l/ I9 m) m9 d. h5 W! U
5 m+ T2 ]2 h& J9 P6 ^, V  void kcls(int x1,int x2,int y1,int y2)
: Q9 K( K2 a+ f7 r: Z, H  A  {
' @1 ?% f9 V% D) e! g/ ~% v  int t,s,i,j;
1 g5 t2 f2 B. x& e* A4 R' |  t=s=(y1+y2)/2;
% C: D6 Y9 Y/ f0 P3 q  for(;t<=y2;t++,s--)  A) c4 y2 ~: q
  for(j=x1;j<x2;j++){
  w! h) X1 |7 d! K. Q' U$ K  C, d6 w2 @  goto_xy(j,t);1 i; d) q' f8 c5 [9 ?
  putchar(' ');8 c, B9 o6 X- {3 p, X. x
  goto_xy(j,s);' j( g# Z- X8 [) n: ?  {
  putchar(' ');6 f3 `! b# j+ Q) A- s) I  }
  delay(10);/ ^, E1 x& R" V: W2 }
  }$ ]+ a' m' t$ |; F9 B
  }/ D. b+ o& ]1 I6 @" M! c
  /*****************close screen clear*****闭幕式清屏*******************/8 X0 h. n0 f8 v4 H+ G( J

  v; _9 T. ]/ z4 \$ m  void bcls(int x1,int x2,int y1,int y2)& S1 \0 N8 p  R, Z. N; {8 T- ]3 g
  {
  U% s" k" G+ i% C# @  int t,s,j;' a- T0 z5 C5 `' b; t
  t=y1;
2 h. K+ {; Y. C  s=y2;& ~1 V7 z* c$ [" l
  for(t=y1;t<(y1+y2)/2;t++,s--)
3 c: N0 u. E* q# K  for(j=x1;j<x2;j++){, L. J0 w/ f/ O" l9 a
  goto_xy(j,t);
% a' ^8 z) I7 g, S  putchar(' ');
. m7 `% Z* {6 X5 f# `" t# k  goto_xy(j,s);8 \) B7 U3 t, V0 u1 T
  putchar(' ');( |, [) ~- }4 K/ R/ C, `" \) u
  delay(10);
% \! Q4 j5 X& F- W# m* V  }
  K; p; j4 V. s% U, v  }% P* h) f' U/ I4 {/ W  Y
  /******************bottom screen clear(自下清屏)********************/
# @$ Y$ [- f7 @' n0 d# u* Q! H' Q7 g" w; x! s* I
  void dcls(int x1,int x2,int y1,int y2)
2 Q' N% u1 D8 Y0 G* p6 P  {  P8 }0 ], I3 E! B  [, w( b
  int t,s,j,i;
8 B/ U* V) @7 _* L5 \- _7 b  t=s=(y1+y2)/2;
( @! t& u* |( a4 [4 l0 N" B  for(j=x2;j>x1;j--)
! g% t( O( V. T" M2 z9 Y  for(i=y1;i<y2;i++){6 p8 ~' W/ d; n+ w0 R( U
  goto_xy(j,i);
/ ?7 [- ~' I" o5 J! }- P% C  putchar(' ');
; k6 w5 W: x' I  delay(10);$ A' {  F5 [' Y, ^; `& S
  }7 |- }- [% ]1 P( {# ]
  }
$ i  P+ ^; Q2 m: s0 x, \2 Y7 b3 l, d  /******************设置光标子函数******************/
6 R9 R% i1 Q: r5 d
2 g; C( T0 H# p! v* {' ]" O2 V  void goto_xy(int x,int y)! B" v1 p6 {) p$ U! c$ H
  {- s1 i5 x3 N2 @( R  f! Z9 p( P
  union REGS r;4 ?- i3 [% l+ r+ d
  r.h.ah=2;
' N" R) F* m( M. F9 @4 Z$ w  r.h.dl=y;
& |- X5 d" z: i  r.h.dh=x;- F# c; D$ G2 a9 }) Z
  r.h.bh=0;% ?* p% U4 g- a
  int86(0x10,&r,&r);
6 C8 X9 K, P/ O6 b6 z* _  }* c$ C3 }* x# F) b8 g+ M

% v6 j# f7 }, ?" f  /**********************在屏幕上打出一连串的a字母用于演示程序******************/+ i/ Z8 F1 ]% C# x1 J. e
( W, f0 g# n: m! X
  void puta(void)
" e+ }9 o, T( k: w& K! F  @  {
6 N% S" S! ^1 h7 l- K1 f! E& Y8 G  int i,j;4 E* R4 P( |9 z+ D) z
  for(i=0;i<24;i++){
1 j- r8 [3 ]9 G$ {  for(j=0;j<79;j++){" C& J8 s' F2 x! v
  goto_xy(i,j);
: m  A. d* N" x  printf("a");
1 o; i- e# ~( ?% N0 }  _  }
, \% u2 h5 M+ P. M0 {4 o: l  }- f3 J2 Y  ~5 H7 G% Z7 ?
  }

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