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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 P/ m, k2 b7 w1 Z! X

: ]5 D. g. V: q+ ^& L  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+ _" e0 y, A- {8 J' a9 q# \. ~) r

* F; j" n# i: ]- u5 F4 M$ _  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ O. h% \% U& c" s/ w  子函数及演示程序:
/ W& E) Q9 B1 x5 l. L% ]. J# h9 {: t  r# i
  #include<stdio.h>
4 x' y& {$ n+ W  #include<dos.h>
  D$ x8 i% e" j' U; ^/ }% _6 C  #include<conio.h>" M1 I9 }7 x# Y$ E; c2 c9 H' a
& l" O  n' g3 s8 _' y
  void goto_xy(int x,int y);
' ]3 |  ~9 r9 a$ D" m& b  void dcls(int x1,int x2,int y1,int y2);, X; _" E( J* m
  void bcls(int x1,int x2,int y1,int y2);
2 |6 U1 }4 u" O9 U" ]! y* \4 R  void kcls(int x1,int x2,int y1,int y2);% R/ [4 w( k0 _& b. g' k9 Y9 f+ M- o
  void recls(int x1,int x2,int y1,int y2);
1 S9 p+ x- d2 a  B  void zcls(int x1,int x2,int y1,int y2);
2 m% C/ A7 K# g, U6 h; k/ r8 }7 b  void puta(void);+ a1 F2 S2 F# X
* N$ ], x/ f0 P/ P5 {# v
2 _4 ~  x  T- b# Q
  /*--------------演示程序---------------------*/! y2 [5 b3 }1 [' F) |! S
  main()6 m- \  w9 v9 d+ C' A. m* S
  {
; @2 |/ s! E5 i) D0 X  puta();' Y# L+ E0 n* x1 Q) p- S0 F, S
  getch();! M, V% b+ |9 v
  dcls(0,4,0,79);
5 [( J' j6 Y' {' d  @* J; Z  getch();
4 v" ^; f$ u  P) [7 I5 y  puta();1 a7 _* K. x7 v/ D! v2 }
  getch();6 s) m1 }: d' ^: t
  bcls(0,25,0,79);& W7 i& B9 M3 U. p; W( H: m, o
  getch();
  O. F) ~( w# V4 Q, W! O8 Y  puta();
$ i/ @" z# s" u' F  getch();7 H- V9 ^- n# G+ j) u4 s/ `; W0 {% m
  zcls(0,25,0,79);: J' \- u2 ]( h; f1 a
  getch();
9 Q7 ], {4 u; [4 H* D& [) e  }. k, T9 P8 H5 ~+ o4 q9 J- E
  /*********center clear screen(中心清屏)***********/
6 a8 {$ \; u' o- X  void zcls(int x1,int x2,int y1,int y2)! G% C8 I" l# B* k0 o& G
  {
8 j- ?9 C4 [- B2 J* U4 r7 ^! a  int x00,y00,x0,y0,i,d;
2 S2 e7 M7 H2 p( Q# U  if((y2-y1)>(x2-x1)){
! h( r1 p/ K2 @* Q  d=(x2-x1)/2;
$ U; A% H! @0 B" I  O! h  x0=(x1+x2)/2;
8 D" J$ r  B' N- [; w  y0=y1+d;0 H( x- R8 K) [
  y00=y2-d;
, b' w# \* Z$ S* p8 U" {  for(i=0;i<(d+1);i++)
$ E. g1 i0 g% k8 t3 ?  recls((x0-i),(x00+i),(y0-i),(y00+i));- ^9 R0 @) R9 _* \
  delay(10);, f7 {  m1 j3 ~! Z
  }
$ h# F; X+ g( I3 D( J6 ^  else{
. o2 X, o/ q2 m$ ~. u. o( L/ z  d=(y2-y1)/2;2 l  G' m6 c6 ^, l
  y0=(y1+y2)/2;
! L( G7 Z/ P9 \  r4 c& {  x0=x1+d;  ]* z6 l3 V, g* ~
  x00=x2-d;
, O  m6 q  }8 j4 {  for(i=0;i<d+1;i++)
( s! D/ u8 K/ W: h" n0 E  recls(x0-i,x00+i,y0-i,y00+i);9 v3 a) y; r6 Z" B# w% B* R% s$ t
  delay(10);
1 M- P9 l: @( N: ]# o  }
+ A" R5 w& k* x  }
- Q- Y/ I* r: z9 E+ ?% e; k  M  b" {" ^0 p/ X4 I9 t) V
  /************* clear rectangle side(矩形边清屏)***********************/. |* u; x; r: b
7 Z4 p: D; w* b" W  v
  void recls(int x1,int x2,int y1,int y2)3 w8 q2 S2 q. u+ t6 `1 f! F
  {: T, L; I6 v# i
  int i,j;# _' W1 i. U8 C" W/ q
  for(i=y1;i<y2;i++){
+ l2 _  B7 A; L  ^    goto_xy(x1,i);
0 e8 [/ x6 B: @' @/ z6 Q9 K  putchar(' ');
# z$ k3 w" E  |* s1 V0 i  goto_xy(x2,i);; z. @5 q# X3 q1 P0 c9 Y
  putchar(' ');
8 y0 _% o# ~8 h, L3 t+ S  delay(10);. ]% N# m7 I1 Y4 U
  }8 K# m  \# {1 k. G3 @0 _
  for(j=x1;j<x2;j++){9 I7 k' m$ X/ P" U  @2 |
  goto_xy(i,y1);8 _( H7 p4 l; E$ B2 [' r
  putchar(' ');
2 u. D8 \8 L; x& O# {, u$ U+ c# O  goto_xy(j,y2);
! W+ F2 l+ l3 e  putchar(' ');
6 t& h& |. {* ]( e- @  delay(10);, y. E1 i# j0 ~4 }% }- I
  }7 f0 C6 Z2 g4 |. e. _/ g: `
  }: g% N* G' t0 h1 z( G
  /******************open screen clear(开屏式清屏)*********************/4 E( l8 d- v4 ?6 d- [$ C7 z$ ^

% @5 y& e4 ^! @! Z( m  void kcls(int x1,int x2,int y1,int y2). X* Z4 j  U1 o: J3 e7 n
  {# |" C6 J( D& p3 r/ V& d! u& Y$ l
  int t,s,i,j;
/ g, ~- h/ p& {' i( r( p. L1 w; o4 Z  z  t=s=(y1+y2)/2;
+ ~; [4 r4 [5 i8 h1 ]  a" x  for(;t<=y2;t++,s--)/ j; p! [+ k' i+ G
  for(j=x1;j<x2;j++){) m1 h/ b& D# t8 ?+ m
  goto_xy(j,t);1 k* g* G4 x9 F' x" f" Q
  putchar(' ');; h* ~, \) ~  L9 k% U4 V
  goto_xy(j,s);
  n1 O! V7 C# K0 E3 f  putchar(' ');
( g7 E# K/ U- m  delay(10);
6 i5 ?2 @# a: w. |  w  }
) q) Y: m, }. Y8 D2 V6 [  }1 l) |2 o( C, h6 N- ^9 C! w  T5 [
  /*****************close screen clear*****闭幕式清屏*******************/
6 K" h) K, q- G! [! p* m+ S( M) u3 @& X" E; O$ ~
  void bcls(int x1,int x2,int y1,int y2)
1 P, k2 m6 ?4 ^% c. K9 y/ s' E( X  {- \6 J. J/ }, F. {/ B9 i  g3 n( X
  int t,s,j;
0 R, n, R2 B8 p+ j: U$ X  g: R/ Q6 S  t=y1;
6 B7 B) S( V4 a: l4 I  s=y2;
/ T% U8 [+ g) p3 S9 v# R5 G  for(t=y1;t<(y1+y2)/2;t++,s--)
+ f) p9 q# U; Z  for(j=x1;j<x2;j++){
: l4 V9 O, f" r0 ?1 t  T  goto_xy(j,t);. v, o( Z* k. J8 s/ S9 A
  putchar(' ');6 T  k8 \' p9 }& x
  goto_xy(j,s);# _) v  Q4 L) A8 ?' ?. L
  putchar(' ');. T9 t7 C# b4 h* |% _& r
  delay(10);
) E. J3 u9 `- |5 f# _  }
- F0 o. x- l9 t  }4 A0 X: E5 z' I! @, S, z* q. E4 }
  /******************bottom screen clear(自下清屏)********************/5 ]1 f8 {: a+ c5 N
: [& w6 L/ |1 f' C* }& e
  void dcls(int x1,int x2,int y1,int y2)' S# d3 A8 \# L! e
  {
; O- B9 y0 R+ `% s  int t,s,j,i;
4 u; L2 A* _" m0 @* ~8 g' e) p* N  t=s=(y1+y2)/2;4 i+ ^. G6 }# _5 e- _. m
  for(j=x2;j>x1;j--)' k0 H4 W5 r7 M
  for(i=y1;i<y2;i++){
: i5 K/ E; s  w8 j5 Z* A1 P  goto_xy(j,i);& v1 \# `$ D2 @6 L
  putchar(' ');7 X3 c  W; q6 n+ l1 I3 P# P" m
  delay(10);4 ]( K9 p- Y" H: z
  }
, e7 O3 }$ b3 Z5 n' u( r" f% C9 d6 z  }* v8 b) G6 d3 X
  /******************设置光标子函数******************/
9 k/ Y' R* H3 w; ~+ @: {. a9 d) h" E
  void goto_xy(int x,int y): b. V, f2 X. d3 f, ^
  {% J: R8 W* c0 Y1 r9 [( Y; j
  union REGS r;" p* l5 N; v9 c) @
  r.h.ah=2;5 Y6 W0 u+ G6 v
  r.h.dl=y;* W# K7 [( u  Y% Y
  r.h.dh=x;3 `( t( {  N3 s+ a8 s
  r.h.bh=0;
+ @% Q$ Z" \+ @0 \& V4 O  int86(0x10,&r,&r);* g1 Y. c8 O. u5 ~* z& c1 U. s
  }
! W) f+ W/ n% E0 k2 o% r* W  }+ l6 A
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% d+ d: e+ Z3 ^/ _  @% Y" J5 K5 _. q/ ^/ Z
  void puta(void)5 P* Z# s1 @/ r* {) I/ k' u: R
  {- ~- ], {. X: x( b9 L) m9 v2 d4 Z
  int i,j;( G# Q" |1 N% X
  for(i=0;i<24;i++){/ ]5 k1 G) B) Q6 e
  for(j=0;j<79;j++){
6 q% ~5 `# X% d6 T! J! u6 [  goto_xy(i,j);
# K6 y' X, \( |# n7 F  printf("a");# o6 j- y$ a) l: V% t2 F9 ?. N. M: W
  }
, G/ {1 h$ Z4 K3 N$ o5 q  }
, j( x+ C# r/ D! ]4 {  }

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