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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 D. w, u# ?5 y4 F
% c' j% L" D0 ]4 M  Z6 I
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 c4 x" d! Z7 |% O" S5 R6 C- q! Z# m* A- u; h9 X: G2 J
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 K! c; f; t5 L# N3 Q. v
  子函数及演示程序:
) s. C: e2 A8 w) F  x8 P' \2 R9 E/ j* @  K8 |; F, r, c7 [' G( z. m; v
  #include<stdio.h>6 a( Q8 D- P( Y" M# ]
  #include<dos.h>
  r4 ?5 O6 \9 w9 B. A  #include<conio.h>3 Y3 g2 s' Q7 p) [0 E/ K

- g. ~9 |4 X$ [4 B  void goto_xy(int x,int y);9 n$ T" m# O4 p0 D
  void dcls(int x1,int x2,int y1,int y2);9 E3 l& j5 E$ u% h: ^! h9 p2 F5 W
  void bcls(int x1,int x2,int y1,int y2);; E7 l# b9 l/ [8 z0 O# q! s+ L
  void kcls(int x1,int x2,int y1,int y2);
" g5 B& t0 ?3 Y, T9 a$ N: ^  void recls(int x1,int x2,int y1,int y2);
! D9 Q- E% u7 G6 R, L  o  void zcls(int x1,int x2,int y1,int y2);, h- u6 C' |; b' K
  void puta(void);9 x1 P. e8 S, A, f" z

6 o+ v3 x  D, t$ Q
  O! F+ `0 h8 a  /*--------------演示程序---------------------*/: ^$ R8 A* d  _* O" _- ~
  main()
7 w7 }- o0 `/ V, a# f2 j# g. X9 X  {
# l' t( |, ]# X/ Z! ?" A& {2 E$ L  puta();2 j2 K+ |# R+ ]2 Q
  getch();
5 b) ~! F' R% Z" a1 O  dcls(0,4,0,79);
& m. H- G7 ~" ?5 B9 I  K  getch();! E& ]+ n' b: j- \5 l1 B$ L
  puta();
% j  K% @4 [/ A" P8 [  getch();
5 Z. m$ j+ P" J  bcls(0,25,0,79);
( K$ C) L8 p# M5 w- K  getch();
! x3 z0 ~- G; K2 {1 R5 N6 u  puta();
# X" Q( @4 J$ |3 _  getch();1 S# y6 t9 k$ B9 X
  zcls(0,25,0,79);/ d% e- d4 j6 d5 J/ w
  getch();
7 r; J* w6 P* P5 a* H  E& r/ G  }! F6 q9 E3 u) u5 n  v2 B
  /*********center clear screen(中心清屏)***********/
, V5 l& ?4 f" D% W6 r: i  void zcls(int x1,int x2,int y1,int y2)
3 f  G) ]- l0 K1 }  {
, i) O; w& T& C" Q0 A  int x00,y00,x0,y0,i,d;# H' _2 @. z5 y* l* w7 H
  if((y2-y1)>(x2-x1)){
" O3 X! a+ g( K* V# \: A1 J  d=(x2-x1)/2;
- D2 m4 t4 _2 h; [8 p  m! c  }& `  x0=(x1+x2)/2;
7 [7 A7 l* o8 j& L* u% j/ c  y0=y1+d;
( i! |; Y" l/ \7 y+ n! _/ H3 f  U  y00=y2-d;
$ d' b$ Y6 r* a  z  for(i=0;i<(d+1);i++)% a4 U0 g4 {. V( U
  recls((x0-i),(x00+i),(y0-i),(y00+i));
1 y& t# f( H2 G- ?5 ~' l9 E% {  delay(10);
( h  H8 V0 `5 O5 q  }; \& r- a& w8 T" N
  else{
( U1 d6 N6 _+ p. r; I/ [3 X" m  d=(y2-y1)/2;
2 S! T( n6 k$ G4 l( v6 z; r% f  y0=(y1+y2)/2;
0 }; N' I! K7 p6 F4 e$ W2 `  x0=x1+d;1 R7 Q: h, J" f& l% G2 W5 n
  x00=x2-d;$ I9 v/ N3 p: m5 H7 M6 `* `
  for(i=0;i<d+1;i++): V0 |; ^8 H7 Y6 Y
  recls(x0-i,x00+i,y0-i,y00+i);1 ^! x4 {1 ?+ ?% \, W* o9 U& l
  delay(10);# c, x- j4 `: h( K
  }  d7 n% D/ y9 b# s4 x8 F" X& K* H
  }
* _: i  R+ @. l& c% J9 b6 h8 m1 `# ]' D2 W4 t5 D& P& S
  /************* clear rectangle side(矩形边清屏)***********************/5 L" Y- @: L" |1 F3 p4 G/ S
9 D* `+ x& Y$ K+ p
  void recls(int x1,int x2,int y1,int y2)1 f* R0 `. {' g1 i
  {
& D0 |9 _# x5 V" z) d2 `: E  int i,j;
: d, }$ Z% O( Q2 d  for(i=y1;i<y2;i++){
+ K, X0 |3 H* ~  [0 J    goto_xy(x1,i);- N8 C3 F) L3 o$ p. _
  putchar(' ');# `6 o) O/ {- q+ t" F) w
  goto_xy(x2,i);
- r6 {; d& }$ _5 a) X* Q. s! D& c  putchar(' ');
9 _7 X# ?& \! d) s8 H0 r  delay(10);
( p! K8 |6 c% m6 p+ ?/ l  }" t" E0 A, b' N3 _
  for(j=x1;j<x2;j++){: T$ }1 U! f2 x7 s. F* ?
  goto_xy(i,y1);
) G: i* g" X$ o  putchar(' ');4 i2 C$ n5 t( }
  goto_xy(j,y2);
2 W+ y5 h! p& f$ h% W  putchar(' ');
. X, L' Q1 e5 ^3 m' x, N  delay(10);; x1 b3 f* C! t! H  q! p% H; k7 Z3 F' K
  }5 L* {  P) k) Q
  }
