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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' n. F. G# a- \2 B" l2 D' G) L7 I' r: I

* u" c& T( l& g; B  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 ?3 g9 I" j" k$ k" s3 M) ?& Q! `7 c/ B) v% s
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 h; N$ A" f$ k  子函数及演示程序:
- m  g' Y- j4 T0 J
  g* K! {2 a# I7 A' c$ |( s  #include<stdio.h>6 v# A$ }6 h8 N3 r5 y/ ^
  #include<dos.h>
! l( ^5 Y* f5 h; `6 s  #include<conio.h>
# S* o6 [9 `3 A
# S4 L9 _0 H# T# Z$ u  void goto_xy(int x,int y);* e; [' {2 E% m; p! H9 w: S+ v
  void dcls(int x1,int x2,int y1,int y2);. N: ~# h' e8 i4 I
  void bcls(int x1,int x2,int y1,int y2);/ r4 I/ \2 C: r3 r, K5 s" n3 H* _
  void kcls(int x1,int x2,int y1,int y2);% w/ m: E6 ?# g2 C  u( e
  void recls(int x1,int x2,int y1,int y2);" P8 v/ `+ T/ _. T) j
  void zcls(int x1,int x2,int y1,int y2);3 R' F5 F+ S6 j/ n
  void puta(void);% f1 G! {5 s; P7 X
6 m7 N9 R9 v3 f! W$ p: E% [

* r" d! c# t1 Q0 X2 w( _- Z8 T  /*--------------演示程序---------------------*/
6 {4 z' Q# M+ x- v& j9 V+ {: y  main()7 w4 ?  y+ `% ]2 A5 e
  {
' I) E) m1 Y) ~) G% W  puta();5 U1 S3 a) f' p5 K
  getch();
/ z) f# g9 Z$ E+ k$ v  dcls(0,4,0,79);5 L9 z2 F& j7 ]
  getch();
. X3 N: ^- p! f2 ~9 |. K# [  puta();
* d6 ~' F; A, U  getch();2 j3 Y) r+ p3 l+ }! r$ F; [
  bcls(0,25,0,79);
& R3 b) I% p3 T/ Z$ D, ^  getch();
" t! K" L: D: k  J( ]2 _! Y/ H  puta();
9 G5 H  f8 f3 _; \8 ^  getch();$ L3 k1 u1 m' b4 S8 g
  zcls(0,25,0,79);" X( A4 b3 L3 u' v
  getch();2 \* m# `* p2 ?
  }
" x: p! F( Y1 @* t0 F  /*********center clear screen(中心清屏)***********/
1 c% p9 g" \/ X( ?8 }! \  void zcls(int x1,int x2,int y1,int y2)
8 _/ j4 q& n3 v1 T" U  {' A$ b/ n# a' g' R. r+ v) T8 k8 t* H
  int x00,y00,x0,y0,i,d;# `. p4 k$ b' E6 Q: @9 w* `/ L
  if((y2-y1)>(x2-x1)){
: R6 j! t2 F# q! `4 k+ p, R  d=(x2-x1)/2;
# U6 M/ b/ F5 M* C8 ^  x0=(x1+x2)/2;9 T& y& y/ M. {, q
  y0=y1+d;0 I/ ^& k" {' a1 B- r% C
  y00=y2-d;$ G8 J" Z; n, _( N0 v/ G  e
  for(i=0;i<(d+1);i++)) J$ |% y# J( t: J
  recls((x0-i),(x00+i),(y0-i),(y00+i));
& [& @2 L, z" ]2 l  delay(10);
0 V' L1 v1 x% G* ^! i$ l, v  }- }! u  ~) H2 n9 F! p! I
  else{4 O) B  J% U7 C9 \
  d=(y2-y1)/2;
) P5 l; t8 l4 W% R/ D& k  y0=(y1+y2)/2;
/ d+ k' K$ a$ l  x0=x1+d;
2 w( o3 ~+ V' O9 n9 z  x00=x2-d;
" _6 L% X7 b5 W8 g. h  for(i=0;i<d+1;i++)
! F1 D8 y. {! Q, D  recls(x0-i,x00+i,y0-i,y00+i);
5 p$ W3 W- s* I) u# {* {  delay(10);; n! ~2 D, s& `' y: d& Y7 v( Q
  }2 G% G+ |$ }. J
  }; u2 x+ s' L9 O6 M/ R0 A
