返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 ]+ a# z/ _/ f% W4 I
' G, c9 h0 p7 i# ~! J  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里% h8 X: ~" z2 g% Q

( F2 ?  E; a& Q/ N  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 y7 ?  h( ^# U( G6 L  子函数及演示程序:
  P8 c  b9 |; e% H1 m8 {$ l6 }: o7 U" M* e/ m- V4 v: `" c+ [
  #include<stdio.h>% Q8 I! \* _! m* H1 m- `% _2 j: c
  #include<dos.h>
; i& i% [7 F: T  X  #include<conio.h>
; z+ v3 F8 {+ H% i- L  ^3 O$ g5 ~# J7 p% _
  void goto_xy(int x,int y);
  J& x! \" \6 A7 e, t* Q  void dcls(int x1,int x2,int y1,int y2);0 j/ f* Z9 j8 M0 H2 H3 W! p. W
  void bcls(int x1,int x2,int y1,int y2);
! o7 J7 ]2 V/ _, S, B  void kcls(int x1,int x2,int y1,int y2);7 ^! i& c" Y, o5 t3 c1 l+ G& d6 G
  void recls(int x1,int x2,int y1,int y2);  @. P5 G1 `7 T; U! }; z- L" {
  void zcls(int x1,int x2,int y1,int y2);  x. Q/ N: k% v9 l+ ^- x- W: Z
  void puta(void);
- ?6 R$ K1 @8 P* G, t1 N6 h" d' B4 _9 s

1 N6 p6 N1 P! @  /*--------------演示程序---------------------*/6 f1 ~" h7 D3 i& q: E
  main()% y8 ?$ T& j# @) E& u1 ^
  {0 v  I# _$ d0 z$ V4 `7 W* E. |$ D
  puta();
% g  Q3 k% }- }; r; d, L, i$ \8 ?& z  getch();0 _' d% R5 f, ~. k
  dcls(0,4,0,79);
2 R6 w0 U! P- ?5 c/ M  getch();
+ J8 j' q% A. t9 K  puta();
1 n* O. B1 G! o  getch();* F' i: c; p" ]1 R/ z0 ~0 o* J
  bcls(0,25,0,79);
; e2 q8 ^: C9 t2 T! f& h$ M  getch();! p/ s: O+ Y5 l/ I* h0 j. U2 q& q
  puta();
. c/ E7 y* }( f( f. _0 z3 F  getch();% V2 B) J* Z' }1 X- F/ w9 `
  zcls(0,25,0,79);
& f1 v) c  Y, b  getch();9 s% B, h7 f+ m5 v: X
  }' O0 v( `$ p4 s1 m
  /*********center clear screen(中心清屏)***********/
# M) H9 A8 R9 a9 m( f: T  void zcls(int x1,int x2,int y1,int y2), D) L& I5 x" R) x7 u: c5 j( |
  {
. U' z& t$ j8 }/ |+ F( R+ n  int x00,y00,x0,y0,i,d;
8 B) ~0 K" I" K8 x/ n) w  if((y2-y1)>(x2-x1)){
7 H" T" f, H$ t( K. I2 D: l, E, ^  d=(x2-x1)/2;
& U4 P' Y4 b7 C$ e  x0=(x1+x2)/2;
8 S0 }$ O* U; \  y0=y1+d;. U8 b  w5 V- V) h4 I) n, p; U. ~
  y00=y2-d;
/ w# n: o0 v, a: b; K  for(i=0;i<(d+1);i++)% u* q5 `& m! \$ e' q
  recls((x0-i),(x00+i),(y0-i),(y00+i));
+ p5 x2 A* j7 L  delay(10);/ o: V% B! I& B3 I; r
  }
' q% }* o3 o+ d4 D  else{$ T2 v, M4 S; j7 w9 l6 L( ]
  d=(y2-y1)/2;9 R$ v- L9 r# Z
  y0=(y1+y2)/2;
