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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 A0 M; `/ W) p' h& Q. ?9 D$ R  N6 N" M
- f+ `; f+ _- ]/ R  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 H/ W7 I+ e! Z0 S! j8 p

  p1 w% D5 Y  v' `* ^7 T+ ?  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # ~' L1 _% |! }/ a
  子函数及演示程序:
( D3 B% s0 i; P3 q0 ~8 S4 Q: J" W& ^6 i: D4 f  P6 h
  #include<stdio.h>
4 g1 O& S' A- f# G% D$ }  #include<dos.h>) ^* f/ |3 d, u
  #include<conio.h>
2 ?! u3 j9 P1 y3 b& A/ Q( A3 [) G' e
& g$ M: n& t1 Y, i) T$ }  void goto_xy(int x,int y);
3 F2 i( \& {% E. I# j! r3 g  void dcls(int x1,int x2,int y1,int y2);
1 L! @& T. K* ?: _2 e6 {) F  void bcls(int x1,int x2,int y1,int y2);
1 j6 [3 P+ P+ Z" Q, w  void kcls(int x1,int x2,int y1,int y2);4 \+ C9 B2 H+ @- H4 t4 X6 n4 I
  void recls(int x1,int x2,int y1,int y2);8 i7 T  A  K  x" M$ f
  void zcls(int x1,int x2,int y1,int y2);' P; O' e( P5 R7 T- Z+ p3 g
  void puta(void);+ L) n( l8 x3 {- g! Q1 @. p$ _* ]) r5 ?, _

( l3 A' s  X4 ^' O4 k. Y; u7 b" D' e. U7 r  {- _6 D
  /*--------------演示程序---------------------*/5 u, w" X. D& W  Q
  main()/ M' V: L9 o; j4 \, Y, i4 q
  {
0 P* o  ]5 E7 [9 t: M5 ], k' K" K  puta();
) c9 d3 T( X2 f0 B# }# Y$ s  getch();
. a0 g" L+ F& j1 H! r- ~" p3 m  dcls(0,4,0,79);
: f, [+ g- \: t3 y  getch();
/ E& H- V* g" W' s9 Z9 B# B  puta();* d$ \/ }+ q6 j: O) Z
  getch();
0 @$ \, m& {4 v2 J  bcls(0,25,0,79);
) `$ l$ |: p* Q3 {+ Y9 J  getch();
" s. ]0 U# ^& |& s/ x  g  puta();
" k6 I" B& O5 B) O  getch();
! U9 S# o& J. H9 H8 F! [+ z' r  zcls(0,25,0,79);
8 m6 m, D. F  m  getch();9 a: I1 \9 C; |7 m
  }
" T) S) M/ a$ e2 ]3 V) c  /*********center clear screen(中心清屏)***********/* D8 ]5 C2 ~" g- F! V; D; _
  void zcls(int x1,int x2,int y1,int y2)8 o& W0 p( V% J$ D# T; q
  {
, {+ {9 p4 Q4 Y" H0 T  int x00,y00,x0,y0,i,d;
2 w4 h7 u4 Q2 O  if((y2-y1)>(x2-x1)){
) Z$ q" ^4 j5 f. a0 }; Q  d=(x2-x1)/2;
" e( F, f- r; }  L2 X  x0=(x1+x2)/2;& K, C' r- H3 Y) c
  y0=y1+d;
3 |9 w) W4 Y  F, i  y00=y2-d;
, N% G. V. d5 z  for(i=0;i<(d+1);i++)
2 n) O* B2 x5 T. v* w6 L: @  recls((x0-i),(x00+i),(y0-i),(y00+i));/ a6 I1 }* |; d5 `  I
  delay(10);
4 I, n: s; l8 X2 M  }
9 W) f+ g6 ~$ b5 f, ~  else{
, @* q% Q8 r4 P/ M- N9 V3 E  d=(y2-y1)/2;% [4 @1 ]+ I$ j" g# K* ~+ j
  y0=(y1+y2)/2;1 v7 V* I- Y/ [& j, _+ Y: V
  x0=x1+d;: ~" T5 o- [/ f3 i" b
  x00=x2-d;9 _# K3 m3 N4 ?, a/ Z
  for(i=0;i<d+1;i++)& \6 J, w+ Q, S. U5 u
  recls(x0-i,x00+i,y0-i,y00+i);
+ p0 G! \" f* g7 @# W3 a  delay(10);
* i1 |3 S! B+ l. w+ C" g  }3 u+ U5 r/ ~2 M2 F8 k2 b
  }, K7 q& i. R) O' Y& M3 i  y6 n

/ ?9 e' @) C6 N2 l& ]  /************* clear rectangle side(矩形边清屏)***********************/
. B5 S: I/ m1 T% B% t; A
' d" q$ d0 Z; X; O* C1 l  void recls(int x1,int x2,int y1,int y2)3 j4 m; j5 X1 U( q) D+ q
  {) N/ [& Q9 O* X! k7 H
  int i,j;
* p, B9 X) x# Q3 b* }- R! `3 ]  ^  for(i=y1;i<y2;i++){, q/ H4 ~: k& m+ y3 b2 O
    goto_xy(x1,i);2 w% f2 ]; D: O: O
  putchar(' ');! r( w8 {9 s8 Q' P: L" u5 O
  goto_xy(x2,i);
: `) r4 y0 e" p  i4 O! \+ R9 G  putchar(' ');
# u* n. _9 o' r  delay(10);
6 f7 i$ ]9 F/ }% y: I% |1 t. E' y  }( u: S7 F- [: P0 r' Q+ `
  for(j=x1;j<x2;j++){! }2 B9 i# E" ~9 @2 v( P* ?1 g
  goto_xy(i,y1);
  m+ I$ o5 A% f* a- C+ H' [  putchar(' ');
( ?' G- u$ J/ Q9 M% w# m  g7 h  goto_xy(j,y2);
) s6 U- f  b+ W1 g7 n  putchar(' ');6 a. W7 `' O5 ]3 E$ O% c* u
  delay(10);
  V+ `$ q7 c$ j  }$ v8 C2 V; i  ^- i" D& Z) a4 G
  }+ N; A, S9 H2 |" Z
  /******************open screen clear(开屏式清屏)*********************/
0 H& h9 d  O- W' S5 z
6 I7 N& G, U0 {& R  void kcls(int x1,int x2,int y1,int y2)
: t9 `4 s7 @; |/ C9 V8 |  {+ q1 m6 L, a4 d7 _, ?5 Y" \: i
  int t,s,i,j;
( N! b# e" g% B2 g4 V1 n( c5 i  t=s=(y1+y2)/2;4 U% Y( o% s" Q! [
  for(;t<=y2;t++,s--)
1 M# U' `! |4 ^, }: W2 f% ~  for(j=x1;j<x2;j++){* g. d  ^2 G* A$ D/ i# D3 _8 J
  goto_xy(j,t);
- Y) L4 G' [# o6 b% U" P8 T4 c  putchar(' ');$ I4 k# x  V' p: h: x
  goto_xy(j,s);
7 t  p  U  D% }6 c9 i, L& T$ d: I  putchar(' ');: y7 x5 @2 m/ w6 k
  delay(10);, u- q* l% m7 \4 w. y3 y9 F7 ~6 r
  }
