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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,( }" v3 L( V" G$ D4 V( }

+ I& |" m) X2 ^2 T  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 a: n5 x% E3 q5 J* @  n9 w

3 c6 s6 n6 T% I  w- s  a  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
( y: A2 M) o+ l3 k  子函数及演示程序:* O& K, h) f( [( i

1 \" i2 W( u( t1 P& X" H- `8 n" r  #include<stdio.h>" Z2 b+ w# P7 y% y
  #include<dos.h>5 |3 n, Z& e0 }8 A
  #include<conio.h>
3 ~6 A0 c6 S5 P% J" ~2 E4 q
& J8 ?( C# C  q- o' S2 I" G6 W* U9 U  void goto_xy(int x,int y);
4 ?) D9 n+ `! s" X  void dcls(int x1,int x2,int y1,int y2);( _& w. a& |  v( ?1 ^9 p
  void bcls(int x1,int x2,int y1,int y2);0 h" |0 F: z9 f' \9 u4 g
  void kcls(int x1,int x2,int y1,int y2);
  n! [3 y5 s2 ^( c) u2 o  void recls(int x1,int x2,int y1,int y2);
8 x! O; ~( d3 p' x  void zcls(int x1,int x2,int y1,int y2);2 r& p0 ?+ K3 {1 C2 D
  void puta(void);; t( ]1 D2 b& u, b

6 G$ @3 f3 X6 ^7 Z' y( H6 ~: O& O' [: Y& k
  /*--------------演示程序---------------------*/; x6 b' E/ Q* r, e$ c
  main()
0 a. Z8 x$ f5 O! f* q  {' c" f  [5 f( Z
  puta();
8 ]  h6 b' Y+ b% T  getch();
. J4 v! A* k  X, a6 c% Y  dcls(0,4,0,79);  f- g" G, a1 ~3 B4 a" O4 E
  getch();6 m8 X# n4 o% m% D% N" l. \) P
  puta();
3 ~# N  t6 h7 q8 j9 o  getch();8 T* ]! w: L# v: I5 |4 T4 X1 K
  bcls(0,25,0,79);
1 P- o) E" f, g  p/ b4 h* ]% O  getch();, f* [( X; N' A, p
  puta();
( J0 h. r" |4 P5 `9 ?9 i( {  getch();* ~1 H" a* s, _
  zcls(0,25,0,79);( b2 p+ \/ J* X8 s$ p& F( i+ i; l+ m
  getch();
# K. E5 C! ^: v  }
7 T* H8 r7 A$ V( u/ g4 p  /*********center clear screen(中心清屏)***********// L- a" S/ d9 z- q
  void zcls(int x1,int x2,int y1,int y2)
+ }0 p: F# c2 F. x  {4 f  P) u% o( i$ v; N
  int x00,y00,x0,y0,i,d;
: D! J' J: B! y8 {, v. i  if((y2-y1)>(x2-x1)){* r, N& m6 E- I2 t3 K7 Q
  d=(x2-x1)/2;
" i4 e8 C& ~. t3 ?# B+ N; ?  x0=(x1+x2)/2;
" s3 D7 j, r5 M$ R; |# ]  y0=y1+d;
, |$ k7 j# V9 {0 `9 h  H  y00=y2-d;
$ r. [9 d# T% @; Q; S. K' c  for(i=0;i<(d+1);i++). J' P5 y3 O2 S
  recls((x0-i),(x00+i),(y0-i),(y00+i));) Z1 _+ q0 g' t
  delay(10);
2 U) i, b8 Y' s9 W6 r  }% E6 y4 G0 F! Z7 M/ E+ N$ G2 {
  else{1 y5 R3 @9 y  b% D
  d=(y2-y1)/2;
# a& x! g+ ~* Q  U' Y  y0=(y1+y2)/2;) w, Z! z$ _6 B# c
  x0=x1+d;
% t- ~* y: D% g  x00=x2-d;! B4 x7 x! C# s+ t! E1 T
  for(i=0;i<d+1;i++)4 e& K. I1 x* x2 H
  recls(x0-i,x00+i,y0-i,y00+i);
/ v2 O) c/ K! h0 _# g  delay(10);: r9 ]/ f7 a7 z8 e0 s# ?2 Y
  }& M' u8 L, L6 ?" a
  }. I& X! W3 h- J

8 u# {5 Z# W$ B7 a/ a. t+ b  /************* clear rectangle side(矩形边清屏)***********************/, S9 A' f; t7 T1 U$ H& ^. J# R

, m3 o) E9 n1 d/ i- i9 j. M  void recls(int x1,int x2,int y1,int y2)) ~+ i( R3 N& `5 H: ^0 L( W! h
  {
4 y1 h7 Y/ W  Q, c& \  int i,j;9 [/ q  D4 H5 {# I
  for(i=y1;i<y2;i++){
; F0 A4 f5 H' @; r. f    goto_xy(x1,i);
: k9 Y9 E5 t/ u  `# l  putchar(' ');, L  e- u( ?, V- n  k, s4 A0 K
  goto_xy(x2,i);3 z( L  J3 b6 c& y3 z  M, N3 j
  putchar(' ');. }% V2 j& E, I" C, o$ h+ f+ q
  delay(10);
0 v5 F0 }4 U. ?" o  }) h, |' i' h9 P8 U! q( V' q
  for(j=x1;j<x2;j++){7 v5 G/ r' V: J( d# d# T
  goto_xy(i,y1);9 f! ^6 S+ B" g
  putchar(' ');) [  G  `, C  g: I& o( x- X4 L
  goto_xy(j,y2);
  C3 H. ?/ F6 q  Z- L4 M  putchar(' ');
, g1 U8 v3 {( a; I  delay(10);9 Q1 E7 a4 q# U: \! N3 v) m
  }
. r' N! N" i  |% S  }- |' q' C" l/ e2 B2 o
  /******************open screen clear(开屏式清屏)*********************/
7 [! t" i* o/ T. p- u/ r2 E4 V2 c
  void kcls(int x1,int x2,int y1,int y2)
" k# n3 q+ p5 p/ d8 y. n  {5 @( ?  x$ W" M# {: S" o
  int t,s,i,j;5 y" x* k8 N7 Y1 a9 h+ q2 e
  t=s=(y1+y2)/2;
. h9 Y5 z* T$ Q& W  for(;t<=y2;t++,s--)1 U7 n5 f& F+ v7 V! t
  for(j=x1;j<x2;j++){  I4 f# r" V1 s2 B: G
  goto_xy(j,t);
. r6 C* k& L" t- e, f3 i% K8 y0 U  putchar(' ');
  k* a" M2 I' ^: V  goto_xy(j,s);. p- R$ Z0 C- E1 E' g+ F. m$ s
  putchar(' ');/ E1 h! _# ?5 _5 H% j
  delay(10);
" x' W, Y, S% K0 L) ]  }
% o9 e8 ]7 V* u( w7 x* @  }6 x3 j  ?0 b; O% u
  /*****************close screen clear*****闭幕式清屏*******************/
' r% b4 d8 q2 a' w- D  E3 ^- N& |- d- {
  void bcls(int x1,int x2,int y1,int y2)3 H3 r) r5 \& h  @( m+ ^. n: j
  {: }4 N- K& @/ s0 g2 p7 O9 Y
  int t,s,j;# [% g/ J* G* z9 w# ?+ F3 Y
  t=y1;+ O  r, m  L, l- v
  s=y2;8 {+ I, p6 H1 a. H( B% r
  for(t=y1;t<(y1+y2)/2;t++,s--)
( v+ F7 u2 l2 r  for(j=x1;j<x2;j++){$ K; P, |; D! _; O
  goto_xy(j,t);$ x# ?' |! j7 Q
  putchar(' ');/ t. o; h* t- ~7 A
  goto_xy(j,s);
3 R6 s& N7 \; q5 v  putchar(' ');
6 w8 L  z- x, ^3 i* J; x# X  delay(10);) d# Q8 ]% m% c* B
  }
) A) v) z/ {  `# Y5 Y$ `( g  }4 X5 Q( u' V5 c; V( C3 i
  /******************bottom screen clear(自下清屏)********************/
7 W( o) o) E( l" Z8 ]+ R5 A+ a% b' P  ^) F! \8 _5 |; f
  void dcls(int x1,int x2,int y1,int y2)
8 U. I3 I# ^: H3 x2 m' z- [! d  {
' n: [' K* C2 \  int t,s,j,i;
7 Q% o4 L: G: C; ~8 z( J5 e  t=s=(y1+y2)/2;- ]( v: \- C: B9 y8 h
  for(j=x2;j>x1;j--)& x! q0 U+ c5 R7 |* f" I8 }
  for(i=y1;i<y2;i++){
: ]) A  B* X6 v5 q8 [5 v7 C  goto_xy(j,i);
+ y5 m# C5 b1 h5 D( _6 b4 t/ R3 U  putchar(' ');
5 u1 `( r1 v' U' ~  delay(10);- O# }9 r2 u+ p! q9 B+ D) p
  }
5 n' Y; O5 C5 l  U  }0 }3 Q9 P7 P, l' G) s
  /******************设置光标子函数******************/' Q  n1 r# \( M& b1 e& N

5 w6 R: ^% a! u) t; ~( l  void goto_xy(int x,int y)
* H4 N$ I0 @5 S6 l  {3 X6 I, a; A  ?2 [; n5 F
  union REGS r;1 ]6 [  f2 {) E2 h
  r.h.ah=2;+ P) a  L: j* u% @8 ^& o
  r.h.dl=y;
( L7 c; Y) b: g/ K- ~2 B  r.h.dh=x;: e9 f4 z1 X" R4 l
  r.h.bh=0;1 h* P! n7 v% i1 n, e
  int86(0x10,&r,&r);7 O7 `' d: ^- R, C- l% e! `
  }
6 f; H7 D6 I" k5 @+ @9 @% r1 a2 Z
( x: t# l7 {2 S6 f# p8 Y4 p; u  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ i( X! r. g- Z0 J* ]
9 ]& }2 G# n/ @- |* K6 R  void puta(void)
* B( [8 [8 b& U  f  {
! Z. ^% x  W( k$ |; K  int i,j;
' k) q4 F# B, ?2 F) U! }. b; O  for(i=0;i<24;i++){
  S$ t. K9 g! o  for(j=0;j<79;j++){
- J, V) o; }" X9 D- D  goto_xy(i,j);1 y! n: R5 E6 Z% d  Q8 }9 N; x
  printf("a");9 _# C' T& ?; ]# c# F' i& ]
  }+ R5 R; h% @* X2 G2 [
  }
' }" \# S; Z! A6 ^5 R' P5 ~  }

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