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

C语言艺术清屏

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

* F* `& \6 ^& e9 P$ j' \. w/ t3 x  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ Q1 [; \5 h  i; |7 {8 I5 p8 f9 K6 K1 w' g
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / ^7 u+ [  d. b* f
  子函数及演示程序:
0 u( \3 L4 x- y# v1 c6 k
7 n. I8 j4 H; R3 W+ l' A* Z. e  #include<stdio.h>4 a$ g# u# D- l: f0 s' H, l4 z/ J
  #include<dos.h>" R$ O( d* d8 a" u2 u7 O- T
  #include<conio.h># e) {1 t: `1 `7 n
) G. z0 @+ K: V4 Y1 K
  void goto_xy(int x,int y);' ^4 t2 t0 b! E. n5 Y
  void dcls(int x1,int x2,int y1,int y2);; x/ @% S* R2 g. d- C: ]' ?
  void bcls(int x1,int x2,int y1,int y2);7 y8 P# z. g$ v  B) n/ b1 w
  void kcls(int x1,int x2,int y1,int y2);
4 m5 Y4 x, _% j+ G7 l  void recls(int x1,int x2,int y1,int y2);
* [, x) w0 k% }$ I. @/ }6 d7 f  void zcls(int x1,int x2,int y1,int y2);
4 |: A" Z" X8 O. d4 G  void puta(void);
0 F# ~  y9 y6 Y( l% p( B% z/ ]9 v/ h% Y

$ m, l% Q2 Z: _8 ]5 f  /*--------------演示程序---------------------*/
/ Y/ u2 K, r8 E( V: M" K  main()
3 p# |7 _1 [8 l' F; O  {
0 M7 b) Y' y/ _6 l( n" Q  puta();
, K& {- O8 \! _- ]' M8 F  getch();
% ?( c2 I- ], s# R/ p/ z3 y  dcls(0,4,0,79);
6 b5 B; t% U9 p/ R! }6 b  G  getch();- l( L3 A" Q; a' ~- Y. }& J
  puta();# A$ L. x: }$ R
  getch();
) b) P# H4 e! W) z  bcls(0,25,0,79);3 i, b* }4 R6 n/ v- Q/ m
  getch();0 `; B4 o- K  L  a4 o( ~
  puta();
3 v% ^6 r/ I: g& R  getch();
3 N, g, ^3 z( s! z+ P  zcls(0,25,0,79);
5 j) P/ f/ y" r) ^) h% D) K$ H& H  getch();# I; T3 v* `6 h5 o
  }
- _/ O/ G: P/ I: T8 O7 T% i  ?  /*********center clear screen(中心清屏)***********/
  {* I, J) N4 f2 Z- z  void zcls(int x1,int x2,int y1,int y2)5 J1 ^& M+ [, f: l
  {& b6 c3 P! }9 H9 ^
  int x00,y00,x0,y0,i,d;
- b( v' O; H% U& L  if((y2-y1)>(x2-x1)){
& w- {& p0 o& M! W, `  d=(x2-x1)/2;* t/ `0 q- c" B+ K
  x0=(x1+x2)/2;1 ]# e6 W, O4 o. c- E+ F
  y0=y1+d;+ h: Z: f7 l# y  |0 I8 |8 N: a! S
  y00=y2-d;5 o0 K: }2 |0 i9 b% X2 j9 S# `
  for(i=0;i<(d+1);i++)1 D: F& c: b4 T0 t7 w1 V& i
  recls((x0-i),(x00+i),(y0-i),(y00+i));  G7 n; M) w' O1 L/ ^6 s, J3 D' s
  delay(10);! d( F& V  P# k3 Q
  }% a6 d+ Y# B* O1 g
  else{; V8 O4 u( w* o
  d=(y2-y1)/2;
+ p/ }( ?! E) e  {  }  y0=(y1+y2)/2;% f3 T& k/ ~2 O/ B* l
  x0=x1+d;0 w8 a) V. M2 I9 O) Z, y+ y2 }
  x00=x2-d;
3 ]! R" [- U. _3 {, f  for(i=0;i<d+1;i++)
! A. M+ @) G2 K4 }6 t1 {7 h, W  recls(x0-i,x00+i,y0-i,y00+i);) H. G( L  O$ O0 ]; a) r3 [
  delay(10);0 S2 w+ d  r1 f! w2 z  f3 ^
  }5 N2 Z& ], q# R' Q
  }6 H8 |3 p( F& x! s0 v

; Z- V& x9 k5 t% y  /************* clear rectangle side(矩形边清屏)***********************/
% i+ e2 O- }1 i5 J6 W! G( a( d1 a' g) ]
  void recls(int x1,int x2,int y1,int y2)$ e: ~5 K# _) B" W
  {9 ?; Y. I; i; H2 r3 Y
  int i,j;
" w; r4 }0 m* i. D; K* }' Z  for(i=y1;i<y2;i++){
+ H. k0 e* ]3 c, v) o$ L1 S    goto_xy(x1,i);! Q  {/ Z9 a6 q  n
  putchar(' ');+ P5 a$ w0 n1 @/ P$ D) t$ W- O4 r1 U
  goto_xy(x2,i);! I8 a6 F4 }, y/ I
  putchar(' ');
. p! V4 z% n% u  delay(10);% a* S5 ?4 Q' C5 U
  }
