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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; p& q' c5 o* E+ X% ]: o: N. h$ K2 g: f/ p* \
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' e, B( e; a9 e; ?, _2 l
$ I' r7 I& B6 @1 V+ z) n
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# z$ C: C9 e7 S5 A  子函数及演示程序:: e2 d% b2 o9 G4 V
. W3 Q: t) i+ Z- k
  #include<stdio.h># O! B2 I" R% u( H
  #include<dos.h>* h1 o& @. x# D' x" \
  #include<conio.h>
" t& z+ o4 q9 j( m# c4 D  H/ ~. ~
. q2 H7 e  V* I( j) O7 e9 V  void goto_xy(int x,int y);9 }4 j6 N: W9 N, Y
  void dcls(int x1,int x2,int y1,int y2);
0 }, c8 @& w5 ^6 x( y7 p# I  void bcls(int x1,int x2,int y1,int y2);1 _- d; x# I# F9 K. |- r
  void kcls(int x1,int x2,int y1,int y2);
/ K8 J! S+ [/ Y/ x) F  void recls(int x1,int x2,int y1,int y2);) n" W3 W. d5 r: S
  void zcls(int x1,int x2,int y1,int y2);: b# p' x, D( s3 e! \0 F# X
  void puta(void);( l5 f3 g2 r! J( a3 z- V! |2 W- H( I

$ b& V" h  L2 K  I' R2 Y
6 c% J: X4 i; V$ g  n  /*--------------演示程序---------------------*/) B, f$ N# }5 R
  main()3 k: v7 x; B$ z4 |# f' ~
  {
/ E! N. f" q; h$ e# L0 e+ S  puta();" D: A) s4 G8 ]9 p; b% g
  getch();5 i4 {3 ~0 ?7 e1 x$ ?" W
  dcls(0,4,0,79);
- B3 }- G# V+ {2 u+ [( t( U  getch();. o0 _$ f6 Z: C  o% ~
  puta();0 f, n" l8 x8 t; w/ R
  getch();
' ?7 G) h' s- j& n: t  bcls(0,25,0,79);5 N: V6 L: i; N' v1 I8 l0 b6 U' c$ \
  getch();" |  U! ^- R0 s" S+ I9 Y* P% P
  puta();
4 C9 h6 x! G1 B8 j* q  getch();  x1 A: Q' L9 q1 D+ _
  zcls(0,25,0,79);
' D) g7 ^" O, W, ?; P  getch();2 d! c. @% E2 M( j+ L: `2 y
  }
9 A; {. Q: v6 k) J' H4 L  /*********center clear screen(中心清屏)***********/
1 i8 c( }% {- p8 f$ V# z5 {  void zcls(int x1,int x2,int y1,int y2)
6 U  B1 W, l5 j$ [) O8 x4 |  {
* X( H8 ?) Z8 J  \" g  int x00,y00,x0,y0,i,d;
/ C: D/ k, ]1 U7 D, P/ }, W  if((y2-y1)>(x2-x1)){
2 P, H* s, \* X' r1 d% A$ v  d=(x2-x1)/2;
6 V+ j) o2 }; Q$ ^& z/ Z7 N2 l  x0=(x1+x2)/2;( t: G, k+ s' v+ {
  y0=y1+d;0 _( i( A7 B2 C) _! {
  y00=y2-d;
+ V& D" n, k% _1 v) `% m7 x) X  for(i=0;i<(d+1);i++)
2 d) T* l6 o, B% p# ?+ H  recls((x0-i),(x00+i),(y0-i),(y00+i));
/ V$ O5 Y( \6 p* D- G  delay(10);# D% m& `  |* y1 S
  }
' X1 o, [- @3 w" Y  else{
: V5 A- x$ U, o1 ^' X8 U% S8 v& N  d=(y2-y1)/2;8 U3 |1 }5 x" q0 J2 Q/ \/ c
  y0=(y1+y2)/2;
* p5 w  l1 G' ^" u  x0=x1+d;
& B! x! Z+ O( ?+ G0 u  x00=x2-d;0 \& M; X. J, e# M: _3 a* Y# S! I1 Z
  for(i=0;i<d+1;i++)
6 k7 o: P( z# N/ w; l, Z  recls(x0-i,x00+i,y0-i,y00+i);* u( b) e( u+ V: e
  delay(10);: M+ |- m% s3 D3 g5 p9 B
  }* J: F* r3 Y: X% S
  }
9 C% s" c3 I/ B% m6 s+ l- m; C9 ^- i/ t
  /************* clear rectangle side(矩形边清屏)***********************/
  V7 j+ K& _3 a3 Y. w$ U: G) z5 Y& W) z* l5 k- V  J+ {& K2 }# E6 V
  void recls(int x1,int x2,int y1,int y2)
: T% _( A% t& c5 I3 [+ b  {$ G/ Q: G; e$ Q1 x* S3 F
  int i,j;
# k. Y( a3 C7 r; Q6 ~$ G1 R! d* B4 U  for(i=y1;i<y2;i++){- b$ Y( Q9 i$ j- T
    goto_xy(x1,i);
. N2 c+ C0 v) B# |; ?% F" v  t6 l$ ]* @  putchar(' ');
1 J, T: ~9 ?9 ]) ^0 t  goto_xy(x2,i);
; {: `+ q/ j$ {- b: `2 H1 u+ V2 w! R  putchar(' ');
! Q( l% p0 }. d  delay(10);; s* o* F  N& z5 m  |0 s
  }
