返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ Z& V) Q9 J% W) |( d; R, R0 c6 a" r
5 @$ J4 i6 n% b3 {9 T
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( |: _- f4 @9 j& ]
+ m8 V( H' r- D1 w+ J% y5 [2 @  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. I2 r% _2 b7 [/ y' ?  子函数及演示程序:
8 @5 Z1 V0 T- E5 L; k3 Z
/ u; D4 o+ B* l3 W& d  #include<stdio.h>( q8 W" W2 S4 I# N
  #include<dos.h>
# E- S: h# r6 u5 q/ i* F& s% ~  #include<conio.h>
2 q) t4 L3 Z# I2 S
. X$ H  K* i. b2 b& S. \  void goto_xy(int x,int y);3 }. Z4 P9 p% h9 ?5 C' s
  void dcls(int x1,int x2,int y1,int y2);
- ?* F( }5 n* \7 \( y- n! k2 K  void bcls(int x1,int x2,int y1,int y2);$ {- q: J' r5 A( e/ v! D
  void kcls(int x1,int x2,int y1,int y2);; K9 e4 a) e$ t0 W* z$ @- g: K
  void recls(int x1,int x2,int y1,int y2);
% x3 ~. A' R* p; ~' O. E/ T  void zcls(int x1,int x2,int y1,int y2);1 h7 z- m5 b. ]) P
  void puta(void);6 {2 L" d3 L* R7 o4 h8 }; K+ {

$ l$ ^9 Z+ j3 a! p0 a6 u0 d$ p& w
7 X+ ~: e  S2 Z7 {) G& I' M  V2 [  /*--------------演示程序---------------------*/& [. k1 }/ o) P0 ?0 T
  main()
* x% ~8 n$ ]# R) {: a; p" I  r  {
" }8 \$ n9 t  d  puta();( B6 p* @$ T7 ]/ D1 x( \; v4 B( v. S
  getch();
+ _7 _! X1 U8 w# F6 f! g2 c  dcls(0,4,0,79);( i* m" g* X. t8 t
  getch();/ B" x* R! q2 ^1 z0 U
  puta();
7 s7 I4 J- G4 M" k/ h% b  getch();( v( r  b0 B! t( ^
  bcls(0,25,0,79);