' Z) i  z3 Z; |. M  for(j=x1;j<x2;j++){
0 S6 f6 n% W6 _$ v  goto_xy(i,y1);) R( m( |& z  C
  putchar(' ');5 K. I$ L* l" J8 v* m4 u* ]7 X
  goto_xy(j,y2);! H/ J. O6 |9 d, L' _
  putchar(' ');
% w- \2 J# a: `2 Z2 B  delay(10);
  z3 G( @4 Z; w, T0 X  }9 I! @4 i' Z$ S0 d
  }. e. v* U& p5 V7 l: M' d( j
  /******************open screen clear(开屏式清屏)*********************/( R  k* G( y* i

2 c8 Y2 K- G$ ^% I: z  void kcls(int x1,int x2,int y1,int y2)
; [3 X' e. g. W& @) `/ Z  {) C* ~9 l# k" G8 B; v& G. ^
  int t,s,i,j;
2 S0 J8 m; y/ m6 D  t=s=(y1+y2)/2;
6 Q5 [1 L4 S/ y1 s0 Z! T  for(;t<=y2;t++,s--)5 v: w  v$ [# y/ O
  for(j=x1;j<x2;j++){) V* }: F9 t: N; p$ e4 R. t
  goto_xy(j,t);
# R/ a, c3 Q& Q0 ]  putchar(' ');' S; o' ^& n8 x& P$ a; |! V) N. u
  goto_xy(j,s);
0 V8 d1 A$ S# _2 f( J/ M$ Y  putchar(' ');8 f( h# v* i/ w7 J/ X0 A
  delay(10);# @. C/ Q% B1 @6 n/ e! }
  }7 l! c, v, O' N+ _4 k. h
  }, ]& F. z, ~1 Y! x( Q+ Z8 z4 H
  /*****************close screen clear*****闭幕式清屏*******************/
! |3 d5 X& z) }2 x( E8 R' U, |8 \3 j! N- s/ e" |% R# o7 i
  void bcls(int x1,int x2,int y1,int y2)+ v) M, O$ \" j- J  G
  {! \/ \  x: n1 T3 P5 R
  int t,s,j;5 d! p' [6 z! G) \+ R. |% w
  t=y1;; S; N9 i5 a: z  U) R* h: }* \* W
  s=y2;3 ?' ]. l* v4 q3 k: O
  for(t=y1;t<(y1+y2)/2;t++,s--); y9 u0 s! ^% H+ `/ s( i) R
  for(j=x1;j<x2;j++){
1 ?" Y6 \- ^3 l  o, P- {  goto_xy(j,t);! `0 |3 Q. N" g2 c+ E$ ^7 u
  putchar(' ');
4 f0 o1 z3 ]* `# d" n4 O- Q  goto_xy(j,s);
1 p4 a3 F3 S! ^5 z. |$ c# _/ k- w  putchar(' ');& Y' c3 |8 n" n- P: ^. `. t" D8 M
  delay(10);" H+ v" `; x  ]$ z! H
  }
' i" Z* f8 W2 Y! f+ [  }
  f, C% p; H; i  q1 a  /******************bottom screen clear(自下清屏)********************/0 S* c- b: f( Q# N! V
6 A8 a; B  D0 B- z4 X6 E' G
  void dcls(int x1,int x2,int y1,int y2)
, N; `+ ~7 O$ v5 ^  {* ^) R  l! W! m. @/ V; m
  int t,s,j,i;
, i+ q4 P/ k8 \  t=s=(y1+y2)/2;
  j4 `, X$ v8 A7 a  for(j=x2;j>x1;j--)  D) Y7 N3 p" q  X4 M: Q
  for(i=y1;i<y2;i++){
8 H, Q. Z3 {8 }  goto_xy(j,i);+ E% [+ T! Z- Z* @& O7 k) K
  putchar(' ');
, Z# U1 A9 \9 z: Y. J  delay(10);2 P1 v1 ]5 n; {/ D. _) P$ R
  }$ [  q7 Q  ~+ R; d
  }3 n2 T" X6 C, \7 J' T" y9 x' `0 {8 {
  /******************设置光标子函数******************/
/ Y4 o( N+ _. m" N% Z% m
1 L6 G7 ^5 e- y  H  void goto_xy(int x,int y)) U9 s! A$ B6 {2 R3 N) B) `/ D
  {1 r3 h6 p# e% g" N) C  o% J  n  ?, H
  union REGS r;- h5 q7 Z- f& k4 ?
  r.h.ah=2;
& u1 ~3 B- V- D: J& [4 F% e  r.h.dl=y;. ~/ f  z2 e9 S. ?2 Y% u
  r.h.dh=x;6 o' y" R, V: v- s* U
  r.h.bh=0;* y/ n' M0 S% X- z
  int86(0x10,&r,&r);4 s$ X/ D, o: |5 Q$ e2 A
  }0 w. }: M$ V5 I5 k- E
+ V( J- ?' a( e/ M! [3 {' g- }. Q
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/" l% s% m, \- v1 q$ n

/ D/ P3 m4 Z% ~$ t: ]3 k# ^  void puta(void)2 D. b3 c# G5 d% K+ w) ^
  {
; R6 A4 m& P8 k1 D! d# u  int i,j;
" }; L" d6 d5 h( i& x  for(i=0;i<24;i++){* a" N$ B- X# c. o$ ?5 l
  for(j=0;j<79;j++){0 z( `. j0 h, l5 s. F
  goto_xy(i,j);
. i% F0 g& J! j( \  printf("a");1 s2 w. z6 ^1 i, D# Z! ~& y
  }
' `2 U6 n: A* `. V! u  }# d" f  @7 C" L2 _& n3 i! k/ ?1 p
  }

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