返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 r4 z# a- Y# p3 j% f& \: t
! p0 A" H! j4 ^# p# j, c6 y2 ~. q: O
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里. T! _  \5 c. ^7 D9 {: b- @% p8 E$ p

- T5 E( W& t8 N: h. t$ O  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) y; T: j) h. ~+ o% B$ M6 d' |  子函数及演示程序:
2 o9 I- f# ]8 _9 T/ a& m  U) c7 x
/ Y/ v6 u! @8 F5 e  #include<stdio.h>
* z9 p$ o4 _% r7 @" c) K  #include<dos.h>
* {0 S2 d7 {2 X; v  #include<conio.h>( d! h/ H2 o; }  a% @

0 q; ?  v! y! v4 W. {: Z  void goto_xy(int x,int y);
% g: d! S7 j: N0 m5 x% m: ]  void dcls(int x1,int x2,int y1,int y2);
/ t) u, [. w2 s' g( m) M; l- I  void bcls(int x1,int x2,int y1,int y2);5 s, y0 ^( T0 L1 X" e
  void kcls(int x1,int x2,int y1,int y2);9 ?5 K+ u1 Q% F( Z7 z
  void recls(int x1,int x2,int y1,int y2);- d+ W1 z4 C6 F  w# e  |7 e/ a
  void zcls(int x1,int x2,int y1,int y2);1 u( A5 c: D: V& }
  void puta(void);2 R' q+ o9 }3 T; n+ K4 y

0 x! D; t. D. }& {( w
6 Z& e& ]' a4 R$ E+ d  /*--------------演示程序---------------------*// h, ]9 a8 z/ J+ A3 C
  main()
- l1 R! k6 m6 a+ E1 J. m- p  {* g' |. Q4 Y& v1 w4 i% L( r) w4 a
  puta();
/ t; G, |9 W4 ]( O, I% h  getch();
; X$ T" }% b0 _0 i7 E- y2 \  Q  dcls(0,4,0,79);9 _5 l8 [/ d8 g0 x7 q7 n
  getch();- a( R% h! N% P3 m
  puta();
  T' v; M4 h2 w+ f* j) w  getch();
  O2 j" P  r& t. N, Q9 J- k( u  bcls(0,25,0,79);4 G1 R* _0 a; g4 `( W7 b9 e- {
  getch();
% M; y5 c/ r) b: K0 I8 C. X  puta();
: g: U3 C2 K0 h* P; z  }  getch();9 I0 l( {; g$ a5 A! X7 [
  zcls(0,25,0,79);2 O$ G8 `! `  V1 s7 N
  getch();' _6 z& x* Z1 H7 N* f
  }
$ [1 K" l/ \) w  /*********center clear screen(中心清屏)***********/+ ^- R& T/ ?& Z* Y' n
  void zcls(int x1,int x2,int y1,int y2)7 m& {' F& N. o
  {
4 g5 e6 q6 _. @6 u8 F/ B6 O; y# @  int x00,y00,x0,y0,i,d;; p: [( Q' X0 m% ]  l# `  [. q
  if((y2-y1)>(x2-x1)){
/ O4 x" B8 }( N) R. Q  d=(x2-x1)/2;
5 y- V& h% V: E+ R$ l  x0=(x1+x2)/2;, ]" `! n9 P) G1 D3 K
  y0=y1+d;: B2 r1 {. A; t) Y' p6 ?
  y00=y2-d;
7 @  Z. I& A' S4 E  g) @  for(i=0;i<(d+1);i++)
) o+ U% d) M4 s1 L  recls((x0-i),(x00+i),(y0-i),(y00+i));2 Q" t; A: F7 ^; W4 t
  delay(10);/ ^- v0 j8 j& [, _
  }
% r- h% M: g' k9 \  else{* G+ i! h5 D1 T4 x. u3 _
  d=(y2-y1)/2;
( G8 f2 @- Y2 P' G* n+ f  y0=(y1+y2)/2;
9 O6 a  m+ r. @  |( |  H  x0=x1+d;. v1 N2 X% Y' S: o. Q# I/ \
  x00=x2-d;$ ]  A' o8 E' R( u$ i$ v# `
  for(i=0;i<d+1;i++)8 J/ b8 V  }4 k, |
  recls(x0-i,x00+i,y0-i,y00+i);2 G) c8 L. h2 l( w2 w2 R: i$ h
  delay(10);
( u' N9 Q- ]9 s% o) ?/ C9 x: G  }' M1 N. T$ k# t# @
  }
8 b/ Y% s  J# i9 v' v; Y
1 t/ K' X( v& [( r$ @9 M) Q* p  /************* clear rectangle side(矩形边清屏)***********************/
8 D9 v: H, G5 V: `7 O% e9 d" O+ _4 {' L; U; A3 j! ^$ {
  void recls(int x1,int x2,int y1,int y2)6 M/ G8 d1 e# U  o* u% o: a
  {8 U+ }5 g& \3 k* g/ \  {/ t0 @
  int i,j;
6 W9 }7 S: u- |( e  P+ `  for(i=y1;i<y2;i++){
8 q8 x) [0 \+ E: D    goto_xy(x1,i);+ \) u2 x. \# l; a" F* m
  putchar(' ');
" P! ]3 J! f3 G: S$ t; K2 E  goto_xy(x2,i);7 c; E- e! N% I/ H
  putchar(' ');
* V8 B0 X/ m4 k7 y  delay(10);
, T$ X& ]+ v$ Q! I3 N; Y& t  }1 t+ n' c4 w1 C; b9 g
  for(j=x1;j<x2;j++){
4 G- ?& f( E6 O. z2 Y0 G  goto_xy(i,y1);$ J# p% q' b/ o; c0 J' g
  putchar(' ');) \: ]! d6 z$ r0 `. u! y6 X4 h
  goto_xy(j,y2);
+ q& p$ `3 R) w- V$ ]& x& n" N8 R/ W  putchar(' ');
( l4 z0 F# R/ J/ A7 N* k0 o/ N  delay(10);
$ ]) v; x' G: ^  }
& H) z. J" X9 S" G7 u$ T  }# Y  A  h! K, x+ k  o
  /******************open screen clear(开屏式清屏)*********************/8 x/ v3 h6 L8 f9 Y; C. a4 d

