返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" p: o4 K, K- X' B1 f/ Q& g
1 I3 }2 o; F" x9 T$ Z  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
6 T/ L, R, K! R
8 J* d) U0 P5 C  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 ~4 Y3 s, H: g; W
  子函数及演示程序:
, Z  B0 o  |' b0 F( n1 |$ _$ ?  A' n
  #include<stdio.h>) J0 A3 ?  K" J. V* }% [1 |2 O0 z
  #include<dos.h>
; _0 M, Z/ G. t! v" _/ w6 b  #include<conio.h># p6 d8 M9 r8 c( G2 ]: b1 a7 {" A& L: Y

- ~% B6 J0 s0 A7 ]& x. O  void goto_xy(int x,int y);
5 s, b( H" g+ K+ w0 j  void dcls(int x1,int x2,int y1,int y2);
3 C1 ^% g7 g; w0 Q1 o  void bcls(int x1,int x2,int y1,int y2);
8 O/ B& S: I+ V& b$ D" ?  void kcls(int x1,int x2,int y1,int y2);
% Z# n" X8 g# n! s2 h  void recls(int x1,int x2,int y1,int y2);
$ e( S. O8 m: Q+ I  void zcls(int x1,int x2,int y1,int y2);" n* U2 w* h  L7 b! S9 b
  void puta(void);) ?7 `5 F* R! k9 |
3 G& z3 y! t5 @! l1 ]
: O$ X- d+ M( o
  /*--------------演示程序---------------------*/
; ~2 o9 ?. H1 `1 O  main()! G3 f6 D: g6 ]* c/ Q# m3 r
  {: d+ J2 f! T, X! p) Z" P$ Q) Y
  puta();
) c9 r. h0 P" ~# r  getch();8 ^: @. [5 u3 N9 ?
  dcls(0,4,0,79);3 J1 B* J; _- q6 Z. n
  getch();
6 ^, F! T9 }6 J, K% J7 y7 n* O6 E  puta();4 E, @) H! M- q
  getch();1 P3 \+ M* G4 K' y- @- K% J" }
  bcls(0,25,0,79);+ H9 l+ w, C3 @9 C- r" [: ?% U2 g
  getch();* a, a: {& N5 l0 b1 \2 D; t- d
  puta();/ o* Y- f4 s  o/ E
  getch();1 M9 y5 l1 N  K& R
  zcls(0,25,0,79);- ~/ T; d; c" K2 K/ p$ |
  getch();9 r, g( d0 s! g- b3 w3 T
  }
  x+ N+ d* m( \+ j0 _$ d; _  /*********center clear screen(中心清屏)***********/
/ o3 O& j3 Q. I! z  void zcls(int x1,int x2,int y1,int y2)
1 \. f) b; _! F/ T1 a3 N8 c! X7 K  {! ?' m5 o' f+ W5 `
  int x00,y00,x0,y0,i,d;
: N. d) j" E- C" U( q3 [( n  if((y2-y1)>(x2-x1)){
8 ~+ a% N6 ?7 u  o5 l  d=(x2-x1)/2;3 y9 a$ F- r5 Z" z
  x0=(x1+x2)/2;
$ R5 X3 c/ @0 X% k' b* Z3 E! l  y0=y1+d;; X  C$ m4 m9 G4 }) \6 t/ B( E- ]
  y00=y2-d;5 F$ I$ {# z( u) T) f; G; F) N2 ?
  for(i=0;i<(d+1);i++)! Y( j/ |& F, C  {2 V1 t
  recls((x0-i),(x00+i),(y0-i),(y00+i));" x. G  A, Y/ z8 A3 }- X# M1 a
  delay(10);
6 D/ a& x& `  ?7 J$ V  }) D! v9 Q5 |1 T  h
  else{
9 x5 w+ j2 F, o$ \6 q% N2 n. a: l/ ]; ~  d=(y2-y1)/2;( w' y, N' x3 f9 H( o* {" \
  y0=(y1+y2)/2;
) x- k* W- q1 p* @  x0=x1+d;) p! a# J6 u( l8 l4 m- K5 p2 G% [+ q
  x00=x2-d;
( ^! q- v7 i8 b: N9 ~9 g4 J! Z3 z( A  for(i=0;i<d+1;i++)' t" P9 y8 \0 N
  recls(x0-i,x00+i,y0-i,y00+i);
; f; G1 e  w. o0 T0 g  delay(10);) S, L8 r- f% S( T3 N& O
  }# i( D8 m, C! u2 s" I3 l
  }
2 k. n1 b8 @" }% i- ]% |
, L. j7 g& L% C8 Y8 @  P. R  /************* clear rectangle side(矩形边清屏)***********************/
. Z# A1 h- O* H
4 k3 P" h0 ?' ^  void recls(int x1,int x2,int y1,int y2)
7 q9 t  G: ^! E1 f$ a# d  {
6 W( f3 x1 Y7 V  int i,j;
. v0 M) V' t9 O. l  for(i=y1;i<y2;i++){
0 G& k- L; ~7 {- h9 l  B    goto_xy(x1,i);+ _2 s. F! d, D- [  S
  putchar(' ');5 W3 s# l# n7 L, W* l0 {7 W+ }
  goto_xy(x2,i);" y# ?6 i/ R( Q) p; S
  putchar(' ');
, E& l4 M0 N1 e# v; d1 `- R  delay(10);) s. p# E" {- _0 [5 W
  }
$ e* D; g8 z0 T2 P' O& {  j* r9 ?  for(j=x1;j<x2;j++){1 e1 P/ u. Z; ?/ I  V1 m* ]
  goto_xy(i,y1);
! P: t& K) G( s' f* T' n2 c6 a  putchar(' ');
. H, h0 {' _% v& }  goto_xy(j,y2);
9 B( c+ l* S  h  F  putchar(' ');
0 s+ q$ }9 ?" L7 f2 B( [  delay(10);7 `- C$ E: a' m2 Q8 e
  }, l& D2 l/ b: q% V- Z0 E
  }
$ U" [# t" M$ F  /******************open screen clear(开屏式清屏)*********************// ]5 n# Z$ \( j5 k/ K8 y% T; [7 S

