返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 _. ^4 g8 f& D; r5 Z/ [1 {4 R- Q( ]% M6 O$ F; C
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里  P& X0 E5 f/ d" R; f0 @" B! O

  `8 s+ |; m5 J1 j# |  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: N  O4 j. z% D# ~8 W. ~6 J  W  子函数及演示程序:
. r' a% C! p5 y/ K
1 C# q+ t9 J5 j) m& }( f/ f/ A1 M  #include<stdio.h>3 f/ w( ~* U: Q
  #include<dos.h>
/ m5 V% Y  k+ O  #include<conio.h>
& D# O% o( j8 @6 \; y" g, {9 P) i7 Q6 f  p! T, \
  void goto_xy(int x,int y);  M! h, |* y/ N  e( E* n; v
  void dcls(int x1,int x2,int y1,int y2);# ^; {* _; x5 Y+ X+ o/ {2 N
  void bcls(int x1,int x2,int y1,int y2);8 C& P* h2 r9 |4 R7 e
  void kcls(int x1,int x2,int y1,int y2);
8 b: _) Y; O  b8 z# X. G$ P  void recls(int x1,int x2,int y1,int y2);
* u- f* z. c8 l6 d  void zcls(int x1,int x2,int y1,int y2);! q$ N3 Z# `1 x
  void puta(void);2 ?5 H& R0 S  d3 _- H7 m" D1 h7 b8 P9 b
" o: ?1 \+ J* X3 B# F/ J
- V$ _- ?4 \, c5 d" u" N+ U0 o3 S. s
  /*--------------演示程序---------------------*/
6 n8 }+ j0 O* p7 a3 ^4 h5 ]* k8 M2 _1 r  main()0 R0 @9 Q' o3 {! ^
  {0 {+ [# l# Z" g2 |. D9 r, R6 ^
  puta();
+ H1 n2 D8 E6 t3 Z' p  getch();9 D! T0 M, G- y. C- h2 k1 `/ C; C
  dcls(0,4,0,79);
, b6 v6 P( J  g4 ?  getch();
9 ?. e' F; c! H; @  puta();; n6 x2 H# f; f0 X
  getch();
, V0 Z# [9 _- G2 O; p: O1 n5 z  D  bcls(0,25,0,79);
4 m! Q( Q3 R5 w# V  ^9 [  getch();2 k$ ?* u1 D, y7 A7 l- ]. i% K
  puta();& R- s) F4 I+ x+ n5 g& ~* U. l+ x
  getch();
4 @! n6 R  v$ u* ~. j  zcls(0,25,0,79);6 O" v. [! _; o7 C- p6 ?, g
  getch();1 L. A0 e4 h+ X; m2 m
  }6 r$ P! ?5 v7 \7 I$ q1 f. f5 s
  /*********center clear screen(中心清屏)***********/1 m8 u. U  }, D; J# F  X" o
  void zcls(int x1,int x2,int y1,int y2)2 C! S$ t1 w- `! L" m) E( e
  {$ ?1 U( z' s2 y2 t
  int x00,y00,x0,y0,i,d;7 _; C! t; Q+ ^% j3 f4 Y/ F
  if((y2-y1)>(x2-x1)){/ H/ s6 I1 I0 @( h& C; V  Y
  d=(x2-x1)/2;1 C0 z5 I3 b. P0 H0 _) f+ v
  x0=(x1+x2)/2;7 m4 j9 \% ^( W' E
  y0=y1+d;( w7 D! s$ g1 I! I, b
  y00=y2-d;& d5 z- c* g, R: X9 R" }  \
  for(i=0;i<(d+1);i++)
& U/ Z4 n. n/ H0 `" u6 X7 v  recls((x0-i),(x00+i),(y0-i),(y00+i));
7 B5 X( I: p9 s5 a" W; ?9 U  delay(10);
- F8 {) f/ v8 Q, k* f3 m  }
. A2 t( o% q2 _; R  N0 d8 H& F' X  else{0 c5 u4 U# j3 b9 L0 S& \
  d=(y2-y1)/2;
" R2 Y! \- K+ S4 ?- a1 ?  y0=(y1+y2)/2;. c* [2 H& C% y  r7 L
  x0=x1+d;8 |% ]' I' e, }- v3 P8 ?6 n: _
  x00=x2-d;' e' V4 j, U" j
  for(i=0;i<d+1;i++)
1 H! z7 {/ {) W" ~+ ]6 f  E  recls(x0-i,x00+i,y0-i,y00+i);
+ v: @# ]) O8 r- G  delay(10);
. M% {' C6 q4 u( N# B: g  }% M( v$ m* T' e& V# e/ G
  }
! |- W9 B$ ^& O, n6 |" @- ?+ W, `/ ?( r7 G' w: X7 I
  /************* clear rectangle side(矩形边清屏)***********************/
' x4 E' K" j8 R( c3 v. l! N  h4 T" d
  void recls(int x1,int x2,int y1,int y2)
& l5 l3 e% H6 M6 c  {
+ k: Q3 @; _, |% n( y8 S# d* z  int i,j;
8 u# l) z5 e* ~  for(i=y1;i<y2;i++){
# W1 s# f  v! ]3 t9 e    goto_xy(x1,i);/ {; `* ~3 a0 V% X' H- [. X9 n2 S* g
  putchar(' ');
  r, _4 k  w$ C  goto_xy(x2,i);3 c6 l1 s" @' v3 G  b) c
  putchar(' ');
2 B6 l  |$ x) r  v# ?/ @7 i3 J  delay(10);' u2 e3 U  G% I, M
  }0 J: X1 p& d' X
  for(j=x1;j<x2;j++){+ R" d; [/ x% _; Q& M) R. S
  goto_xy(i,y1);5 _% T0 u1 l) D, W( E" |1 I
  putchar(' ');$ f8 x  C, g8 ]; Y
  goto_xy(j,y2);2 x* \1 [) @9 ]& l0 b4 \$ J5 t8 y
  putchar(' ');; f/ G2 G  R$ f. N) J5 F1 f
  delay(10);; b- ^* u0 N9 t+ o
  }
