返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* @5 q0 {, U5 M6 ~* p
) |' B6 h6 y1 r( `, R. i& |9 ]) T" w, C  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+ u# W3 t6 W" X( m3 h* z
+ i9 C& U" n, U) k5 R3 K
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 v: e- t/ b& j
  子函数及演示程序:
/ _  |- {- B$ H! R. f& N9 r! f2 P1 l/ N
  #include<stdio.h>. h; z$ S* U3 P/ |6 C
  #include<dos.h>
& n* S1 k7 g: ^1 V$ t0 ], p  #include<conio.h>. i% X% n, O! o6 [
; g" J* G8 F$ n1 G9 X' o
  void goto_xy(int x,int y);- Z5 t4 {! p& ^9 A2 `# g
  void dcls(int x1,int x2,int y1,int y2);
7 l" w0 m; e6 _  M; V8 e  void bcls(int x1,int x2,int y1,int y2);1 Z' j* H4 U6 g
  void kcls(int x1,int x2,int y1,int y2);1 T, J* s- E; ~3 n" Q" U( B' M
  void recls(int x1,int x2,int y1,int y2);! L: W7 {8 \0 K
  void zcls(int x1,int x2,int y1,int y2);# H2 k% _* @7 w5 y
  void puta(void);
3 x7 ]+ Q0 o( ~  h! [/ g' J, E/ Z. D/ Q+ E+ K5 K% L  Z* d( [

; t3 P  M( P! n9 b/ `+ F, c; E0 J. D/ Y  /*--------------演示程序---------------------*/
$ g, N, N5 F, x1 E) [2 s  main()
$ ?! s5 R$ e0 ^: |$ j. ]  {
- z2 M' Q& b, e0 _( [  puta();* g. B( Y! w: |% B2 Q
  getch();
# W! K- ~2 j' Q5 g4 F0 y/ T  dcls(0,4,0,79);+ b8 _+ r# u* S+ U- B$ }
  getch();  G3 }  z) Y6 M
  puta();+ G3 T. V( @$ K2 F3 h
  getch();( B) p7 S7 b' }/ ^
  bcls(0,25,0,79);' Q$ y( _$ L1 B$ K$ i* o
  getch();4 _3 U- V* r0 p! n( j* U8 J" F
  puta();
% L* C- g& \6 l% S3 C* ^" x  getch();
( i/ n' }: {/ m: l* L  zcls(0,25,0,79);
* n% `6 F- `! k0 F, z- z% ], e  getch();) U0 v' M0 S+ p+ h6 v; c) A
  }
7 Q# X# z+ j% i( x. ^/ H# M  /*********center clear screen(中心清屏)***********/  b5 D+ T( A* {" ^8 t$ ]
  void zcls(int x1,int x2,int y1,int y2)
, j) o5 E0 N# n; L& m  {7 ~& o& C0 j) H
  int x00,y00,x0,y0,i,d;
) H8 x' U0 H0 h0 J  h  if((y2-y1)>(x2-x1)){6 w( I* i: C' g: V) X. U8 ?
  d=(x2-x1)/2;; D. A3 o1 ?: T2 j  b, ]0 F; t. _2 T1 d
  x0=(x1+x2)/2;* V  R3 ]  B7 b* _2 R5 l, i- ?7 @- k
  y0=y1+d;
  e6 c. y) ~( h) H& z  y00=y2-d;
' r- i5 k" _& F" t* d$ \  for(i=0;i<(d+1);i++)# R9 B* n3 g6 N% {" C5 }2 Z2 i4 K
  recls((x0-i),(x00+i),(y0-i),(y00+i));
+ m9 z0 u- \: Z% \( R3 ?  delay(10);
8 c9 I: E. M, b! M  }
( i% T$ _5 x0 Q+ `  else{* W8 e1 n$ V) J6 A% Y! \  O
  d=(y2-y1)/2;' l7 _& x1 @7 {/ T- T
  y0=(y1+y2)/2;( x4 J3 K3 l3 w8 \* C- S# Z% n8 Z4 ]
  x0=x1+d;5 V+ ]4 y1 N0 }, B3 t
  x00=x2-d;
3 f9 u! p" K5 b  {  for(i=0;i<d+1;i++)- ~1 [6 S, r6 Q
  recls(x0-i,x00+i,y0-i,y00+i);
& B% @3 p: A9 Q) I- K  delay(10);0 {  B, l# Z# A8 w
  }
, j5 V8 G& J* W0 {3 J5 O! Q# O3 f  }
& L2 X( i, c4 D  U5 d/ ]/ b
% D, l8 v" d- y2 B" T% `, X( ^  /************* clear rectangle side(矩形边清屏)***********************/  t' k" A2 t$ D# ]! F7 O! J

8 W# H) F4 @; X; O7 A  void recls(int x1,int x2,int y1,int y2)* u- n6 g. A( X0 R' a/ m' q* a
  {, M6 }" k, {* b% E1 t6 c2 Y& P8 F  T
  int i,j;# o, X  o# e2 m; [% D& m
  for(i=y1;i<y2;i++){2 y- \8 w" p( \( M/ [
    goto_xy(x1,i);
- J5 `0 ~. I$ l0 T1 W1 u  putchar(' ');
8 r  ~7 b4 Z9 L& F  h3 a1 h  goto_xy(x2,i);
" Q9 t4 t% G- R: U" J+ E  putchar(' ');
, c$ ^) F* x% H+ ?  delay(10);, c5 R/ _7 V8 L/ P) Q) m3 w( B
  }) c; }5 b5 ~  S* b4 |
  for(j=x1;j<x2;j++){
6 M' D3 E) R! K6 g# b1 l  goto_xy(i,y1);
' P, X, O0 S- ]! S6 I- @  putchar(' ');6 i* T$ D( k  G+ _- F: p3 v
  goto_xy(j,y2);7 e$ B4 R: V) V; Y# a3 @$ {- ?- m
  putchar(' ');
- X4 s' u; ~# g8 N9 g% z0 c  delay(10);
' V  k, ?# P! A' }$ h0 d7 Z  }6 g, B: E+ o; `* W0 X( J$ r6 R
  }
& X5 t0 U4 }+ u  ~) c8 k# c  W  /******************open screen clear(开屏式清屏)*********************/3 |9 u' D5 i0 @8 K; A" c. O

4 z1 {0 |' Q4 m) Y5 y  void kcls(int x1,int x2,int y1,int y2); {0 O6 R6 }0 r4 L8 u+ A* H
  {) P* n8 A+ i" ]; f1 |5 @
  int t,s,i,j;
/ U6 V- U7 Y( _! s) }  t=s=(y1+y2)/2;# n1 o. N. {9 T  b. F  e
  for(;t<=y2;t++,s--)
7 \. s" ]9 Q( I) h+ z  for(j=x1;j<x2;j++){
6 [& D7 M$ H: X  goto_xy(j,t);% E& Z  X' n; A
  putchar(' ');
" W! p0 d; ~# [3 b4 @, A  goto_xy(j,s);9 b, w! X8 {& R
  putchar(' ');- k) ]6 d' L' W
  delay(10);6 l  ]: m) v. n6 E/ F4 q3 W
  }
