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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ Q# }( v, `) t/ H9 Q- V! b8 |
$ X( ?/ g6 o0 A' V% I3 B  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里1 r6 a0 t' ]+ |5 [# _
0 u" g( G3 Q: N
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ! w  J7 L5 u1 {9 z: F" ^
  子函数及演示程序:
9 y1 f6 Y' v  Q, z+ i3 m- a% A: H4 j: v5 u2 W6 G( u' H
  #include<stdio.h>' l. q. C& f& e. H2 h' g0 r
  #include<dos.h>% }5 P  l& |) k5 q* x1 i4 ^4 ^
  #include<conio.h>
0 @- D, X9 w: x
$ K7 E3 E/ u/ r5 g/ t  void goto_xy(int x,int y);
; X% L+ \6 [9 {  a/ W$ Y6 Q  void dcls(int x1,int x2,int y1,int y2);( ^! R6 c" D9 x% r7 C
  void bcls(int x1,int x2,int y1,int y2);
" ~) i+ i' c: _0 D4 h# i  void kcls(int x1,int x2,int y1,int y2);
# |& k, X' C" N2 Q  void recls(int x1,int x2,int y1,int y2);. y( v! x: v3 }  i' @
  void zcls(int x1,int x2,int y1,int y2);2 m8 q6 e1 i0 |! M" J" b
  void puta(void);+ t+ _. A- b! L0 w, C( B) z# v

, h" B1 z" V' p6 l9 f- X: |9 s0 y/ R2 x5 _% t
  /*--------------演示程序---------------------*/
9 x0 O* K; F: W, H. t( Q2 a, [; d  main()$ D% S  \) x6 w6 r+ X
  {: F" y& \. N9 p! @# i
  puta();% x7 [# c0 r4 E6 S4 l4 F8 u
  getch();( ^% X, a$ N9 @/ }6 d4 V
  dcls(0,4,0,79);6 g4 I* i, c5 y. p9 `
  getch();
+ X( B/ a" O2 B' f  puta();- W- ]' v6 Z2 s4 t. A+ H% r' y
  getch();2 k& U* [1 r, D3 b& t# o7 W3 i
  bcls(0,25,0,79);) @$ @% s9 `9 [" i4 n  T
  getch();
% j* J% Y& z* I! V  q% F# j3 O, x0 G  puta();
) u! ~; @; h0 |6 H, y  getch();( V9 T" n9 c% s) l
  zcls(0,25,0,79);
1 D: k" L) t5 d4 B3 `, Z0 Y! F; ?  getch();5 N/ a  p: C" V; ~
  }
( T( W/ Y8 s' @0 {  G  /*********center clear screen(中心清屏)***********/4 b" E7 u6 L8 `
  void zcls(int x1,int x2,int y1,int y2); y" d/ j. H5 _
  {
! Q; J( O( h& x/ }5 S( Q. W9 v  int x00,y00,x0,y0,i,d;
9 o' ?# f' S# A  if((y2-y1)>(x2-x1)){
4 p0 Z; E8 @7 L4 E  d=(x2-x1)/2;+ c4 g' Y. [2 J* n
  x0=(x1+x2)/2;
4 \3 V; C! Z3 Y0 J! U9 C0 H- u  y0=y1+d;  p8 A4 E! g- i3 z
  y00=y2-d;
' T" |( U8 S- q  B* [9 R  for(i=0;i<(d+1);i++)
6 G& r1 e" A8 R) N- a, ?  W  recls((x0-i),(x00+i),(y0-i),(y00+i));  C2 |: L# ~& `1 u
  delay(10);
/ x$ r& F2 g$ U' b: H  }
9 u/ n$ q2 h2 V5 Z: N/ \  else{
4 W) R# \+ u1 @" s0 H% R  d=(y2-y1)/2;! j1 u( c3 Z% y+ \0 ^* S  ?2 J$ r% {
  y0=(y1+y2)/2;  i$ |; O) J3 l  X/ {
  x0=x1+d;8 d7 H+ {0 V0 }+ S: p
  x00=x2-d;/ S9 X& g7 d' Y$ n8 H; z
  for(i=0;i<d+1;i++)
, ?! ]4 N' Z. Y, Y$ `+ {6 p  recls(x0-i,x00+i,y0-i,y00+i);: I0 X' R- J0 h0 X# H' O+ |
  delay(10);
  J0 S& N. Z% a- X  W$ D  }6 T, `* K, K7 u' P0 O
  }
3 n& H1 I: w6 l" B7 g  _
- T9 M& D. d# F  /************* clear rectangle side(矩形边清屏)***********************/
9 P# t/ d! o8 m
7 Q! e/ L8 a( H. e% \4 j  void recls(int x1,int x2,int y1,int y2)4 d6 @6 @# y: B7 s* V5 v% H
  {
' n/ Q9 {# U. y" E$ f  int i,j;3 Y. a. D3 m3 P& G3 J; {% W# E& F
  for(i=y1;i<y2;i++){
. K0 ]' O0 I4 |6 {3 k$ G& y) W    goto_xy(x1,i);( c3 f8 d) f% y/ C6 E( V
  putchar(' ');; X% {6 @6 {9 v6 s) v( H
  goto_xy(x2,i);& T& K. P6 q+ k9 J  A
  putchar(' ');
( s7 w" g5 e5 n8 K6 h6 x; ?8 h& s  delay(10);
' u9 k! x4 `# {" G, q$ y* N" R  }% O: B  }7 C. O
  for(j=x1;j<x2;j++){
. o" a+ X4 M/ l' n4 o  goto_xy(i,y1);
( w" u/ n. \# B) u3 R/ n. i  putchar(' ');
" \# C. @7 ^4 f  goto_xy(j,y2);) G$ Z1 U8 |8 G4 s2 g
  putchar(' ');! f  _6 Y2 N, ~2 k
  delay(10);
6 i7 z, }* v5 M- s0 ]  ?* Y: I  }& O2 E  Y* @) \' C2 _# g
  }
4 I1 f0 G. h) ~. t* j+ _  /******************open screen clear(开屏式清屏)*********************/+ U! {' ]) b* a  J

* K; R+ l$ w6 W: m  void kcls(int x1,int x2,int y1,int y2)$ `$ _  Q. x7 X9 N7 u
  {( h/ p8 f5 h1 x" P( U
  int t,s,i,j;
1 M5 C% C9 b' ^% j, b0 K  t=s=(y1+y2)/2;
& e0 [; t+ f0 z  for(;t<=y2;t++,s--): Z1 l% z0 T% U4 O1 S
  for(j=x1;j<x2;j++){" N& C5 g& L5 }4 M
  goto_xy(j,t);
- Q& ?$ F2 B- r0 e6 Z% R" Y# a* B  putchar(' ');
' W- B8 W3 m0 Q$ M  goto_xy(j,s);* f- R8 C' b# e/ P' S5 X
  putchar(' ');
5 e% z9 z, c: f9 X# @3 Y7 s  delay(10);$ x, g/ o+ F$ j# V
  }
8 y) H9 N4 ^5 z- E  }
$ \1 U5 C$ o6 T0 o! n4 H  /*****************close screen clear*****闭幕式清屏*******************/+ v$ P6 M9 E2 y% n0 }) Y
! b1 r. A, {2 G1 r
  void bcls(int x1,int x2,int y1,int y2)
! C$ [, D1 }; |" H3 W" R5 y0 o5 c  {4 g. B# y) e* H, J
  int t,s,j;
, h% c( f1 `; F- ?+ d  t=y1;
- s3 ^/ f# A' v: S3 a  R) G  s=y2;
; r% n" B3 l" a' E& V, j  A  for(t=y1;t<(y1+y2)/2;t++,s--)7 Z* W# r- G6 {; p: \3 }/ l& z
  for(j=x1;j<x2;j++){" e2 u. a' A+ ?
  goto_xy(j,t);
6 ?4 A0 S2 b# T/ o# H& h  putchar(' ');
  |" x6 s( C5 ?9 D  goto_xy(j,s);3 f: S) Q! W3 {0 U* r
  putchar(' ');, r! Q9 h' i4 n+ j7 H- ?0 q( h
  delay(10);
: i+ M* a; B" ?' k  }) C% _7 `/ w' ^0 g" H+ W
  }  j" f& _# u9 p( l/ f' p' H9 f; d  h
  /******************bottom screen clear(自下清屏)********************/
" x* Y0 D8 S. W) m5 I/ y8 V! c! ^
  void dcls(int x1,int x2,int y1,int y2)
/ V' B9 ?: {& H9 I' ?/ {  {% I8 p3 ^1 W" M- `
  int t,s,j,i;
3 X7 a) B% k* _. j& z' n. N  t=s=(y1+y2)/2;. D4 o6 ~" F: P7 b
  for(j=x2;j>x1;j--)
/ q% @( t) D$ X+ j: Q) Q6 m  for(i=y1;i<y2;i++){
* ~1 [' o6 P7 M+ i# X+ J  goto_xy(j,i);
4 `" f  n# G6 ~3 e) y2 f1 Y  putchar(' ');! J2 [1 K5 o) x% a! q4 Z* V
  delay(10);
' O( Y( e7 e6 \9 I( J  ^  }2 w7 ?* i0 O' p9 c$ z
  }
8 D' A# q/ n( D/ b# r- G  /******************设置光标子函数******************/% @5 G" o" s7 Q5 \% N- }9 i! [

( |, c& e: T! X" |9 k1 R0 \  void goto_xy(int x,int y)
$ ~1 s' A6 E9 [& u0 h: e7 d  {
6 R# q4 j. P9 N2 S) n4 _* ~* Q  union REGS r;
5 |% R9 I9 t( R' g; [  r.h.ah=2;
! }; a$ D4 U/ f7 U: I6 N  r.h.dl=y;
# x$ Q; B# P; d$ z% r+ `  r.h.dh=x;3 W$ Y3 n! T! ?% t5 \  H: w1 @
  r.h.bh=0;
, p( B; c0 e; J  int86(0x10,&r,&r);$ g" S; [: C4 J5 O8 F
  }. [6 w# N3 ~4 Y
3 _. ^( Y) m% D6 A4 d3 b4 j
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/. r( _2 w6 \7 I! }
- X9 ^! E: E1 V* k; p5 B
  void puta(void), A/ y5 C8 j) {4 g7 b) u, E8 `
  {8 t1 V' J& ^' g: c
  int i,j;
3 e3 z8 R/ @' ^  for(i=0;i<24;i++){
& e* z! {( _8 q) `5 }8 Q! l7 h  for(j=0;j<79;j++){& I3 t- N! s" S  `$ J
  goto_xy(i,j);
2 N  o& d* w2 Y" ]- B. X  printf("a");9 R- [( V1 Y3 g( J' w
  }; R7 W8 j) T5 z5 A5 ^9 H! p8 m, t
  }
/ N: C% z# P: s6 W# s' r+ Z  }

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