Board logo

标题: C语言艺术清屏 [打印本页]

作者: zw2004    时间: 2008-1-21 17:14     标题: C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. X: @8 V5 b7 m0 p- l
( s$ E9 @5 a, e# W1 N7 o* L
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
6 c* F! A7 ^2 u0 c
% d5 j1 E! _. a  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 G$ N0 g- e* h6 U0 e- X8 G  子函数及演示程序:+ q/ A/ A! b( i- t" z, ~
8 Q5 p( z/ y2 d
  #include<stdio.h>
' I2 q% S! d$ \) f" W  w8 ~  #include<dos.h>
7 s" z8 Q0 P* n4 l, F( j& @3 d  #include<conio.h>  @; p1 S0 n# t/ z1 n

' e' a3 ?% d7 O" I) b2 }3 c  void goto_xy(int x,int y);
9 V0 e; N* V" v0 v; T) c$ M  void dcls(int x1,int x2,int y1,int y2);; W4 @" S+ {3 t/ W
  void bcls(int x1,int x2,int y1,int y2);
1 O. W: G/ I+ Z- P) \* e  void kcls(int x1,int x2,int y1,int y2);; e, j7 A3 ]& N& L. ~6 G
  void recls(int x1,int x2,int y1,int y2);8 ?- Y( m% o/ o7 ?
  void zcls(int x1,int x2,int y1,int y2);& [3 J: \. `6 V+ M( U( |: }% D
  void puta(void);
1 t* V2 |% X8 K6 ^" z' h: a+ s2 c4 y/ C1 C% z
4 C9 u" D' I2 i% {$ ?+ g. l% [, |
  /*--------------演示程序---------------------*/
4 \* A8 e2 ?9 q  Q' w; W( P  main()
! c0 U/ v2 i/ m3 W$ a  {( v2 C/ y' H8 ^
  puta();
+ b1 @$ b) w) }0 T+ V. o, c. E  getch();8 h2 o, P  T. B; [! Q5 p6 e
  dcls(0,4,0,79);* P! Z; P0 \& \
  getch();1 l5 D! b) E+ a9 }
  puta();, i8 X: `. e) x/ @  C, q% t! F
  getch();
8 s2 Q3 f# a9 a7 S2 u% J  bcls(0,25,0,79);( z( B9 q3 d- R$ Z& D2 q
  getch();7 G  i7 q) E4 B
  puta();+ z; T# K& ~% O5 P8 g# w# p7 T# D; x( {
  getch();: Q1 ~% e7 O  S$ H. L8 U: O
  zcls(0,25,0,79);1 P, V9 b" @/ E% L
  getch();, H1 F! m0 i% P2 H8 g* d5 ]! P
  }
& l" V- w0 r( q  /*********center clear screen(中心清屏)***********/& T1 |, l: ^2 k8 n0 {
  void zcls(int x1,int x2,int y1,int y2)
+ E/ E  s6 b* v  {3 k7 F2 x: o1 M/ l2 v# Q( d0 T) ~
  int x00,y00,x0,y0,i,d;
: w1 s$ t1 J9 t$ R- x, ^  {  if((y2-y1)>(x2-x1)){, C" n' h4 M# u4 K: L+ `
  d=(x2-x1)/2;3 T0 @  p& \( g+ \
  x0=(x1+x2)/2;9 V* u% t- s9 t: i/ d+ U4 M9 |3 C
  y0=y1+d;5 M+ m6 y5 N/ B! ~3 e
  y00=y2-d;" n: \4 N" F8 l& i$ Y6 U! r* u3 b
  for(i=0;i<(d+1);i++)- ?0 Z5 ^" T3 T# b$ e; w1 j6 |
  recls((x0-i),(x00+i),(y0-i),(y00+i));+ z3 R- Q9 A2 `! C/ E+ j- q, o8 B& W
  delay(10);* |, s5 j  N) ~( N/ [0 b3 o6 ]
  }
9 B' n  M0 C7 m7 Y; o  else{% Q3 m. u: E, W; x
  d=(y2-y1)/2;( N1 V0 ^) }' g# L1 A6 n; I! t7 J' D
  y0=(y1+y2)/2;
, x8 y, M$ _/ ?( P) ?5 P" Q  x0=x1+d;: r1 `6 l% ?, M5 Y" k
  x00=x2-d;
- a! b/ s$ f+ N" j: u& W9 e) a  for(i=0;i<d+1;i++)
  l) J: t/ J. ?5 X; B% B  c% i/ y  recls(x0-i,x00+i,y0-i,y00+i);& d: m. m. C9 B7 v4 E: o
  delay(10);
( a2 O4 S) _5 c  }
/ o) f% }) V; Z# g4 x, l" \- @% ?& w  }
3 Q: T# E' Z/ Z7 e+ ~/ h
' u( x6 y; j' O- e* \: D# d1 A( ]  /************* clear rectangle side(矩形边清屏)***********************/# o5 Y% _% K# R/ @& M
' N7 Z: {% `6 ^
  void recls(int x1,int x2,int y1,int y2)
