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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' ]. @  @: ~4 O1 `
; [1 c9 ~* d: ?. G! f) M
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
1 F4 j* \7 A6 {# i( N! O
5 t& y2 i% I7 c9 E7 U  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. m( e2 A; q" B+ p! |* N0 N  子函数及演示程序:
0 `+ |2 d% f2 U2 q/ ]6 _8 C* @6 n& k1 j$ [7 w, K: f. |, n
  #include<stdio.h>, h) u4 k! E) z" x! h0 K
  #include<dos.h>$ C0 I3 {* \; J$ I% \7 W
  #include<conio.h>$ y* ]3 _/ I* d' c
- S  e% ^. I3 R' h
  void goto_xy(int x,int y);
1 r6 F& Y# u3 L  C' f+ Y3 `# L- O: M% e  void dcls(int x1,int x2,int y1,int y2);
# q/ b( c- c0 w+ w$ b* Y) p3 N  void bcls(int x1,int x2,int y1,int y2);
# e, Z2 E5 n. d( f4 O+ _  void kcls(int x1,int x2,int y1,int y2);
* w, G$ k8 K: b; ^: T% ?  void recls(int x1,int x2,int y1,int y2);
# ]4 d2 L' C" ~0 J6 ]  void zcls(int x1,int x2,int y1,int y2);* ~3 O5 K* \, q  r% m/ O
  void puta(void);
, F7 u9 N9 [6 R2 B. ?: L0 ^; e0 D+ s, P" @) r$ G+ `) t6 \( }' o/ r
6 ], T: f6 X- i% j2 S3 }6 Q- C# f
  /*--------------演示程序---------------------*/
" t5 _  p/ E( ]  l4 T( m  main()
0 ]/ D6 X/ L5 @  {
; j/ I. Q: c& w& {+ R0 C% m  puta();
, d  X' o, {# C. ^: n+ g9 ]  getch();
# R- t3 S# c: p7 a" O% N7 r. R  dcls(0,4,0,79);
( [+ ]* c3 n+ M7 W' N7 F7 ]  getch();' L! V* X4 y" F. t+ D+ z5 D0 c* d) R
  puta();
$ [6 l- C5 m+ e( o9 x  getch();
0 y3 r$ c( W: `8 [6 R  bcls(0,25,0,79);
& Y8 E" F: h0 i" @( _7 ?: ?4 V8 o  getch();7 p) B. s* F& `
  puta();
) s  `5 w" w1 N+ a  getch();- b. v9 g  F7 f+ c' T: d
  zcls(0,25,0,79);
4 J8 p# h5 R* j7 W/ T, O. p  getch();
! f- }, q9 c( H9 [9 S; u  }3 U" M6 v8 }. {# x2 k7 b
  /*********center clear screen(中心清屏)***********/! x" D, D9 {8 n9 D- w; R7 j
  void zcls(int x1,int x2,int y1,int y2)
/ Q; v# Z5 L% P% w  {
9 E( k) z  d: c* C  int x00,y00,x0,y0,i,d;; M, j4 c, `5 K8 s2 ~
  if((y2-y1)>(x2-x1)){
$ `8 P: J0 M4 D  d=(x2-x1)/2;; M/ W' u0 \' F  \
  x0=(x1+x2)/2;
' Y7 y5 ?2 E6 A, r! x, E0 `  y0=y1+d;3 u' r/ @1 s6 \6 v8 _
  y00=y2-d;, p. j, c! Q" ~4 T" e% f
  for(i=0;i<(d+1);i++)
7 o; c" I2 `, e$ ^; Y+ h, O' x- M  recls((x0-i),(x00+i),(y0-i),(y00+i));
( Q( _/ S$ M2 A  T5 _8 h$ d! m- U  delay(10);
9 A6 Q6 S0 m* ^; Z  }
8 B" E1 ^. p9 d8 V  else{9 G$ s+ S1 B1 n/ X2 v+ p
  d=(y2-y1)/2;
2 Z* Q: @) d6 N  }) c1 ]' p  y0=(y1+y2)/2;
( l9 k/ x4 B: A+ [  x0=x1+d;3 u) M2 S1 l- l1 K. p; k
  x00=x2-d;
' G. p4 t" Q1 |: q4 {  for(i=0;i<d+1;i++)
* C- p! b$ W' v5 Q2 c  recls(x0-i,x00+i,y0-i,y00+i);9 b8 u4 z( c, f; N. P
  delay(10);" f+ \, [: H8 Y+ D% ~8 b$ X
  }
5 S4 m" S. `- z6 [7 h  }
# C+ q' c/ p$ e) D$ o) E6 [6 H* y
" k5 N3 I( r$ I* f* K; s  /************* clear rectangle side(矩形边清屏)***********************/
3 Y6 b9 h) X3 g4 |
! n/ x& }' v& @" M  void recls(int x1,int x2,int y1,int y2): L; M4 w& ^, y3 i4 j  Y- L
  {9 z; {+ u8 K  E" l
  int i,j;
7 H" s5 ~7 W0 r* B6 }  for(i=y1;i<y2;i++){0 |; `4 j7 T  f, h8 b' S% Q+ E
    goto_xy(x1,i);7 N/ a9 i1 q- f5 }' o
  putchar(' ');
0 \& s% r4 |6 q- X" b2 c  F  goto_xy(x2,i);
9 @2 J/ ^9 v: g3 t$ A$ r8 L  putchar(' ');
/ p$ w* M: L, ?; V. r! X$ d  delay(10);
+ A1 E3 a( e. b! ]) Q3 P  }3 n; t$ X! }# V
  for(j=x1;j<x2;j++){
1 E+ \! J8 u. W  goto_xy(i,y1);7 F1 y, \5 k& g$ m' |
  putchar(' ');
2 v6 d* t; s5 d* d! U/ R1 H  goto_xy(j,y2);* a! J4 }! T9 A( c9 m# v
  putchar(' ');
8 `5 `! ]! y- h  delay(10);' v0 t- b) v4 e1 \8 `) q
  }
