发新话题
打印

C语言艺术清屏

本主题由 admin 于 2008-1-21 17:28 移动 
朋友别哭,要坚定自己的信心,我们一路陪伴您!!!

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ \; m2 G' [, @4 D* `; I
) o! A( x1 j' D5 F5 L
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
6 B3 ^2 a2 o6 R  P  z9 F' }
2 v( r9 I# R" j* {9 t  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
  Z- f( \/ r" {9 z. s* e6 Q  子函数及演示程序:
% V8 h: R2 Q- V" A+ a8 b! s( W0 a1 H# z1 u' W* b
  #include<stdio.h>
" @' U2 q$ P# g7 r6 m& `2 E: R+ B  #include<dos.h>7 y4 l0 s  B0 a. y; Z6 s
  #include<conio.h>- k+ [& ?9 m6 p

, W% m$ \* o) k8 n: @  void goto_xy(int x,int y);2 ?8 l3 G# N/ O7 c7 i# v
  void dcls(int x1,int x2,int y1,int y2);- G8 u' k: I# U; i9 f7 N: t1 Y
  void bcls(int x1,int x2,int y1,int y2);
% X" V3 @, ]% v+ m. w1 k  void kcls(int x1,int x2,int y1,int y2);8 ?3 ~" d9 C" d2 [  U
  void recls(int x1,int x2,int y1,int y2);1 B5 J1 l5 [2 s, P' ^
  void zcls(int x1,int x2,int y1,int y2);
9 N7 n; v  E8 w+ q  void puta(void);; S" k, t# ^6 [% g1 _; R

% q# W7 R. Z8 v0 @9 \, R) ]3 W+ g+ f- y% F. Y( c
  /*--------------演示程序---------------------*/
' f6 r" ^+ R+ l  {3 p6 \5 H: A  main(), p8 U& T! i' ^5 _- A
  {
* L$ o4 ~* }$ R9 z  {; Y3 o4 {  puta();
% ~8 Z, a7 z( \( x7 x: y/ H  getch();
3 [% z0 W& }& D$ M% z! z' f5 Z4 i  dcls(0,4,0,79);5 A# R4 _2 j2 o9 r
  getch();
! N  G4 O; S* p6 H1 s6 h$ A2 j  puta();
- R* @) ~  A, [$ s7 S  getch();0 \! A& Q6 V5 a. e7 q. X
  bcls(0,25,0,79);
  U' {4 n  r7 O% d" y  getch();0 N2 g+ v2 w- ^6 v5 C& R3 m
  puta();
: T5 Q; U: m8 @2 I7 [  b7 L  getch();
0 |" h0 L' l0 J# I( Z7 t  zcls(0,25,0,79);  h6 V. K% Y. y/ _- V: T
  getch();" L! B3 V6 u7 }" M* }3 k$ D
  }) }# v2 U: i& O9 @
  /*********center clear screen(中心清屏)***********/
% e6 s& A' t( |: N4 D! a0 Q  void zcls(int x1,int x2,int y1,int y2)% v% n4 P% g3 ~3 s  N* `# j
  {
3 I. |6 d! p+ u! v% Y* h3 @/ y  int x00,y00,x0,y0,i,d;$ ~. g5 W1 ]7 k
  if((y2-y1)>(x2-x1)){
, U5 o7 f1 _8 H+ D9 ~& n' s  d=(x2-x1)/2;' {$ M5 f$ W5 T# B8 I( X
  x0=(x1+x2)/2;' @2 [/ f& s' Y$ d
  y0=y1+d;
$ |( B$ W" z. S# V% Q  y00=y2-d;  y0 N. G: m& x- G( i3 Y8 i
  for(i=0;i<(d+1);i++)$ h& w9 @+ J/ k5 J0 Q
  recls((x0-i),(x00+i),(y0-i),(y00+i));
8 ]: H. M, T, B- w8 f  delay(10);
, M* x( @/ T% `4 @1 x+ r( I' J  }
, f6 Q; j( w: j' A" [9 E- F  else{/ v  ?# j: z& J) _. \- Q
  d=(y2-y1)/2;
$ l. u# d/ C# G' W  y0=(y1+y2)/2;
6 M  \: j3 J  e" U: i5 P  x0=x1+d;$ U# [  j3 J8 R- I; }! f# c
  x00=x2-d;: Z  x! G: _" S* b7 Q5 [1 R/ v
  for(i=0;i<d+1;i++)3 m. W! t8 m- G/ ]
  recls(x0-i,x00+i,y0-i,y00+i);
1 K& v0 d+ t. M  delay(10);3 s6 A% `  W3 H" j# u: {
  }
0 C* @; L, k5 u3 |  }. H% r% s) V5 [" i

6 x/ b- S4 M( Q2 b0 |7 f9 [$ o  /************* clear rectangle side(矩形边清屏)***********************/( p! I9 p' p: k" @5 F4 F

* J. m/ d. \8 }, y' O2 n7 X, X  void recls(int x1,int x2,int y1,int y2)
5 z2 x* c4 J1 R+ ^4 A  {
$ O& A" {: G1 c1 v! Y( ~  int i,j;4 S" I' F! i7 H, a/ i$ i( d5 [
  for(i=y1;i<y2;i++){
9 `( F" ~3 q" Z2 k& S8 L6 w    goto_xy(x1,i);9 Y1 t$ ~' u& g9 G
  putchar(' ');6 J' T4 j4 A; w6 Y0 \, u
  goto_xy(x2,i);
/ C# h2 M9 y. b; {" w. A! l  putchar(' ');- Q" E" H( H  @* o# u, [$ p
  delay(10);
7 s- U0 E8 d& M( C. U  }% A+ d  ?/ Q) |! W( W7 B1 t
  for(j=x1;j<x2;j++){  J: z' `4 _2 W: A( g8 p& m
  goto_xy(i,y1);/ v* @8 ]1 ], \" o
  putchar(' ');) U* g, L) [3 F) H/ p( g
  goto_xy(j,y2);
* N% W* N+ e9 `5 {7 o, r! D% b  putchar(' ');
7 s7 b! s9 O1 D  delay(10);
7 f  }) x5 ^: Y; N, o  }: R, n4 e$ F0 _7 @8 n  @1 o. i
  }7 M9 o. X# D& k3 K+ ]9 v- H
  /******************open screen clear(开屏式清屏)*********************/
* @- \# i8 P. h# W: e5 u0 B: ~8 a9 W, [% O0 Q% i$ r
  void kcls(int x1,int x2,int y1,int y2)
4 q0 L3 n3 c& T  h9 ^# D  {8 i0 s: {( \, E; j7 q' x$ x8 R
  int t,s,i,j;
; N9 n* A4 N& h7 r0 U  t=s=(y1+y2)/2;/ V% q& ~7 I- O4 }1 ]3 H
  for(;t<=y2;t++,s--)
7 }4 X6 d  P1 J) `6 |3 B3 [3 C  for(j=x1;j<x2;j++){
4 D2 e1 V( q7 {6 D  goto_xy(j,t);; o% d6 g6 y- D  t* \) l) O5 a$ N
  putchar(' ');# M  Q. @. c  h% B
  goto_xy(j,s);( R) b# _: s7 l
  putchar(' ');! L+ M: q4 `2 X; h2 O, n
  delay(10);
) A, T4 \/ X! I$ g0 [3 _* @1 R  }
' E$ s( e' {0 X: C: X  ]1 i  }$ n* U4 ^* J% Y& P
  /*****************close screen clear*****闭幕式清屏*******************/% A+ r" b* u* m) J2 g. T- `

; F1 ]0 y) G" I, A9 h% Y$ H2 U  void bcls(int x1,int x2,int y1,int y2)
! M4 I' T2 K) @5 q% V$ M  {. A9 D3 y( ~! f# a
  int t,s,j;* E: h2 J# d: ^  t3 h
  t=y1;
8 P/ e% c5 a. T( N- y& @' H% z  s=y2;1 ^; D8 A7 A; s9 B, }( Q
  for(t=y1;t<(y1+y2)/2;t++,s--), m* X, C( k' p; ^9 k
  for(j=x1;j<x2;j++){6 T- b* o3 R9 N, x: S
  goto_xy(j,t);
- n0 h- v. e- d- q  putchar(' ');, d0 }* ?0 x* d' o5 v9 z) r
  goto_xy(j,s);
) L( y8 z1 b$ R  |' M* `$ [! k3 _  putchar(' ');, W. s6 U) K1 ~
  delay(10);7 U9 }' @9 e% R2 z$ }& [
  }
8 [: y! K. R# V0 Y* c' J: B  }) Q- [. y+ S/ Z: C4 R+ |8 e
  /******************bottom screen clear(自下清屏)********************/* a. _; ]. @8 r. _* r# O/ ~

  f% t; H" ^- A! M" f& d  void dcls(int x1,int x2,int y1,int y2)
* ?/ W9 ]7 R1 J) u% y5 w: K  {
" }2 g6 ?( [4 X* @& I1 B  int t,s,j,i;, P; z3 D; s& K1 e3 @; o
  t=s=(y1+y2)/2;) @$ ~4 J6 v& L/ y
  for(j=x2;j>x1;j--)& y. Y* f3 Z/ J$ z
  for(i=y1;i<y2;i++){
5 b2 t4 h! I4 a$ N, O: C  goto_xy(j,i);
' \& l5 p; L) e2 k0 K, q  putchar(' ');
! S1 M; S" }+ y- u  delay(10);- D, k( l  F( t2 c* p
  }
; [. X: o% A3 W7 \! S) v5 [0 U  }
' N: k# k) R2 ]8 c/ J  /******************设置光标子函数******************/
' l; \& m- B/ N' ]& a1 u
4 @2 b: I% [8 [  V% I" n  void goto_xy(int x,int y)0 T- n/ [( e) m9 @& s2 i
  {& r! B/ {7 |: X7 D
  union REGS r;
; q4 W0 ?* L- J8 a2 x7 V  r.h.ah=2;* y/ y7 _) [/ ~) B
  r.h.dl=y;
8 |0 u) \8 }/ i* ^/ [) l  r.h.dh=x;2 o- t2 N& k9 p0 R% p3 V0 j
  r.h.bh=0;7 s9 E4 E4 k' ^9 G1 I; \+ p
  int86(0x10,&r,&r);
7 |  S! Q& J" l& n) x  }
: u! Y: P5 }5 s! q+ ^% }) W4 K
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 A- `+ B% }5 E+ a( G+ |4 R. D

! N: k5 n( Z5 j  void puta(void)9 A& }& v. h$ D
  {
# I- B- W! Z; Q4 L0 l  int i,j;. F% z8 Z8 D; |5 \' V
  for(i=0;i<24;i++){. X1 n. C( p. s! i8 O0 U7 {; {
  for(j=0;j<79;j++){
! q" a' g4 ]! y- G+ ~  goto_xy(i,j);
5 t+ d0 P; I1 e; v6 }  printf("a");
3 z8 |& w  R6 M& a/ W8 f  }( G. j( ^' e" N. d- [1 F& o! y& X3 z
  }
! m+ X: {% I. A" f* L5 U: L  }

TOP

发新话题