. @; F2 t4 Z2 h, n) F& [. V  /******************open screen clear(开屏式清屏)*********************/- y6 S+ g& l7 L( S" ^
7 ]( J) O* y/ T
  void kcls(int x1,int x2,int y1,int y2)
7 W! s  m; k- V  {  I. r; @' |$ K+ n3 q
  int t,s,i,j;
' o1 x4 a% `0 L5 Q4 g/ S' \  t=s=(y1+y2)/2;
' B5 c/ L1 |7 s" x$ r: H4 t  for(;t<=y2;t++,s--)
: u9 i7 q6 ]7 A3 D  j4 E9 s- Y: J  for(j=x1;j<x2;j++){
2 g) h6 g' K, t+ [  goto_xy(j,t);' s: I4 [2 j% a" o$ Q
  putchar(' ');3 p, Q4 e: P3 R" l0 `! x
  goto_xy(j,s);
* ^0 u& u% f+ w; t! v# W0 C+ {) _  putchar(' ');
/ ~2 f! |. p0 u! m* b  Z, Z+ ~3 r  delay(10);
/ t/ I* e/ B: t  r1 {- L! L  }. L2 ]0 }8 b5 Q, X! z
  }
. m1 _  d/ A( e) A2 M4 S& M  /*****************close screen clear*****闭幕式清屏*******************/# V6 G! Z: `& F& i. [

) [- ~' N0 W. ]0 t  void bcls(int x1,int x2,int y1,int y2)
& c: I% u' U+ U) P) B  {* H/ x* }4 R$ s7 s7 s
  int t,s,j;  b  ~4 m) L& T' ]: d
  t=y1;( ~" r' x% k' l: t0 i6 G
  s=y2;
8 I. v- P1 M* e$ @6 n  for(t=y1;t<(y1+y2)/2;t++,s--)  Q. [# S, d6 G
  for(j=x1;j<x2;j++){
2 G$ E4 y5 m8 ?" X+ M  goto_xy(j,t);! m, o7 z4 U: V) h/ T5 d. U
  putchar(' ');6 @* g. b) L0 C. M% w: @
  goto_xy(j,s);
; u$ J( K& o7 S0 l, a  putchar(' ');
; A+ k; c* z6 `  j% c  delay(10);
) `9 \" t1 `/ J, P# O4 I" C  }# O+ u8 \9 d: [' g- U4 s
  }
  O2 @! [0 t( v: W/ z3 @0 ?  /******************bottom screen clear(自下清屏)********************/
4 H4 W9 y) O: ?0 c
9 h$ u# b6 X8 {: `- I  void dcls(int x1,int x2,int y1,int y2)
6 v. N3 n; f( M, s' J5 Q+ N9 Q  {7 x2 `6 y" j. B( d* }, @/ }7 F
  int t,s,j,i;
# o" O$ _; ^- _9 Z5 R  t=s=(y1+y2)/2;
( I  B0 Y5 \  x6 ^  for(j=x2;j>x1;j--)4 H& H/ Y- R# o' g& I
  for(i=y1;i<y2;i++){# \; L- w1 q5 L; j
  goto_xy(j,i);
" M% `. _) H' ]& Y2 j  putchar(' ');) V3 S# g; b- [# K$ F9 n" n
  delay(10);2 f* Q& ^3 u5 r5 a% X
  }
* d, M+ k. }6 S8 T4 {% v" _# C5 e  }
! [  {" v( V  G0 a0 `  /******************设置光标子函数******************/
' o5 k, v6 u0 v+ Q. A& W; z; _3 V+ t
+ H9 ^# ]/ `* E& H! r  void goto_xy(int x,int y)  T! P* y9 N1 [% s$ a
  {
" ~* [' f1 @! l$ }" G$ u  union REGS r;
4 K/ ]* C0 L7 ?* K  r.h.ah=2;* k% ]( E. ?2 ]$ ^( X, t
  r.h.dl=y;$ `* m" ~" S4 I- B) c% P, R- L
  r.h.dh=x;  [  e) V' w& G" e9 F) {
  r.h.bh=0;
, [( k7 ~7 \* K8 Z; k/ v7 c  int86(0x10,&r,&r);
" q5 ~7 d, C$ ~  ]  }
, r% D2 `2 _' K5 {9 C* ]" |2 M$ p+ `0 U* F' P* N/ a/ t
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& I; \* y0 e( b! c$ T
6 `6 w" K; E. }+ Q" G  void puta(void)
$ _* V  O+ y. ^  Q; j  {
, C$ }- G8 f0 g5 B  int i,j;
/ E: v$ }9 c' R& {" c- B, K; x  for(i=0;i<24;i++){( A0 ]7 F! e, s: x& K' P
  for(j=0;j<79;j++){
7 }2 l2 f8 `/ D* d) _  goto_xy(i,j);  A/ g7 [5 I+ B0 ~& ?  q
  printf("a");4 p6 C' R3 a) \. J- b: I1 t
  }0 V- \* n1 Y5 Q; T! ]3 Z
  }2 t( m; W; W# ^+ ?' h: _& q
  }

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