返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 o. b$ G+ I  @$ H. l- m+ ^1 g1 v# m' w+ X
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 q- D) V) p9 _
; d8 C. n. F3 D, \/ m  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 q) n$ {! n: j/ s/ U, D8 c0 t3 K& Z  子函数及演示程序:
1 `7 I' ^: W/ S& s
, P$ ~" E! q, Z  g5 V0 g  #include<stdio.h>
& n$ R# j) o, P2 c% X2 c  j  b  #include<dos.h>( f/ M$ F; j( t! k3 J
  #include<conio.h>
' o2 f; l; H: i5 o8 b/ e# f* j: U
" h4 j9 \* W$ ^% c4 o8 _! E$ y  void goto_xy(int x,int y);
. C6 H/ [* x8 t  void dcls(int x1,int x2,int y1,int y2);9 s. I  m2 T5 M
  void bcls(int x1,int x2,int y1,int y2);; _0 f8 d0 u: ]7 @* K
  void kcls(int x1,int x2,int y1,int y2);
& @2 d5 m& R( I$ w  void recls(int x1,int x2,int y1,int y2);
- L- a8 G) Q% n  void zcls(int x1,int x2,int y1,int y2);8 s! t  |( z4 g4 L/ ~6 h% a% v6 N. {
  void puta(void);
  f; y. E1 [* {7 B
: H8 h* J. Z1 X; o8 q; V0 Y0 I& _, u" a$ _
  /*--------------演示程序---------------------*/7 j6 c5 ~  v5 y2 n$ p
  main()1 N  `# A* p/ u9 e% Y9 O0 \2 i: _. {
  {
0 |1 _: H3 n4 k: N: \  puta();  N9 M: q0 H( J$ D; u
  getch();2 [$ X9 j* B7 f( L# |
  dcls(0,4,0,79);
0 ~7 ~* K9 z4 S' e$ _  getch();  L. _" n6 P4 Q. F
  puta();
/ L+ I  R1 \! t- S- R2 o% ~  getch();2 x9 ~8 g* k5 Q
  bcls(0,25,0,79);
2 T% I* }5 \' l1 I6 F/ o  getch();; \, {* v  g' r' t; Z- e$ I
  puta();+ |' z% q8 Q$ p2 L
  getch();
* N9 g  i& G1 D; a" y  zcls(0,25,0,79);# Q4 r+ R3 A$ [# A- H
  getch();
. H8 ~/ h4 E! E5 z2 _- b  }
0 t' ^& Q; i1 K  /*********center clear screen(中心清屏)***********/( O# {) I/ A' V; ]5 c+ g; i# x
  void zcls(int x1,int x2,int y1,int y2)
. A& C. q0 c/ [: p1 ]2 D  {
5 v- h& s5 n2 Q  int x00,y00,x0,y0,i,d;: w9 I* k  c% x. p# C* j2 I
  if((y2-y1)>(x2-x1)){6 S6 T8 W1 D4 p/ w5 K
  d=(x2-x1)/2;
8 n0 J0 o6 I  M  x0=(x1+x2)/2;6 @& b2 N# B4 {$ M
  y0=y1+d;
. Y' |) o$ f0 }7 q  y00=y2-d;
1 e8 L7 G$ A7 u8 L2 r- @- O6 ^  for(i=0;i<(d+1);i++)
* U- ^1 l2 ^/ `: @9 ?" B  recls((x0-i),(x00+i),(y0-i),(y00+i));5 M" O9 x7 ~: {% B- j: W
  delay(10);6 [& u5 }5 t9 H! h2 J& T$ W) Y
  }2 I( a8 o' |$ ^3 M9 u
  else{+ U; w( q3 Q/ h" R6 Y- Y
  d=(y2-y1)/2;
' l3 y- s& k1 v( j8 T  y0=(y1+y2)/2;5 V" m6 x& o2 N* W6 f
  x0=x1+d;
# H, M+ b: k+ F  x00=x2-d;
, y& r5 |! q& _9 k$ ^9 i( t  for(i=0;i<d+1;i++)
9 H, I' Z. G' X  |5 [7 R, Y  recls(x0-i,x00+i,y0-i,y00+i);5 `5 k  R& P* u( C
  delay(10);# V# a3 j$ L% E( r, R) }! `5 i' U
  }
0 V5 ^7 K: ]  C, p6 c  }- J& d+ C: E/ r# D0 a
# G' P3 L3 S/ x; J% M% l* [
  /************* clear rectangle side(矩形边清屏)***********************/
) W- R9 h" b% [3 w3 \
' Z$ P: G- }% R2 z! x; @1 u  void recls(int x1,int x2,int y1,int y2)4 y, }9 @% \7 `! s: o+ B
  {* A% W* y$ R2 [0 R' g. @0 T
  int i,j;  t/ p" F  j% `$ C
  for(i=y1;i<y2;i++){4 B2 t" J" M" I* o" F
    goto_xy(x1,i);
( c' v9 q8 |) R- U; U! l  putchar(' ');! G2 w# {# h: K6 y) o* g# A1 ^" e
  goto_xy(x2,i);2 a4 s: T9 B, \, S6 O
  putchar(' ');
8 e) d" ?, l4 `2 Y  delay(10);
- E" k$ A' X' @; p& D  }
# B) T- z' j% a  for(j=x1;j<x2;j++){
3 Y6 S* {1 [. G# `( `+ m  W  goto_xy(i,y1);
- \8 q6 I: p  D8 _! h0 I  putchar(' ');; v+ v0 N" K0 q. w  v
  goto_xy(j,y2);
" K0 c! k8 X0 }6 h  putchar(' ');5 M9 f, Y1 n' x; Z  n( F
  delay(10);  U: A- A1 D6 P
  }0 b* p) {1 \! k( u+ t6 C+ `. V* {1 N; u  p
  }" _3 {! M2 G9 C5 N( w
  /******************open screen clear(开屏式清屏)*********************/5 a" k) L% K3 [& Q) H  |
7 J) e$ A  J- d! W9 H
  void kcls(int x1,int x2,int y1,int y2)
/ C* w* e! }5 z. }  {
4 L- [0 K4 |# m  int t,s,i,j;9 ~3 \0 a+ {1 S% s" W  ^; {
  t=s=(y1+y2)/2;3 i. v" R  v- M( ]9 w
  for(;t<=y2;t++,s--)
- ]$ G) O5 A7 \2 ~" l  for(j=x1;j<x2;j++){* n' e# c4 `7 H) Y1 r
  goto_xy(j,t);. X4 b9 E8 m; w* C" t4 F
  putchar(' ');
5 R& o& v$ b! ^5 [6 H6 L9 D  goto_xy(j,s);/ r% \4 B  ?7 w  e# K
  putchar(' ');
9 ]+ S% Y' ~+ `0 z  I& ]  delay(10);
! \+ {" D5 A" @( Y, ~0 @  }
9 j$ g* \& |" D1 y2 o( V  }
$ p) C- O9 B: ?# w6 v' Q  /*****************close screen clear*****闭幕式清屏*******************/
1 l$ G! t. T8 M8 g) @: I' I5 a1 I7 s0 L
  void bcls(int x1,int x2,int y1,int y2)
. v! T" `6 }# R+ j7 F  {
' f) O$ R3 z1 [7 V; C9 O: D  int t,s,j;
8 w# t  l# B1 k1 [5 B  t=y1;& \, ^; C! E. r" A' t, b: q' }/ ]
  s=y2;
. w3 [6 ?1 v) C8 v/ g. `  for(t=y1;t<(y1+y2)/2;t++,s--)6 H! R! c* g: L* l  G
  for(j=x1;j<x2;j++){3 |& \! k0 T, W8 N) y. F
  goto_xy(j,t);
2 V- J/ r! B4 X, ~8 U9 ^' T" `  putchar(' ');
% z2 `  X/ j" P$ n; F% C5 R- V$ I  goto_xy(j,s);
' Q3 _3 \; z$ Q  V  putchar(' ');
) S! P7 M9 M$ Y: V' _7 J( C  delay(10);
) F4 [  V% V' h5 b" m& ^9 y; r3 J  }
% Z& `4 }' F/ a) X- N* g# o, Z  }
3 `; f4 l- A" L6 [  /******************bottom screen clear(自下清屏)********************/
4 Q7 P8 X: m7 ~3 x) _" x5 c. Y/ ^# p
  void dcls(int x1,int x2,int y1,int y2)3 Z3 v9 V, L  S
  {
# i7 ~8 p4 n) S7 j) _  int t,s,j,i;. ^# G& Q$ I% N/ c6 O2 ~, L! e
  t=s=(y1+y2)/2;
# W& k$ |7 K% f6 m0 m/ n  for(j=x2;j>x1;j--)
/ }& A, q" ~  `  for(i=y1;i<y2;i++){
1 Z8 y, T3 `& y  goto_xy(j,i);
$ ~: \8 l" Z8 o# P  putchar(' ');/ @2 Z- |, ]- C  I; C
  delay(10);, e; _! p( h- ^3 Y# O. v0 `
  }
, L. B$ y+ h) j  }8 |! Q  d4 @; d" ^, `& ^% n
  /******************设置光标子函数******************/
' k0 C( E  e" B- k$ C, v9 U2 `& V# Z' _# h$ g  A7 ^
  void goto_xy(int x,int y)
0 x% D6 c8 d' n/ x$ t/ M  {# Z6 }: u( q0 t: R# q
  union REGS r;% n1 @0 P+ K9 H) u: D( n
  r.h.ah=2;
  W- N. k* D; W& \6 x, L/ G  r.h.dl=y;- S. A; `# \1 V/ ]( f, w1 {
  r.h.dh=x;3 k: F0 b; L# P7 D, Y
  r.h.bh=0;' Y( `5 W7 E. S7 E3 z
  int86(0x10,&r,&r);
1 y0 g) X, q7 I" J9 K0 z; t  }; V0 C& t# d- {0 m& ^: ^+ }* r
# J% Z+ v5 u+ @  `  [- Q$ y& e
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* N5 O. K1 P- a6 O; T! a- L9 B+ r
  void puta(void)0 N9 Q5 h  s3 L: D
  {
. y+ T  c3 Z- Y9 }; d1 x6 v  int i,j;2 O0 _3 i  h* U) _4 J
  for(i=0;i<24;i++){2 U  _9 N8 x# a
  for(j=0;j<79;j++){
; j9 @. I2 ~6 j# h5 }8 ]0 q% P  goto_xy(i,j);
! b9 R+ Q- [  e' _6 Y  printf("a");
+ Y$ h  ]& O- Q  }
, P; c9 W$ u( Z. {) b3 X$ n: C/ w  }
% o: A6 [& L; j6 q/ _$ W  }

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