& k2 a% P6 \/ K) [/ p2 k$ u  }# ]0 B5 c7 C" J% S& n7 F+ g/ \
  /*****************close screen clear*****闭幕式清屏*******************/
9 d! G; h  u+ _( {5 X0 O4 f9 ]5 u9 |7 L% C0 r2 S
  void bcls(int x1,int x2,int y1,int y2): Y. k7 X! X+ n* b3 g4 S$ C
  {
0 l7 K* v' m3 Q6 r  int t,s,j;7 Z* ?- B  r/ J- }7 S1 r/ p
  t=y1;
# R. U  c5 K  q; g1 s, Z  s=y2;5 {/ o( b% F* X! I5 r
  for(t=y1;t<(y1+y2)/2;t++,s--)
" l( q7 _% m" p& X4 ~  for(j=x1;j<x2;j++){
8 a# p0 o6 v4 F$ s3 [2 n' R3 ]3 u  goto_xy(j,t);
) j. V: D2 e3 e9 i3 b  putchar(' ');
& E! \% K. d1 _# P) K7 e  goto_xy(j,s);1 F* Z% f/ \; ~
  putchar(' ');
9 N" t6 j9 _# T9 m  delay(10);% E" e2 ]8 f/ n8 S9 f; G8 ^* |( M
  }: }% N" ?( T- k' N' }3 ?: Y
  }
: {3 v4 d& F4 Z3 y2 e8 N  /******************bottom screen clear(自下清屏)********************/
. ]% t, n- S# d( e5 H" ]) M+ s" Z4 a' a0 J
  void dcls(int x1,int x2,int y1,int y2)
: |6 B  M/ O" V  {4 D+ m* q1 ]1 ?
  int t,s,j,i;
' {  a5 J0 ~. y$ t/ V& w& d& }  t=s=(y1+y2)/2;
$ H+ F; L6 }; }: G" l  for(j=x2;j>x1;j--)
* h4 i, u( T! L# N( Q) y, e. z  for(i=y1;i<y2;i++){' B% ]8 U3 y2 u
  goto_xy(j,i);
5 F8 E" K6 l) A' O; Z& y  putchar(' ');
) ?9 z3 y5 m0 l; r4 I  delay(10);$ Q5 B( r; F+ f: H  [: o
  }
9 f. u6 q! z& U' a; u  }
! ~7 \( |4 o! `7 O& q4 v6 Y+ ?  /******************设置光标子函数******************/
. ?1 b( Q4 j% Z; a$ R" i* {9 R; `6 j$ ~! S3 w9 h  ^
  void goto_xy(int x,int y)
0 y9 X: |% e. A+ S  {* y, m9 W% O7 W; I& ?
  union REGS r;' T2 [" U# N5 t$ R0 i, Q
  r.h.ah=2;- p. d# q+ m9 D9 l; y, Z: P
  r.h.dl=y;
& Z9 G) Y& d7 F6 v% r3 v  r.h.dh=x;
6 D3 B* _0 T9 c" c% h. h  r.h.bh=0;1 w# G( l& B" T/ K7 d
  int86(0x10,&r,&r);2 W2 E8 A7 _* H2 l# B, `* y7 D
  }0 @6 \. p8 p7 \

( f) [$ S, {! y' Q0 U* N  /**********************在屏幕上打出一连串的a字母用于演示程序******************/6 o; @5 y5 h+ Z  C# C- J8 w, n
$ K8 n% m3 T5 F6 Y( E  q
  void puta(void)
( g% C0 a3 H3 H( O# @& F  {
' w  D6 F  T1 H& G4 O9 d/ S  int i,j;
, x2 C2 d; v5 c8 ^  for(i=0;i<24;i++){; k- @8 N0 o9 z# s% @
  for(j=0;j<79;j++){
, v. a3 P( d7 l5 E; t: y# Q  goto_xy(i,j);* J! v1 T: V: S7 r" @) x% \8 y4 L
  printf("a");
& L2 _. f0 C, U0 M  K2 j  }
# b; P& E( m2 D" A  ~  }: }; x/ K$ p9 J; _& T
  }

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