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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ V6 V8 A. v. T% K0 `4 a0 g7 w

  v+ f1 }$ T9 V9 D: L  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. D: Q3 h$ R, C9 L
2 v3 w0 X, U9 O! Z0 e! |2 a. }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . V( m5 ~0 h" |# U: _
  子函数及演示程序:
* `) F  o1 ?) S% S  b' Z
4 ~/ r: a( I) M3 G, r2 |  #include<stdio.h>2 K7 q3 U' i0 k8 f
  #include<dos.h>
; u: s% l& n9 W9 v, y( h( L  #include<conio.h>+ i3 v; U" n& i

, D+ A) Y' r% @) t/ \9 Z; a  void goto_xy(int x,int y);3 `% |; Q2 n8 W) @. p
  void dcls(int x1,int x2,int y1,int y2);
- {# S0 d. u& E; \) P  void bcls(int x1,int x2,int y1,int y2);
" Z8 k) `! U! l" z& H! ^: f  void kcls(int x1,int x2,int y1,int y2);5 ^# Y+ d' d8 a% o, J. i
  void recls(int x1,int x2,int y1,int y2);1 p( K4 C7 O5 I
  void zcls(int x1,int x2,int y1,int y2);* L* E( p3 ]# Q1 ]% Q6 g2 e  |
  void puta(void);
) k7 c$ d4 R1 P7 E! T( ^# }. K- C
3 ]: t. V- P! u0 c! j# a1 [  h2 P7 K9 b
  /*--------------演示程序---------------------*/5 {+ p2 o' c% \
  main()  ^3 u- s. y- r; D. a
  {! ]9 h8 Y5 C6 _3 T) x5 s9 R8 e
  puta();
; b) Q5 T9 E8 T0 S1 y: A  getch();
* Y5 A, }7 B$ P3 E" U  dcls(0,4,0,79);: Z3 n+ y8 w, u
  getch();
