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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; z( w% m8 ]% |, z& F6 `2 x/ {0 l- v- c
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, W' x& o( p# ]% P7 F0 n( |. ?7 X
6 D" i& G0 o; R, D) K  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: f, Q2 u* l; l  子函数及演示程序:4 F( `/ }5 T: P! B2 i
. `1 G. j3 {1 o- e/ D& x9 ^
  #include<stdio.h>
& o  y8 o- i! W8 U) j  #include<dos.h>( i- ^% A, Q  E+ y% M$ _5 w
  #include<conio.h>! Z7 \* n+ P/ Q9 w
$ c; I6 F0 H* ^4 G
  void goto_xy(int x,int y);1 V/ |8 b0 s! s1 i# s9 E
  void dcls(int x1,int x2,int y1,int y2);
" m. l, Q  q/ e9 A. w  void bcls(int x1,int x2,int y1,int y2);" B$ x+ S' P5 v2 _" z) F, l. S
  void kcls(int x1,int x2,int y1,int y2);
+ F+ O) E: r' q( Y3 {  void recls(int x1,int x2,int y1,int y2);  O: y! b" b# ~1 K% i; I
  void zcls(int x1,int x2,int y1,int y2);
0 w( |6 R( ~3 Y! o% K2 l. j: m+ c  void puta(void);
% v% [; V3 `1 \; P# y
# L! V+ Q' f3 Z, B9 [8 L# z) E3 U' u( R; _9 K: U. q+ e
  /*--------------演示程序---------------------*/
3 G) f0 M2 t- B. P  main()9 n, ~1 l& V3 X3 o- C' e4 m
  {4 b) M. ^8 T7 W+ W1 H
  puta();  K# j$ `4 m' o
  getch();* M; m# t, Y1 G7 x
  dcls(0,4,0,79);/ `  A1 ^& C1 a  r4 Y
  getch();) c; ]/ T4 h. `; o2 h- ]
  puta();
1 ]2 ]" j4 W6 {* _1 a5 a% e; @% q+ x  getch();. ^: h* z: B: K; {% r/ P
  bcls(0,25,0,79);( P2 o! l, d/ w! P" }6 N3 X: @
  getch();1 \' Y$ d7 c: }% T, i& q( |7 B
  puta();( W/ d% b$ F5 D; Z
  getch();
, k4 S3 E: s- G& w  zcls(0,25,0,79);
9 w/ G4 n' P- ~% l' W  getch();! H1 q- k/ Q" E+ `
  }! i5 N) W1 M, d5 D2 A
  /*********center clear screen(中心清屏)***********/
  L+ s7 C8 @" @$ U* s% Z  void zcls(int x1,int x2,int y1,int y2)  @0 b+ r1 q9 S7 b
  {. k* O. t- o' |" x- y+ @$ h, K
  int x00,y00,x0,y0,i,d;
- S, c8 C; v$ y: Z: ^3 ?  if((y2-y1)>(x2-x1)){9 ~0 H4 s3 H8 _5 b& V- V
  d=(x2-x1)/2;# X  O2 t4 y2 l2 m7 ~5 E/ A
  x0=(x1+x2)/2;
5 R) ]0 i3 O" F+ V4 P  y0=y1+d;1 u+ P' G! z. I' `- h
  y00=y2-d;. n/ ]" l( z0 _, s$ j2 S: ~& b
  for(i=0;i<(d+1);i++)
3 W, f3 |. r- B* k, r2 ~  recls((x0-i),(x00+i),(y0-i),(y00+i));
, y% T4 n. R$ ^5 A) k, I4 \7 _  delay(10);0 ~2 ^% n( O, q( z+ p9 F
  }
4 O0 f0 m: J0 z  else{6 l2 Q  O; Q+ P1 @4 ^; N
  d=(y2-y1)/2;! A% ^& E7 ]1 U- D9 B8 w3 }4 O
  y0=(y1+y2)/2;
( z$ k. |/ w$ ?# d7 A; }* B6 c# v; n: v  x0=x1+d;
$ Q% r' J! W* E7 _6 \  x00=x2-d;
6 R  F" g5 x- Q! w  m% W  for(i=0;i<d+1;i++)
& O4 q5 t. c/ r$ y+ G  recls(x0-i,x00+i,y0-i,y00+i);
4 G" k# N+ g. \, A9 c+ O5 t0 c; V  delay(10);% K- Z& e" c: R% e: \3 E
  }* \, r% a. O; E8 I; o) i! g
  }0 ~7 M5 A  S- {5 S

) f) r! N9 p' _  /************* clear rectangle side(矩形边清屏)***********************/" t! b4 Q! _. C; [- s

* `1 [5 Z5 l$ X! r) _  void recls(int x1,int x2,int y1,int y2)6 ^: F! u; ]1 y, C" s! @
  {
* M/ }) T$ |8 e, o5 m  int i,j;
$ T* n% N$ p. m! \1 e$ g  for(i=y1;i<y2;i++){9 b! S* \: ^4 u4 y0 J( R3 y  w
    goto_xy(x1,i);( k+ q8 I$ M# E8 s. |2 L
  putchar(' ');
9 b! O" P9 k! ^  goto_xy(x2,i);
2 ?7 H+ E% v7 h7 d* ]3 |  P& n8 v* e  putchar(' ');+ j7 C  k5 V# s. ^6 @  S6 x' P7 F2 u
  delay(10);- |2 B2 X9 Q% W5 [( ?. ]+ Q, I
  }
8 _8 J7 Y0 C- j' Y; y  for(j=x1;j<x2;j++){
1 B  g1 `( U# M7 b! r  goto_xy(i,y1);5 B7 O5 {( ~  f+ i# [4 U4 B
  putchar(' ');) F: _  K& u+ p0 p8 H! t
  goto_xy(j,y2);
  V. e1 ~, j# K6 o) n6 j/ f  putchar(' ');0 i- d8 R8 Y+ I7 @6 {, F9 |0 A
  delay(10);% @$ c3 P& C1 C+ ^; ^
  }