( c# G7 H$ d6 o  K; y) Y  getch();
0 A4 S$ O" X$ `' ^: @9 R2 x% W  puta();9 U2 Q4 b7 \) ^& Y- \- {/ Q
  getch();
7 H* a! G# L* @  zcls(0,25,0,79);
, L7 u0 D6 e* Q% Y3 Z- P  getch();
# o  U& f7 n5 D  }
/ |+ b8 u" R! x6 ^  /*********center clear screen(中心清屏)***********/
* k' h" a" s) z! |0 h2 Y; r  void zcls(int x1,int x2,int y1,int y2)/ y( q# a5 e8 k0 O! K
  {: m( L( V9 i1 w' Y, P/ t
  int x00,y00,x0,y0,i,d;
* `- J  Q9 U- Y7 H  l  if((y2-y1)>(x2-x1)){
) k7 _$ i. v3 r  d=(x2-x1)/2;  ]) z5 ?7 I/ R. }! Y. r
  x0=(x1+x2)/2;: A7 ^0 ?5 N/ d* }) W- h/ \. p
  y0=y1+d;$ h& a6 P& a9 [+ m1 I. D
  y00=y2-d;/ B) _5 A) y( t0 i5 z9 j
  for(i=0;i<(d+1);i++)1 G! D, Z2 \) e& }7 b  @# `6 H) k
  recls((x0-i),(x00+i),(y0-i),(y00+i));
0 y3 w( p; c; o, A9 r  delay(10);0 G1 B# D8 `: h4 `- v, I
  }1 R4 Z! u+ c" @
  else{
  U$ V- \3 D5 R% A5 f! |( W* w  d=(y2-y1)/2;
. _' a9 t  @5 T& ^3 }  y0=(y1+y2)/2;
, N* ?: W% N, @2 w) i0 P/ P( r* h  x0=x1+d;
' Y" i' C! U% |" \8 ~  x00=x2-d;
: |5 Q$ c/ w0 R& D% t+ O, C  for(i=0;i<d+1;i++)# s; h* ~4 P0 G; K$ J% w( b
  recls(x0-i,x00+i,y0-i,y00+i);
5 H# s9 y  Q3 v; c+ p  delay(10);
1 F; f: r( v- A! y) \  }
& ^" T% ^0 ?; a+ Z$ h& c% w  }
; a) y, ^  d8 |7 h# Y, \1 J, [& x9 l
. [4 {$ e  I9 Q/ P9 [" h7 R5 A  /************* clear rectangle side(矩形边清屏)***********************/
0 u9 n, h/ f# h+ P7 `' M; a
, g9 a! q+ G: A( [# `  void recls(int x1,int x2,int y1,int y2)7 G. p; C- Q3 o& \& [- B0 P& D0 Z
  {
2 J0 y. S/ r1 o; F  int i,j;, I# z9 c0 {6 [+ i2 m9 X1 E( n8 e" \
  for(i=y1;i<y2;i++){7 y7 J' {& `; D! ?6 H
    goto_xy(x1,i);
: F# h7 m: p* u0 U' e/ _1 G  putchar(' ');
  ^  [) R% N+ S; {" P  goto_xy(x2,i);
' v0 X$ ^  y4 k* v: q- ^7 x  putchar(' ');
. O7 r9 L$ V& S5 w1 j9 W. i5 Q8 M  {  delay(10);
, Z5 l6 e% j% d& p0 T0 y; D8 E, M1 A  }
) X2 p6 R: G% H3 i  m4 c3 Q  for(j=x1;j<x2;j++){
6 v/ |. Y, D; N4 R, |  goto_xy(i,y1);
  i+ N) y3 W% I$ I# s. v  putchar(' ');0 Z' l; a. ?1 Z/ x1 M$ L' Y
  goto_xy(j,y2);
9 \5 r3 d0 E$ O  putchar(' ');: _, `3 G4 a  C) R) ~( d; h
  delay(10);
, y2 ?: }& ~. E6 `  }
2 Q4 {! d2 ^; L/ ^+ r9 X3 l  }
; V6 j: D6 P6 ^3 y5 @: v  /******************open screen clear(开屏式清屏)*********************/1 @4 f) Y; ?# T

3 G6 ]5 }' |% Q  void kcls(int x1,int x2,int y1,int y2)
4 S8 u  L0 _9 e0 u. O. C  {
+ n  L" @6 ?+ Q& L( u4 t: r  int t,s,i,j;
/ K( c. \% ~2 i- ?' A  t=s=(y1+y2)/2;
1 w, Q2 J& d8 L( Z& \& R  for(;t<=y2;t++,s--)7 `& f+ y+ I1 s# j, t- E+ j
  for(j=x1;j<x2;j++){! G4 D9 p, b; T% n3 j+ d
  goto_xy(j,t);
& X" l- g. ^, m9 U, G  ^  putchar(' ');5 o4 N) D  f0 c
  goto_xy(j,s);% R: ^+ m  I+ ^  L" M# }& m
  putchar(' ');
( B6 z5 S/ M- d! F, ^, S8 a8 }# z  delay(10);
0 A3 E1 D" \  g7 H) `/ C  }7 F# S" J9 J& t
  }
% L  S* S9 B3 p) i3 f  /*****************close screen clear*****闭幕式清屏*******************/" }. K6 P0 F0 ]7 }5 f/ y

$ y/ g3 Q( a. [+ J  void bcls(int x1,int x2,int y1,int y2)
2 V( w$ V; G/ q1 j  h  {
0 T: t  f% l& K2 J. X( a  int t,s,j;6 Z8 b: Q9 u+ ^% c+ X  j
  t=y1;7 ~* M" u: O% _- U& z
  s=y2;
. [( x# B+ Q( S) E% O; Q  for(t=y1;t<(y1+y2)/2;t++,s--)
' b- ~; z8 U/ x* F  for(j=x1;j<x2;j++){
% c" [( Y* d1 m  goto_xy(j,t);
: O* l+ {4 V+ Z& M0 q7 V3 H* ~  putchar(' ');
* X/ s2 m( R7 \* l  goto_xy(j,s);: T, ]4 i+ ]6 A6 C$ f
  putchar(' ');
+ f7 G3 h2 w0 \% A6 u9 g  delay(10);% E9 w% a! q5 D( G. B1 s9 [* \$ A6 D
  }% x' p8 l: ?" R& o. N; D
  }
% k, I. X& P0 m9 }/ f  /******************bottom screen clear(自下清屏)********************/
* ^% v5 ]: p' B* K
" A! G% ~- Z9 s+ b5 r0 ?  void dcls(int x1,int x2,int y1,int y2)
6 m* k) C. ^" J  H) y) n% \  {
. H3 |( \0 z  h( W  int t,s,j,i;
! L# W$ O' L' S. j6 r4 a  t=s=(y1+y2)/2;
& e4 A" G3 Q1 H3 [% a  for(j=x2;j>x1;j--)* ?* u- R5 s. Y" k1 ^8 X
  for(i=y1;i<y2;i++){
( b6 {' c' Q. g, y0 w& r  goto_xy(j,i);
, v; i3 R6 L7 V. [$ ~& D  putchar(' ');6 W" M2 g  w) m) _
  delay(10);
" V, `3 N/ k# t5 c2 y  }
2 @8 q3 H: j! x1 y9 S# ?  }
: b8 |; H+ s9 [! d) l4 E. ^  /******************设置光标子函数******************/; k3 K/ a& _5 W. u/ a. ^; A' C

1 K0 e/ O2 U4 Q2 a9 \2 ^$ g* A  void goto_xy(int x,int y)
  a, I! j, r& w* ^9 s  {
' I% h& i( @" E* Y! m  N5 K  union REGS r;1 x& B' W! S! q6 i7 s: ~1 U) x& l
  r.h.ah=2;
, K, j& R8 m3 o& X) W( A1 G& z  r.h.dl=y;3 I5 f0 f4 ?% L$ K7 ]6 l
  r.h.dh=x;
7 b! }/ D) h4 W" e% O, G3 T) a* |  r.h.bh=0;0 \% N' k5 R. W+ v! q
  int86(0x10,&r,&r);2 z, i" J9 d7 y- ?8 l
  }$ f5 i7 m/ B6 T9 y' H/ t7 p
/ M8 }2 e: R2 |3 {  O" G1 m6 p2 U
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 F( a& r; }/ ^! P
( J. i2 B6 j5 u( k+ _4 Z' I8 l  void puta(void)
( |% U  S, Q$ p* ^7 S2 A  {
  g$ y* p; X9 M. j  int i,j;9 @0 `: }8 M" u5 M% V
  for(i=0;i<24;i++){+ R  C) l0 ^4 Y0 c; P$ g; \! O5 P
  for(j=0;j<79;j++){8 w* J% f0 P4 F& l( @5 g
  goto_xy(i,j);1 U& r1 S* \. T6 X' S  ?4 s& X( l
  printf("a");! H8 x$ T8 U6 a
  }# g. f" U1 n& C) w
  }
  L* B  e) X0 o: Q, t  }

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