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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
/ P5 W4 g# s" E! X! F' y5 [
9 N2 O! j3 u1 g5 L" K* j- l0 D  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* |" ^. o6 f, H  S, j" Z: k( W9 N$ [
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : ], d7 k, O9 O) g
  子函数及演示程序:5 r# v- f$ @! f% m" s
2 `7 d) J0 b" l# m( ]; W- @
  #include<stdio.h>
, e  r5 t3 ~( v! v3 P( S  #include<dos.h>
$ Y1 \' C- g: E9 U  #include<conio.h>
' y3 I( R2 C! C9 e# S0 @1 [; D( @+ K4 T. G% ?
  void goto_xy(int x,int y);
" e1 q. X2 x1 l. ~! h0 {% y  void dcls(int x1,int x2,int y1,int y2);
+ r% l( v* N1 f! c  void bcls(int x1,int x2,int y1,int y2);' W5 |5 P  W1 Z" ?8 B" U
  void kcls(int x1,int x2,int y1,int y2);
6 G* p0 j, P& a  void recls(int x1,int x2,int y1,int y2);" G& y+ i: d' Q* B1 ]4 ]! c' K% x
  void zcls(int x1,int x2,int y1,int y2);
& r% @0 t' ~; F& ?# R4 c. W  void puta(void);' b+ u& Z7 h( O+ Z# B& r

5 r4 G3 y5 ?1 K1 N1 c+ K; ~9 k! |9 n5 }5 f! o4 ^
  /*--------------演示程序---------------------*/+ S! ~  M6 k. {$ E4 E
  main()4 O! n- N2 V- W: ^6 @0 w8 h
  {
" `* l  M  @) z% A, B6 Q' J  puta();- _, {0 j8 _2 P4 C
  getch();- x! |4 k  }$ J: ]7 t2 ]
  dcls(0,4,0,79);( A8 c. @+ r; j9 o" @! d
  getch();3 S8 j9 {; P5 F) e! ?
  puta();; |  N4 R0 M8 R8 i/ \  m
  getch();* {' U+ z2 {( |1 W! T) x
  bcls(0,25,0,79);
2 z4 }  c6 }4 [7 Q  getch();+ `+ Y- X6 ^& P. e
  puta();
! R  S1 l1 s/ Y3 Q  getch();8 g8 W0 |  P/ ^
  zcls(0,25,0,79);
: [) d2 p7 K, l# E, t8 _% W  getch();
; U7 ~! D. F. ]0 m( U! V2 r. S  }9 P) v: l( Z5 a6 a
  /*********center clear screen(中心清屏)***********/" Z# w2 Q3 x: G0 u9 I
  void zcls(int x1,int x2,int y1,int y2)
" k% c- }- \+ y2 }: M% b  {9 a4 F7 h- e8 h
  int x00,y00,x0,y0,i,d;
4 Q9 O( f. S$ Y* Y3 Z  if((y2-y1)>(x2-x1)){
5 b; Z$ j* `, N! {" d. ^" G  d=(x2-x1)/2;
" f/ \' i' s7 Z$ h$ c. K6 m! z  x0=(x1+x2)/2;+ H2 e+ L' d/ c2 A  p! _* B
  y0=y1+d;7 Y" r5 a& J0 I/ f
  y00=y2-d;2 {0 L; P' @9 I
  for(i=0;i<(d+1);i++)& H% M5 u1 Y7 b* p
  recls((x0-i),(x00+i),(y0-i),(y00+i));
6 B" g$ E( O  _" w0 e) O+ r7 a% U  delay(10);$ a0 r' e8 c+ U, M: I5 A# K
  }5 L& x+ B' \2 E8 P3 s
  else{+ N) V+ w( D: h" M) j& k" T- R
  d=(y2-y1)/2;8 w8 y: }0 @  |% H) L
  y0=(y1+y2)/2;
4 Z* m# h6 Y  G  x0=x1+d;
3 C. {( u3 g% z# E  x00=x2-d;
1 s- K& ^1 M( ]1 ?1 v1 f  for(i=0;i<d+1;i++): X2 l9 T  U9 }* Y8 L  o, X
  recls(x0-i,x00+i,y0-i,y00+i);7 ?; {, d7 ]  }  |+ n7 W& e
  delay(10);& s6 \9 S1 K( R- V
  }$ X4 v) P0 A2 o; g" R$ d
  }
' v4 B1 ?" }* M! A; J0 v  x. N/ f  k' z, H% A  K3 Q8 ^
  /************* clear rectangle side(矩形边清屏)***********************/6 C0 v5 E4 B4 r; Z4 l. v! W
0 H  N9 e. A* g- m+ }, S+ J
  void recls(int x1,int x2,int y1,int y2)# j5 N1 ]4 |9 X
  {+ Z& ^" m6 W3 ~$ z3 z
  int i,j;2 F% q4 O: N* c6 ?# }9 h3 @
  for(i=y1;i<y2;i++){
% m; x" X$ w8 N: X% x2 W1 _2 S# T    goto_xy(x1,i);/ x9 J! v# ?' q9 C, \4 `) r" }5 y
  putchar(' ');
9 c1 z7 U' j0 A; N  goto_xy(x2,i);
: ]1 G, V% @1 H$ W  putchar(' ');
% g9 k: O$ `& W  delay(10);
  G# |. m8 t5 G* O6 Z4 s# M# Y  }/ o8 g6 n8 e6 B0 B. h
  for(j=x1;j<x2;j++){* ~2 S! S4 g8 J- K$ p6 H3 z
  goto_xy(i,y1);
; i; t  I% t( T9 r5 z9 y  putchar(' ');* @* Z% P* c. R! D9 P5 U. D6 ?' S
  goto_xy(j,y2);
2 }9 X; U- `' j' g  putchar(' ');1 t% u- D4 C, c) Z& t7 N* f' S" Q
  delay(10);4 \* y; m$ @/ e+ ~4 }( h1 l
  }