: Z/ l# b- x6 b$ p  }+ Z9 r4 a- b/ e3 m. X
  /******************open screen clear(开屏式清屏)*********************/3 d, @& _1 \/ v# Z, X0 k2 b3 R  T
2 v% I) C2 H$ {9 S
  void kcls(int x1,int x2,int y1,int y2)
! a: {4 K8 a3 d/ ]  {
, j- Q/ D$ m* B0 L: d! o% i8 @  int t,s,i,j;) y1 t& y- |* M- c! @  @
  t=s=(y1+y2)/2;4 @5 p/ ^9 x2 {) P6 c
  for(;t<=y2;t++,s--)
7 D7 v3 e, C: l- \  for(j=x1;j<x2;j++){3 R# I) w  t( Z
  goto_xy(j,t);: B+ W2 r' ]2 `6 P1 k0 E( v
  putchar(' ');
! a2 D' F" s( u$ b* G4 @  goto_xy(j,s);) O" q# R; a0 G
  putchar(' ');5 O' x+ y4 _- x# v
  delay(10);" |6 M' x. B( {+ Z0 v
  }, Z. t5 v+ r/ u# D8 a! @* X7 z7 \5 k
  }
  p  @1 h5 q; \$ f5 D' @3 Z+ ?  /*****************close screen clear*****闭幕式清屏*******************/" B( L5 o; j( h7 d: \7 Y
, v# C" N5 d4 ?- v6 Y7 [7 F2 ~$ E
  void bcls(int x1,int x2,int y1,int y2)3 \5 G  E9 j4 I4 `( `
  {, V+ K" n4 d0 _0 @2 L/ U
  int t,s,j;
! Z* q% X7 J, Z; T% g. r  t=y1;4 D" ?* O) T7 d" r" g
  s=y2;" e* N) b% l* `1 G/ q
  for(t=y1;t<(y1+y2)/2;t++,s--)
) Y# k& u6 @6 L# x  N# J/ j  for(j=x1;j<x2;j++){
' _) o+ r6 U5 i5 A3 r  goto_xy(j,t);, d- c3 N' u6 M+ q# \
  putchar(' ');
# L7 _2 g2 W& r. w  goto_xy(j,s);& N9 j) X1 S$ `: u' A
  putchar(' ');" E5 S4 ~' f. [$ g; v6 F0 e$ [3 O3 Y! R
  delay(10);
' o  b2 C. j/ y+ J( l  }
$ [8 J6 S# T2 L. Y3 n* q  }; v( w* a; T! W$ x- t
  /******************bottom screen clear(自下清屏)********************/
& q. V6 n. R- u/ y" _! O$ n4 k% V8 b, I3 F/ X3 r
  void dcls(int x1,int x2,int y1,int y2)
+ v. k2 Q' |7 t  {1 ~: h4 i7 i8 A, V$ n3 s, w: ]
  int t,s,j,i;5 K9 ]" ]$ z8 s* v
  t=s=(y1+y2)/2;
0 e, ~! v" v( l) @/ P/ K  for(j=x2;j>x1;j--)
( y! b7 y( B) U8 \. Q  for(i=y1;i<y2;i++){
! B2 S5 y) t. O  goto_xy(j,i);9 M: S# k- e5 e: J! z
  putchar(' ');
( e# ]4 @7 x  H  {0 U" m  delay(10);+ p) n% x$ _- r* q
  }
( M9 F! X2 E/ i& c2 u- Y  T  }1 ?: _6 b2 @; G+ U+ v) k7 m2 d
  /******************设置光标子函数******************/
) i( _9 a' l% @2 U5 e6 j) n: B! x: [# P! U8 W) X1 x$ c
  void goto_xy(int x,int y); L( S1 D/ C5 W" c2 o; o+ g! J5 O
  {1 s" o4 Z7 {& p3 u. s1 F% s
  union REGS r;) `0 G+ Q' @- w# K1 ~: P  v
  r.h.ah=2;3 T' a: ^5 |% l% c
  r.h.dl=y;
0 _! b7 Z) M0 G9 T% ]0 g! N, ^  r.h.dh=x;
% u% e9 S# d/ \0 ^, Q  r.h.bh=0;. ~" s; w: y0 _/ `
  int86(0x10,&r,&r);9 m) k/ |( Q; K; B+ M" ^' s
  }5 I( D$ o* ]8 T+ O0 Y
( w8 u1 r: Q8 i8 R
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
- c! [$ |1 }2 L* _+ {2 }4 A0 R  k
* h2 W1 E0 b/ l* K  q( s  void puta(void)
, f. B. l% h- U/ y& s  {* z9 o, B; p/ f1 r. H! n
  int i,j;
' F9 ?' W  e  z' D8 o' y  c+ K" t  for(i=0;i<24;i++){
) O8 T/ W3 g1 k; @+ w0 s' e  for(j=0;j<79;j++){9 H6 ?/ U; F# R: s+ t$ j
  goto_xy(i,j);
9 [: r. v, s5 \2 o) O  printf("a");
7 l/ V% i: c/ n( [  }  ^' O5 Q) Z' H$ O# N
  }
5 d1 ^7 F) ]7 a: S, |* v  }

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