: b# A# p  P  s  void kcls(int x1,int x2,int y1,int y2)
$ r' p' }" Q5 k7 B  {$ P. M7 D$ r& z7 A# X) R' y& T
  int t,s,i,j;7 N: ]. L0 Y3 Y
  t=s=(y1+y2)/2;
0 a+ G6 c+ a- L. _# w4 w  for(;t<=y2;t++,s--)
9 e7 F% P3 e7 ^+ x  for(j=x1;j<x2;j++){9 h' T/ p1 P0 e( o
  goto_xy(j,t);8 O9 O1 @, n4 S4 u; o3 U
  putchar(' ');) `& L( f  ~* x; F  l5 B. j
  goto_xy(j,s);
5 L8 O9 Z6 w  p; i: W  putchar(' ');# {! ?! s, _: e0 v3 k
  delay(10);
( q( P# u9 R- r- ?+ F  }! _% m5 s  j8 W; M
  }2 v8 I( E0 j5 e8 u
  /*****************close screen clear*****闭幕式清屏*******************/
" _8 X. n: m3 b
' _7 x2 U9 v6 t) G8 n, ]1 ~, r  void bcls(int x1,int x2,int y1,int y2)- Y0 z. D0 t' V+ t
  {
3 _7 d- s1 Y1 y8 `1 ^* A* t) x  int t,s,j;
6 `" b& g- [1 H- b4 a& E6 F  t=y1;
( }, @: X& U- t% E  s=y2;, T; }+ {* {/ q
  for(t=y1;t<(y1+y2)/2;t++,s--)
  w- T1 Y7 u6 e0 w0 k* w  for(j=x1;j<x2;j++){& N/ M9 ]. L6 R2 @7 o+ n) S
  goto_xy(j,t);
# y% M5 e. J4 Y' J  putchar(' ');* `: Z. @& n( P/ ^" L3 \6 c$ z
  goto_xy(j,s);
0 e" g; }7 h2 x+ G2 _: u7 \  putchar(' ');
3 x2 c/ h9 ?) O( Y; g5 J* a  delay(10);- @5 l$ G: Q# A+ c. O
  }
, Y/ W7 Z$ g8 j/ e; R  }' H0 n- G6 Q* W! D
  /******************bottom screen clear(自下清屏)********************/$ t+ n# S5 X$ P3 b% X" o( v& I

4 X( P1 x$ L. ^" d. _5 d  void dcls(int x1,int x2,int y1,int y2)2 i- Z! k, Y7 n3 w" L3 w. v
  {
9 g' Q4 t2 Z3 P  int t,s,j,i;" \' O! M; V- S9 C( Y
  t=s=(y1+y2)/2;
5 y) w9 x3 F  [# x  for(j=x2;j>x1;j--)
3 y( X1 w6 C) F$ M  for(i=y1;i<y2;i++){
  u! T. x/ T, G8 A9 X. O  goto_xy(j,i);# O) T0 L8 W! C) o+ l
  putchar(' ');
( I- A( y- K) C! b  delay(10);: i7 Q% r" Y2 g( \/ g' [! ]
  }& b5 A. m$ N0 T% t
  }  x  ~' K' q+ u
  /******************设置光标子函数******************/' p- f9 u) ]2 C
6 Y: c  `. x- x9 P& L; \& G
  void goto_xy(int x,int y)
) o2 V1 f4 L' Z9 E. x( e  z! @# c# l  {1 V! ~& o. Q5 R& _
  union REGS r;
* q3 z% E0 E  ~! C2 H5 D. J5 G5 R  r.h.ah=2;
9 j: [9 C1 f! Q' g! z  r.h.dl=y;
% h' F7 w/ Z2 F1 v5 p  r.h.dh=x;$ y5 \- u4 \; {, ^/ W$ b
  r.h.bh=0;1 B6 D4 F3 M. S( L6 i# Y/ x3 z
  int86(0x10,&r,&r);) z( v+ i' ?2 D8 T: k6 Q
  }
9 l6 c$ j4 U: O% m; z% r, W. f8 C: _/ D; B! i9 z, u" @3 T' B
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/3 O2 n' [& U3 @9 }* C, H  t
0 r( _/ f+ v" J( X* q
  void puta(void)
9 `$ M" \+ H' c7 i$ o" `( J  {. w; w) z" n' X; b# l
  int i,j;
: v* S: t0 I4 a) M4 h/ I  for(i=0;i<24;i++){
0 @1 d( u# _( |* f. N5 z: O5 v  for(j=0;j<79;j++){5 |% m! X! k" l- c# j! R, C5 W
  goto_xy(i,j);
; j4 N* j9 G5 @( G& e4 E  printf("a");6 z: E; L+ T/ t* C2 c
  }3 t  K" N9 `( j5 J8 p. p, o+ i
  }# h8 t3 c/ Q' e. F' @& Z9 n9 Q" y
  }

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