# l5 o5 b  r: I- T  {# @" }  B  }( x$ u5 C" E: `6 ^
  int i,j;# @1 b- i  ^, K6 F
  for(i=y1;i<y2;i++){$ ?" J( ?+ Y8 j, e; u
    goto_xy(x1,i);
9 |- r( q( _+ t( g  putchar(' ');
+ _: }0 D0 C4 c( q" I$ a  goto_xy(x2,i);' z4 x" q2 P9 \; v7 ]0 J# i/ y
  putchar(' ');
2 z; F" ?7 M8 i3 o) `8 v  delay(10);$ R5 ^' i2 f( j# ^* n! C
  }: ]# J3 I2 l7 Y. S
  for(j=x1;j<x2;j++){9 P6 K* u9 n) E5 S% e* z
  goto_xy(i,y1);
& b5 W9 q  n% Q  putchar(' ');
8 p0 y; G8 X, V9 t: X  goto_xy(j,y2);
; I1 q: |& J3 Y, t; r" ^  putchar(' ');, J8 Q% P" K# ?1 I: C. q9 F
  delay(10);/ j$ n! x) C2 D# g" S" n
  }$ H1 P7 v( @1 J# X1 t
  }( B/ J4 S# F0 |. Z4 Q
  /******************open screen clear(开屏式清屏)*********************/
: N6 s- O5 N  H6 S; W! O* k5 o2 Z
% K4 x8 o' }+ [& ?4 ]  void kcls(int x1,int x2,int y1,int y2)
% Y9 Q. P3 Z1 M2 ]: ?8 g% B  {: h; R3 V; I1 }
  int t,s,i,j;
5 e" K' d! T$ M- _" Y. o  t=s=(y1+y2)/2;  ?8 M# ?0 L% ~8 O; U+ a
  for(;t<=y2;t++,s--)
* T. I1 ?, r: P5 ?3 `( [; M9 I" n  for(j=x1;j<x2;j++){: b9 h# a  A$ `& P; }9 U. d
  goto_xy(j,t);
1 x& x) L) s; v8 F( ~1 S: }  putchar(' ');
. d4 e- _# B" s3 ~$ `8 z) g; o  goto_xy(j,s);- t' G4 T3 v- s* F, A  C
  putchar(' ');$ {: h' y+ x) {% {) v' `: r
  delay(10);
" y, N( l& A7 M  }( v1 @4 D8 F3 @- D
  }
6 K' h$ \# R5 k  /*****************close screen clear*****闭幕式清屏*******************/
1 s$ z  M/ ~. F0 G/ X3 w6 o% S$ \' ?* ]) D- e* R
  void bcls(int x1,int x2,int y1,int y2)
) C, y' b6 [! A/ m  {# n, r4 T( S  E
  int t,s,j;  O# P. k  L( O" n- ?& X
  t=y1;
( a4 c* E( R. r) N0 O  s=y2;8 [' j8 P' r8 `; j: G3 g' i
  for(t=y1;t<(y1+y2)/2;t++,s--)
) p% s; \9 k" H; q  for(j=x1;j<x2;j++){
, P8 u- ?. \4 d" r5 A: F- z  goto_xy(j,t);- K& X; g/ z" Q6 j9 d& I
  putchar(' ');
  Q1 t' ^1 C6 `# i1 W  goto_xy(j,s);9 b' T& s4 p0 d' K
  putchar(' ');
* F; {1 [% k8 P  delay(10);
% ]6 u' w/ I& k1 q% y* K  }
4 e4 Z6 G* T; ?% R  }
* y+ B1 ^* A2 R  /******************bottom screen clear(自下清屏)********************/( N% T1 w3 r" n
9 k, M8 C+ D3 `6 u
  void dcls(int x1,int x2,int y1,int y2)$ I% H" h' Y, t- ~+ Y3 U' O
  {  X$ z. ]: N+ ^2 E0 f
  int t,s,j,i;
+ z' y$ x, ?0 |  t=s=(y1+y2)/2;: ^! U; o% z* u7 G# v
  for(j=x2;j>x1;j--)
" x6 x% X7 m8 H  r2 j& a  for(i=y1;i<y2;i++){" @- P! b6 T3 @
  goto_xy(j,i);0 `( [  {: w0 w/ l
  putchar(' ');; e- S1 X( k2 p& B. v
  delay(10);
' X( g! P8 x; ~+ X  }
* x8 C5 X* ~7 J0 i/ [# K. e  }" D% H7 s1 c% W0 t
  /******************设置光标子函数******************/4 X8 @, B, h" y+ k- |0 D6 M

% q; r' c( Y  v6 }" G& o: ]  void goto_xy(int x,int y)" T# H- j/ c7 l  A% ^8 M1 z+ w; I& B
  {6 ^: h0 H: w3 |
  union REGS r;& x. k2 h* D# O
  r.h.ah=2;
, }( e1 p5 Q4 `; L  r.h.dl=y;
# M( w5 a4 h) C* I+ {9 }8 W  r.h.dh=x;3 J8 g- I2 s  z7 a1 i* M8 l& v/ s- {1 c% a
  r.h.bh=0;
. ?. t; e0 t( K4 ]* L0 N( i  int86(0x10,&r,&r);
( P1 w: m% ]% S. K9 N( h1 o  }
/ D" @+ t7 b2 X  i" G4 r5 O; z% \5 ]
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/8 u) r" n- G: [& e. A; U
: `* O/ Q) P) a. q, z; t" n* v
  void puta(void)/ g/ N0 B  z! Q) U4 `% S8 q
  {
- K$ [. R+ B  z. Q; F  int i,j;9 y/ B7 l( E/ I6 Y
  for(i=0;i<24;i++){
6 Q# F# s1 F# j3 D' F3 v, m( s  for(j=0;j<79;j++){: ~- |% H' W6 C4 d5 F
  goto_xy(i,j);
+ D& M/ d2 t- s( w9 C+ g5 x  printf("a");& w6 w; n; Y" |; m# o
  }: R( G2 p  j4 @  g2 T# `. x
  }4 U/ W# v5 B! x# }" O" {
  }




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2