% k, ^+ x& F2 U% w5 E2 K. w% n9 F  }1 _3 W7 ]8 H8 T
  /*****************close screen clear*****闭幕式清屏*******************/
- ^8 }9 R1 M7 W+ p
4 S3 U* ~1 [0 z  ?- A9 M  i, {  void bcls(int x1,int x2,int y1,int y2)" p1 R, I0 N5 W5 g4 `
  {
# Y' n* f+ B. X$ v) R0 @  int t,s,j;7 s2 t, J( `& ~
  t=y1;8 s+ ~2 d& C& P
  s=y2;
9 G9 K3 u6 I1 j" J  for(t=y1;t<(y1+y2)/2;t++,s--)* Z5 ?: R. T; z6 C6 X4 X3 F* E
  for(j=x1;j<x2;j++){
+ y4 W8 z3 S' G3 I) a: H, e  goto_xy(j,t);# a3 e- M# j9 i
  putchar(' ');" ]  }5 y- U7 O" d" ~, B
  goto_xy(j,s);7 B0 b* q0 S% E1 e
  putchar(' ');% N* W: ]4 X: A9 q, n4 \
  delay(10);) ^. V, M; _7 [0 d- ]' H' C0 G! r
  }
: j. ?$ [' O+ r% v: Y0 I& {, T& _) k  }
  y/ F7 C4 E) l# d+ I  /******************bottom screen clear(自下清屏)********************/
- D" I2 `: |8 m2 t5 u. _# b# Y: o# T
  void dcls(int x1,int x2,int y1,int y2)
; j: }4 W, T1 V- j: |, |" b$ i1 s: H  {
2 _3 _* w" `2 M, ~7 h1 F. N+ J  int t,s,j,i;2 H& Z) X2 \, i
  t=s=(y1+y2)/2;
4 [: p0 H7 |' P  for(j=x2;j>x1;j--)
" n3 q# L+ t/ ^: j6 ^  for(i=y1;i<y2;i++){
8 V3 }. e) n  T$ L4 g, X6 H% ]  goto_xy(j,i);
* R4 l/ c( |  i. l* l9 ?  putchar(' ');
4 q* e1 D( U' f. x+ n  delay(10);! D3 T: |1 K* P
  }
5 g4 [1 X+ i8 T2 A# k% v6 P  }
8 A6 P* i- I: e  /******************设置光标子函数******************/
. ^0 F5 @/ D" H9 _% D4 U, `. g% }1 P2 P
  void goto_xy(int x,int y)/ H$ c8 m8 s& L! K- ]
  {# {) P# k6 s' Y$ M7 [! d7 N
  union REGS r;
6 h3 L& u/ {9 e: ^& K+ x  r.h.ah=2;+ Q$ L  Q# x; \7 r/ L4 ?
  r.h.dl=y;
% X. o6 F7 U# C$ b& K* S5 {9 `3 m  r.h.dh=x;: H. I0 A; l5 B8 C
  r.h.bh=0;
3 h& r) h  y; _" K! U  int86(0x10,&r,&r);3 H& Q  a. ?5 q) O
  }
8 v+ }9 O4 F: ]/ F, G3 x: i9 l3 H4 K& U6 _% t/ N5 f. u
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 w! W7 R$ V+ |% o. v! H. B1 N& E! e, t5 ~# n
  void puta(void)
1 d8 I" S! Z4 q, c7 ]& a  {
4 {8 B: e" z: {1 ?  int i,j;& a* A+ m% N/ g. x6 Y% R
  for(i=0;i<24;i++){& }/ G9 [" m; Q
  for(j=0;j<79;j++){
  E8 J; E2 D+ }% Y1 K  goto_xy(i,j);* \) [  f( k# `. M# u
  printf("a");' {- F  M6 u* K1 h  X$ c/ o3 ?
  }
0 W) ]3 g1 w* X% w% e. l$ u  }
* C  L( P& C# G0 W6 s5 n6 X( L  }

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