2 z8 n( O# b2 `8 O: s6 m  for(j=x1;j<x2;j++){
( a! e3 A8 U3 E8 J; Z' H- V  goto_xy(i,y1);
( v- ~  A, F! Z  putchar(' ');) T& P/ {% X+ H( q% S) P
  goto_xy(j,y2);
5 V: L8 \9 \/ y6 o2 }  putchar(' ');
8 y- s- f# l! B- t  n) a( C8 L  delay(10);
- S4 M  h; Q7 A) H' j  }) M' b1 ~; B4 f# o" r, D5 K
  }
0 S$ r9 Y# a0 [5 W7 E" B- ]  /******************open screen clear(开屏式清屏)*********************/0 u) z5 {# ^- S; U$ m
6 U' A$ ?  {9 s
  void kcls(int x1,int x2,int y1,int y2)
3 h, D9 O# _2 b; K9 i  {/ @6 I3 y5 F* a2 i! }5 N6 s  Y
  int t,s,i,j;
1 a0 f5 `4 M1 K: U+ E  t=s=(y1+y2)/2;
# O9 t7 n6 t- o) \- P* E  for(;t<=y2;t++,s--)
* h: Z# x# n* p# B$ h1 a) J  for(j=x1;j<x2;j++){
0 ^  B! O. F+ U' D) B  goto_xy(j,t);2 o+ N6 O" C7 a- D
  putchar(' ');
* x: [( u  b. Y, G  goto_xy(j,s);
% Y9 w+ p& z/ h" |  {; x# q& L( J  i  putchar(' ');
' R, m1 R8 H" f- ^; {" Y  delay(10);
2 y# a0 \- }9 }' t' R3 Z0 d  }% N+ V4 y  c0 _/ E% f
  }) |4 [( Y" g, o2 a6 G
  /*****************close screen clear*****闭幕式清屏*******************/
( R. N2 ]- s# R9 R  q- O# L% a
6 p+ {) N; y% a, a$ M- u# n  void bcls(int x1,int x2,int y1,int y2)
! z) B' l' M( f) B9 G3 F4 V# [  {
; ~5 q& q9 s9 ^+ j( O% E% a- \  int t,s,j;; p' h6 {* p$ P" Q" U, z" k# o$ g
  t=y1;
/ f8 \! I& q' L+ M; n  s=y2;
/ a  W% M+ H. [" J' i6 T+ ^, s9 g1 T1 y  for(t=y1;t<(y1+y2)/2;t++,s--)$ x* Q# C+ h' y+ e3 @
  for(j=x1;j<x2;j++){
8 L0 S8 D7 D1 i- F  I$ s. i  goto_xy(j,t);
7 i3 h& J( i0 V% T, ]9 R! [+ R+ v  putchar(' ');
2 Z: J/ k! @9 S7 e  goto_xy(j,s);- b  n9 l; h: u+ d/ A
  putchar(' ');
+ W: h2 i2 s) `. }2 F  delay(10);. [. b. J+ D4 v% j+ [  ?+ e- w
  }8 z9 i; ]' f: b0 i
  }
  b; x' m" s' A( x. s  /******************bottom screen clear(自下清屏)********************/
* G& }# ~9 w& {" s1 @( t0 |9 u( y# Y4 H, ^$ z2 O6 }. |1 C
  void dcls(int x1,int x2,int y1,int y2)7 R6 b. ^& I0 a! Z
  {% D/ n: [% |/ V$ E7 O
  int t,s,j,i;
$ \* e: n) I& Q/ f. p  t=s=(y1+y2)/2;
+ E- J; J' F1 n- U+ d# \: B& I3 k  for(j=x2;j>x1;j--)
8 h& i, S* F9 P  for(i=y1;i<y2;i++){
* V+ V) e% ?0 M* k  goto_xy(j,i);
( A8 n0 R& B/ R* }- M  putchar(' ');
6 E& p, R5 H! O8 ^  delay(10);2 `( x# _8 h1 Q' W; D
  }6 v  u  i3 z- F/ w* r0 S
  }
7 B' J9 M/ k! T+ M7 j  J  /******************设置光标子函数******************/
( P$ c5 X* B. e* `1 X8 D& S! t3 h- d6 K3 v2 D9 N, Q6 J
  void goto_xy(int x,int y)
6 K$ l0 O/ P% X" C1 S+ Q5 g  {
  ?2 ^! x5 b6 f( i( K. d  union REGS r;
" z6 {9 h) ^1 j- ?2 s  r.h.ah=2;+ E# L( x; k$ l, k' ~; q
  r.h.dl=y;9 ^! W' G2 h  i3 e# s/ X9 E: Z
  r.h.dh=x;3 W4 z) C/ W9 V  K" ^
  r.h.bh=0;. L& X! H0 G9 V1 s9 Q- F
  int86(0x10,&r,&r);
( o1 x% ~9 i3 r  _: p$ B: S  }, {! a4 o" N# x7 {1 k* s
& w5 L* w6 F3 c
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; P: A' r% F7 C
6 K0 Q+ C3 B, L9 B6 w& K# l$ {  void puta(void)
2 `3 s; y; r! S3 v  {, \7 h& x: [, R" f0 {9 y
  int i,j;! Z' @9 x; J: E& H, p
  for(i=0;i<24;i++){
% O0 U& N  j. W8 ^5 l. I  for(j=0;j<79;j++){
$ I+ s0 K0 a% t1 E, s- o6 R  goto_xy(i,j);
4 O- W% {8 `: n  printf("a");9 O; v2 K+ {1 r
  }
6 K. Z: H: q: ]# s  }
2 U4 N) M' L- l) S/ Y$ M  }

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