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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& I( x% S$ Q- e  m3 ^, B5 ^
2 J/ K# E/ V! [, D" S  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 ^' Q# ~5 z$ H, }$ ~: G! N8 i
. I' z2 l; j7 j7 J8 R, G( x
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 C% W) q" h! a! h1 U% Q
  子函数及演示程序:
# H& F. w3 B/ N- s- A  g4 o* J' x+ t& R
  #include<stdio.h>% [; i+ m9 y2 c$ h
  #include<dos.h>
5 V. Q# U! [" w9 Q  #include<conio.h>( k" P" i+ y/ X9 a/ F2 l
1 I/ r# B5 r* l6 P$ e' R$ m: b
  void goto_xy(int x,int y);# }( x% x1 `: y; f) N6 g7 V/ r) Q. Q7 i
  void dcls(int x1,int x2,int y1,int y2);
- v" p/ V  e$ V1 H. S  |) {8 k  void bcls(int x1,int x2,int y1,int y2);
: X5 C# W: z4 ]) J  void kcls(int x1,int x2,int y1,int y2);
/ ~$ |4 W4 Z- {4 Y9 K) m  void recls(int x1,int x2,int y1,int y2);
7 I% c4 b3 j. F  void zcls(int x1,int x2,int y1,int y2);% h; h$ W0 W4 B+ p% C0 X8 A
  void puta(void);
; C  }# s+ {3 o. A3 @+ Q) _5 J- w  A* `
2 v1 y0 F! F; D9 X# t' F
  /*--------------演示程序---------------------*/
% v3 m2 u4 Y0 M+ A& S" l" H* H  main()
; e. f7 z( `+ Z  {
) a$ @+ M' X' S! ?  puta();
+ i( B  s8 o( `2 f+ ?& t  getch();
' h, M+ u4 i5 O+ \7 N, ^' N  dcls(0,4,0,79);
+ k, A, `. F" y+ x5 r$ `4 v; c  getch();
& U0 N2 S( `# Z: l, R  puta();
, v8 Z: ~4 n) {8 R1 L  d* |  getch();
: k. T0 p% t" W( {  x5 z+ \' L! f1 E  bcls(0,25,0,79);
& M# D  Z/ p8 w* z" m2 V* B  getch();
/ g' L: x* U1 w; X  puta();
' o* X3 V% b; n) \: E  _  getch();
6 @; J5 R8 u" Z+ d6 b3 T  zcls(0,25,0,79);
' q" t& g: R2 S  getch();
- m* ^0 E! [. L) a% i  }
; w6 _. p; I0 w6 C2 X5 _  /*********center clear screen(中心清屏)***********/  s( q# h" n/ c, k8 X1 Z
  void zcls(int x1,int x2,int y1,int y2)) e+ s; x& J' Z& Y1 b* n
  {
! f) Y4 y* L/ u  E- e; q+ ^; U  int x00,y00,x0,y0,i,d;% R; H7 Q# z: d3 Q: {! F: v
  if((y2-y1)>(x2-x1)){4 r/ [0 ?5 u4 P* r3 N4 d2 x+ A
  d=(x2-x1)/2;
' @8 Y. A. ?6 ^  ^# o7 J) W  x0=(x1+x2)/2;2 b& ]+ A1 i! T
  y0=y1+d;% F' b8 J0 i0 ]4 B
  y00=y2-d;
% `* C  v2 z: t, w  ]  for(i=0;i<(d+1);i++)3 O; r  K: X9 l- m3 r! Y5 v
  recls((x0-i),(x00+i),(y0-i),(y00+i));
8 p5 l0 M8 o$ c( M; d  delay(10);. m' d. K* D% M. ^8 _( Z
  }5 @1 `9 c/ U- J- s0 {8 z+ O
  else{6 z+ i% Z& N- B5 @! Q0 R* f
  d=(y2-y1)/2;
  D2 @6 Q' g% @0 v0 c0 }1 U8 w  y0=(y1+y2)/2;
/ z+ K( s$ C5 |0 z& R1 ?8 u  x0=x1+d;
4 v8 b: w1 C. T  x00=x2-d;
6 {) N3 p; O, M3 d  for(i=0;i<d+1;i++)3 _- V! T$ |% A; @: a8 w
  recls(x0-i,x00+i,y0-i,y00+i);% S# `7 L8 M9 n9 ~) b( c, n3 |8 z) X
  delay(10);6 m4 w" o3 c) J. x  r) d
  }6 T3 l5 \7 C+ m# V0 }- R
  }  I# a2 |1 J) z/ F4 o! m
