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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; E/ |- w7 ^: e; x# }9 e8 {  r3 p0 m- r( k3 Y$ }5 ?
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. a1 o6 ^' P" ]+ x; X1 X% W" r/ u5 f/ X+ l* N# c
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 l0 A  Z- B7 |' f, Z
  子函数及演示程序:
! @$ C7 E$ }7 W  Q& H' B& S# \. ~- |
' h& {  Q5 t1 W$ C  }* s/ m  #include<stdio.h>
" o; l8 C% ?! o* h0 h  #include<dos.h>5 t. F+ u' c; R
  #include<conio.h>7 `9 Q/ W! g) [* j+ c
9 W0 z5 t. F- A4 H0 E% H3 O
  void goto_xy(int x,int y);
9 \) C0 z7 S& |* a! R  void dcls(int x1,int x2,int y1,int y2);, ~: F# n- \  A$ R) R) k% _' }
  void bcls(int x1,int x2,int y1,int y2);
/ k, m9 I% g1 ?5 x" a' u2 ?  void kcls(int x1,int x2,int y1,int y2);. M  c& v9 h/ ^. ]- [. d% L
  void recls(int x1,int x2,int y1,int y2);
: M# N8 }) n: f2 D* X0 A) \  void zcls(int x1,int x2,int y1,int y2);
: e6 n: e  r2 h! H  k! l$ d8 C  void puta(void);* j1 N8 P$ F/ g3 T

) ]' i$ u9 ?" d! [( O" l* @8 H- Y  y; y/ J6 u% W1 ?2 m4 a6 j' Z0 J
  /*--------------演示程序---------------------*// [+ w" M* `( e2 X
  main()1 O1 T' h: [6 ^6 `- ^3 T3 T1 `% u
  {
5 ~- A$ i) `# `7 U/ N  puta();
3 ]! A/ M& D) a! h! z$ G" |  getch();7 H# [# J5 @4 |( l* r0 W1 m
  dcls(0,4,0,79);! ?0 X7 X& Q  M& j
  getch();9 m8 z2 Y- G* W3 A# z. L
  puta();9 S4 i/ X, R5 A- a' N
  getch();* O  o, @2 a! F# e0 U5 a
  bcls(0,25,0,79);) E6 B( }8 N1 e0 u, A
  getch();
: A0 p/ m- ?) K1 B6 t& L9 X/ h5 l  puta();
$ v( m/ W' r. B  J6 n' p& E  getch();: q4 l8 D7 p- D& q
  zcls(0,25,0,79);8 U9 h: y; B8 V# }  |: m
  getch();1 ^6 `- o. ^$ l& z' t0 z4 o
  }2 o& l% v4 T: J3 T" A2 o  c
  /*********center clear screen(中心清屏)***********/" a, {: Y4 j' _2 N# S
  void zcls(int x1,int x2,int y1,int y2)
+ {$ L, e/ @+ ^/ U1 C  {
* I* M" o; d3 ~  int x00,y00,x0,y0,i,d;
* k# F% P. u/ e0 G5 _+ u. f  R: Y  if((y2-y1)>(x2-x1)){6 C5 i" |# ^) J6 J. z) y
  d=(x2-x1)/2;  P6 X' f- i, h# k1 H
  x0=(x1+x2)/2;! I3 V% [* q1 D' w, C5 Q8 X' _" e, t
  y0=y1+d;
5 _0 s; j- s9 T9 J  y00=y2-d;7 F: d+ Q/ l% b. O
  for(i=0;i<(d+1);i++)9 k7 e% ?5 |% D
  recls((x0-i),(x00+i),(y0-i),(y00+i));
( L8 O3 N% v! ~3 }7 w  delay(10);
2 e! A( B$ x# u0 ]  }
3 _0 t1 t! U5 m0 i2 a0 {. D, b  else{; m' j# M7 q/ g2 U, C) o
  d=(y2-y1)/2;; ?! {$ V% @$ s8 w/ o7 \& A
  y0=(y1+y2)/2;
7 Y+ G1 A4 A7 y! t  x0=x1+d;  {# a  Y+ |. A9 T
  x00=x2-d;4 w3 t: }9 t: l% J% E) a
  for(i=0;i<d+1;i++)& @5 Q# U( @+ C* b6 t/ N/ ]. z
  recls(x0-i,x00+i,y0-i,y00+i);
0 b2 O/ h5 ]1 M: [2 J0 ~$ d  delay(10);
3 Z! O5 L) D4 `) E" K' ]- |  }9 }) Q$ X& x( L' g. M
  }
, L; S. a  t, n. i# s! N1 V) s, L$ c! S
  /************* clear rectangle side(矩形边清屏)***********************/; h" J3 O3 n1 v' a" x" I! P  \

2 b& O9 m/ S8 e8 k/ j  void recls(int x1,int x2,int y1,int y2)+ |+ s) X- A+ \; ]. `4 b  Q1 A
  {
3 d& d& Q8 E( ~, {1 E$ I; w  int i,j;% f$ J0 k7 j  I6 q6 x
  for(i=y1;i<y2;i++){+ c. G" K- t6 P) F
    goto_xy(x1,i);
9 e( D, l8 t/ ]  putchar(' ');
7 \! Z) j1 y5 ~7 `  goto_xy(x2,i);2 n8 W, x5 c+ y3 K' Q) C2 N
  putchar(' ');" f$ D  s4 q) r+ I! J8 T
  delay(10);