# u! T1 v- b0 M8 Z0 E  puta();
2 s. h: M5 @, n: h  getch();
. j! a2 T7 I) K  bcls(0,25,0,79);
7 b9 K, n7 o$ O% T  getch();7 i4 [( X* Q! q) j' P8 u
  puta();
( F5 `& q4 X& L# w+ z: r4 X- d4 n; M0 e  getch();
9 {( ]# D& P$ |; d6 L8 z% g2 Z( e& Y  zcls(0,25,0,79);: K: q! |" |1 O, w! c& G/ U1 L9 j4 l% j
  getch();# Z9 e7 Q" f" v9 o* U  q$ k  i
  }
. F9 Q9 [& }- X2 r3 ~  /*********center clear screen(中心清屏)***********/
4 K3 t3 p. d+ \; t* X* L6 y  a/ v  void zcls(int x1,int x2,int y1,int y2)
5 n7 X4 H/ x/ J0 v  {
) k9 p9 s  D0 D$ ~( m- p% S  int x00,y00,x0,y0,i,d;
! v6 ]- v! P6 k- ]  if((y2-y1)>(x2-x1)){* ^% [# O/ g3 L  i: N1 U. V% i
  d=(x2-x1)/2;* H! L& s4 C$ K4 x5 B3 Z" u
  x0=(x1+x2)/2;  P: R1 a: I1 B3 ^0 s" i8 ~  c
  y0=y1+d;
& x' ?5 y, ^( T9 q  y00=y2-d;
$ Q# c- K2 e- B- o8 _  for(i=0;i<(d+1);i++): A) S9 E' `' [/ j6 G. o4 ^
  recls((x0-i),(x00+i),(y0-i),(y00+i));
1 ~5 G/ S, f1 P( |  delay(10);
4 p0 K! o* Z9 D5 k- A2 ?/ ~  }5 u' L! h& x9 B  i$ u
  else{
  _5 \' f9 A- {1 y0 a, j$ r* y+ e% R  d=(y2-y1)/2;" [7 x/ n' b9 A- G" U, P
  y0=(y1+y2)/2;0 T% a& q: X2 X
  x0=x1+d;8 E' a: H. h( J1 B
  x00=x2-d;+ `; C  S1 @1 S
  for(i=0;i<d+1;i++)
2 b4 |6 i( @( P  r, c/ a5 h  recls(x0-i,x00+i,y0-i,y00+i);$ g: l/ X! w; K, q0 f. j: Q6 V
  delay(10);! }( ^  a3 [9 P% S$ h9 }, r
  }, E9 {, d5 t0 G. Q
  }5 ^" v" b' V- Z

  C! {3 ]: u, C6 z5 g( W  /************* clear rectangle side(矩形边清屏)***********************/( ]* c: c' W' S$ e# Y2 X
" s; I& x4 Y( s
  void recls(int x1,int x2,int y1,int y2). E2 p* l: S/ Q( ^4 a% j
  {
$ H9 K) H* o+ K  int i,j;
# N  I' A) X" N  for(i=y1;i<y2;i++){8 l) n/ T' @: x8 _2 f
    goto_xy(x1,i);
* ?( [  `0 [3 g8 v' B  putchar(' ');6 x/ P5 ?: v' @1 c* E! G: P
  goto_xy(x2,i);, @' q3 j- Y) Q. g: Z$ U* w5 W4 G
  putchar(' ');9 z3 n; J" Z  [& C3 i( s. v( m0 Q- z
  delay(10);3 g8 a0 J' i/ A4 B2 b
  }0 }2 f; q% C9 Z  C) H) ~" [2 _4 j, g
  for(j=x1;j<x2;j++){, L6 W( W; l9 s6 v  G
  goto_xy(i,y1);
9 ~9 B1 q4 n+ q6 S) b. E- k) }  putchar(' ');" ?& M: K6 ?- [% Q
  goto_xy(j,y2);+ B, A$ {0 o) r! ]9 o' @4 `
  putchar(' ');
  k+ ?9 y- w8 y8 G( ~$ a  delay(10);
" }: ^- C6 t) q8 U$ T8 y% N  }5 @2 O; M0 t9 T" m  L7 U4 p
  }3 v/ ^2 x) m$ T- p! c9 x% [
  /******************open screen clear(开屏式清屏)*********************/! Y$ b- o7 r1 n- v
; ]5 N) W1 u  I' q- d9 F
  void kcls(int x1,int x2,int y1,int y2)
  H3 ?7 ?5 C6 d( y  {& W8 V( D9 ?7 A5 D5 O
  int t,s,i,j;
9 q. W/ V$ y2 u/ K$ p% H/ @) U  t=s=(y1+y2)/2;
  h$ S5 \( H7 s' I$ d' ~' F  for(;t<=y2;t++,s--)
3 W' F! H  X/ |+ v  for(j=x1;j<x2;j++){3 b# T, p5 b( Z, v- M
  goto_xy(j,t);  p# _& R- [. ?4 I. w
  putchar(' ');
$ I% H2 Y- H( [' L0 ^' K6 R  goto_xy(j,s);7 A$ w, Q9 L2 e2 E9 Z" b# J
  putchar(' ');
7 L9 i4 Y! {' j# U/ [: Q  delay(10);
7 c* H( M) X: m6 i  }5 q0 e" k5 v$ o4 @; u
  }" {4 M) h7 c0 i8 T- s* h9 g& `
  /*****************close screen clear*****闭幕式清屏*******************/( w; p+ N! P6 T% K" H7 t3 s

9 Y+ f/ k$ {7 G" r5 b7 g" H  void bcls(int x1,int x2,int y1,int y2)
( v( ]- X. |. c! z6 o  {
! ?) h& y* F0 b! ?- L4 l  int t,s,j;
7 d# J# @9 a! l* [# \& k& z  t=y1;
3 G2 Y6 J/ F; R* Q% \5 X: l  s=y2;
) R. q+ f# ^& B, X  for(t=y1;t<(y1+y2)/2;t++,s--)" W. i' v: d9 r0 U; ^: j% k/ w
  for(j=x1;j<x2;j++){7 P+ B- N+ N3 v0 i: k
  goto_xy(j,t);6 G7 W; W4 L7 |
  putchar(' ');
9 H+ {& z8 s' `2 K- c" a! X. i  goto_xy(j,s);
8 \9 ]( _; ^3 T, L1 u  putchar(' ');
- G% t4 C! P% S$ M  delay(10);' `) n( Q/ e2 P' I8 a4 K1 z
  }
3 l. u6 e, V  v$ f' y+ A1 P  }. o( l, D5 `1 I% L; j# G: M% J
  /******************bottom screen clear(自下清屏)********************/+ t) X; f$ ?4 r0 s0 J) W
7 U" E; m7 X( P  Q
  void dcls(int x1,int x2,int y1,int y2)
# D/ S0 C* F8 V. @# j8 D% H. N' J  {# t4 B8 M3 G6 y/ G' V$ _! }
  int t,s,j,i;
) V/ t! [& L% ?  t=s=(y1+y2)/2;
6 {$ S0 Q6 w3 f: p  for(j=x2;j>x1;j--), x9 ^+ v  N) m' i: [8 Y) {
  for(i=y1;i<y2;i++){1 s8 o5 `( k  W
  goto_xy(j,i);4 H- e9 M" T1 s7 {" }
  putchar(' ');& O  F' t: Z/ N" l0 [! t
  delay(10);9 G5 ]) K, e* p) D3 k1 d( P" O
  }
5 h6 v2 ~6 w7 c( A& c6 x  }, r% v$ F* T% A) c3 k7 a" w' U
  /******************设置光标子函数******************/
% R& Y# o& f9 B! Z- O, ~; ^
: Q) R, C# b8 W# ^3 U' d  void goto_xy(int x,int y)4 |* j( j' k; P; ^9 F9 d
  {
& Z! ]( a/ X: J5 T7 x  union REGS r;
1 f6 [3 W( T) O, G* L1 L9 B6 u% b  r.h.ah=2;
4 h" I) x/ y/ m( H0 _: |" G  r.h.dl=y;# l- w3 a3 L6 g0 i! m
  r.h.dh=x;  ?& P! D: M0 p( a
  r.h.bh=0;
" W+ ]" I" D5 l' O* L' Q4 v5 G  int86(0x10,&r,&r);
" y3 s6 D1 ?6 ?+ Y  }9 a2 B5 c5 g9 ^( x, N
  E- P5 n0 K! v3 Q7 H! q
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/1 p2 m! u( @; i" S
( N8 _: r4 b9 O3 i5 c% V& X$ t
  void puta(void)+ X! g' g+ `" l4 s& j7 D" k. a: H- R
  {, s/ Q' W8 C' y. w* y
  int i,j;; |: \0 G; W3 U+ A/ _
  for(i=0;i<24;i++){
! X; a( K' B" s4 w  for(j=0;j<79;j++){4 L' p# m: D) C9 x( L  F! X
  goto_xy(i,j);, @( a' n$ R# ]+ w# U( B
  printf("a");
  [- k' @- c; c' j" ?3 i  }
6 Y1 J9 D4 x# [: ^# S) j% H) O  }% l# o* R+ }! N% Z3 t& }2 F
  }

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