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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 Q! o4 k% n* Q) X% z) U/ p% W: C( x; O" `$ Z3 l6 P
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ a# {& u1 }! c

( _) t  S/ p+ z$ ~- @2 w( T  w* l4 \  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: h0 Z- U" B# X8 T2 M; M0 g" f  子函数及演示程序:9 M1 n$ i$ Z, `1 y8 y% h
5 X3 m( s, i# F* Z( X
  #include<stdio.h>
0 ~5 Q# u) J3 F8 ]  #include<dos.h>
" M( q3 C, B) L3 u5 M6 ?  #include<conio.h>' n) @$ D1 K. Z

1 A) z/ ]9 j! A$ D0 ~9 g  void goto_xy(int x,int y);
4 d* o( J# l  E( }% o8 C, V  void dcls(int x1,int x2,int y1,int y2);
5 [, F# z' P- x& B' @  void bcls(int x1,int x2,int y1,int y2);
9 N$ L# O! C3 c  B# B  void kcls(int x1,int x2,int y1,int y2);
! E4 o& r  T1 k" ~* Z3 ?, e  void recls(int x1,int x2,int y1,int y2);3 h0 g+ n/ \& `2 Y* f+ H
  void zcls(int x1,int x2,int y1,int y2);  B3 n+ q4 _" w, W9 u
  void puta(void);
! A! O" t" D1 V) M! W) ^7 R! N, b# T  N! O- O
3 `$ D% o$ N* D- L5 c
  /*--------------演示程序---------------------*/5 \9 V( g6 b% L9 Q: R, z" w
  main()
' w6 O& A, a) T* q* Y  K: M  {/ K! {/ R: o4 v; L
  puta();
2 Z7 ^3 |; U5 Y$ h, D3 d4 W  getch();( P" a% S1 s$ _' }5 X2 I8 `0 `+ f( ]
  dcls(0,4,0,79);9 H2 |$ M" v5 N! S9 ^' u
  getch();
: W0 [  P& @2 X  f  puta();
" i: w2 _  r! m% M: i9 k  f  getch();4 k9 d$ Q% q6 X8 T1 ^( w) E7 x
  bcls(0,25,0,79);. e, R' a( q* C# c) L
  getch();
2 u3 O$ V. E; t2 \/ N  puta();
# K5 Z4 E+ x. Q. C  getch();1 ^5 \% v9 V: c8 z. x# S, l4 g
  zcls(0,25,0,79);
) w. u$ B& T6 I: `( H  getch();
* k4 c4 {7 K' I  }
2 c( f' ~% `& @8 u  /*********center clear screen(中心清屏)***********/
( Q) t& D+ G. l" F& U# W  void zcls(int x1,int x2,int y1,int y2); x8 k5 B7 Q6 K% z
  {" ]! d5 }9 c  Q, J- b6 _1 E
  int x00,y00,x0,y0,i,d;
8 ]/ o% U- @; y% g+ N. b: n  if((y2-y1)>(x2-x1)){
6 a3 a) @8 s& j: [, H  d=(x2-x1)/2;4 R/ M/ R8 `4 {. L- [* m% _8 X# b
  x0=(x1+x2)/2;
- J# ?3 ?- n5 q! u6 x  y0=y1+d;
: v( V. S& _1 c4 s4 m& ^4 r& _$ q  y00=y2-d;+ y( A( J" J; B6 D
  for(i=0;i<(d+1);i++)$ [5 G9 s- E; F3 A- Y; o' f
  recls((x0-i),(x00+i),(y0-i),(y00+i));  ^# }9 C1 y2 n# z5 w0 T
  delay(10);. G$ u8 j; K9 X/ a0 Y0 j  i
  }( g3 E/ T) f; h* r% A5 G9 l
  else{
+ k) N5 q: L  m/ k: Q3 x  d=(y2-y1)/2;; S5 m* J5 e, X; Q: p: I$ a) L& V
  y0=(y1+y2)/2;* \; `) r' L' `# z* |% m
  x0=x1+d;6 m4 `! v/ f# R2 s2 ^/ i
  x00=x2-d;
: j0 A$ I! N/ O& o# q' T0 [  for(i=0;i<d+1;i++)* Q  b9 ?, Y5 Y# `
  recls(x0-i,x00+i,y0-i,y00+i);+ w; _  Z' ?+ \& @, L. {
  delay(10);9 K! R1 ~9 X; O4 k1 d% W9 ?* @
  }
3 B  h- c6 ?3 p$ E/ U0 A  }
0 e! G7 y/ v( Q) K3 a7 G! T  w6 d9 d* d) `. V5 g' D
  /************* clear rectangle side(矩形边清屏)***********************/
6 F' a$ {; t( _8 w& C, t8 p. T! C# p8 f8 `) t2 y
  void recls(int x1,int x2,int y1,int y2): g* H, W& T6 J, ?) k! S! E% Y
  {
: r' H- p' W' [1 c2 C  ~  int i,j;
' U  X4 z4 }5 Y2 @! _. ^  for(i=y1;i<y2;i++){5 v; o: R7 T7 Y: u1 P# O
    goto_xy(x1,i);4 n$ }6 v7 b0 m% D
  putchar(' ');) |9 J4 I2 W  x
  goto_xy(x2,i);$ \% I3 q. Z7 @
  putchar(' ');- A6 q4 s$ i# \$ e# Q; Y
  delay(10);/ \2 h- g# V+ Z0 G1 k
  }
