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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) |; T+ y- V% u
. ~9 b$ O" h2 U; `- E- T
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里* f/ C- w. d& }% p, q* u$ {. N

( q. \7 U7 f$ b7 N, n& d+ V5 Q, [9 }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 ]7 e- H7 w+ ]- ?1 G% t
  子函数及演示程序:$ A; B% L4 C' S2 [
$ H8 ^; J- ?- L' M# [$ T
  #include<stdio.h>5 M# c( w* p$ S
  #include<dos.h>
! G0 v6 ^& J1 |3 V% n8 i( U- n0 l  #include<conio.h>  ?6 A, T6 Y$ E5 D# c

' K7 j  Q5 W2 T' @% f- }  void goto_xy(int x,int y);( z5 [6 O. c7 f. ]) Q! ]1 d
  void dcls(int x1,int x2,int y1,int y2);2 B2 V) B& Z* o2 _3 N, W" ~
  void bcls(int x1,int x2,int y1,int y2);, o1 @2 J5 f% j6 [  [
  void kcls(int x1,int x2,int y1,int y2);  \/ E% Q* z7 Z
  void recls(int x1,int x2,int y1,int y2);( i6 Z$ \, s$ l- l/ F+ H8 h& X. n
  void zcls(int x1,int x2,int y1,int y2);
0 U" H  h0 A) f. s1 [' @8 {- f  void puta(void);
! ~5 J+ \6 m/ M, \0 C& Q7 L; c: m8 I# N3 w- O3 i7 z! [; r, [
/ u* d) f6 f; p3 J
  /*--------------演示程序---------------------*/
$ Z1 a2 @- J* c* I  main()8 S" H# K5 Z9 M. N- T$ s$ {6 R
  {
' y) ?1 E  _1 m! G5 r5 l  puta();7 X5 J' d0 g" ?, p
  getch();( x8 q% k2 K+ L
  dcls(0,4,0,79);
" g+ `) K: g* B! }/ U1 |  getch();
2 J: H, L/ {1 p6 g2 K2 b  puta();7 N5 t6 C! y# Z# Z' ~5 F$ o
  getch();& f' i* C$ }+ X7 y
  bcls(0,25,0,79);
- h9 w. F/ |6 O& u" D6 M7 U* q  getch();
( t) V* k- w" R! ^$ y  puta();3 O, z) m* ?) N# Z4 L
  getch();) m3 h- L- |9 B) X1 B
  zcls(0,25,0,79);3 ?5 r; ~0 U; Q7 Q! o1 j
  getch();6 }+ g7 a) \* s5 `# M4 K$ ~" H
  }
2 B# r+ G% i# h: t! W  /*********center clear screen(中心清屏)***********/
4 v* N5 k: G: C1 o4 O3 v  void zcls(int x1,int x2,int y1,int y2)" U1 a, h; ^9 a+ x$ N
  {4 r2 \& ^$ O4 [9 g' [. v* [
  int x00,y00,x0,y0,i,d;
% n' T4 C" b- \' \! y6 Q- ]8 e  if((y2-y1)>(x2-x1)){
1 S% s- Q3 d" c1 O8 f+ N7 Q  d=(x2-x1)/2;
( _; c: D8 h( |+ l" U! ^, l' h  x0=(x1+x2)/2;' Y$ }: T0 u+ A3 |$ A
  y0=y1+d;3 J4 d9 S6 |$ ^6 B
  y00=y2-d;
1 u% e) f8 G. R" u- F  for(i=0;i<(d+1);i++)- `5 R! T+ P- v7 C0 ?
  recls((x0-i),(x00+i),(y0-i),(y00+i));
  D# i' I8 ^2 A$ @' c. H  delay(10);
% z! A1 C. g9 m; {  u  }9 ^) k* r* R% \* H$ Q) \" j6 }) ~
  else{6 t# u$ {3 C8 n7 A* J, `: O+ R
  d=(y2-y1)/2;& j* W6 `5 q/ p
  y0=(y1+y2)/2;: n+ V; X+ l5 J" m
  x0=x1+d;
+ y7 `( p! L( \0 t8 p* k- J# t5 L  x00=x2-d;5 U: }% ?: P  d. T+ [+ L
  for(i=0;i<d+1;i++), @7 y" \* \4 q- z  s
  recls(x0-i,x00+i,y0-i,y00+i);& m3 g( c8 m5 Y% Q! K4 ~% z
  delay(10);
' o7 M! B$ L2 U( b  }
5 R4 R* {- s/ ]4 u% |8 L  }& |3 H0 i( V) G
) d' j6 Z/ W/ |  |4 i" }8 T
  /************* clear rectangle side(矩形边清屏)***********************/5 v6 F( p# q; O6 s5 k. B( M

1 ^2 B* _; b& ]" Z( |# }  s# y  void recls(int x1,int x2,int y1,int y2)3 d- C$ T* R. ^% z# R) R
  {. E( O8 ^. Z  S3 O
  int i,j;; g' @+ ]9 ?- J5 [
  for(i=y1;i<y2;i++){8 w# U, H+ C2 R
    goto_xy(x1,i);
$ A' g. |' \4 A6 M8 P' J: W7 S  putchar(' ');
9 ~4 y1 q/ v) o  goto_xy(x2,i);1 o$ N" Y4 q3 k* [( m
  putchar(' ');
+ g! P% C* P2 F8 S6 I- ^' m: n6 m  delay(10);+ n. p( ~. K. v2 d; t
  }; @' F8 {+ M+ @' ^
  for(j=x1;j<x2;j++){
  j; R( }9 N* F$ \. b8 z7 v+ {* q3 j2 H4 ]  goto_xy(i,y1);
2 V" t0 ~0 K* b; v  r) G  putchar(' ');) b$ l6 I2 _% ?$ l5 C6 C! X( M$ T6 A
  goto_xy(j,y2);
& V) v0 Z7 ~" W$ s  putchar(' ');
; [6 ?. h3 K9 i( B% u  delay(10);
+ |9 w) I. n! H' E( H  }' W" B  q. X$ V$ d
  }
% C! ~- L( r- _3 I2 R  /******************open screen clear(开屏式清屏)*********************/$ [5 j) @; T/ n1 W

4 E& _. q9 m. n. Z4 f% _/ D  void kcls(int x1,int x2,int y1,int y2)1 @+ V3 b! B4 c* K* G1 v
  {- n: u4 i2 ]; T: h9 O. K
  int t,s,i,j;
9 m8 @3 c/ E# ?: d2 \  t=s=(y1+y2)/2;9 r) ?& t- }  @2 M( K0 ^0 k
  for(;t<=y2;t++,s--)
* Y: D$ g1 u! `# D, g3 n" \  for(j=x1;j<x2;j++){
6 m( k, d/ x" J! f- ]' H5 M" F  goto_xy(j,t);; |  v0 p0 n8 [. c  v# k  _
  putchar(' ');
6 m+ L& m# f1 q7 D8 Z  goto_xy(j,s);
3 S0 v6 r' U  u( v$ Y* x  putchar(' ');7 [9 q) }3 b9 \( d, g
  delay(10);5 |2 r. {8 r  ?; O! c5 N
  }
% n: ~2 g: d+ I  w- _  }( O, G5 ^4 \. }9 U  B0 h) M% K# E
  /*****************close screen clear*****闭幕式清屏*******************/
4 S; x; G1 G1 i% H% g8 Q6 H
' @7 K; w7 d8 r/ v  void bcls(int x1,int x2,int y1,int y2)
+ v) |0 ^# J! k) t0 U) Q; Q  {
" @- R, |# ]4 W3 D: g$ ^, b6 L, s$ V  int t,s,j;
5 c5 P% {5 Y- ]3 K$ `" {  t=y1;
# y& X7 J; m+ G6 g4 C1 L% H% W  s=y2;6 {- t% Q# [5 k* d% ~+ n! S
  for(t=y1;t<(y1+y2)/2;t++,s--)
& u" b- U9 m8 C! P  F4 T1 L  for(j=x1;j<x2;j++){
, S+ a, c$ _2 J* V  goto_xy(j,t);
; W+ k. Y. L0 ~  U/ @* D, L" [  putchar(' ');5 N' ^/ @5 w/ C) t3 D" y9 P, v
  goto_xy(j,s);: p1 ]4 V$ I5 P1 q
  putchar(' ');
4 V; G, n7 b7 V. m; I  delay(10);
7 Q; S* r" H, ?, k3 u) F  }' s9 |0 y( N2 i0 ^- r: M; M
  }
$ l- m5 t( v' J  /******************bottom screen clear(自下清屏)********************/* q! C& q7 K9 f& w4 K6 f8 o: M
! g0 n6 [3 M- i  F! U
  void dcls(int x1,int x2,int y1,int y2)7 O. e' h0 V/ e" C, N5 U
  {( P3 V& P4 z8 N+ d% b
  int t,s,j,i;) s% F$ W% m! \! ^( \; t4 ~1 ]
  t=s=(y1+y2)/2;* n9 i, Q4 _8 N- _- e
  for(j=x2;j>x1;j--)
" n9 f% M* T" g1 d0 h& e  for(i=y1;i<y2;i++){
- Q0 g# z' m" d' g% b) @# ^) h+ }  goto_xy(j,i);* {: |5 c  S* z4 q# w$ Y3 x1 V
  putchar(' ');1 E: z2 n4 ?' Y) Z# P- s0 R- O' @
  delay(10);# I+ `( v' I8 D7 t0 n
  }5 F/ W3 g5 b( f9 d$ C  r) ^
  }
+ Q  \( Z5 i0 D0 a" B2 c  /******************设置光标子函数******************/1 V/ Y1 F# Z4 q9 n- t4 Q/ M

' U# o3 f( A" E% c  void goto_xy(int x,int y)
" z( z4 _3 t) U. q) \1 p  Y6 k  {
. ?% I' N3 i- x7 n9 W  union REGS r;
; x2 a% R4 t% [! l$ {  r.h.ah=2;. Q+ ]* ]$ S5 j3 m7 e
  r.h.dl=y;+ s8 u! h7 G* N0 H
  r.h.dh=x;! \" ]  ?, g" N; N
  r.h.bh=0;
/ x; q/ G- C$ I9 `9 _( E' _4 V  int86(0x10,&r,&r);$ [& a% O+ M: J/ X
  }. @: }4 A. x# c
6 x3 \) m, z! u" v6 R8 Q  \
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/+ u: `" x3 v& c* |

  ~$ _( r; F# }2 f. W' v: {, S9 }  void puta(void)
; U1 e6 `) N) Y3 j" q# E- Y  {5 d9 Y' k) s' z4 g+ R: M; M+ ^- \* e) G
  int i,j;
+ ~  E% d) F+ u' }4 r% }2 A  for(i=0;i<24;i++){
$ u! t. E0 J1 `6 m  for(j=0;j<79;j++){
7 B# g" F2 u  Y+ n8 }! ?( w2 ]  goto_xy(i,j);3 i1 z1 E' g- X& {
  printf("a");; a9 j% @2 w4 k% X5 Q6 H
  }+ o* u/ @! \! @; O4 V
  }
. a- ?1 \5 }  s  }

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