7 l! {: W5 D' }' L  x0=x1+d;/ s! a$ J4 b3 E6 r& E
  x00=x2-d;& X" T) o( f8 B$ m+ O' P( u
  for(i=0;i<d+1;i++)
( W' y1 p% i: x! @8 i  recls(x0-i,x00+i,y0-i,y00+i);
. e/ h% t  b8 g( k+ F' A# X6 s  delay(10);. L( j6 |: h/ G' u3 Y
  }
2 Z! m% l2 H- a. {" v  }
* P5 u* j8 u6 Z6 H  ~$ Q% ]/ f3 X# q% p4 e6 L; C% m- F
  /************* clear rectangle side(矩形边清屏)***********************/  x, h* ~7 f% e& p7 E( C4 i

# ^, X# W# f/ R! h2 f& U  void recls(int x1,int x2,int y1,int y2)0 ^/ n- i+ i7 x  B3 b8 o+ X
  {
7 l% m. i4 a. J5 q- w- m% D  int i,j;4 u. n4 c) j& ?( u+ `: \( J) u
  for(i=y1;i<y2;i++){$ `* }$ y; ^' [0 }7 R# w
    goto_xy(x1,i);
& |6 `! s3 l$ p; M  U8 F4 c  putchar(' ');
$ k- B( l+ [% S/ t" L  goto_xy(x2,i);2 H( C/ T3 R' ?+ o7 k" X
  putchar(' ');2 K# _4 U5 E* R# U
  delay(10);
' u4 S/ ~  G1 y5 z, u, W" O  }/ c0 `. N& D, [+ x7 i
  for(j=x1;j<x2;j++){% M7 J  ^' v6 g$ R$ t
  goto_xy(i,y1);! D! p" e& q% \# I! \/ F: h
  putchar(' ');- ^4 ~- G% ~+ ?8 F* I$ U' ^
  goto_xy(j,y2);
( W* _% d8 _2 Q! [- Y! D0 y  putchar(' ');
2 i: v9 f8 w' g! I# S" Q. M  delay(10);, |& H$ m2 ?5 A  u$ u. v
  }
/ e" g* J& f3 p) X& U2 }" f  }
9 y* x6 b$ M! F8 L! _' y8 B  /******************open screen clear(开屏式清屏)*********************/
0 W( E* B9 E& `1 O8 N; @9 E8 p
6 J! ^  ?6 _/ C" G; y" Z9 |  void kcls(int x1,int x2,int y1,int y2)
- {  J+ j& h$ t  J1 M  {
$ @" G) S6 y4 T7 D8 V% E  int t,s,i,j;
) k5 i# R0 ?2 [( c4 ^2 F" I  t=s=(y1+y2)/2;% G7 I# D0 N+ x' y
  for(;t<=y2;t++,s--)0 m$ b3 w: B8 z$ H) R7 c% `2 S
  for(j=x1;j<x2;j++){: C+ l- H8 K; s: [$ X* r5 q
  goto_xy(j,t);* B' j  n1 J1 t  [) p1 e
  putchar(' ');3 v& \# X1 `( w; R4 ?( k7 A& ]
  goto_xy(j,s);
3 h! ?8 ]* J- G$ ]8 i  putchar(' ');
3 x7 {0 x' U* N  @% [  delay(10);* y- ^7 Q, Z2 e  Q  K9 {
  }
4 X" h& n; \% y- g' _6 n1 i  }5 C1 e# l+ k0 R8 M; c+ z
  /*****************close screen clear*****闭幕式清屏*******************/- v1 l/ h" A5 q2 `/ J  E2 h! v
' [& {3 M2 X3 U* ^- [# T
  void bcls(int x1,int x2,int y1,int y2)
3 T* j4 ?- r4 U7 G  ~7 e  {
/ D* X' G$ D( t2 _  int t,s,j;
' o) f* v6 i9 O& Y3 ^: a, U) V$ r+ U3 g  t=y1;$ @- X  M. m2 q& r- o8 X
  s=y2;& [! F0 |- d% J3 E/ H) G. T  p" |9 t
  for(t=y1;t<(y1+y2)/2;t++,s--)& F2 R5 _# l( _+ I0 R; z0 x/ u
  for(j=x1;j<x2;j++){
6 t: }% J: @5 z$ p  goto_xy(j,t);# f. @, s5 }* O, O9 k& ?, J0 j
  putchar(' ');; j8 i) x: O0 X7 {
  goto_xy(j,s);& b; S% D# q2 f/ s
  putchar(' ');. m: o7 h  F& G/ K3 D; N' d2 I
  delay(10);$ A! }' K. P4 f
  }( q: E/ I9 W2 b6 k; W2 p4 C
  }
7 e7 Y9 R  b* p  /******************bottom screen clear(自下清屏)********************// o/ S1 [3 t& I, d( w
( T3 c. N% Q* j8 J$ w$ G% f7 H
  void dcls(int x1,int x2,int y1,int y2)5 J& ~1 K( J1 ~/ @
  {4 W# N8 }8 X* \- Q, S, R
  int t,s,j,i;
) C, s5 w! E# Z" l  t=s=(y1+y2)/2;* J  u$ k9 x$ t5 ]4 ^
  for(j=x2;j>x1;j--)* ?* ]* ^0 J; j& [8 i. j
  for(i=y1;i<y2;i++){- b! L& J) `" r; E; f3 Y
  goto_xy(j,i);
' u2 N! Q7 e! o  putchar(' ');% _# O/ D' k& L
  delay(10);9 b5 ~% K% b# d! p8 ^* R" W
  }. r# Z0 t9 U+ E" H- b5 |) y
  }+ R0 Q& p6 K- `! r) d& I
  /******************设置光标子函数******************/
1 V9 N+ F. ]$ V. `1 e) U
3 \1 F, j( B1 P7 t  void goto_xy(int x,int y)( B: Z5 w4 z0 y! I- v- G, _$ m. q
  {
  N$ L. b; Y2 Y2 q4 j* K+ V  union REGS r;
7 Z* [& E* t) z# H, n8 X: c5 {9 Y  r.h.ah=2;
6 P" Q" D" v* `0 {& Q! R  r.h.dl=y;7 w( y; P9 S/ }) ]1 r, T1 C- u
  r.h.dh=x;3 s0 P" `' a2 Y
  r.h.bh=0;, S5 f  T; M% I  v! t6 x1 B/ `
  int86(0x10,&r,&r);
' A% ^! n! s1 O% S, n; O3 x  }1 I7 _, B9 y1 ~; B
2 A( n0 \  Z8 K
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/* |% B( j& O5 e# c" O: x
! @* S3 g' }$ {8 Q; X
  void puta(void)% M. r( x  A8 l
  {' a2 X6 N1 v. b- c5 A+ m3 n
  int i,j;5 H- m$ u7 J1 `! a* a2 G$ }
  for(i=0;i<24;i++){
7 ]- r. A8 o! m% O  for(j=0;j<79;j++){1 l  ^8 i  l/ U
  goto_xy(i,j);- Q5 S5 N. e& |1 t2 ]
  printf("a");
, i5 M( ~) M( x5 U! i( |  }+ G% l8 a+ c$ c9 [* y
  }3 O% b% w4 f4 K1 P9 F
  }

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