返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ s3 o; [1 C1 v/ g+ q- z. t$ {) F
% g! f1 O2 ^) A# O' o9 \9 J- d
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
  e' R" x- ^; E* r! l
3 F, V0 u& Y3 M* }& W0 I  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . G0 B; K: d& c9 B
  子函数及演示程序:
  e0 [3 V* z7 g$ Y& T. f
# \9 U0 |4 c( P' |' g  p+ \  #include<stdio.h>( m# U8 \* K. T; Q6 n
  #include<dos.h>
+ s( V8 J, {+ W# ?. H$ p' F0 Z! E7 l  #include<conio.h>  |1 D5 T. K: L3 M" W$ j

2 u% [; }+ `6 N- x; j7 C  void goto_xy(int x,int y);6 O1 x" _" W8 Z% k8 v
  void dcls(int x1,int x2,int y1,int y2);
6 D' n3 t* q2 H. Q0 q  void bcls(int x1,int x2,int y1,int y2);8 H# ^' c: V" S0 F
  void kcls(int x1,int x2,int y1,int y2);
& _' M$ s5 S/ s% Y7 E& k( d  void recls(int x1,int x2,int y1,int y2);
5 u4 i1 y- i# c  void zcls(int x1,int x2,int y1,int y2);
$ e9 @. P# I  }# h6 T  void puta(void);
7 l, a4 p0 L; ^4 f( M2 T( z/ {% n. R6 U  J

# w2 a- |6 F3 N  ^  /*--------------演示程序---------------------*/9 k) V7 s+ A7 c
  main()0 G& t! n' n: z$ U
  {3 \' Q9 Y( ~( m
  puta();
+ C/ ?! t! ]. h* L  getch();
8 f4 n: p3 g; K, |9 a, e  dcls(0,4,0,79);
& m8 t4 C& t3 f) n  getch();
6 g7 X% S3 ^) j3 ^: f$ a  puta();+ ]. x/ [  _) U  |: |; U2 P! P2 b" G
  getch();6 U: c+ f: ^, p* `# }! D
  bcls(0,25,0,79);5 s! t# e9 u8 R+ G5 K
  getch();: p, ]& a( g( u
  puta();  h0 Z8 c, n, b: {/ J7 H8 F
  getch();; A2 J  K8 m2 C) f- `
  zcls(0,25,0,79);, g, ]9 p2 l  Z, `+ s
  getch();% [7 {) C( d6 [7 |* T% l: k
  }
! q2 k6 i8 B, `8 g% z  /*********center clear screen(中心清屏)***********/
, O0 w( `, D. ?: H, @& F, u2 B  void zcls(int x1,int x2,int y1,int y2)1 c: ^' i2 r  a+ a. c7 X( y
  {& j1 X- a* W; n8 |- _- Y
  int x00,y00,x0,y0,i,d;
! }, k" b4 [" b5 T' s6 \  if((y2-y1)>(x2-x1)){
. }+ z5 e! L/ }+ M) n! S( B" R- t  d=(x2-x1)/2;. I. a1 e; L4 Z" x
  x0=(x1+x2)/2;% @& @+ N+ Z1 s
  y0=y1+d;
# M# _0 T. s3 o7 Y1 _( C  y00=y2-d;
5 N. L# A& a$ V, \  for(i=0;i<(d+1);i++)
) Q0 ?8 K5 s/ t; h' b/ t2 u3 f6 ?$ S  recls((x0-i),(x00+i),(y0-i),(y00+i));1 j1 S$ b1 C# {) j0 o. {, F
  delay(10);% |7 Z2 |8 I1 _
  }  {1 I: T3 }2 g' G
  else{' a+ E! g/ m5 e0 F
  d=(y2-y1)/2;/ E1 q$ v/ A! r
  y0=(y1+y2)/2;
- n5 C4 k$ z6 z9 T$ c. f- m  x0=x1+d;
7 [; X( k( v! ~* k) e5 w1 D$ a  x00=x2-d;+ G3 [: b$ S: p6 e
  for(i=0;i<d+1;i++)
- k/ [8 \) _, `) Y2 Z9 P8 f( [: w  recls(x0-i,x00+i,y0-i,y00+i);
! t) j" `0 H# T; r0 `  delay(10);
0 [$ i6 L" R. n( r) v" s  }
2 ]+ E# C7 s( V5 t( Q( G  }5 W' _$ K- R# u: y
4 v7 x# M# }" O( T- ]" r
  /************* clear rectangle side(矩形边清屏)***********************/
0 @7 k6 e4 Y- X% H
" f/ X, _4 s) H' K0 C  void recls(int x1,int x2,int y1,int y2)
0 `) d0 h* ]- v! ~( f* T  {
5 ^! g2 J) p' M: `  int i,j;% r/ p) a( {& E" c0 a
  for(i=y1;i<y2;i++){
9 d. D# e6 F4 R9 v    goto_xy(x1,i);1 n& h, P0 Z7 E/ m; z
  putchar(' ');
' R& z' m' C* x, b  goto_xy(x2,i);8 k  Y1 c. l1 r0 Y& c( ~5 E3 b
  putchar(' ');
/ r( M# c' ?5 s  delay(10);
$ a( `2 ~% J5 ]/ k- F" ^  }7 g/ M; x2 L% S
  for(j=x1;j<x2;j++){
) e& S4 Z7 @" z  goto_xy(i,y1);/ v, j0 Y2 b/ m3 ]1 j2 Y
  putchar(' ');) `3 d: M3 B4 q3 Z
  goto_xy(j,y2);0 H* l0 ]7 _4 {/ s3 {
  putchar(' ');, L/ }5 I7 M% J6 Y/ U9 S
  delay(10);
( {2 _3 X7 L0 L9 {/ ?5 t  }7 H3 H; p  K, j( S
  }
( _1 H" \7 C6 Q  x% k  /******************open screen clear(开屏式清屏)*********************/
) a! T* ~# g# _5 z9 x$ ?+ o$ I$ q6 f. y; ~; g
  void kcls(int x1,int x2,int y1,int y2)- c) Y0 e3 A$ q& Y$ ~7 O8 W# A
  {- a# O- Y1 c1 h& _
  int t,s,i,j;
6 I: T: H3 r+ Y+ [  t=s=(y1+y2)/2;, p3 Q  ^3 P+ t  [7 y7 U! u
  for(;t<=y2;t++,s--)+ g' ]% N1 u( b8 p- I
  for(j=x1;j<x2;j++){
3 l3 O1 {2 d$ ]  goto_xy(j,t);% g) c+ C& q' C
  putchar(' ');. e. q# D2 ?6 m- z2 \/ h1 Y; |
  goto_xy(j,s);# @! m- F/ K7 ?" _0 L
  putchar(' ');$ k; T/ z% w3 \5 `4 e# h. Q+ O; e& n  q
  delay(10);+ }  |/ N. ^. n1 L( S  \, q/ J
  }5 u; ?9 P" y8 h) s0 |
  }
( r- `; ?4 d4 q( }; d: e1 D  /*****************close screen clear*****闭幕式清屏*******************/# o7 H7 u& e2 |0 _2 v
  m, E4 D. @: z
  void bcls(int x1,int x2,int y1,int y2)' B& X  t' o  K  J& M
  {
& U, j# [. b2 W9 T! T+ N  j& t6 z  int t,s,j;
0 |4 |3 i8 \8 F2 Q  t=y1;; x. Q- U( s( s
  s=y2;
7 P. r  _& y) y& `8 A: R  for(t=y1;t<(y1+y2)/2;t++,s--)& m* c* ^7 w' g. |2 B# [
  for(j=x1;j<x2;j++){" y: d, F" W8 m+ W9 ~
  goto_xy(j,t);& U; B* K" a* y- m0 Q. D' t. R
  putchar(' ');
- @1 i' A4 h/ `" s  goto_xy(j,s);
6 x: u7 |, g0 F% F$ X5 r  putchar(' ');+ O7 r+ X& G+ J4 y
  delay(10);6 @; _+ K# i/ X1 I- u7 F7 R& a
  }
- R: P6 i$ ?/ F9 ~6 A+ G& E  }3 w* }- g: \; F2 Y& H0 ]
  /******************bottom screen clear(自下清屏)********************/- I$ w/ l/ Y( t( c2 U

2 P% ^$ l& r2 M3 x- G& ]5 L  void dcls(int x1,int x2,int y1,int y2)+ x, S' Q% R# v4 _9 n
  {
7 [/ b8 M$ j5 S8 z( k+ c  int t,s,j,i;9 f& E( p/ t# d- m& g# F
  t=s=(y1+y2)/2;
9 y6 W- g; K; L( ]% X  for(j=x2;j>x1;j--)' Q! s, V8 v7 Q; F( R4 ^, |4 k
  for(i=y1;i<y2;i++){) ^9 w' E# b. S, j) U- h0 D6 F* U
  goto_xy(j,i);1 ]/ c7 A; l3 r
  putchar(' ');
; c4 B. t8 B) n9 S+ ~  delay(10);5 e- ^0 T; I9 h3 o' W/ v0 ?
  }, D/ r) t+ D2 D8 N1 w
  }
4 E* o# U& P) C  /******************设置光标子函数******************/
) [1 A) Q" [) u( H' o7 a3 L7 a) n. d- X  v; o
  void goto_xy(int x,int y)5 t6 ]; G3 g; ?) C! J
  {
3 @5 c: l3 S/ y4 ~. z1 m, u. f  union REGS r;
: C' {+ h5 `/ G, `2 q  r.h.ah=2;
* M1 X& X6 `: o+ Q5 _  r.h.dl=y;
2 [- L/ r2 ]0 S* g! E- R  r.h.dh=x;, _+ y. b0 ]; |: H, ?! U1 S6 T
  r.h.bh=0;; m, f, Q2 q  n4 F6 m- l4 O$ U1 ~" c
  int86(0x10,&r,&r);
  z  B' X9 B0 U  }
) {/ z- N" ^3 g# R* b
+ H6 I: N) x; [" W  |; I- H3 t0 V  /**********************在屏幕上打出一连串的a字母用于演示程序******************/7 j) S) N  }( \
: e" P1 G( r3 @/ w1 ^
  void puta(void)
+ D0 |0 D7 Z$ }# r" \7 {0 s, T  {
( B( a. w5 G* H% v+ w4 O5 ~  int i,j;
1 ]  i/ R4 y5 s3 s" N& @  for(i=0;i<24;i++){: g- J" y5 \4 {  x! e
  for(j=0;j<79;j++){
! i  v* u8 X# P1 s  c+ e! M0 q  goto_xy(i,j);
; G# x0 I8 T! v  printf("a");( l! O. s+ U+ G
  }2 S* N+ x. D4 N' V0 G- n
  }
- m' g" H+ M+ e* V5 k1 o. q4 O  }

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