( H( O: e* A) d5 o! M  }$ h) b. E. T  ~* L* R9 M
  /******************open screen clear(开屏式清屏)*********************/: ]. T, ?3 j* V0 m
# K/ T  l. z5 g" ]6 R9 `& J
  void kcls(int x1,int x2,int y1,int y2)# g6 {$ V  \' V/ J; m; Y
  {
6 I: T% i* l+ U, J/ l# ?  int t,s,i,j;
, F7 C% W( Q, T1 ]( q, x  t=s=(y1+y2)/2;+ ~6 O8 r% i2 `4 v& s  m* X
  for(;t<=y2;t++,s--)
; Z& \; B# S5 y' u) q  for(j=x1;j<x2;j++){
9 a6 o/ d( p3 w- P8 L! Q0 o5 ?  goto_xy(j,t);3 Y$ r& ^9 ?  ~8 F* D& z; E
  putchar(' ');  I* E" g! s6 ?) R( a) [
  goto_xy(j,s);0 \/ y( O3 \7 K9 `" L% c9 P
  putchar(' ');' k0 s  E/ P5 _5 m( N. j% ^5 o
  delay(10);
* J0 Q$ Y& W9 @6 \6 B  }
' w) H2 h/ m8 G/ [) C* r+ |3 I  }$ e: n, |8 b+ ?6 T- E
  /*****************close screen clear*****闭幕式清屏*******************/
2 m& z9 j/ _" r5 d' @; o1 r2 }& \7 |
  void bcls(int x1,int x2,int y1,int y2)0 _7 S% r6 w6 L3 W. P- L
  {( E$ a" E+ D( s
  int t,s,j;
% Z2 G9 b6 U. e: v9 ^  t=y1;  w% X# D6 r: ^' g% d& l/ e
  s=y2;
7 g8 }0 l+ ~% ^  for(t=y1;t<(y1+y2)/2;t++,s--)
# v) L+ r& A  b. Q, @  J& k- A  for(j=x1;j<x2;j++){! _/ A$ D5 _/ F+ n3 @, S" p; k, s7 D
  goto_xy(j,t);/ ]1 [! ?9 b4 T4 m
  putchar(' ');0 m; r+ j7 D' ~( d. X* q
  goto_xy(j,s);
4 ?' x0 ]3 m0 E9 R$ ~$ x) b+ Q  putchar(' ');
5 {) l4 F: I7 u7 t9 l  delay(10);7 I) `5 p, }0 J. F
  }8 I+ a5 Y) Y; q: `9 }; ^
  }. ]/ k/ @: q2 G5 U8 O. ]
  /******************bottom screen clear(自下清屏)********************/
9 Z  w& X6 C. d
6 O- H# P8 Z, `' |- A8 a  void dcls(int x1,int x2,int y1,int y2)& s# W. R; W& P9 X
  {6 R+ X  @7 C- @
  int t,s,j,i;8 j, I4 d7 h; g
  t=s=(y1+y2)/2;
4 @3 L! o- Z9 C8 N; h6 J2 a  for(j=x2;j>x1;j--)
) u6 K8 U! Z0 E- c9 f  for(i=y1;i<y2;i++){
4 I( s. r( X- ?" m  goto_xy(j,i);
/ x1 R' L! n! R) G+ N3 f% F2 h$ b  putchar(' ');% n0 K0 V8 ~! V8 ?" J
  delay(10);
' b* q0 x& X' i! k  }
' N; n8 l2 K. \  }
0 N: x9 `0 l' a  /******************设置光标子函数******************/
% K* w. C& N7 O1 E
9 W  g4 W% e# [$ M  void goto_xy(int x,int y)+ G5 F* y- \7 {2 B6 _4 V9 e5 _
  {( J0 }; O( n, \* Q# t
  union REGS r;
9 h& j! i1 z. f# E  r.h.ah=2;* w1 J; S( O+ }) Q- P) Y) W
  r.h.dl=y;
$ |0 a2 t5 [$ c! g  r.h.dh=x;- j* `; |  J  {
  r.h.bh=0;, L3 Q- y1 R( k3 T. z% Y/ v
  int86(0x10,&r,&r);# U8 A1 \1 Z' X" C4 ~/ L7 V0 T
  }
) s2 E5 u; D0 P% k, H# {0 y; v8 V/ ^8 d
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 X; N! K- K; B$ q- u+ b

- M, L( l- Y4 N: }8 s+ l" B  void puta(void)
* O, n; f! ~; {$ j1 W7 e1 K  {7 J, I6 y$ a; C1 }' o
  int i,j;5 ~# {& \4 k- w/ O5 D
  for(i=0;i<24;i++){! a  v8 `) Y3 L  P$ Q# e
  for(j=0;j<79;j++){! o4 y% U; P5 B
  goto_xy(i,j);
3 a; E- H* a8 @! d  printf("a");
- }% s" s; _$ G; c* m0 w  }
, }! f2 U) r8 w; `9 p" h! x  }
; f+ }# U) c6 [( a  c  I  }

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