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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ f7 ~9 D5 ]6 s' L" G( v
( J6 G8 ]5 b3 k6 s  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里: o1 {: L. T* q
" x( j% C9 P$ U& p, P0 y
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ' \$ {: R  y3 q$ w1 U' T
  子函数及演示程序:- ]/ M: g3 s( `' X( A
4 ]& d3 x1 Y# G' s# h) Z* [& g
  #include<stdio.h>0 A! h" G  y2 B! |
  #include<dos.h>7 F7 m0 L2 J7 `! ^  J4 Z1 C6 z
  #include<conio.h>
5 K  D6 p- A: j" R; M; a$ S# a, I6 V8 g! e& f) |
  void goto_xy(int x,int y);
2 p3 X$ q# u7 C$ G  void dcls(int x1,int x2,int y1,int y2);
: z8 I( D2 g: R& ?6 @6 b  void bcls(int x1,int x2,int y1,int y2);! |1 g+ w/ w* k8 I* W
  void kcls(int x1,int x2,int y1,int y2);4 Z, F2 J# W( B$ q& R1 [4 _
  void recls(int x1,int x2,int y1,int y2);
1 i1 ^5 V7 c. ~3 `$ y  void zcls(int x1,int x2,int y1,int y2);
6 O% h' C' I# Z% n* l0 I: N  void puta(void);
2 L4 H  h$ m1 u* ^2 \7 F8 \3 [. ?7 y9 ?& s4 P: H; W- C% F

2 j+ P0 G3 l) y: P5 Z  /*--------------演示程序---------------------*/- f. n4 ^3 o% ^4 E5 w5 ~7 J
  main()+ `2 I$ J; ^/ I  b
  {
  S, R* Q9 d. C9 J) w8 U  puta();/ ^' a  O3 f, n2 O
  getch();2 ~3 C+ i9 z2 i& ~. x1 I
  dcls(0,4,0,79);
. b2 R; I) O  O; W/ q! Y3 s  getch();
# z( }3 A) c( t  puta();
" p0 w+ ^5 E6 F+ E  getch();
, g9 m, ?" M$ d$ ^  bcls(0,25,0,79);: r( Q, n7 o6 k$ w! i, n4 t/ J
  getch();* F4 F" s3 I! w) _
  puta();
. ?5 I' \/ k: L6 t+ d  getch();) n, O- @6 X+ r3 P
  zcls(0,25,0,79);$ U3 _  b) H( \8 S, i
  getch();8 z3 x. ^1 u- J" S4 I
  }6 K4 t1 u( ^) w# u7 w, R0 n, F1 E- H
  /*********center clear screen(中心清屏)***********/3 q  M% g4 G, H# ?3 {
  void zcls(int x1,int x2,int y1,int y2)
: Q1 V( I2 Y" X8 h& N6 T' Y  {
7 p. y& ]* [7 t2 ]  int x00,y00,x0,y0,i,d;6 }5 L& w+ ]8 i+ n
  if((y2-y1)>(x2-x1)){7 b0 r7 B9 A" n  K+ n( f  m
  d=(x2-x1)/2;
' E; S8 [' W: D+ T  x0=(x1+x2)/2;" O1 f/ H. h+ J/ a( H6 [  u0 u
  y0=y1+d;8 ]; p0 ~1 h# D: U$ H+ _
  y00=y2-d;
