返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,( `7 T' r4 F5 F3 }: o
, g3 e' n" _( @( H) ?
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 E$ O" i! _8 C8 R- I2 Y
8 G* q6 {* f7 m  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
$ q: i; o% e; J  z  子函数及演示程序:' y2 N5 j, k; t$ O: ]8 E! z* c
4 x' ]0 F" |/ @
  #include<stdio.h>
' v1 Y; U# m& [4 C( {# ~+ v  #include<dos.h>  H. O( G9 x' e& s1 ^
  #include<conio.h>% A0 q/ F7 L1 v. d) H& }& l# W
6 ~  d: K+ c. I
  void goto_xy(int x,int y);) X2 m2 R* r4 h6 c" ]
  void dcls(int x1,int x2,int y1,int y2);9 e1 X% Y- a4 q/ D/ c, h5 t/ }1 I
  void bcls(int x1,int x2,int y1,int y2);+ P7 E$ `* G+ N0 p' s! D) w  E  n, S
  void kcls(int x1,int x2,int y1,int y2);
; G5 q7 ?7 ^( p  o, u" Z0 L* n  void recls(int x1,int x2,int y1,int y2);  K, I: q9 E& |2 |8 G. k
  void zcls(int x1,int x2,int y1,int y2);( c& M8 ?* [/ F; D. D8 f) D' o" Q$ [
  void puta(void);
, d1 w: P0 G; Y$ Y, t# s8 C4 l5 \6 D- \+ ]; R2 f

0 n7 |! M8 ?$ ?) E! O! I5 ~0 K  /*--------------演示程序---------------------*/
) M# x$ Y+ P7 h' j& M  main()8 q4 Y. _0 g6 k( P" N$ p/ |
  {
% L1 W% E# r; A2 i  puta();6 c5 S2 L- y  S' o* [# |) P
  getch();
; h/ ]- e- u& T$ i1 \  dcls(0,4,0,79);+ q6 g, @  F. `: [2 o" S) W
  getch();
9 B5 _8 O( U9 y  puta();- [7 [% }0 X9 w; C- s0 [) j
  getch();/ A: l' @6 S9 ]7 K( Y
  bcls(0,25,0,79);; f7 u5 b. D! j, k; a
  getch();
, Z" E0 L) U( D) N  puta();
3 k$ w0 v) U1 B0 p5 U( w  getch();) O% w- o/ I8 X) G$ ^/ I' F; z4 B) r
  zcls(0,25,0,79);3 K9 n/ N4 |( T
  getch();
4 J) h- C3 [9 X/ }  ~* f! V6 P) A  }
( u& g; N& r+ d$ i. a2 a6 M  /*********center clear screen(中心清屏)***********/
( y3 X$ u: J* X1 K8 ^  void zcls(int x1,int x2,int y1,int y2), i- j1 L5 y$ E$ I$ a* n9 J2 i
  {2 w& Y' K, T' t5 g* k
  int x00,y00,x0,y0,i,d;
: I; |3 N4 t9 y. w* G$ g2 L5 z  if((y2-y1)>(x2-x1)){
+ O6 ~2 }$ k* F4 C7 `% v( j# h) z  d=(x2-x1)/2;- W: A. t" L3 B8 p& Y+ D
  x0=(x1+x2)/2;) A2 f: V% @; h
  y0=y1+d;
5 G& S( r6 T6 h. D" a9 d3 @  y00=y2-d;0 N' L1 `" @$ s6 u
  for(i=0;i<(d+1);i++)
; p2 Q5 O9 ?+ ]" z& Y/ a; x* L  recls((x0-i),(x00+i),(y0-i),(y00+i));
2 K# y  R1 A: l" h7 S! u8 T) A' z  delay(10);
3 b8 x$ F( c% L  w2 q9 n6 ?  }
3 k# b8 k" n* }: i  else{
' N" K7 a1 \6 P$ W- E( l2 \9 v4 P. Y) _* f  d=(y2-y1)/2;
% P" c8 _3 X) D- D( ~2 J  y0=(y1+y2)/2;
" f. y5 L! R6 s( g" F- c$ ^  x0=x1+d;
( s+ M# [/ S/ h  B, N  x00=x2-d;
3 E6 F# M2 @7 A* u. D' `4 h  for(i=0;i<d+1;i++)  D5 P" n& d/ Z. h
  recls(x0-i,x00+i,y0-i,y00+i);
# j1 R, @1 X$ b. J- c0 H  delay(10);
6 i( d! x2 z1 _% K2 B/ M$ a  }4 |3 w" M3 D" ^. a) a5 G
  }& e- v3 D7 G( f

+ I5 N, I5 [- L  /************* clear rectangle side(矩形边清屏)***********************/
5 W. v$ M! Z* J# }1 J8 G% R6 i( U& Y6 r' p. N
  void recls(int x1,int x2,int y1,int y2)  U, e! ?* U, [" O& R% N
  {3 ?9 `4 Y& N/ X$ b, n3 n+ x
  int i,j;
! p. I& l" R2 n+ Z  for(i=y1;i<y2;i++){+ V7 P2 y% `9 `5 C
    goto_xy(x1,i);) z+ X) H6 q- z. ~
  putchar(' ');
+ H. l" ^- k! B  goto_xy(x2,i);# Z6 v/ J: a  E, X  L' ~
  putchar(' ');
' D8 [* Z3 n! l  delay(10);* ~# D# s, l5 o6 Y; Y* @- K& v* X
  }
; E' s2 @5 l4 t$ D  for(j=x1;j<x2;j++){0 C4 |: n3 g8 g9 }
  goto_xy(i,y1);
# m* I. l1 {! \' c0 [$ q) \( g$ H  putchar(' ');  o5 b% z9 E! H9 Z2 k- P
  goto_xy(j,y2);
0 u) b# E/ K& g( C" X$ m  putchar(' ');3 b+ Q* o2 f7 q" Z
  delay(10);
' V% u$ `. f1 H" q  }$ b9 ]7 [; \* h
  }8 X0 d! Q2 p! H  Y# w6 C
  /******************open screen clear(开屏式清屏)*********************/
$ Z( D2 q! W9 N$ ^$ X
+ }( k# @4 v1 p' J- ?6 S7 ^  void kcls(int x1,int x2,int y1,int y2)
( o; n0 o4 L1 j4 M( b, F  {9 |5 t8 S+ G& [3 ]0 m5 r
  int t,s,i,j;$ G& `2 K+ T. p8 X: u9 i
  t=s=(y1+y2)/2;
( g: b* Y8 u" V& p- o# c: q  for(;t<=y2;t++,s--)
& F/ Z1 R9 S  t! C  for(j=x1;j<x2;j++){& `) m/ y5 S0 D; q% c
  goto_xy(j,t);6 t5 W( z7 [5 C$ y7 |
  putchar(' ');3 ^5 ~% T; c# F2 K8 k1 ]
  goto_xy(j,s);  V) ?7 i  T: r' M
  putchar(' ');0 t( }* G& a: z7 {$ C/ f" t: L
  delay(10);: i8 v0 w) m' W. V
  }) ?4 V0 E: ?0 M& m! `0 p
  }
% U' n3 i  e6 w! B2 ^  /*****************close screen clear*****闭幕式清屏*******************/
' K9 O# l6 E" q6 M+ W$ ?% Z. r2 k& L" G
  void bcls(int x1,int x2,int y1,int y2)
" W  u( H( O% }  {4 P9 y9 I  a' h3 G; L$ s% d* O" Z. g
  int t,s,j;
9 L5 u, C5 |% ^6 X8 D  t=y1;! M: E' `' Q, h' u9 b, Y
  s=y2;) w; m2 K  O5 D3 Y* I
  for(t=y1;t<(y1+y2)/2;t++,s--)
) D$ K1 `( K7 T' c' l5 O; n  for(j=x1;j<x2;j++){
+ M7 E! v7 L8 ^' u7 R8 s, L  goto_xy(j,t);
& |  u& u0 }# g2 M* Q* r6 U+ _  putchar(' ');( Q: i; J% n! `( G' q" L; {0 B- r# N4 L* y
  goto_xy(j,s);
3 |$ l- \; {( A. N, t7 C* R) `  putchar(' ');
* g$ Y& h4 l6 v& g( ~; h  delay(10);% U' a2 h8 H9 x( a+ w/ X$ g
  }
/ f' z4 O( l; ?/ p  }+ a6 B& n$ ~( W! k
  /******************bottom screen clear(自下清屏)********************/
/ ~/ ^0 l0 n5 C7 i
5 g6 ^2 E, A3 C6 [4 b5 U$ E, b  void dcls(int x1,int x2,int y1,int y2)
. I3 I* v* X6 D' R& U" s! N' V7 g" V  {/ ^! ^8 K8 j5 H) p0 G+ \
  int t,s,j,i;/ o/ }- u4 g: d% ]% ~
  t=s=(y1+y2)/2;6 y3 G& @& j& G* q8 x. u
  for(j=x2;j>x1;j--)
  O: m& h7 U3 \  for(i=y1;i<y2;i++){$ E  I4 V& A  X! E2 q; R" Z
  goto_xy(j,i);' f4 }. ]3 X1 I5 x2 J- ]
  putchar(' ');
; n$ i/ s- k- @! D$ r* @" X  delay(10);
5 h, T( w0 c3 Y0 Z. S) q6 O  }4 F" ~# n5 R, e9 Q7 V/ b
  }) d6 b( g% s" J- J
  /******************设置光标子函数******************/
: c* h! ]9 h: ]; v/ |/ g9 {* N: e0 Z6 w- n/ u  i
  void goto_xy(int x,int y)1 C7 t) i7 j) L/ b" n
  {! C2 Z" K' L% [  ~2 _) R
  union REGS r;3 I; D) v* |* R( d9 j3 z0 {7 P
  r.h.ah=2;& M  r& l7 C, r
  r.h.dl=y;: V$ z7 d, Z" w4 u9 ], |
  r.h.dh=x;" N, c, R! ?( i; \# J8 ]4 y& M
  r.h.bh=0;
* i3 x* I3 N+ [& l; F! |% r# a% X  int86(0x10,&r,&r);0 c) ]  z1 `0 H5 v* g. O9 h
  }8 L  |/ m( _' V# j/ u
4 P% W* m* R* H4 H$ b0 I) D
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 J3 ?. _/ G' I# m' V
7 \" a- d6 y! c4 h2 D# ]4 U' h4 s  void puta(void)
+ m8 j- D6 [5 S  {
* l& d% L3 P. F  int i,j;2 Z! `4 G, d) L) |2 T
  for(i=0;i<24;i++){9 c. X! k5 J" _5 n, V
  for(j=0;j<79;j++){
1 J" E- A) ]0 {+ @' q1 g  goto_xy(i,j);* N. _% d9 u' G& L5 s! P" a+ @5 e
  printf("a");1 \0 G0 a, c1 Q0 M& ]  D
  }4 ^' n; n# q. a3 e5 |
  }
% }7 y# z, C# e  }

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