1 n. S* f7 |# F2 N) @  }+ E0 Q2 ~9 Z. T& `* e
  for(j=x1;j<x2;j++){. W5 u7 ^% P8 Q
  goto_xy(i,y1);
* c8 w* F2 u" q7 V  putchar(' ');
1 H  B& p# o8 Q  goto_xy(j,y2);
: A2 n: y' [! q. o8 ~, P4 }  putchar(' ');! R2 u* L3 x* v& W; _: P
  delay(10);0 {2 T$ `) G# Y
  }) a+ ^" g. _4 {
  }: q# `& k9 Y1 L
  /******************open screen clear(开屏式清屏)*********************/, D$ J# z* o7 X8 y6 N; U
* G6 b. `- _# b* Y
  void kcls(int x1,int x2,int y1,int y2)
7 F* @1 M  Z$ g" R; h/ `  {8 p# h8 _9 @9 f9 s' D" s5 W
  int t,s,i,j;
# Z. ^" ]; E9 I. {& f$ ~$ g  t=s=(y1+y2)/2;
7 @, |% k% e( y2 V# _  for(;t<=y2;t++,s--)9 Y& t6 p+ Y6 K& F. w  H( o
  for(j=x1;j<x2;j++){& B! R5 p: t) {0 x/ P
  goto_xy(j,t);
8 Z+ B: R3 G- o" `* c( l2 ?  putchar(' ');
4 M6 G2 G! n) t& o: a  goto_xy(j,s);  W4 V+ q. b. \9 y5 C$ o/ I' Z( J
  putchar(' ');
$ ~3 t2 M; f8 l" j  delay(10);
" O0 r3 e+ g! X' w. c9 w3 w  }
8 h6 u5 V  ?: _  }
# p9 w3 _# Z$ N4 L% b5 r  /*****************close screen clear*****闭幕式清屏*******************/
, W. o$ m5 ~9 ?
* J6 ]+ ~/ g* A  void bcls(int x1,int x2,int y1,int y2)
! B! I" h  |2 ]  {, q, q% J8 A% x8 u
  int t,s,j;$ P3 q+ s4 d1 I! h
  t=y1;
) I& I* G' e* {0 f  s=y2;$ C) a1 u0 l- E. H
  for(t=y1;t<(y1+y2)/2;t++,s--)
' E- U: P# t3 `% Y5 j9 s  C  for(j=x1;j<x2;j++){, D4 T6 G3 p% E% E: z" w7 T' w+ X9 \
  goto_xy(j,t);# I1 D  j# F7 `
  putchar(' ');2 G% ~. x. ^9 p' w% f) W, i; M
  goto_xy(j,s);
3 k2 [# ~9 u7 e  putchar(' ');
1 ]4 S# A# E  C2 L  delay(10);
* f6 P* @- L5 Y9 c  }
: ~5 r# ~$ y) e  }
' R+ M0 y8 U: k* B) m+ T( U  /******************bottom screen clear(自下清屏)********************/
: K5 I9 F, @* x* A; R! P% P$ c( |/ n" h8 W+ y; W1 g
  void dcls(int x1,int x2,int y1,int y2)- E% }' R8 B# F! A
  {$ s. |2 Q2 C- U4 P! m* s
  int t,s,j,i;7 ~' ~* y8 v( Q0 V) A$ @$ L
  t=s=(y1+y2)/2;' R8 x- V& R; J- i4 V1 `- X7 K
  for(j=x2;j>x1;j--)
/ _' c( G) m" ?* Y  v  for(i=y1;i<y2;i++){8 k1 {, h/ t- z8 {# U) s1 V" _
  goto_xy(j,i);+ i" @2 \/ B$ _; q: N8 L" ^$ s
  putchar(' ');
' h8 e, t; @" X, H: b' @6 k0 ?  delay(10);2 v, b% _* H7 i9 E. v
  }! \5 F5 a. J# w: s! m. m+ G
  }5 y: X5 _& T  v) a8 j
  /******************设置光标子函数******************/
5 m- t5 o$ k3 l, J0 r& `- w. A( w8 U. p
  void goto_xy(int x,int y)
5 E# w2 I1 C2 n4 J  {: ?* F+ r& G5 z* d' q  o
  union REGS r;
  S% f& K5 f! d/ E  r.h.ah=2;
, Z8 q, v( [& a1 ^/ W9 v/ g1 \  r.h.dl=y;
) \9 P, W6 S# A/ T, m; [  V  r.h.dh=x;
" L4 R* y" x* A$ C9 t8 N  r.h.bh=0;
# w) b9 Z0 _9 ?5 M$ V  {+ s  int86(0x10,&r,&r);% W4 c; P: {2 e; U
  }
1 c$ R( Z+ t4 ]% _& A1 u, }4 b, z
: k6 r9 x9 v& W, c1 |& j1 G# C% c, I" C  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 ~0 o# Y: x6 F( M1 z: F$ {( }6 h+ X
  void puta(void)
: ~+ h  f4 A; f  ~5 J  {
. B1 |. p) V' L, X, ^* O0 `6 h7 l  int i,j;
0 M& {& Y1 v' f  for(i=0;i<24;i++){
# T" J# i. T) F5 U$ ]% P4 i1 e  for(j=0;j<79;j++){
* ?; H, `, v( Z% V  goto_xy(i,j);% t: r: r- {' X+ e5 z
  printf("a");! D6 V% z: I* k1 J+ X5 B& \( E
  }" V* w+ i' A! B
  }# ?7 p7 q1 ^$ q: c  X1 T6 B# Z
  }

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