9 P/ m: D) Z) x- \) N7 u' |  }5 a" c3 ^) l' O& O. C) S
  /******************open screen clear(开屏式清屏)*********************/! \& y1 \' x( c/ X- d- ~
# q7 }+ t! F6 L
  void kcls(int x1,int x2,int y1,int y2)
3 L7 y3 A* t: A" b* n- h  u9 A  {6 w6 B& T- M5 S0 B
  int t,s,i,j;8 q! x' r8 g' L  @+ U$ L  E
  t=s=(y1+y2)/2;
+ ~7 c& j" {- ^9 O, T. X  @  for(;t<=y2;t++,s--)( `- @7 |% h, a/ y3 `1 i2 M
  for(j=x1;j<x2;j++){
* \2 e1 V9 u! n  goto_xy(j,t);
& ?; O& R4 Z# P% e  putchar(' ');
3 ?! [! x- A5 m, `; x2 H# q, f  goto_xy(j,s);
" G/ M9 r& l8 G7 m  putchar(' ');
/ n# D0 H. G6 u) _  delay(10);
5 |2 F8 y) {- ]5 @6 `8 |7 ?  }& Q0 R; ?6 O7 h$ C& X0 Z. b
  }
7 `6 [; T7 d9 W* A) B) h; i0 U4 Y  /*****************close screen clear*****闭幕式清屏*******************/: G9 f. h& ~6 a$ r3 {) B8 l

( W$ M' K( E6 x  void bcls(int x1,int x2,int y1,int y2)
9 _2 T, X4 }, H! f  {
) O( D. E% n4 }: c7 b8 k  int t,s,j;3 i. O' o7 w7 F) b  x& v
  t=y1;8 H: E% p" W$ ]! H
  s=y2;
" w! n* r: x- @; g  for(t=y1;t<(y1+y2)/2;t++,s--). W/ e* Y, F% f# d" J
  for(j=x1;j<x2;j++){* K0 C( Q6 h9 E9 Z
  goto_xy(j,t);
! r2 N8 u8 `3 U* S$ D2 o: |( j  putchar(' ');# G& M. ]" ?9 J; p2 ?
  goto_xy(j,s);. M& Z9 K! g; ]( F: Q
  putchar(' ');
! j# C$ W1 p; G, |3 b9 P  delay(10);* o& r9 z1 J2 r
  }! v* F8 I( {4 |) ^. u5 f; P
  }' C. G7 ]$ D. K4 ]/ m8 P# `
  /******************bottom screen clear(自下清屏)********************/# ^2 i$ q0 F9 g6 i, J9 ^

8 T  F# d, F3 F8 D4 O' A9 G  void dcls(int x1,int x2,int y1,int y2)% h8 M% b' X- J0 D  a1 P+ S9 ]
  {3 r. @, I7 ^: c
  int t,s,j,i;! L# `& J8 U2 L; |
  t=s=(y1+y2)/2;. ]5 ^4 T( ~6 [1 h/ ~
  for(j=x2;j>x1;j--)
3 b$ d; q& N7 e/ k3 i( U  for(i=y1;i<y2;i++){% k3 |) N6 ?  A# z( g' m4 r
  goto_xy(j,i);- \7 g# d: a. i# M1 z, y  Y2 {5 U- N
  putchar(' ');7 y' ~3 M- i6 r
  delay(10);
; d) W. ?$ a1 t' u, P- y  }2 K! K4 Z4 ~$ m1 r3 r" r% E
  }
) y' z, m0 n7 E6 s$ }  /******************设置光标子函数******************/
0 ^9 N$ w" B6 d  ~# s( D* H0 I6 M/ `' \( J' T. V/ q
  void goto_xy(int x,int y)7 E9 l& z6 K2 b2 Z* {; T0 a2 f" m, b
  {
% p0 X; U3 B8 p9 s  A" \, |  union REGS r;- P+ P% F% q8 i0 T4 S7 _. U
  r.h.ah=2;
9 c% z0 w! D2 o/ r! F  r.h.dl=y;
' u: s7 j. ~# m6 _3 ^; Q  r.h.dh=x;
* l  p1 c9 J  U6 R! l7 A" B- U* u  r.h.bh=0;
( H  k/ S* _# F. l7 \  int86(0x10,&r,&r);  g) ?5 S) z0 v' _. _, J# A
  }
. V6 Y4 X- a. ^3 V6 i! n2 |  u5 O4 z2 n4 \2 U$ d
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 e* q% L' O1 z7 X" `0 x" Z" A. N% @" n
  void puta(void)
" p6 G9 w, y' z' o$ K2 K  {
& x& _  D6 _. Z4 n4 Q9 a  int i,j;
, {1 x; @9 J0 i+ C' N6 S  for(i=0;i<24;i++){, e- |5 D7 F9 I' e& L: N$ C' H. Q
  for(j=0;j<79;j++){
9 i( O( B. u6 o. t% p* Z! K& s. Y  goto_xy(i,j);
$ u* L- t9 y" w( E1 t! _' K! M  printf("a");
+ \! Z1 _" T& r+ O. ^  }
$ u' P8 f% G1 I: T7 E  }
3 l( p8 H# u  m4 E1 n  }

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