返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ A5 c, [& c8 r0 W' v7 _& w9 H6 ~, j
  \+ n6 M' ?/ C& }. N( M; V6 L
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
- {6 k! c7 y* P; T5 S% N/ K( R
- @1 |0 g& ?5 q8 i  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - U7 f, ]% J1 U, P& s
  子函数及演示程序:
6 ~( F$ ?5 P* O: z% u( o' q1 F+ L4 {7 Q6 B5 p
  #include<stdio.h>0 t, R  U8 ]7 S- n; J  i
  #include<dos.h>0 a) T' [( N0 I2 k7 ?, R" L* v* d. `
  #include<conio.h>( D# U7 G. C% s, P* E0 t4 o

1 Y) @0 X0 i" {! Y+ Z) q' a! y' x- K* `  void goto_xy(int x,int y);
* G6 F( `8 `" d4 m( K5 G* A  void dcls(int x1,int x2,int y1,int y2);
- s3 n+ s: S4 z6 H  void bcls(int x1,int x2,int y1,int y2);
4 F0 _- T8 N) W5 u  void kcls(int x1,int x2,int y1,int y2);( {1 N4 `% D- [3 W( d
  void recls(int x1,int x2,int y1,int y2);# \# b+ t8 z9 G1 Q4 I' B
  void zcls(int x1,int x2,int y1,int y2);2 G" f7 h) G0 a7 l( ^4 L# U
  void puta(void);0 R( c1 }/ b. V8 y# k+ v" q' ^
! o0 }, G/ x1 A% H# d1 u
3 Q% Y! n6 G* c) v5 s
  /*--------------演示程序---------------------*/
! m! }" t: c# e4 ?3 g7 t  main()2 Z4 B' L0 n  E! A! E5 u: a
  {
# z3 `- I/ T" ?/ e% N  puta();
2 ^4 @# K9 L9 p. B  getch();" t8 c+ ?/ x4 D' h! {0 z
  dcls(0,4,0,79);
. y  b5 e) E6 |! A7 X/ v  getch();
' z2 {: J3 }& Y; O+ v/ N3 N. }  puta();
/ Z3 t  ^  ?/ `  getch();
" {2 u9 P; |9 n" |8 N$ r  bcls(0,25,0,79);
: V! t2 L; E8 v' m8 ^  getch();  ~& p% u* a& s
  puta();
5 ^4 B% ^3 x' ?3 E, Z  getch();
8 x5 X7 j4 s" O7 ^  zcls(0,25,0,79);6 S% l9 t5 N, y& N* |6 K  p1 t. Y
  getch();4 J2 [* h1 ^, X
  }: a# W( [3 M; O9 g; g
  /*********center clear screen(中心清屏)***********/
% Q5 f8 ^5 h+ N  O  void zcls(int x1,int x2,int y1,int y2)& S% Y9 b5 `5 @4 W; [
  {
4 C9 ?) a" S5 v/ y. [  int x00,y00,x0,y0,i,d;3 U7 X8 e3 j& O7 [9 D
  if((y2-y1)>(x2-x1)){
' |, k  o1 G) @* O  d=(x2-x1)/2;0 g( I& b3 e9 Y, Z- w9 f
  x0=(x1+x2)/2;9 H% o. E/ K! [7 j0 n
  y0=y1+d;0 o  l+ `  m+ V  v5 C. I6 ?
  y00=y2-d;
' V: D. [. }" q4 V" o  for(i=0;i<(d+1);i++)
6 e& p8 z% w! s" u  recls((x0-i),(x00+i),(y0-i),(y00+i));
" \: S, o# B; C2 K" V8 p( V* n  delay(10);6 D' z4 ^" H; F8 e: A* C: G4 k
  }; K1 g% h4 W. ]- o
  else{
4 {% @8 _2 a$ \' H$ K/ _  d=(y2-y1)/2;. m# x3 @7 u2 w3 f9 \; a% H
  y0=(y1+y2)/2;
/ p9 N6 k6 {9 W/ Q; N+ x  x0=x1+d;
8 o* G) I- @" p% I: v  x00=x2-d;
6 T& w9 f1 s& p' Z) o, u+ r& D1 \( b  for(i=0;i<d+1;i++)
1 P( ?* I8 Y7 x7 F0 u& `" r  recls(x0-i,x00+i,y0-i,y00+i);
; h9 r* i. A' |! ?  delay(10);
; U, `- W+ @2 A! w  }
2 R( ]( s$ Y4 [( h  @9 E  }* C. ?' q  R" K8 |2 F

$ `7 Q! T" |8 x9 k) @" t  /************* clear rectangle side(矩形边清屏)***********************/  b9 S* q, U/ y: j, C/ ?
6 y+ B4 V0 z" K- f; ^" B% m0 a3 ~  o/ I
  void recls(int x1,int x2,int y1,int y2)
8 v  r4 P+ q$ |+ ]- w( _  {" \7 m' u; p. s  z0 B9 Z6 Z
  int i,j;
- o5 E2 g. x. [/ |( n  for(i=y1;i<y2;i++){( ?+ I! {3 L8 a- R
    goto_xy(x1,i);
3 [3 \6 q( x3 q5 f6 ]6 P* ?  putchar(' ');
) S. ^9 c2 z9 F- K1 Y/ Y: B$ ~6 Z& h  goto_xy(x2,i);, ]# K6 J$ b1 ?$ x# |; ^3 Y
  putchar(' ');
2 A6 s; m# X- B* m! P6 V  delay(10);
. a: k9 W; ~/ o* b# @* u  }/ H+ ]5 U: Q9 b5 w4 D! C2 h
  for(j=x1;j<x2;j++){8 L% b) b: X* l* @2 W
  goto_xy(i,y1);9 E3 V8 a5 w/ [0 z% Y& |
  putchar(' ');3 {& H  N% C5 {$ m) b; u- K
  goto_xy(j,y2);
6 p8 J3 a: N: W5 @$ Q3 u! r  putchar(' ');
! ^. N  ]5 H1 {$ j: c6 F+ b  delay(10);; `% ^: X, X; n; ^# B% k" l
  }5 H" D- P& \' M7 B
  }
0 f9 [) E; e2 L2 ^  /******************open screen clear(开屏式清屏)*********************/" L0 @9 ^- {; {' r. u* k. m. n5 F, w

* `/ t5 W4 {* ^  U: k  void kcls(int x1,int x2,int y1,int y2)3 l- K1 p. w# e
  {! x) g7 k. _% i1 U( |0 e
  int t,s,i,j;# N6 l3 L' b4 r
  t=s=(y1+y2)/2;& B1 l3 C$ H# J. P/ O
  for(;t<=y2;t++,s--)# I$ r+ g% H$ V
  for(j=x1;j<x2;j++){
- }& w" a0 Y7 D; k/ J4 a  goto_xy(j,t);
  p( t; f, `; q7 Z. h- E3 Y; b  putchar(' ');5 h% z2 _% _9 \' U3 E2 B1 \
  goto_xy(j,s);" w6 s* u; q) P
  putchar(' ');7 x& Y; l) Y( Q) q  @
  delay(10);
4 u0 g% w5 g! t% D9 w( G' V% U1 k' j  }
  K3 i* {. ^: V! H  }2 I  z) |- v; G; N  ]* o) W
  /*****************close screen clear*****闭幕式清屏*******************/
% q  P. f( F" s8 U" q* W, ?  d. U6 |
  void bcls(int x1,int x2,int y1,int y2)) x7 B. B# {0 _! F" f" Z& _
  {
, v! L7 Z% i, o& [* \  int t,s,j;  I9 T; W* g+ B) [; K( Z
  t=y1;3 W4 Q  e6 N6 L* f; q" K
  s=y2;
9 y% ^7 [6 r0 S5 f  for(t=y1;t<(y1+y2)/2;t++,s--)0 Q8 b% `) \- a( b* D
  for(j=x1;j<x2;j++){
0 [  s1 `: f" F5 }8 S  ~8 T" m  goto_xy(j,t);
; q. i' `& ^  z5 v, G; O! t7 K) Y  putchar(' ');
6 v8 D- Y; \( Z! B$ Q5 B) k  goto_xy(j,s);
) E" \; I: c& ]! ~- N% X  putchar(' ');
% s( Q9 N2 H/ Z2 c  delay(10);
* S4 O3 K4 k: r0 @. v  }, ^8 h/ d* F: k  M, A! I9 c
  }
+ S2 W# T3 \: ?+ u# p  /******************bottom screen clear(自下清屏)********************/& u+ V+ O, C6 V! ?+ R$ m, ~

( @9 w* G5 y( ^( p  void dcls(int x1,int x2,int y1,int y2)4 D( u1 G; T& m  J
  {: X3 z; R' w/ `: w1 m
  int t,s,j,i;- g  B9 C' H; D8 j; z+ h: W# L6 x
  t=s=(y1+y2)/2;
. }* a! E* W8 U- t' p: f  for(j=x2;j>x1;j--)% N3 m6 i3 k) ]6 W8 s# j" p
  for(i=y1;i<y2;i++){# s, w8 |1 h* O
  goto_xy(j,i);
  c" u& x* x* g  putchar(' ');/ `4 e6 |- G# W6 O( j5 ?) ~- z
  delay(10);7 D, H/ i! @  ]# d3 a
  }
) d) C" F( S* i, G  }0 s; H  |9 b. r! b
  /******************设置光标子函数******************/6 b# e) ^1 g% C# N" r
6 Q7 {$ h& h. G+ y' I
  void goto_xy(int x,int y)
. g$ d2 q3 d! C4 r! F9 S  {1 i& ?3 M) Z* o8 m
  union REGS r;; |7 X" Z1 i) w% Z, ~
  r.h.ah=2;
5 J+ g( f% [' Q0 x  r.h.dl=y;4 N, A1 ~3 W* |
  r.h.dh=x;6 {0 [2 n0 \, ?/ A) M! ~5 i
  r.h.bh=0;
. g) \3 ]* r( T' X, p& W  int86(0x10,&r,&r);
9 B) T; o& ^2 C, y: G& M+ d/ e  }; E2 k3 g8 Y' |

# L5 c# o/ b0 |  /**********************在屏幕上打出一连串的a字母用于演示程序******************/+ H* P* g* T; g; c  `- g! P- o

3 }8 q4 Z" T0 {  void puta(void)
% g& z3 v) j6 t% S  {
0 W- t7 N; C2 k+ u% k' D2 V  int i,j;
' O& t1 T* D& S% D+ \; H, |  for(i=0;i<24;i++){) `% J2 A. G. H* H2 l
  for(j=0;j<79;j++){3 A/ b6 i6 \) D' X8 X- U7 W" f
  goto_xy(i,j);5 q# N/ }, y# U
  printf("a");
2 K3 C8 u, N5 O8 I, a  S  }
; I! m3 X, f( t* J+ l  }! F  w: B, k& G
  }

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