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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ M+ ~2 @/ F0 {  ^+ C

& S0 Z5 r+ l% B  x  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, A* A- b' v+ ^: \$ H
$ v# P: L9 A: }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
* h& J+ R0 ]' a2 G$ j  子函数及演示程序:
: J6 i* [. k* \" ?. ~
. T  G1 E2 s6 J" {4 }& I  #include<stdio.h>8 v2 C) U, Y0 y; b& K, x5 J
  #include<dos.h>
- ^( ]2 v4 @- m$ S0 p  #include<conio.h>3 @0 v1 \5 F" e" R' s
0 `8 x- X! }! x0 B0 h
  void goto_xy(int x,int y);
7 f) m6 Z7 x# U  j) o/ K  void dcls(int x1,int x2,int y1,int y2);
0 h+ s; N% w0 b" S, q  void bcls(int x1,int x2,int y1,int y2);! f; B- q4 Y) ]( [9 F& ~8 z+ \
  void kcls(int x1,int x2,int y1,int y2);& {5 @4 Z2 C& Z) X
  void recls(int x1,int x2,int y1,int y2);
, T. z& o" b! _; y/ j" e7 \; V6 D, f  void zcls(int x1,int x2,int y1,int y2);
: T' L) d3 v$ h# d  void puta(void);& g- H* R, E- I$ j' Z& B

1 r) `. R  L! i' o% A, Y8 f! b! J% k6 P+ e
  /*--------------演示程序---------------------*/
  c3 P! k: H* J3 s- \. y% u) S  main()