* @* S+ L( k: {, J" H6 P  for(j=x1;j<x2;j++){. k8 u' f4 l1 i* L6 h; f
  goto_xy(i,y1);! W. t: I$ y6 R) C* }* m
  putchar(' ');# {4 y/ m! J; Q) B
  goto_xy(j,y2);/ g$ ^" V2 R$ y
  putchar(' ');6 G2 n4 H8 R+ ^- j- J0 k( t9 Q) H
  delay(10);4 D- `! p9 `3 M
  }
6 t% q: a) ?( h  }
3 F3 i; o9 ], y/ P  /******************open screen clear(开屏式清屏)*********************/
* [3 J) q7 I' x. I2 `+ b% w8 x% @3 m! l5 y9 P2 n
  void kcls(int x1,int x2,int y1,int y2)6 K& \8 E: w5 t' B
  {  [6 }3 P: Z! t) f, S" \$ t7 A
  int t,s,i,j;- K: D2 r  T! ]5 Y4 x& L* y
  t=s=(y1+y2)/2;
9 o3 [: r4 r# R( c4 z$ i* p  for(;t<=y2;t++,s--)8 [. K% t) v& e, s  n; N
  for(j=x1;j<x2;j++){) [8 Z5 C) o, l& n2 ^+ v1 ]
  goto_xy(j,t);1 a  r1 c3 Y* t) b5 i/ s7 P) Y
  putchar(' ');
/ B4 {3 R2 W5 ]9 f3 e  goto_xy(j,s);& Q) y: y8 f" Z
  putchar(' ');+ M3 \5 n0 D" J5 u
  delay(10);- e! ~$ d5 D: [0 u+ h$ C
  }- ?7 Q' n% M& X+ S+ J
  }: l" \2 Z; D4 a* C
  /*****************close screen clear*****闭幕式清屏*******************/
1 @9 u0 _2 g$ L4 {  U# _* h
5 }8 h: }8 |9 `, n" Q  void bcls(int x1,int x2,int y1,int y2)
1 V  }. b$ S! Z  r  {0 R3 f' N; D( N; t
  int t,s,j;/ F" Z1 o+ X# t
  t=y1;9 F* G6 ]) j2 i" n, w: h9 ?, a
  s=y2;' m5 r, D, d* L- ^  h
  for(t=y1;t<(y1+y2)/2;t++,s--)
/ o5 |3 {6 W$ A1 ~' m) V7 ?  for(j=x1;j<x2;j++){
8 A6 h3 j' S$ @/ T+ x  goto_xy(j,t);
0 T: g- Z5 G. J  S  putchar(' ');/ X% C# m# S$ \1 j. u9 {. f. k
  goto_xy(j,s);
+ B) q- K' I) ^. \  putchar(' ');9 [) k, y) `& ~
  delay(10);
9 p; A" a; D0 S) @, ~, d  }
7 ?3 k0 n0 |7 q" `. w  }
+ i' t  T8 {$ L; X. V  /******************bottom screen clear(自下清屏)********************/: p) J: X2 b7 ^, J3 y( P

: r) B' l% Z* w% d# V/ J6 m  void dcls(int x1,int x2,int y1,int y2)( U: m. z1 m5 z* P
  {6 M" }# q- Y  ]8 N
  int t,s,j,i;
, k! i9 J0 C3 i8 A! R  t=s=(y1+y2)/2;7 y  d% x+ {  {# X2 S& R$ o2 k
  for(j=x2;j>x1;j--)
6 [2 G. o. ~7 c9 {* V* o1 t  for(i=y1;i<y2;i++){! M5 d0 U; s, R( ]
  goto_xy(j,i);  H) ~: ?: u6 \, Q/ M+ o
  putchar(' ');. ]0 |, \- o# B0 G+ x# C
  delay(10);
2 [9 B2 V* [% ]8 g: c+ d  }; @: ]) k  u4 M6 ?! ]6 M
  }
0 U, P$ }! e& E+ f  /******************设置光标子函数******************/2 Y! C, w. p0 C4 B* K% q1 Y" |; W8 i* m

8 T/ _5 l; i1 c: V: y  void goto_xy(int x,int y)
3 P' }3 i8 C( r0 m  {1 l4 P! j7 F6 y* B
  union REGS r;
( n7 G- p- G/ `1 c/ G6 R: p  r.h.ah=2;
. n/ J+ @: ^0 h5 R  r.h.dl=y;: ]1 o1 n' g5 H+ c5 B
  r.h.dh=x;
& M0 [3 F; V$ N: W  r.h.bh=0;
) M# n% m) ]$ a) I0 v) A  int86(0x10,&r,&r);. M  A. ^) p2 J( p& J3 b
  }# _! \( c6 y8 ^* j0 `
2 {) v' ]; a) i# W
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& w  |* Z& A3 `/ p  p" N  _3 U0 g) g5 ~' B  n! u1 U: K& w
  void puta(void)% P1 `, |2 G6 X4 Z6 ^# }  w3 v
  {
7 Q& a2 @" s6 I" U3 w( L- c9 j  int i,j;; p3 o3 ^% {1 d% i( t0 |# a; T
  for(i=0;i<24;i++){
, \. h1 B5 u6 n  for(j=0;j<79;j++){
2 ?3 Q8 P4 _0 v: s. W) x  goto_xy(i,j);! l7 n7 @) T" ~8 P
  printf("a");
' ^) }& Q; W1 D$ e7 V  y! B  }
! P0 V- o" u# Q; R( _: I  }& @5 P! v/ a6 V, c2 S' K0 ^
  }

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