返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% v$ c7 L$ \+ c1 O0 N2 r4 ^5 ]- M3 R0 t
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# W/ \+ j+ L4 x: B6 ]9 v  E* X. k
3 F. `0 `+ f3 {: S, S  \/ e2 f  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! A) ?7 e* M* `  子函数及演示程序:
( O2 o& o$ y/ x2 G) T- w! S1 k& J4 K* [+ }/ m0 k
  #include<stdio.h>/ ~( x  q2 I# n' s, g7 W7 B. ]* u
  #include<dos.h>2 O$ x7 g( z+ R( u: ^* Y5 K
  #include<conio.h>* m+ r; ]: r+ g: {. O+ R
: I0 T2 H. F' l+ n# ?) d3 n& |" Q9 v
  void goto_xy(int x,int y);
2 r$ K: R. o$ R  void dcls(int x1,int x2,int y1,int y2);
$ ~) W4 U$ l$ [% \  E* `  void bcls(int x1,int x2,int y1,int y2);
* {0 E9 T# Z- O" i7 S/ V  void kcls(int x1,int x2,int y1,int y2);8 F+ o$ O+ m3 E2 O' e
  void recls(int x1,int x2,int y1,int y2);3 l, a  m7 w; ^
  void zcls(int x1,int x2,int y1,int y2);, h1 W% y' L$ c3 K) S
  void puta(void);( M5 _1 F: E; d. L9 H
& M( E( e% ]8 u8 W# i
# D( r3 M' J+ D) K& [
  /*--------------演示程序---------------------*/% O( P( ~$ ?( G) |& G+ O
  main()* R( `1 @! I8 Y7 I
  {% G6 [/ F  j- W+ A
  puta();
* A" x+ v6 h: H. m  getch();7 `$ i+ L- s: v" y) u9 L: v
  dcls(0,4,0,79);: J4 \6 X' y' U6 E1 b" B5 v; Z
  getch();
! L0 U! b# I3 Q- O  v# X  puta();
9 P8 D' J1 h  e3 |( @& F  getch();
: I+ H/ J8 e2 H. N* G8 f  bcls(0,25,0,79);
7 c6 j! t1 _0 S6 S6 U) J; v8 V8 `  getch();- D0 R6 ^! e) r: u& @
  puta();
, |# \  ?  V  ]  {: f2 U2 I  getch();& f: }( V7 o5 @5 ^9 b) N, m( n. B
  zcls(0,25,0,79);, l- d) ~  J; D2 o0 b. n
  getch();3 [4 b) W5 S% e) k3 U
  }, j3 _* N7 }# M5 b" S. H' c
  /*********center clear screen(中心清屏)***********/. h: X: R9 f) M4 g% j
  void zcls(int x1,int x2,int y1,int y2)
5 ~5 |, R+ n. I; G$ t; K6 z3 O8 g+ }/ f  {
/ [# f! n" i! A3 a& {6 W& w  int x00,y00,x0,y0,i,d;
* C* n, B# v+ u  if((y2-y1)>(x2-x1)){) t" O$ S+ H( r& ?
  d=(x2-x1)/2;( M4 f0 Q$ N. ^- @/ H' K
  x0=(x1+x2)/2;
9 E: l& K8 V: y% W) L  y0=y1+d;
0 f0 v. [- R3 P% q- Q  y00=y2-d;
8 a* W* _; b$ X  ?7 N! q  for(i=0;i<(d+1);i++)- x; E. N/ \& J
  recls((x0-i),(x00+i),(y0-i),(y00+i));
. r% \6 H. j$ o# N  delay(10);
+ _8 f2 l7 M! t' s  }
; \# Q9 B0 K% R% S. }: S( S, v3 ]  else{
. n9 u9 R; t! \: z) z  g5 z  d=(y2-y1)/2;0 T2 K8 m& j! G# _6 w7 \
  y0=(y1+y2)/2;
4 a! {' @% I3 S$ \7 m, \# p( n  x0=x1+d;2 b8 o8 u  E$ n0 T' a3 Y( T
  x00=x2-d;* Y5 f3 j1 l, E4 U  }% d! E
  for(i=0;i<d+1;i++)# K/ e/ d0 X$ f% ^) e5 l9 S! q* _
  recls(x0-i,x00+i,y0-i,y00+i);4 F- P+ a  i' v8 J; `, G. G
  delay(10);$ w9 B# Y3 S! K
  }$ G" z) x9 R% i
  }+ T1 ^2 s% d% D8 I: u  T; e
  ~2 ?( Y+ P+ z8 I* b4 G
  /************* clear rectangle side(矩形边清屏)***********************/
4 A+ ]% X4 t5 u) _
" ^2 f1 n4 z3 Z+ F. C2 a  void recls(int x1,int x2,int y1,int y2)
" q& d- w# L1 y- _4 O  {
1 @7 B$ G& J  }: x" P  int i,j;% r& d: N. y* _# [  z5 l# w
  for(i=y1;i<y2;i++){* l* [% }; c  [
    goto_xy(x1,i);6 ]) ^! @3 L2 K. ^* h/ v
  putchar(' ');
3 C; T' A9 _! n% y4 l  goto_xy(x2,i);1 b6 d4 ^! {1 e2 [* Y+ v
  putchar(' ');
( w: x2 F3 W2 m# a3 u  delay(10);
% {+ y) m9 p+ ]' n  }: N; ~) m- c. C, n3 r: P
  for(j=x1;j<x2;j++){
5 C9 Q& n' M2 U1 o. v0 X; Z+ ^5 c  goto_xy(i,y1);
% c' v4 u& z( U, X9 o; r. a# N  putchar(' ');7 i. d" d7 m; e4 d* T9 k- A6 ^
  goto_xy(j,y2);
8 t0 F" o0 q: ^8 m" F* v& n  putchar(' ');
' h& R: R: r# [: \* E2 S  delay(10);0 ?- n1 W1 Z5 A$ E( E
  }
. F0 T: k5 }/ M/ i+ I3 f6 Z! t  }
3 t$ s9 s' m9 ~4 b' ^+ G" y9 e  /******************open screen clear(开屏式清屏)*********************/
. u/ k% y# ^7 Q- X) f+ P4 v3 y9 x
- i# ?: o1 K! w9 ]  N; x; J. S+ ~  void kcls(int x1,int x2,int y1,int y2)# s2 I( ]+ S* b/ W6 V7 t
  {
, u/ [' X6 i! Y) T. ?  int t,s,i,j;8 Q+ c# R/ c! V  f
  t=s=(y1+y2)/2;9 ?! }7 x- C) e/ _. {0 E& |
  for(;t<=y2;t++,s--)2 o3 P! C& Z. n- X
  for(j=x1;j<x2;j++){8 _/ S, ]2 V7 ?1 J
  goto_xy(j,t);
4 n. |6 h+ \; q6 T  putchar(' ');
! R2 t* L3 R5 x) v$ Q  goto_xy(j,s);
& W  q3 V+ m3 ^  [4 R: F1 G7 N  putchar(' ');
& o) q& v$ }) x% }+ X& M- x  delay(10);
% A/ @$ T+ Z3 \0 v8 t5 d; `  }
& E; C; I- H+ {. Y/ J  }$ T) ?& f9 e3 T% k( Q
  /*****************close screen clear*****闭幕式清屏*******************/
" Q: s( a5 @, i& w- e) H3 S
8 [$ v( m  D8 ~  void bcls(int x1,int x2,int y1,int y2)5 {' w$ M& ]: e
  {& S: z, T6 g% L5 }8 g7 Z
  int t,s,j;
% y6 d' ?. a  j" V% ?  t=y1;
( i7 r0 c, w! I9 t  s=y2;
0 G/ Y6 ?' H( N& m; O. e& S  for(t=y1;t<(y1+y2)/2;t++,s--)
  ^9 ]. i2 Z9 V& g  for(j=x1;j<x2;j++){/ Y" v: @/ Y8 n% U
  goto_xy(j,t);( x7 K3 D2 P4 ], w
  putchar(' ');
! L# _  |  R% I9 ~2 @  goto_xy(j,s);5 h9 ?" \8 C6 s2 l
  putchar(' ');7 m  i2 R# R: ]+ [/ G
  delay(10);
+ [) q0 {; k" P. H  }; t; O5 Y3 r  }
, l9 L, t; J+ r; g; f- Q* v! D  }
+ Q# w8 Q2 {# y3 F: U2 I  /******************bottom screen clear(自下清屏)********************/
4 Z$ F" E/ u! W; W7 k* C. R$ H$ S- B" n$ D* L8 t! F
  void dcls(int x1,int x2,int y1,int y2)4 h$ y' L1 z0 w8 B2 q
  {
" w( P6 F2 o: Y; E, V  int t,s,j,i;
( w) i& Z- H+ ?, t5 n  t=s=(y1+y2)/2;
6 @& ~9 e- b# o: Y, T3 Z  for(j=x2;j>x1;j--)
. `0 w& b. o7 I8 X( F1 z* J2 \9 o  for(i=y1;i<y2;i++){
- e* Y8 l! J# d9 _" C  goto_xy(j,i);
* f% q. @% L3 W$ U. ?9 ?* Q0 R  putchar(' ');
" R* o" F% h( Z% y  delay(10);
( e( T; m7 X. `3 |. r" J8 B  }
8 [. t/ {% z3 Z+ |+ {1 L  }2 `1 {. f6 s* X! k0 R. @
  /******************设置光标子函数******************/
8 ~2 [! z9 x" }' y, Q  }* q. ]3 v
  void goto_xy(int x,int y)7 R5 w: V2 A) \. _( O! x! y
  {
0 F  v9 }  x$ e  n9 f9 p  union REGS r;
% i2 t, J) X! |+ G$ Y, z" H  r.h.ah=2;
- z1 `! N& R; t, r. j  r.h.dl=y;
( v$ w3 G. y6 M% P$ y/ }  r.h.dh=x;
' G& `9 @, C  W  r.h.bh=0;/ R  L+ F3 u; E
  int86(0x10,&r,&r);8 V, G" W  ^- O0 G
  }' T% c1 \- B% Z# A' a2 g
' m  ?5 V5 Z& j+ O- L/ Y
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/, @9 d8 f) {0 N: ~8 R
( X- P+ e8 l, @. J
  void puta(void); ?, i! X& b1 J! h
  {7 {  s: `- F7 u, I
  int i,j;* X0 |" g) c9 W/ z/ _$ `4 B. w! M$ Z
  for(i=0;i<24;i++){
4 V' |- ?# @* k/ j  for(j=0;j<79;j++){: [  t& `2 }7 c+ n2 T( K
  goto_xy(i,j);1 G" W$ x  H" f9 p& L+ r8 y( c& y8 z
  printf("a");
. a" p$ |5 H$ C% g8 d' E; J  }" E' @8 n+ i8 h# G3 D* w- ?. V  d1 {
  }
& `- m1 r) j" m* T( |9 ?# V; }, O  }

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