- }6 F* C8 i# k; S6 Y  {
+ c5 V2 l( [. t2 t  puta();; h; `4 R7 n, C; G5 H9 U' e$ r
  getch();
: ~3 C+ [, F) c# q( e! I  dcls(0,4,0,79);1 I( q/ M: F, m1 t0 H
  getch();9 k+ Q6 w$ A6 R' s. y
  puta();: n3 [1 V! [  m6 S% q/ a5 J
  getch();7 }+ |2 P3 k6 n( l7 X
  bcls(0,25,0,79);
% w& L! \9 d' I% V/ Q- ?& \  t  getch();
! ?2 q& C2 J9 B  c" b2 T3 }  puta();0 z* z2 L- q, G: |8 z2 v  E$ Q
  getch();2 n9 o5 Z, [% Q. `5 t  v
  zcls(0,25,0,79);# K' c5 U8 U4 U2 x$ A9 }9 u
  getch();
% i1 P! I+ t( I0 a. c, N+ P. R  }
# |; M2 K: ]2 E+ b  /*********center clear screen(中心清屏)***********/- w. L# m$ v+ P, k/ _# F# M
  void zcls(int x1,int x2,int y1,int y2)
. }+ E9 G6 Z8 y  y  {- D/ I% Z4 s1 w  s4 o( k
  int x00,y00,x0,y0,i,d;! o" k5 s" P6 E' @! t2 q; B, J' A6 k
  if((y2-y1)>(x2-x1)){
3 x! S  ^1 J( F: S5 g, R: O1 c  p9 U  d=(x2-x1)/2;( j9 B3 g7 h2 x# z8 G' k
  x0=(x1+x2)/2;
3 |! D9 v; o; p8 d1 m/ w4 v8 r- V  y0=y1+d;. i+ Y0 W6 r+ T+ p$ D9 P
  y00=y2-d;
( x: L" u5 d. }4 P+ D6 h  for(i=0;i<(d+1);i++)
1 e8 K+ G9 E; b- C$ B: _2 n5 A  U2 l  recls((x0-i),(x00+i),(y0-i),(y00+i));
. o6 }, u2 U5 n7 d1 N. E  delay(10);. M: {! J: C2 B: p4 G/ W( `% |
  }- n  @+ o9 i4 @' y5 g, v% z& @
  else{% R' V; H; B0 |0 h5 Q& F6 Z- r
  d=(y2-y1)/2;- O; C2 o% p5 y$ P3 ^: i
  y0=(y1+y2)/2;
; [+ `% C, L* X+ L  x0=x1+d;
: p$ q4 ?9 F0 ?  x00=x2-d;
8 `3 j2 L+ t/ x+ [  for(i=0;i<d+1;i++): B: C  M' \3 A
  recls(x0-i,x00+i,y0-i,y00+i);
- N0 o5 v) ?1 H3 Y  delay(10);
7 k6 ~( T! x. f  {1 j7 _  }( r4 X' |3 n! w, Q8 F
  }
6 r4 U9 x- B4 F" ^6 r, |* \; @$ J! {# E
  /************* clear rectangle side(矩形边清屏)***********************/1 P( m) F, V' H5 k0 |$ Z& v
4 y2 z4 F  @7 {# e& M4 _; V! U
  void recls(int x1,int x2,int y1,int y2)
$ G! L4 W; J  a  {
3 S5 T8 e6 M. b3 z# n: z9 n  int i,j;$ y- |5 _, ?$ S' L- j4 ~& ^) W
  for(i=y1;i<y2;i++){
2 L  K3 Z, S* @" g" q0 P' Y* M    goto_xy(x1,i);# @! U2 j2 }2 ]
  putchar(' ');) F8 D# P& p$ e  x% }* j& T
  goto_xy(x2,i);3 F4 F# }0 C0 m* z/ s
  putchar(' ');; I, T  G& k( R4 y5 e
  delay(10);4 b: ?9 C6 h; O2 F  ?( P- v% }
  }
: \% a$ G. v+ I. G- }. }* \  for(j=x1;j<x2;j++){3 I9 ^0 y6 S. y! h& f+ ^
  goto_xy(i,y1);
' e. F. g; F' }% r+ \  \  putchar(' ');. J9 G" W# O2 y3 ]/ |4 f% L# ^2 o
  goto_xy(j,y2);1 n6 V& C) f2 r+ [" A) Q5 {
  putchar(' ');
' q( i) ^8 _" N  x$ y* D8 z0 x$ a( w  delay(10);
# r% y- Y7 F) m9 n3 F5 q! b  }
  ^+ R: d  V$ Q/ s2 n. i( R0 |  }
( f* N/ h) r+ ?# Z6 Z$ Y  /******************open screen clear(开屏式清屏)*********************/3 E4 Z2 {. Y2 O' T0 o  |
2 F4 z0 \+ ^: J! ]. |1 l
  void kcls(int x1,int x2,int y1,int y2)
# b$ T" C" M+ ~! ?8 r9 Y" W  {5 D; n$ J6 o; D6 X0 H& H
  int t,s,i,j;
7 b! h4 \8 b* g  e' V7 r% N  t=s=(y1+y2)/2;
7 t6 J8 B5 [3 c( S0 F  for(;t<=y2;t++,s--)8 `; e2 {" b5 I' z/ X6 e! y# o
  for(j=x1;j<x2;j++){
9 @" p+ l1 K6 w- q) [2 I# a* K  goto_xy(j,t);3 ^- _" D. h1 u0 L3 D
  putchar(' ');
( q& V# [1 B' S' j1 d, t  goto_xy(j,s);
9 \0 v' B; l( `" ~% G  putchar(' ');+ P3 h% T; T0 `0 v2 R1 F" L  M# ~& e
  delay(10);4 P$ A$ m: N* B9 r- {0 N' [
  }) r; f: k6 y/ H8 v6 r
  }
( _& _$ ]/ [4 u1 \3 `  /*****************close screen clear*****闭幕式清屏*******************// r4 `& l% v4 U" e7 c
: s& T& e$ P# M  f9 e4 `4 _, P  g
  void bcls(int x1,int x2,int y1,int y2)
" D9 P  l4 g. @+ H  {9 r1 X; n+ l4 T1 `7 K8 D
  int t,s,j;0 q2 D: V4 w( P' K5 Z5 |. {
  t=y1;
2 P& R8 m  s- n) L3 R  s=y2;) h8 i6 j' [* B6 F
  for(t=y1;t<(y1+y2)/2;t++,s--)
9 o. e4 c' x! |7 }0 i$ G! Z  for(j=x1;j<x2;j++){
2 I  a0 J8 [! l/ [) [" ~9 h! @% o  goto_xy(j,t);$ j' p7 B6 o7 s, y1 \! G& {
  putchar(' ');$ x3 f5 T! o% N+ D
  goto_xy(j,s);2 |* E; A; A7 [# a& G
  putchar(' ');
" j0 {7 o; n% L+ ~5 O7 A  delay(10);
( h' T4 U1 V2 Y; U1 k1 p  }
; F' \' I$ U0 e, {- Z  }' y* X1 P4 G& k
  /******************bottom screen clear(自下清屏)********************/! j3 D+ ?* o, }5 H$ W0 d, L

- `5 ?5 O4 }8 E3 e) o  void dcls(int x1,int x2,int y1,int y2)& P; |. B/ S$ Z* u$ ~
  {
6 s# X& H1 x# n7 _  int t,s,j,i;
8 t4 [) @# m. L- A# \1 _1 {  t=s=(y1+y2)/2;5 O: I" x- `8 x- N  F
  for(j=x2;j>x1;j--)
! D+ c0 Q( j. K* T1 \, c  for(i=y1;i<y2;i++){, l, ^* r8 v3 V, A5 J  E
  goto_xy(j,i);# y  N1 s4 d) h3 y3 \! y5 F
  putchar(' ');) j( P! H" P$ h. [
  delay(10);
& t+ n5 y' K9 a  }
# G9 U/ q7 o* D  B9 }$ D  }. J0 P# _) Y% F2 C2 z2 Z5 e
  /******************设置光标子函数******************/& x) j& B5 P- K1 Z/ ~/ W
7 o( t- H& r1 |$ ?! P+ L5 ^- n8 I
  void goto_xy(int x,int y)
. A0 g" a* C! L( V' t( ?  {' [) w0 p$ U% t$ W: T5 ~
  union REGS r;6 t0 T8 B; E% e3 ]# a" g0 H
  r.h.ah=2;# _# F2 _+ v5 ]  |/ m5 r3 L% h- k
  r.h.dl=y;3 y7 m" p9 W& i, s
  r.h.dh=x;
! z; }, B3 |( f6 T' T1 W  t4 `  r.h.bh=0;9 ]5 o+ \3 M- L+ I  I2 J
  int86(0x10,&r,&r);/ Q# p6 ~1 x) b/ W
  }
) \1 t" F8 A2 `% f( |# ^
2 Q. U% U& M" A3 E+ Z2 ?, N  /**********************在屏幕上打出一连串的a字母用于演示程序******************/& T, |! a$ `  x# }
' I' M3 O" A, y4 q0 k% H% `! F
  void puta(void)3 ~9 _. V! K3 U+ j. `0 a
  {) @) R; Q3 M+ R( V) m9 }' C+ b" W
  int i,j;
9 ^$ \8 \/ d! N/ D- Q9 P  `  for(i=0;i<24;i++){
# ^3 `; ^: r% p# R/ q  for(j=0;j<79;j++){
$ _$ Q3 Z0 R* t% w  goto_xy(i,j);5 ?$ ^. X0 p$ M" j
  printf("a");7 C. M. h* d0 @0 G. h" v" O
  }1 n0 Q- d; P0 h" r3 k5 G$ P
  }
' g  \. `3 P. M, E3 t; p& k  }

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