返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," v7 F  w5 p0 N' T# O

$ g  i$ B3 n- Z- E  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 L' c/ c; h7 q$ @. o) U
; U0 B! m! H$ j. ?
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 }4 V/ n0 D9 q+ Q" u
  子函数及演示程序:
; R3 M9 W6 Q3 f9 U( t9 _
# {( I9 Z8 m! y6 Z  #include<stdio.h>
4 y( [! m4 U& Z2 X- j! ?  #include<dos.h>" I( \+ m. h; p% m
  #include<conio.h>
' [1 M' P8 N& h5 f& c& o+ p0 I8 O' t6 ?+ Y3 N  Q4 l( d
  void goto_xy(int x,int y);; C1 O, K! N/ a$ J( h7 ?
  void dcls(int x1,int x2,int y1,int y2);
0 A( s* C2 M: M7 C  void bcls(int x1,int x2,int y1,int y2);
2 h0 ?- T5 K! n. k! j! R( z9 ]/ n5 l  void kcls(int x1,int x2,int y1,int y2);1 j9 X0 o9 I* p! s5 r
  void recls(int x1,int x2,int y1,int y2);; w0 V/ f3 b" v% \
  void zcls(int x1,int x2,int y1,int y2);, W7 i. G# a' ^: I
  void puta(void);( C* a- X' I4 U$ I  h. v

. p' ]4 o' D: I; Z6 I' z  }  O# Q
: K! {, d8 z: t$ b! O- m9 f  /*--------------演示程序---------------------*/. J$ C1 O6 q0 _6 l* S% P
  main()
& p7 u6 g3 l/ M0 B/ M! ~  {& l7 l9 y; V4 t" P+ p6 \! `! F# v
  puta();$ B4 k1 G. V3 e5 Z
  getch();- A( D# o0 Q7 `0 _
  dcls(0,4,0,79);
: r. p$ |1 T7 R! E  getch();) {  I8 \$ ~7 M2 ~+ Q. e5 W7 q# ?
  puta();
8 l- ]9 N7 {0 r" u& D( y* w  getch();
6 K/ a( }: w6 R$ k) h- l  bcls(0,25,0,79);
8 k0 h* O9 y: W; l/ P- B: o0 f% }  getch();% I: K- F0 _3 C8 o) K" E
  puta();
8 f& ?9 t$ D. d0 m5 I  getch();
! B" J) W2 x' t( h* W/ V  zcls(0,25,0,79);( O$ R1 `1 c: A4 B
  getch();
; h$ ^( q' }. K/ c* o% o1 D0 ?  }
5 [3 r7 `  ]) J3 [% }  /*********center clear screen(中心清屏)***********/' L- _5 X' X8 ~  f) t3 [6 j$ @5 R7 E
  void zcls(int x1,int x2,int y1,int y2)
- I8 G  }, ^' s# U) p2 E3 J6 m  {
- |# I5 S5 I6 }4 f  int x00,y00,x0,y0,i,d;
, B; s5 K% ?, |  if((y2-y1)>(x2-x1)){- o; r/ ~5 [$ w2 J5 n0 a
  d=(x2-x1)/2;" H% K- G  d5 n  o. b" y
  x0=(x1+x2)/2;- X: Y( k" ~$ I, a0 O8 t5 K/ r) E
  y0=y1+d;
5 I9 Y( [+ @5 K; z2 x% e+ ~. f  y00=y2-d;
4 O0 Z' ~, \: Q( [- S4 G  for(i=0;i<(d+1);i++)2 G! R5 Y! D# p5 G! q
  recls((x0-i),(x00+i),(y0-i),(y00+i));) K, n$ t* q% S9 N( j) x
  delay(10);
4 _4 P( T) |. k4 F2 ^0 P' E  }
# u: V6 K! V& K5 h) {  else{8 c( Q. A6 K' s* D4 u: j
  d=(y2-y1)/2;
; T; h6 q& }; y% n6 d( ?  y0=(y1+y2)/2;
8 N2 a: Z( m  A3 @, S+ o5 Z/ i# A  x0=x1+d;6 k% Z5 g$ N. P6 j6 g1 S
  x00=x2-d;! h  B3 {# [. N3 x; M
  for(i=0;i<d+1;i++)
- r: K& n, [) t' B! u0 L+ l' p  recls(x0-i,x00+i,y0-i,y00+i);
3 Z" m; J/ V& t" B/ n8 F2 d5 r3 X# W  delay(10);
+ p: e, k0 N+ ^0 Y8 ^  }# [$ q4 L2 g) y- o, Z5 l# h: u
  }
2 @- A$ J4 Q1 g2 @3 F9 T4 V
& M, F# e: ?4 A' L  /************* clear rectangle side(矩形边清屏)***********************/
# Y3 R) B9 m% |. d$ N9 a  }. T( J6 B) B) C3 V+ U; z: g+ O* x% G
  void recls(int x1,int x2,int y1,int y2)
) X; k/ A5 G  O: y+ ~4 U  {
5 y3 C6 W. z" i2 x  int i,j;! d# N2 @$ P+ w; I% x$ G* p
  for(i=y1;i<y2;i++){
0 w& M+ w9 d" [# O4 \7 a    goto_xy(x1,i);
/ C; b6 `" ^) ]# H8 A% m  putchar(' ');
9 V  k& ~: {- `' a  goto_xy(x2,i);3 l2 G* Y/ g7 V  C# W
  putchar(' ');3 F3 q. W  `  e: _6 c
  delay(10);+ [* @7 _: P( d) h
  }
0 f, k. V: [6 B; E: b8 N  for(j=x1;j<x2;j++){
7 U. O+ b6 Z5 g' Y, C% k  goto_xy(i,y1);
. Z8 e! U( ?  ~  putchar(' ');* {" J% P6 {! Z" J5 p: |; D
  goto_xy(j,y2);
6 h  X; b) z+ @" |  putchar(' ');' F' C! ]+ y) {" X3 F
  delay(10);3 U; c% t+ [; |, _
  }$ f$ j7 K' B& g
  }
* x$ _; h6 B! K9 B% i2 @4 j  /******************open screen clear(开屏式清屏)*********************/
3 Z9 z! T/ D/ P2 ^- M! g4 _% f0 U; t1 n4 C7 o# C
  void kcls(int x1,int x2,int y1,int y2)3 \  x: ~+ q2 H" d- f2 H6 z2 S
  {
/ Z$ b1 C- H$ \0 a2 G7 }2 q  int t,s,i,j;
2 {3 @0 j2 {' {" u% G4 z  t=s=(y1+y2)/2;5 `8 J2 g* s9 n. Z* B# i  l
  for(;t<=y2;t++,s--)
2 w/ n+ E) Y# `! F5 @  for(j=x1;j<x2;j++){
( b3 [( A9 {: h  goto_xy(j,t);
$ z5 s6 j$ V% s8 r0 A) R1 e+ f  putchar(' ');& c" ^5 M1 r: S; ?0 f7 G" X9 g
  goto_xy(j,s);9 f% Z2 r) t+ P3 Y+ v* l
  putchar(' ');
$ {1 w" _! A% w# K7 B, H  delay(10);1 u, e0 ]) ~! b* |  d$ v- J; H
  }
" z7 T) t" e9 [  B  }
  c0 {: @# |1 G4 R/ [7 a0 V4 n  /*****************close screen clear*****闭幕式清屏*******************/) I0 S- m  t  k+ V6 q

9 U$ d; Y& ]1 [, S6 F. D- f  void bcls(int x1,int x2,int y1,int y2)
4 M$ W* C4 I* q# R" p. K/ B  {
) N! N; M4 y* s: v+ E/ n  s# v  int t,s,j;
5 e( p; B! Q6 d. `: ?) M  t=y1;2 M; B0 q; q$ a4 Y% b  X2 D
  s=y2;/ e8 z( G5 j' \! P6 X3 O3 v. P
  for(t=y1;t<(y1+y2)/2;t++,s--)
. {2 z" Z( @$ i" M! y6 }  for(j=x1;j<x2;j++){
1 {) x- e- c/ E/ w  goto_xy(j,t);
/ x* x5 z& R# ]! n( d" z2 S) R  putchar(' ');
9 l8 [/ w, a7 v0 m) i# q) ?  R8 M  goto_xy(j,s);
. Y* T9 n' o! U) @6 |  putchar(' ');& v9 ]. L# V2 ~
  delay(10);
+ s# x5 V/ h( M: r- [5 X1 ]# Y% L  }
/ L0 T  s, v5 y: [* g  }
  z1 ]; G' K! d# S  /******************bottom screen clear(自下清屏)********************/1 s+ M0 j% ~& s+ F( K8 j6 ~

  @3 P( ~* j1 Y, V, J  void dcls(int x1,int x2,int y1,int y2)
' B; m* V1 J; ?6 Q$ L6 \& e  {* O9 c) b$ u* }- {4 Z. W
  int t,s,j,i;; N0 E8 E+ {" S- D* n* m1 m
  t=s=(y1+y2)/2;% |) l* a9 k+ f  n
  for(j=x2;j>x1;j--)
' E2 _6 P9 }# o2 Z0 V  T* X  for(i=y1;i<y2;i++){
4 h0 i3 S+ n  v# T* t0 Z  goto_xy(j,i);+ X; x/ o" U( Y( J4 K! l
  putchar(' ');
! l/ d9 G* b/ V* V! m+ ^% `  delay(10);* \' m& H; S$ s
  }$ |9 y6 c/ C" A/ V6 W/ `) T4 j0 n
  }
( C' R2 I* P" K+ ~* r( k  /******************设置光标子函数******************/
& r  j  J. X( z* l) S3 g; d- M5 c
  void goto_xy(int x,int y)# O( U8 O; |, s
  {$ H0 @3 \, C% Z3 i# n
  union REGS r;/ Z$ _5 T; G8 X' K+ m
  r.h.ah=2;$ O4 Y- K/ H  }7 N8 R, _% j7 B
  r.h.dl=y;( Z, W/ k& H2 N5 U; T& M& D8 g. h4 }
  r.h.dh=x;5 o4 a  U4 ]# F1 j  S1 l
  r.h.bh=0;$ L) ]' t- e! J7 \. k3 u
  int86(0x10,&r,&r);9 e$ O% {4 c, n- _7 [) l* H1 B. b
  }6 j1 g: L2 p6 w! X
$ v% n: U1 ~, s( J  z" `
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/6 u* n' o4 \+ N4 f9 G4 ^0 n6 U

# |8 i: D5 q% S6 k7 ^  void puta(void)# _) c: ~4 |, l6 \8 v
  {
: x( B) D- d7 e, P, E  int i,j;
9 ?1 I' G" z2 U0 N  for(i=0;i<24;i++){
2 U% ]/ A+ X& p. O  for(j=0;j<79;j++){" m  l7 m( s( }, P; }
  goto_xy(i,j);
( ~* u: b& y% c  printf("a");
7 I, [- D  ^; _' I: ]- s  |! N; I  }
  Z8 S0 [* X. |. Q9 L  }
$ ?5 T$ W- D5 |2 F1 g  }

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