: r( z; r* S% B  }
: ~1 w7 k5 e& V5 l/ w  /******************open screen clear(开屏式清屏)*********************/  m+ J8 d  H: d% j3 c! h+ C4 u: }6 R

% R/ V: }9 ^8 S2 Q, J( d! O* H  void kcls(int x1,int x2,int y1,int y2)0 o8 M3 d' j  [' x- C1 p
  {5 d* n0 `9 Y$ c# Y! C0 \
  int t,s,i,j;
0 l! o9 a+ u7 b: N* B  t=s=(y1+y2)/2;
" G/ J% M. r: a  for(;t<=y2;t++,s--)
# Y+ h" L. o% [  for(j=x1;j<x2;j++){" b: j: M4 f3 `& x
  goto_xy(j,t);: f2 W- p4 c7 r( Q6 t
  putchar(' ');  b0 e4 b% h2 Q) L$ p
  goto_xy(j,s);
& k& z$ [6 G$ I# b+ e' f8 `  putchar(' ');
" ]3 W& |$ h& c% [2 o; P8 r! g4 I1 \' t  delay(10);; i# {: y' e% U1 Y% w4 X
  }# h: d8 l0 }+ l7 m1 E) H
  }
. [* ?: w5 M: @- @2 K; U, x( G  /*****************close screen clear*****闭幕式清屏*******************/  u6 h; T' W, A. S9 [! M

8 j4 Z2 S  P( ]/ p8 A# ^  void bcls(int x1,int x2,int y1,int y2)
( w8 g. S" G0 [/ `* }  {- r9 A+ F( h6 j7 C6 |
  int t,s,j;- E( M- L) O% S
  t=y1;) |1 |. o6 e. Y: Z3 V+ M$ Q
  s=y2;
* q1 q; R% g2 ]0 D: \# s  for(t=y1;t<(y1+y2)/2;t++,s--)) X2 H7 u+ d. d$ E
  for(j=x1;j<x2;j++){
( j  z2 ^' O) W  goto_xy(j,t);
2 x3 K$ {* B: n! l% p% t  putchar(' ');
( K0 A* Z  O  Y+ S; p5 K- g  goto_xy(j,s);
2 D% w; E1 f! r, a  putchar(' ');
2 e7 w8 I' L( u+ b; m  q9 a3 s( `  delay(10);+ {1 ~! K1 C, z. w3 I8 c
  }, R( y2 o1 G' j5 U
  }/ u8 T3 h: p. s1 x
  /******************bottom screen clear(自下清屏)********************/
1 N, n  r" C2 q* r, A) J) |8 Q! t- x
  void dcls(int x1,int x2,int y1,int y2)
7 j( ^" b/ M( H  {6 d/ `6 G9 {& P' {0 n4 J
  int t,s,j,i;, v! P8 S7 u/ i4 _3 A, \! X
  t=s=(y1+y2)/2;
" z0 Y9 M6 e7 U/ ^3 ?  for(j=x2;j>x1;j--)& `  a8 y3 K( I6 R( w9 m" H$ Z
  for(i=y1;i<y2;i++){
  _) \' Z- M( i7 v2 e. q  goto_xy(j,i);$ N& X8 S4 X" |& B) B) a! G- e
  putchar(' ');
/ q, G7 K7 d; n; `! r7 K0 c  delay(10);
; _0 ~- \( H) I8 Y. P  }
8 H/ F. `& ^. f) y  }( Y& S$ h! f+ S/ K, G" n
  /******************设置光标子函数******************/
3 ]2 J2 y3 D+ m8 }5 Q2 X$ G- _7 N
. f* w8 |8 _# l" D4 N* \6 K" U8 F  void goto_xy(int x,int y)
: j3 K$ _% p/ v' m7 ~$ w8 k  {/ c8 y1 g# a2 Y1 U, \
  union REGS r;. y* n0 C) d7 |) a+ O5 T! N% V
  r.h.ah=2;
: ]% e+ O' f0 x) l8 ^  r.h.dl=y;, D: R  d) E6 a; R5 ^9 P) I
  r.h.dh=x;
2 u* g# w/ t8 G' o  r.h.bh=0;0 g) V+ i; ^' n9 x
  int86(0x10,&r,&r);
: p# I# {5 ]8 y5 q; j  D& u  }
" r3 k# D  }  p0 Z! `, H4 P+ I) `' a* V- T' s% ?
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; r, Y+ a8 k4 }4 I7 |( M$ A0 c
% `5 {9 }8 s& }- e5 B' l7 @+ K" N  void puta(void)
0 ^5 b7 \7 M) r  {! L/ o5 X0 v4 e0 r  H) m
  int i,j;
- H9 ^2 {  Q/ S9 X  for(i=0;i<24;i++){
4 @4 g, m  S" D8 @  g6 J  for(j=0;j<79;j++){
( _$ C  \  n- h6 e/ k  goto_xy(i,j);! W! u) F* A) ~8 B  G  Z
  printf("a");
; S5 E, _' Q4 d  }
) A8 M! k7 J- q4 w& l  }2 a- k. t! }3 |+ |
  }

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