返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 d. t- `8 T; f- ]; |" x/ |/ y
8 F3 h$ }+ r! B% |$ t) ]  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
; O, F( w8 E3 Y1 C# d5 g) q
( `- B, H; v- s- \7 X  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * y3 f0 z2 }" I' S
  子函数及演示程序:' e7 H" U/ J! N1 @

. Q* n2 ~& B! `6 s8 f! m  #include<stdio.h>( B  k% H; c- w# O& _% d  a
  #include<dos.h>
. g; x6 T5 H- s+ }5 {; \  #include<conio.h>
* t" C- l  _$ P
) F& V& N1 q+ X' R  void goto_xy(int x,int y);
& u7 H* D7 A, t, K: e  {' q  Q, {  void dcls(int x1,int x2,int y1,int y2);6 ?& a8 D, |3 d' m: ?
  void bcls(int x1,int x2,int y1,int y2);
" f9 j: }* b+ D1 T! _  void kcls(int x1,int x2,int y1,int y2);5 z8 \1 a/ \, u/ {- d8 X1 L! h5 Y
  void recls(int x1,int x2,int y1,int y2);
* X; _% i% ?# |. |7 y2 M  void zcls(int x1,int x2,int y1,int y2);
- Q5 ]; g2 `+ _  void puta(void);5 ~. v+ n5 K/ @  I$ E

: c1 p6 {+ R  \8 ?& _
8 S: c  d; m# h$ X/ o  /*--------------演示程序---------------------*/
0 _8 E, k! E0 U) t  main()
$ w5 j9 @' s! G  {& [& `5 w, _. j. M: Z
  puta();* I$ F# ~# i. r! P
  getch();
, G. x/ y% a' c; Q, N, s% q8 o  dcls(0,4,0,79);
/ G( r1 e$ n; j1 _: ^' _$ q  getch();+ `* l  s0 r2 q. W6 C8 [
  puta();* A9 g+ P8 h7 M
  getch();! q5 I6 ^, \7 b% b
  bcls(0,25,0,79);
' j4 |1 S: y& ]4 a* y: z  getch();) {" b) ?" ~  I# X8 j" U& Y
  puta();5 p9 H" z. j' {# z/ ]4 X. p4 v
  getch();6 C$ u0 z% |. ?# o( ^
  zcls(0,25,0,79);' R" C3 Q# E7 i4 `: H6 y
  getch();
) M: q0 X- b& r; `' F1 H$ e. O$ |6 I  }
# B$ B; L3 p+ {) U8 S  /*********center clear screen(中心清屏)***********/
; N; i1 u: r8 ^" x2 ?  void zcls(int x1,int x2,int y1,int y2)( p, J' K8 F1 e; z  d( \0 B
  {
6 N6 s' g/ u' p  int x00,y00,x0,y0,i,d;. |. x: A# c/ s# f
  if((y2-y1)>(x2-x1)){. C' `7 ?' }# V( z
  d=(x2-x1)/2;
" O5 w5 L) w/ _: V; U  x0=(x1+x2)/2;5 I! f) k0 w6 H! z  ^: c( `1 D  j
  y0=y1+d;. D4 v5 |3 D2 F1 T+ Z
  y00=y2-d;7 R; r' ?0 Y; |
  for(i=0;i<(d+1);i++)1 I* G  L% i- A7 O
  recls((x0-i),(x00+i),(y0-i),(y00+i));
, S" ^9 _! _) @1 i; p1 O  delay(10);( ~" V* \/ N7 z4 S
  }
# D0 x8 W# K: Z1 G, B/ T  else{- u7 [( m& ~# `, U3 y. q
  d=(y2-y1)/2;
. h$ q# D" S8 D( o9 G  y0=(y1+y2)/2;
6 E& A# w8 u; O  x0=x1+d;8 g% @; G2 F8 M: J9 d
  x00=x2-d;* [  N: m- ~% w% \! L9 V/ B: {
  for(i=0;i<d+1;i++)
; a( v: u# v  w% f  R( [8 U4 o  recls(x0-i,x00+i,y0-i,y00+i);
2 }, u# k* i# |3 _. A  M+ Y! o9 U  delay(10);, U5 D0 Z" _: J, u' e* K
  }
% W0 ]2 ?, ^/ {  }; d1 X- Y& w7 l- c# I9 J2 D% X5 t

9 `* o; K4 Z* z: @2 F# H3 ]  /************* clear rectangle side(矩形边清屏)***********************/
5 |# L& k* m3 \8 w# T- f' e1 q
  R: O  [  w$ ^! [9 e( w# u  void recls(int x1,int x2,int y1,int y2)5 M& [& i% n- O9 v1 E: I- K% Y& O
  {" D% i3 x1 e8 i  Y4 j1 V6 x
  int i,j;
9 ~+ b- H4 u- I0 I/ n6 D- Y, ?  for(i=y1;i<y2;i++){
9 [! x$ J1 Z+ K+ v4 o    goto_xy(x1,i);8 V7 _4 ?0 u2 Q2 y) a
  putchar(' ');- j7 }2 H% r7 w4 |9 W/ Y9 e0 c
  goto_xy(x2,i);
; P! @$ o0 R8 R5 B1 v  putchar(' ');7 b+ x1 z1 ~$ d+ T: H, Z6 s! J; l4 D
  delay(10);
- p" I+ C) {* S4 K( J! |- p/ A3 \  }' m3 ~' W: l7 A
  for(j=x1;j<x2;j++){- v/ x0 f3 e5 m8 P! K
  goto_xy(i,y1);
; ~6 Z! w3 Z: r6 A! Q% a  putchar(' ');
% m3 \  [! {2 l6 _9 g$ ~  goto_xy(j,y2);. d8 L% }4 v( u4 e7 Q0 `
  putchar(' ');