, g6 j) C6 l  n3 }& a
  /************* clear rectangle side(矩形边清屏)***********************/& ^! `9 U; |4 @+ ]; b

! V  i; P, b+ @: k# l) S  void recls(int x1,int x2,int y1,int y2)( t" p1 N8 H# Y4 F6 x: ?
  {
0 y* G; j3 R/ V8 d  int i,j;
. @/ x6 v8 c4 }" {$ z* ^+ i) t  for(i=y1;i<y2;i++){
2 @6 r1 `1 t, V7 l6 A. t# `    goto_xy(x1,i);
: O+ v/ v  n! H8 Z1 }  @% q  putchar(' ');
- o& Y$ {9 f8 s) p+ p. E; y  goto_xy(x2,i);
. g  `+ ?4 r; X1 C) t  putchar(' ');, j! {* ?% N  Z1 k  J  |
  delay(10);
5 F; P* B6 C* O8 a+ n8 R3 e; d  }
9 {1 f9 ]& |( A5 [3 y  for(j=x1;j<x2;j++){
" D+ K" H4 g  g* |; C6 u8 w" U  goto_xy(i,y1);
! Q. v; G  {& O4 H' Q2 E  putchar(' ');
% V) V. K6 A3 b  goto_xy(j,y2);
5 M& g: C' b% B4 N8 s- _7 R1 H  putchar(' ');
' k2 j+ u. q$ h+ }& _  delay(10);. G2 w2 i# o+ z
  }1 C5 U! J. y+ h" O# ]. H; u
  }
7 s# |; B2 k$ J$ t2 [. Z  /******************open screen clear(开屏式清屏)*********************/' v# A0 P# W+ k% u
4 B1 k+ m8 K, S4 A
  void kcls(int x1,int x2,int y1,int y2)
" ~" l& ^* p9 W' s. T2 l: E  {3 ~: G* Q+ Y: }( k
  int t,s,i,j;
# ?' B+ q: J1 u1 j8 @  t=s=(y1+y2)/2;
/ Q- L4 A0 y$ Y* C1 C4 p$ F  for(;t<=y2;t++,s--)
* I! D1 _9 }2 G9 _  for(j=x1;j<x2;j++){
  ~8 y) O3 ?7 m( ^: z  goto_xy(j,t);
) o8 l2 ~. E% _! p  putchar(' ');
) e: ]" g2 L. W" K  goto_xy(j,s);) p) x2 z/ r+ H6 h
  putchar(' ');
. K2 b, a( k0 K  delay(10);5 R$ r7 c4 D7 [# V3 V! b8 m/ b
  }
  v/ x; B) ~- m0 w  }& s& ]: J% \% A8 }0 W6 x
  /*****************close screen clear*****闭幕式清屏*******************/1 l6 r' t8 r# A  Z

% E1 K4 I& `% [4 B- E$ {+ O  void bcls(int x1,int x2,int y1,int y2)& ^6 K  s: {; ~% q) S
  {
, Y7 m* h8 [  R- D8 i  int t,s,j;
, g& O* H* w( n- f9 L. v3 @- t  t=y1;3 ~) S2 v! i. A! }/ |
  s=y2;
+ t& O" N, Y; j& p' j- C  for(t=y1;t<(y1+y2)/2;t++,s--)4 S. m# w% w$ b* l* }* X
  for(j=x1;j<x2;j++){4 N7 V! y" a& x' {, q3 L$ S: {
  goto_xy(j,t);
& Q2 H2 f5 |. ~2 n3 R) y* e! A. _  putchar(' ');
0 I( d, s8 g% T: W, I  goto_xy(j,s);
3 R* ]6 F) ?8 F' g/ {  putchar(' ');
! I, P9 A* H6 t4 V+ z  delay(10);6 I' s$ x4 j8 d$ ^# \1 v( o) S
  }
. ]5 f, b% n7 ~) @- h& Y  }9 b4 X9 `; O  Y# r6 i4 a
  /******************bottom screen clear(自下清屏)********************/
4 [4 X) M1 K2 E0 |: e& Z' M( F: m6 M& P9 ]
  void dcls(int x1,int x2,int y1,int y2)  b& v8 _6 A( m  x3 K2 D/ s
  {
. ?( O" {, H* v1 V( o$ [+ X) K9 u+ z+ p  int t,s,j,i;9 R. V5 B! X  h) F6 g
  t=s=(y1+y2)/2;$ ~- R9 P; a9 ?; T+ M5 C
  for(j=x2;j>x1;j--)1 W3 b1 k' m9 s/ F7 u# y
  for(i=y1;i<y2;i++){" F9 u0 ~: |6 i- o( Y
  goto_xy(j,i);
4 {4 i0 u; j& T3 ^9 `0 |0 B+ s0 E  putchar(' ');5 T6 L. J% O8 s% M* T: \
  delay(10);: A" `  G, s" J' s
  }* C+ g* O0 i4 `$ }& J. |7 J
  }
9 w0 l- |# d7 W! j3 t+ B  /******************设置光标子函数******************// e/ t' `( M4 h8 m, R5 H2 p5 T

: M& l7 X0 D# i+ y  void goto_xy(int x,int y)7 i7 y: x+ U0 ~& ]1 @& ?) U0 `/ d
  {6 b" x9 G: g! ~9 h* V# M1 m' F6 m
  union REGS r;; p9 M" C. a4 T+ q
  r.h.ah=2;7 r- e; r1 g! @% q( i0 m  }; j5 v
  r.h.dl=y;6 e# ^6 o! E' |3 L. J( O9 E
  r.h.dh=x;
# P/ h8 e* y* d9 D+ I  r.h.bh=0;
) l" L% }4 t" U2 r2 m, n' I  int86(0x10,&r,&r);
7 T5 J/ m9 P! U4 {3 n- O  }
) S$ K+ m$ O2 U; a' a% w) }9 n- n  B5 t1 M2 N7 G$ W: ?3 W3 P7 X- t
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/. T) \) C% `/ p6 u; i

# [2 X4 |" B  Z! l* j  void puta(void)
' x" L+ x, l1 l( v1 q4 p- b, J: K  {
! b- H# l; ^  ]4 s! O  int i,j;
: w0 i3 A! n8 a3 Z$ c. }* [, e" J  for(i=0;i<24;i++){
& [" `$ C8 {0 F1 N# b  for(j=0;j<79;j++){
5 \  R/ P, [! H" T3 o  goto_xy(i,j);) I9 g8 W  P/ {" h4 Q
  printf("a");
/ u4 e  a' T9 n0 E- C  }. d4 @9 s! X7 b9 M$ W( e; N
  }! h; I, a8 \% d" Y
  }

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