% Z- w$ F8 ?" g  r) Z& c1 [$ ~5 w  for(i=0;i<(d+1);i++)
8 \4 J: N: x3 O0 ]& P9 C+ G) L- m  recls((x0-i),(x00+i),(y0-i),(y00+i));3 g; h4 y9 o& g( J- B
  delay(10);
2 y$ ?0 V( r% {2 H$ M6 d9 Q  }
1 c7 N, j2 k3 `) a1 g  else{- `! T4 i0 u0 q! N" j; P
  d=(y2-y1)/2;
8 ^/ ?9 y6 S  n; c  ]9 Y1 P  y0=(y1+y2)/2;
/ B  P& ]9 ]- I$ \* L  x0=x1+d;
! d( Q) F7 O) P2 Q2 B/ v  x00=x2-d;3 N/ L: ~  x, d' U. E! @
  for(i=0;i<d+1;i++)9 `" H8 x4 N  S' b9 y1 b2 n8 b
  recls(x0-i,x00+i,y0-i,y00+i);; t% n9 q0 z/ P* x
  delay(10);& q# o  B5 n$ d0 b$ L5 I7 o* V
  }
% {5 ^9 V" {, W3 D9 q: m  }+ |$ r7 T- {) S5 M4 u& H

/ N! @" f) b! T  /************* clear rectangle side(矩形边清屏)***********************/
5 m# ]: l. L3 Y) ]4 p9 k) x8 Z  H8 I: q
  void recls(int x1,int x2,int y1,int y2)
* W  Y2 ?  ?" q, j4 z  {
# x& ?7 d- h. }' m  int i,j;" {6 J7 L4 l/ Z% q, f
  for(i=y1;i<y2;i++){9 @0 Z9 n+ p; g  n% T" s6 ?
    goto_xy(x1,i);
1 g/ t3 n% i& |! G/ D: b: N- N  putchar(' ');% F2 d$ R" \0 @4 N
  goto_xy(x2,i);
( r9 ]& ]$ S# [- K; K  putchar(' ');
% l; m2 B. e: `1 _3 F2 Q) k$ z  delay(10);
; \$ K! C& |2 P; D3 \. H  }1 X* n! k, s8 B# g( p
  for(j=x1;j<x2;j++){
* X3 |- v1 \5 ?, z. S  goto_xy(i,y1);1 {- ?2 c% Q. e* x( ?7 P) A2 Y
  putchar(' ');, P4 d2 Q4 E' i( P* n* A
  goto_xy(j,y2);! s* j$ ]; J% y( B6 \+ D2 t9 f
  putchar(' ');. _0 K. j. M9 T, [6 O7 r! T( W
  delay(10);
7 ^( B4 t" r/ F# ~  }
$ a& d7 K  V9 P$ C  }
& {6 W3 b% m" J. I  /******************open screen clear(开屏式清屏)*********************/; s$ Y; t% {, r) |, s
7 L' N- i; ~% T
  void kcls(int x1,int x2,int y1,int y2)9 N/ ?* X+ W/ p; f6 y2 Y) |+ K
  {& l5 [) M$ K* o  W( P: z3 \; V6 O
  int t,s,i,j;
9 z0 s$ l) B2 L$ I5 B; x  t=s=(y1+y2)/2;7 o5 }7 ~6 ~: x, F, ~- y7 @& w
  for(;t<=y2;t++,s--)
: |# F3 @3 M; g. }( \  J! T* R  for(j=x1;j<x2;j++){
* n1 }. |: f! I) x8 C  goto_xy(j,t);0 l+ y! o+ g9 K6 X$ s# f: v3 {$ F$ O
  putchar(' ');  n- u6 b' I, Y# j
  goto_xy(j,s);
# O. @2 b2 L9 l' ^7 y: K  putchar(' ');- v, F8 y- U7 H+ w( C3 E. b
  delay(10);2 c2 N) v  `' M* i" U
  }
# r  f# E+ p2 Y* Z" `& _  }
( @1 a1 H  B8 p  /*****************close screen clear*****闭幕式清屏*******************/
# C3 e3 S% d8 u6 V* F3 }2 w5 M2 ~2 N* D6 q: `! h4 c- i/ ^% e
  void bcls(int x1,int x2,int y1,int y2)
/ x: W1 p/ R- Q; ?  {
1 {( f, C* w( k) P! h. V' X  int t,s,j;
+ N! [2 U- g6 h. I  t=y1;* g1 B: Q  A- A
  s=y2;( L; G2 E/ g* X- W  P
  for(t=y1;t<(y1+y2)/2;t++,s--)) w7 f. Q. M) j; {
  for(j=x1;j<x2;j++){
/ A" X3 G  Z3 J) E  goto_xy(j,t);
) K, ~$ G5 ~; }% R+ ^+ Y, A  putchar(' ');
/ _. G( d9 e& d( }" V  goto_xy(j,s);
* T$ O4 ~* a8 R6 z, K" P  putchar(' ');
4 X8 C; v7 m/ B. w" _  delay(10);$ J  P# Q/ R; |
  }
) k# q4 F6 Q: {) g8 y  }$ m. a+ Q" k# k- g+ m; M' G
  /******************bottom screen clear(自下清屏)********************/8 r! c1 _) v1 v) b

5 ~; r# s. R. ?  z" p  void dcls(int x1,int x2,int y1,int y2)% D& }* ~6 i! t" s* a) U- w/ ]
  {
# _" C: n6 ^3 `( C  int t,s,j,i;
. J; e$ I- v' R9 I9 v# H; C$ c  t=s=(y1+y2)/2;6 ^7 w3 p6 q0 Z: p& c4 p% W& m$ m
  for(j=x2;j>x1;j--)
3 ?- d" B: J8 K- _) I9 \% S" v  for(i=y1;i<y2;i++){7 P9 q. e. q( u( m  G3 q0 l
  goto_xy(j,i);7 e4 s$ J1 O2 r/ ?" d$ c, m
  putchar(' ');
1 y  r# k" Z3 P0 R* R) \; U  delay(10);
/ t5 o: r1 Q. |: x  D3 G& q  }$ O# L1 D* \9 j1 J& L1 J# d
  }: F6 h* B' C; r; N( b1 r% P0 m
  /******************设置光标子函数******************/
/ u% g, m! U: x+ \9 n' i$ v* s* k, Y
  void goto_xy(int x,int y)
. o' j% _, Y, V5 I6 V  {
; @5 O# u0 f2 d) _8 b  union REGS r;) I$ k, ~3 q& M8 O
  r.h.ah=2;/ j1 `% A2 Q" q
  r.h.dl=y;
) d* Q& {8 v. O* m: E  r.h.dh=x;
5 P5 f" e  }$ c" K$ A% i  r.h.bh=0;
, u" d, S4 T$ Q5 u% |/ O, |1 \  int86(0x10,&r,&r);
. }8 [; n6 ]" j, y5 ]8 w, O  }
& ]7 U# z) X" K$ f8 }. F, E
! i; E  Q4 C, [2 L' N2 [  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 @: r5 `* _: h  s; w, a+ [
% w0 \3 n( z6 o# j! v+ z- P  void puta(void)0 O  N! ]) L1 F8 i/ b( D6 _& |
  {
" s( e0 n! P2 T: u3 ?) p, |  int i,j;  b( Y, O. `8 L  T1 w* t7 N2 g. N
  for(i=0;i<24;i++){
: e3 ?$ h' c) e  for(j=0;j<79;j++){( |& g' @" |0 j/ r, {( h$ ]
  goto_xy(i,j);4 ], w% q( z# B, p& P6 K
  printf("a");
( ~, w. X, v1 E6 m  }
4 {# _7 y% d, p6 P4 E: ?  }
/ P  M6 J- B; q# Z4 |  }

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