( u% w/ S' I/ x( K4 B' `* T  delay(10);! a+ ]0 W$ D; n2 v% w# R+ M4 N
  }
. E5 A! ^& \6 v2 Y. h+ z  }
# \$ [: u6 w$ O4 J( s2 j" s8 e4 w  /******************open screen clear(开屏式清屏)*********************/' _# {1 S- M% C1 y* Q; F8 R
5 @( v* Z& ^& {
  void kcls(int x1,int x2,int y1,int y2)
+ R& f" ^0 h- D8 q  \/ Z+ u  {. p! `$ ?! p' t* ^* h! i
  int t,s,i,j;# e; D) W; X% y
  t=s=(y1+y2)/2;
5 i2 j- q- c6 ?' S, S2 R" l  for(;t<=y2;t++,s--)
- W" d' u8 h! q& y4 t  for(j=x1;j<x2;j++){
/ ~: f6 T; }3 C- |! \6 k& }  goto_xy(j,t);7 a( x& o. T' V0 B
  putchar(' ');
( j) M) k( l1 g/ N  goto_xy(j,s);
. ~: N0 U5 @$ N  putchar(' ');8 d! f8 n: w- Z  u& ~# `( P; U
  delay(10);+ U+ o4 D; a: i) W2 @* O) H2 c
  }
; n4 y1 \: t$ H! D- }" a/ ]0 L7 o/ O  }0 c5 o5 p* H0 s% \, X  j! @
  /*****************close screen clear*****闭幕式清屏*******************// g6 R" q4 d  m9 [9 A1 k- e

/ J) y' o7 f( \3 k5 ]" p  void bcls(int x1,int x2,int y1,int y2)
# d* n; f5 j/ `1 w8 `- L* K  {2 @6 ?! F8 L. a/ R9 p0 |% l# o
  int t,s,j;
2 p& g9 r2 f( K. A. _  t=y1;0 T% Z, K- T0 q$ o9 D( p* z
  s=y2;
) Q7 ]% e4 l( M  o3 y  for(t=y1;t<(y1+y2)/2;t++,s--)+ A+ j: G  k& N. A# e
  for(j=x1;j<x2;j++){% r: @; C0 ]( D" {- R* o
  goto_xy(j,t);
' o9 `, Z$ ?9 ?, n! w) z* r+ x  putchar(' ');( J1 R2 k: f0 y; m
  goto_xy(j,s);, G( n$ ?# n* Z
  putchar(' ');
3 \7 N3 s' N2 Y9 _- i+ C2 o  delay(10);  @* s+ f" s- j+ ^+ W8 b
  }
  x1 C3 H; u; l' m1 r  }
8 g  d& ~+ C8 a" `  /******************bottom screen clear(自下清屏)********************/  h+ v: G  M# ^, e
& ^: n% n& J0 K( f2 n0 L6 V4 z1 y
  void dcls(int x1,int x2,int y1,int y2)
3 T# ^& `" k' r1 Z0 R* o( f$ {- {. O& e  {
- C* o+ C, o1 p! a2 C  int t,s,j,i;
4 Y5 j, }% W( U) t' Y! B  f  t=s=(y1+y2)/2;( }8 Y; X% H; B# N* z
  for(j=x2;j>x1;j--)
( f) H, r& v! R  N  for(i=y1;i<y2;i++){  A+ j8 C2 S7 C+ z! \9 c9 [
  goto_xy(j,i);5 [- c, T% p& x" C/ K) S7 K+ e
  putchar(' ');
6 h% J' a2 X. N/ G" q0 H& q  delay(10);  Z; \3 I5 m6 I3 L& E( Y
  }. A4 L4 B6 b) m- F9 `" ~
  }- i3 k( k. ]9 [9 d
  /******************设置光标子函数******************/9 G- r  N; ]. t. c6 S5 F1 A
3 c: k/ ]; f7 t+ A
  void goto_xy(int x,int y)) M8 E% {% D) a, ]" k. p
  {
8 A. `( i, h) Z) t  union REGS r;$ K8 L; J- W, P; T, ]  s* G
  r.h.ah=2;
1 v2 ^- }( `/ _" `/ y3 o+ y4 `: d, c  r.h.dl=y;( j" m. v' B* n
  r.h.dh=x;: |% C- N8 _! l  @8 d
  r.h.bh=0;/ `" M( w5 c) R
  int86(0x10,&r,&r);7 p& G  L+ G* l* u
  }/ a) N9 p# J) N7 J

+ L2 t3 k! V# j8 ?  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" q6 v* j+ t  `, b9 J& `2 D3 }, T1 s. x9 w0 Y5 h
  void puta(void)* d4 t# @& K1 |+ X5 \: P
  {* p1 ~2 r( p; x7 U; D8 {( W8 J' i
  int i,j;' v5 r2 x5 ^  s' y
  for(i=0;i<24;i++){. [5 d- i% J: @/ X% R) ?
  for(j=0;j<79;j++){! y( ?, w, _( d5 w
  goto_xy(i,j);
( b# n4 a( p$ v3 Q( Y6 {6 \4 P4 ]  printf("a");* a' Z- S: ^$ ~
  }
9 c" K* ?" P8 n% l  A  }- a5 w3 Z2 o6 x3 j/ p1 r9 E
  }

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