8 S+ z3 Y9 s/ f  }  void kcls(int x1,int x2,int y1,int y2)+ {% ~) ?3 |# Z6 k
  {
/ M' |! D7 }! \' H  int t,s,i,j;  k! l  E/ `9 r: b
  t=s=(y1+y2)/2;
4 E' k; I& ?2 x8 `0 w  for(;t<=y2;t++,s--)3 d$ |* A; S* b) P
  for(j=x1;j<x2;j++){6 ~; X4 @7 H3 }9 Z. ^* S
  goto_xy(j,t);' m' f0 ~- Z8 c0 S; \- N4 y
  putchar(' ');5 U) z4 p1 A- t
  goto_xy(j,s);) b" y- Z. ^% c: d5 N5 X
  putchar(' ');
& G8 A+ _5 A* o" p  D  k. o  delay(10);
2 ?2 ~8 r4 B& t9 N( A  }
: `1 ?- g5 F; c# s, t  }) P/ B0 L/ ~6 Y& Z: \
  /*****************close screen clear*****闭幕式清屏*******************/0 U& d2 e+ j3 a3 Z3 W  ?; p# l& d( ?) [

3 {0 C) s3 O( A( I4 M* S  void bcls(int x1,int x2,int y1,int y2)
  |* m% A+ b) @' W: W  {
  t2 P9 Z8 L# y$ u: b  J  int t,s,j;+ p- A3 N, O0 Y; [( [
  t=y1;' ?# W& I6 B1 Z
  s=y2;
$ \: H( q( u( S  for(t=y1;t<(y1+y2)/2;t++,s--)/ J$ h8 g/ b7 v
  for(j=x1;j<x2;j++){
7 Y. ]( ^% @: ~5 E# C& K  goto_xy(j,t);/ E( M. W3 P9 j+ G) E! ?6 V0 @
  putchar(' ');8 ^1 A( w5 U! m
  goto_xy(j,s);
9 t4 z" S4 A4 `! `6 ?  putchar(' ');: R5 G! k2 O1 l
  delay(10);
( ?. Y1 K5 k6 T6 A+ C0 h# Q  }
  I2 K/ N: C8 C/ s  }
- Z8 S6 k0 j; p! I. f% X  /******************bottom screen clear(自下清屏)********************/$ K* D9 y+ U5 P
% y  l: E, V- i3 @! P/ q, C
  void dcls(int x1,int x2,int y1,int y2)
5 ^' ~% }1 s! U) `3 f, V" C  {2 }9 `2 c/ Y+ v. h1 r
  int t,s,j,i;$ D+ X+ [$ ]; |  `! P8 O# F
  t=s=(y1+y2)/2;, t* {7 x5 G& _2 z2 _  m
  for(j=x2;j>x1;j--)
9 K1 ]% ]* R1 d  ^  for(i=y1;i<y2;i++){! x& o# h* _) @/ D# P( i# R, v
  goto_xy(j,i);5 v' x* w5 ]8 I" V; |
  putchar(' ');
7 |: c# e" b! P3 u3 U  delay(10);
; z3 S# x- {5 y( K8 E  }$ ]! E) m8 v0 u# F! T6 \" w
  }
9 u$ w- v; l! J! L& n  /******************设置光标子函数******************/
7 M5 w# l5 `5 M% s2 s+ `7 z0 z- \5 D9 X# T
  void goto_xy(int x,int y)4 r/ |3 g% N- T$ |  I
  {
! S, Q% G* b+ @  union REGS r;$ H, t. O2 A5 B0 ~+ _
  r.h.ah=2;5 R9 u* C$ G5 N/ ]% B
  r.h.dl=y;' U# E# c# W4 z& \& `
  r.h.dh=x;
* R, v, H" |  R  r.h.bh=0;
1 p3 A" y' H7 E: a# A  int86(0x10,&r,&r);
- x6 H9 z5 D4 U' a0 w  }
" G; ]/ s8 c, c/ i6 i: ~# S0 p% j; H) ~1 _/ Q! r0 t9 {2 l" ~
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
0 q5 V  B0 ~0 R4 j3 I1 Y: l) n0 p
  void puta(void)6 d) [* R0 v0 E# u: X
  {
3 y! ]/ X! ^, [& z9 l2 F# Z- O  int i,j;0 D) Q/ ]4 y+ u5 b; D' `& g: d8 N
  for(i=0;i<24;i++){) m  f- I5 q8 @# t8 `
  for(j=0;j<79;j++){
0 C1 \+ S1 k0 n  goto_xy(i,j);
" a4 c* d" q4 |  p) W# s" h6 B  printf("a");
( i' S+ Q2 d; G9 ^  }
( O! [5 B$ J$ D, \6 N6 a/ [  }
" m0 q/ V  n8 K* N, b: ?" S  }

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