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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,# _9 Z: p# n/ R% s; x. v
% k" V1 b' K  w' r: T9 m
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) [( d7 B- C6 R, x6 L% c3 C
. _. P, x" I& }& l0 g  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 R, g  B/ M9 G/ W, c  子函数及演示程序:* ~* u5 ?' I" `

" U# m- J9 i  W  #include<stdio.h>
8 T2 [: o; Q& b4 ]0 F( n  ], F# L  #include<dos.h>/ @9 `) I. E. f. C$ K5 M$ [1 I' u
  #include<conio.h>' O# k1 T7 w5 D+ l7 x: s9 o2 X
* r3 n! Y$ t% Y+ |( O
  void goto_xy(int x,int y);
/ d: ~& n8 A: O* I  void dcls(int x1,int x2,int y1,int y2);# u4 y8 }$ `2 P
  void bcls(int x1,int x2,int y1,int y2);9 |5 X2 I4 m& V6 z/ W6 o+ a& p
  void kcls(int x1,int x2,int y1,int y2);5 Q( z% J) W! k4 t- i' J2 O* [5 _
  void recls(int x1,int x2,int y1,int y2);1 O2 U) {0 R+ t3 i# r6 I
  void zcls(int x1,int x2,int y1,int y2);
/ V/ e! Z! S' {  _/ B: A5 v/ P, p  void puta(void);
& h& i7 H; W) n- m' m1 a8 G( p+ g5 Q2 y- Q4 b3 x4 q
- Q' b6 L" B! N5 z; y
  /*--------------演示程序---------------------*/$ _! m. {: X0 @$ G) y4 Y
  main()
% B: y5 A8 _/ S3 G3 d  {* K- X0 k, C: e9 i" b6 _
  puta();
/ T! |! \/ S6 o. A6 l7 d7 S! W. l* |$ e  getch();- o6 O% c. Q5 d3 p
  dcls(0,4,0,79);
, B* m! j# I( c3 ]: T% U# l  getch();# u+ V3 I# i; u( z6 q! d9 t
  puta();$ L5 E4 ?  B" Z: d' d
  getch();7 a$ O) d+ [( t1 {1 X
  bcls(0,25,0,79);
  g1 o1 O( {1 _. X  getch();- }4 E/ c' y- `6 e* l! n) f% I% w, A
  puta();
; Q3 w* R% A- r$ h+ {1 A( S4 {  getch();
5 t. C$ E, s, n: }6 E& t" }  zcls(0,25,0,79);7 @, D* X- O0 `
  getch();/ q( A% s( z# V1 \0 d  u9 ^
  }
5 p% Q' N8 A% Q& P8 \  /*********center clear screen(中心清屏)***********/' S3 y6 f# T+ W) B5 ]
  void zcls(int x1,int x2,int y1,int y2)
; e) P' u. w; y- p2 Z; @  {
) M: b# U, G7 _- g& ~  _3 M3 U  int x00,y00,x0,y0,i,d;
6 E6 J- P/ K+ G- Z& h  ^  if((y2-y1)>(x2-x1)){$ X' o- W" E( n# N+ K  T
  d=(x2-x1)/2;
1 W% g3 h8 ~0 Q  x0=(x1+x2)/2;
! Y& u1 ~3 E3 L; @* g  Q  y0=y1+d;
* `+ y, @( X  `& v- M* A$ r  y00=y2-d;/ d3 W/ x- o2 N( q1 W" c
  for(i=0;i<(d+1);i++)
# l' o5 M& o3 a; M  recls((x0-i),(x00+i),(y0-i),(y00+i));
" m+ y0 G$ ?$ x2 W9 v! w: h2 {. P  delay(10);0 z  h0 T8 j% o! _
  }2 I# z8 u8 a0 o( g( z' X4 |
  else{
$ B2 ~: U! k5 Q4 E5 g: F. \  d=(y2-y1)/2;
: H) ~- o2 b' V  `1 E  y0=(y1+y2)/2;
1 [6 ?0 U& j4 |  x0=x1+d;
5 [  J; ], A! k9 D, F. |% l  x00=x2-d;
3 J8 u0 U. x' a  for(i=0;i<d+1;i++)
; X- I( K4 Q7 a3 y  recls(x0-i,x00+i,y0-i,y00+i);
& E% i/ j! m2 c) U0 b% i  delay(10);# X( W# h& S7 X: R, J
  }
+ q' k3 }; v& X; l+ b" ^  }& E3 Z- ]; l  F3 Y; s

3 C7 U+ M& E+ z  /************* clear rectangle side(矩形边清屏)***********************/. x# e. c. L# {

: _/ v) n; r" K9 b9 }2 k: u, O  void recls(int x1,int x2,int y1,int y2)7 J" M8 j; f/ A* w
  {0 J* {& O' l& ~
  int i,j;
4 m$ d* s( d  x) c  for(i=y1;i<y2;i++){
4 B- U3 S# E4 E' V. m3 i    goto_xy(x1,i);( c1 }+ Y7 |8 a2 Q% Q- l2 n" _* E
  putchar(' ');$ R: @& D" i7 d1 H# ]
  goto_xy(x2,i);
8 h( A% W8 S  t" b: K: v0 r  putchar(' ');
! L, ^2 y& i6 b& u/ Y9 T  delay(10);
5 s: u, }; E$ Q7 D6 {$ h0 D9 q0 k  }; H) J+ a0 K4 M; M/ \' L! c
  for(j=x1;j<x2;j++){
  y0 M8 d% k/ a$ P& C  goto_xy(i,y1);  ^  p# g7 Q1 t  |
  putchar(' ');! N9 ]2 K; ~; ?' R+ g& A
  goto_xy(j,y2);
# E" B/ ^, f8 g3 G4 {4 X  putchar(' ');
' b* x# h, O1 ~  delay(10);! |- N& D2 @, c( P& G- B# j
  }" c0 H9 c* Y* H/ n4 R: D) ?: K6 e% J
  }
# V9 m3 n8 h9 H9 z% A  /******************open screen clear(开屏式清屏)*********************/2 _" n/ }0 ^5 c3 S9 f2 K
7 j* K' _! \- {. ]$ Z4 e9 _6 S
  void kcls(int x1,int x2,int y1,int y2)
' \, @- |) h3 g! X( {  {0 X; J2 d  G5 w+ m! O
  int t,s,i,j;
- U( d5 w/ w9 S4 a- x4 ~  t=s=(y1+y2)/2;
* w) L4 N+ y% q/ u  for(;t<=y2;t++,s--)# T" N* n- |& @+ |
  for(j=x1;j<x2;j++){% a% i; \) R: w0 o  W! N
  goto_xy(j,t);* c) ?7 Q0 U4 U% p5 z( n4 E
  putchar(' ');
$ c$ Z; P/ _/ o' p4 c  goto_xy(j,s);
  K9 G0 _5 Q2 @' b! Y# i  putchar(' ');" {2 X7 d: E% G+ n0 g/ q3 O6 I
  delay(10);1 N+ X  F& y# V; C
  }
, L" W! {) w7 d0 |8 w  }
" ^  H+ ~  M9 k* o  /*****************close screen clear*****闭幕式清屏*******************/; W& X* ^; V2 k' E. y

2 i( c" B7 b7 d/ m: p  void bcls(int x1,int x2,int y1,int y2)/ n: f* q* `% C
  {$ C0 J7 c# S- U& Q$ \
  int t,s,j;
7 ?" c: ^$ X4 f& {4 Z) H  t=y1;& }7 n0 d- r" F" ?" j) y) c
  s=y2;6 r' }: l' Z7 m7 d2 K* r, s" {6 x
  for(t=y1;t<(y1+y2)/2;t++,s--)9 M' \+ l6 r" i
  for(j=x1;j<x2;j++){
- V6 G$ r8 r2 O  goto_xy(j,t);
* P% {0 v# g' P  putchar(' ');/ \, w% f7 M: F5 S; z& r
  goto_xy(j,s);
; Z, {$ u7 ?1 J  putchar(' ');! g; y; ]  h2 h
  delay(10);
6 w2 `4 k+ o4 P0 R+ M  }/ A$ K5 g& N0 M( S+ n% l, K' U! i
  }5 O) g% s: y: C. p
  /******************bottom screen clear(自下清屏)********************/' V9 I0 Q1 y+ _8 `. V. }
! O; C! B  K' F
  void dcls(int x1,int x2,int y1,int y2)
: o1 v* {: Y& l) W. h4 ^  {
$ X$ E2 d/ [' E+ Z% Z3 x  int t,s,j,i;
  R8 [3 R; w) m$ j$ H2 z% x. i  t=s=(y1+y2)/2;
/ `' [7 |3 `1 m0 y; {5 X  for(j=x2;j>x1;j--)
- ?+ p: J4 i) z# k' R+ X; h1 n  for(i=y1;i<y2;i++){
" t2 g- k6 a$ G* b7 _  goto_xy(j,i);( V1 T2 g! [% L- T! ]8 O# Z
  putchar(' ');
* @  D; H" {# T; X' l3 ~' I  delay(10);4 n( d$ g( O0 V8 ?9 ^3 U5 O
  }
: A) s' L- |3 d' D, ^( h5 q" G  }) V, c4 q  Q8 y6 w! f8 b
  /******************设置光标子函数******************/
3 Z; R% f; E4 W  j  T0 C
) j# M5 ~+ [- [: }  void goto_xy(int x,int y), F- X/ f  [* d' M; U& M: h; g
  {6 Y/ O( L& Z. Q: w' S
  union REGS r;8 B7 c% U  X: F% Q
  r.h.ah=2;" m0 Y. T/ ]' Z/ B, L3 j# D
  r.h.dl=y;
3 B" w+ y9 L1 e5 c& C2 [  r.h.dh=x;
, N9 w, I& W. n1 c& q) \  r.h.bh=0;
& t2 g  Z; @/ ^" _  int86(0x10,&r,&r);
6 a' g0 p  h5 V) \  }) e$ ]9 v/ A' @9 s6 g% ?3 v4 A

' D3 G$ d; e, R( W' p  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 v* ?( h! u, d) g2 z/ T& N" J/ H) E
! H7 ]4 u# b& X7 P( a  void puta(void)
- H0 m$ v3 h" Q1 S% \  {
1 `; x$ z/ e5 [) l9 s! s  int i,j;# f! h1 W  S  a" r
  for(i=0;i<24;i++){, k) F5 b+ h0 b$ p
  for(j=0;j<79;j++){
. C) Q( n' q6 j! E4 P+ }  goto_xy(i,j);( ]9 r) C) ?. q: ~& I$ j
  printf("a");
3 r2 R: C2 m" v2 l* e; S  O2 W  }% L! W- D3 I. m5 R
  }3 {) S# a$ T6 Y; f
  }

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