3 T( t+ R6 R4 l0 ~7 J
  /************* clear rectangle side(矩形边清屏)***********************/
5 K; ^9 |" ^3 x2 c, o. \0 y2 q2 i" p) Z$ [$ s9 k% H
  void recls(int x1,int x2,int y1,int y2)
' h: h2 {& f4 X. ?) C7 N2 S3 Z  {
% R; F! K* `3 h# f  int i,j;
3 R8 N- U1 C- ]) a* w) G) I  for(i=y1;i<y2;i++){
* X; C3 _; }- \! Z6 q9 A+ V8 X    goto_xy(x1,i);
( F5 w) L( l, {, r4 v  putchar(' ');+ A9 b9 Y9 s$ r  G6 R* j+ `
  goto_xy(x2,i);5 n! J/ y9 L4 h% Y4 ^
  putchar(' ');# l  D+ G1 O* t* z
  delay(10);
' Z8 q8 i5 l& q' k" ~- @  }
' ~8 s2 B/ G0 E7 `  b+ G! z/ ]& M  for(j=x1;j<x2;j++){* U0 H! b8 |4 ]; l6 O/ e; `* @
  goto_xy(i,y1);% ]( M0 ]- N* x: ?  J+ c/ x
  putchar(' ');3 W+ ]' H6 u1 c2 J
  goto_xy(j,y2);; E  [- S; L  Q
  putchar(' ');
' G! C2 a  F* ~; i' u  delay(10);
; n9 n* {# h4 w: a- S8 Q  }
# F: `1 y$ c4 J! B+ M& J# B9 [  }3 k& Y! r1 x8 J4 u3 H
  /******************open screen clear(开屏式清屏)*********************/$ F4 B" R- N" b0 C) r
1 A2 |4 h" K* l6 m: [
  void kcls(int x1,int x2,int y1,int y2)
, a! R- `" I8 ?6 a" Q$ `  {8 Q9 Y  {
" ]- c7 r! o3 ?6 N  int t,s,i,j;- c% o1 Z. f- M- b+ g- y% c/ Y+ \
  t=s=(y1+y2)/2;
$ r: @5 J# P, h4 g, _  for(;t<=y2;t++,s--)
) R8 l) T+ \4 `1 E, q9 \9 \  for(j=x1;j<x2;j++){
' B4 N6 }8 c+ g) Z+ @! I+ R, P. j3 \  goto_xy(j,t);
9 ~7 ?2 G0 Z( r% \! N  putchar(' ');
7 t7 R# a% P# V  goto_xy(j,s);
3 K$ X# Y$ y( e3 G, D" |# A" U  putchar(' ');
* ^+ }9 c) p+ b8 p* e  delay(10);
) L/ {: L) ]/ s; V  }# _7 |3 g9 k. _
  }) _0 g, u' h- H7 O4 G, r4 W
  /*****************close screen clear*****闭幕式清屏*******************/# [  ]" b8 B# K* F, A) ^

5 ~1 P# A$ r3 V  void bcls(int x1,int x2,int y1,int y2)
7 \9 @! ]3 F3 x8 S9 Q- `. z  {
. ~, _' D' W( i. a+ ~; c& `  int t,s,j;
, Q$ ]$ ]2 e+ F) M" ?+ h  t=y1;* a( @/ B! Z, n, T2 l4 X8 x4 W
  s=y2;, \9 e, e0 O  h$ B% Y
  for(t=y1;t<(y1+y2)/2;t++,s--)
* t8 P, O1 u8 Q1 C. E& t# c  for(j=x1;j<x2;j++){0 {) G4 p  O2 f, }" X' S
  goto_xy(j,t);; ^$ i0 j: A0 w; V1 q- \! T( E9 Y
  putchar(' ');
; ~/ T" @6 R, V9 P! |: B+ Z  goto_xy(j,s);
* f! W# c$ m; i  putchar(' ');, e& V/ k6 _; d* X  G. ~
  delay(10);
4 c9 o2 ], {# V5 Q9 _: k* x1 b  }+ ?/ e8 x6 S" s% b8 q- K
  }
. ~* N6 U' _' H  /******************bottom screen clear(自下清屏)********************/
+ x- c( @8 M$ F! U5 a; [) L( a  ?3 H: T) @
  void dcls(int x1,int x2,int y1,int y2)' O/ T- V8 C8 r# T$ Y
  {
$ ^- ^: c8 \! l) |+ T1 @' |4 }  int t,s,j,i;6 F! ~8 _3 r* [: g( ?* U
  t=s=(y1+y2)/2;, G4 p7 F2 r* t$ G0 W2 |2 h* J8 l3 K
  for(j=x2;j>x1;j--)! f7 b% o0 n1 ~6 L8 \5 [  o
  for(i=y1;i<y2;i++){
4 Z1 S4 n$ E5 Z$ l9 `" U9 W  goto_xy(j,i);
9 ~2 r: I" k8 p5 z  putchar(' ');
. F* c$ F* T# Q% i; [  delay(10);
( }/ t! n8 f5 w- {4 x: {& \  }% w, G5 }6 S- L/ S" O) M# q9 ^
  }
' H9 g/ J! c( }  /******************设置光标子函数******************/
( S4 y2 P4 M4 h
. W7 Q+ x# ^7 E6 J7 N" V- ~  void goto_xy(int x,int y), l  d5 S4 R8 f
  {3 I' ]0 C7 q3 I, {9 V2 H
  union REGS r;! p8 r8 S9 q& U* W
  r.h.ah=2;5 e5 Z2 n/ d. @$ T1 I& r  o& H5 e
  r.h.dl=y;2 W* y' T$ }6 P% U' A! v
  r.h.dh=x;
/ Z1 M$ C+ G7 m# }+ Q  r.h.bh=0;
7 D2 Y; W" z! \* z: H  int86(0x10,&r,&r);
) K$ u+ j3 S2 Q) t! O/ r  }
7 [# S$ k! H- G, {% d9 T9 y7 a; a% Y3 D) a
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/" @& `; [8 `  \- f" [

$ W/ r  e6 }& C! E8 z  void puta(void)
/ m7 U9 j( ^8 H( W! H% Z  {" C+ j. ~/ z- }2 }1 J& [
  int i,j;
2 W- _" @" ^. I, d$ Q  for(i=0;i<24;i++){
- z0 _3 t3 D/ s0 g2 A  for(j=0;j<79;j++){
8 ~$ x. `- V* ^. v  goto_xy(i,j);7 s2 I7 j- V" f' D0 M0 [: G
  printf("a");" }6 k+ r* e: o6 ]
  }% [" s2 B* l8 Y$ L% d# B1 u
  }
4 ]! g+ M2 |6 u$ p& l* `( @, s  }

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