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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," F3 J# b# H+ j* [
1 i+ B. V9 m; ?4 R) B
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ m, n: g6 n& ^0 N* B9 o9 H# K& \" x9 _
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 [# x, _* R9 j8 O  子函数及演示程序:
: y& v; v7 B5 l& v4 D7 u
0 W+ A: d8 |$ }+ j2 y  #include<stdio.h>
" q, A* E5 E4 ^! v' B" ^, \) s1 a& M! ^% s  #include<dos.h>
8 M7 c' K9 j+ A  #include<conio.h>3 |9 x$ @+ b' ?0 G( y7 j( @
3 B* x# _0 B# J6 E( M) R% p  s
  void goto_xy(int x,int y);
4 R6 Z  |. v; l% B! [1 g% [) X  void dcls(int x1,int x2,int y1,int y2);
. C3 t* X0 u( w0 i0 S  void bcls(int x1,int x2,int y1,int y2);+ t" d; z% Q* g* `% R3 x
  void kcls(int x1,int x2,int y1,int y2);9 X1 h! @" y, K; }3 x% j9 j- K6 k6 b
  void recls(int x1,int x2,int y1,int y2);/ X' V: P7 D- R- B; n6 c
  void zcls(int x1,int x2,int y1,int y2);
, k$ `7 }2 ^6 f$ d  e, T  void puta(void);
2 c; Z6 S: Y( o4 m- l# j) g/ H4 u) ~
) w! X+ @" v0 R3 E% H/ ?* |, M4 H0 s0 a: h- L) F, C. l
  /*--------------演示程序---------------------*/9 J& p; P0 P- o$ b$ H
  main()& X7 t0 m5 Z' Q/ D
  {
# a& _8 @" a0 ?/ U( T0 b  puta();+ ?" L; K! @' v% X; k2 h8 Z$ y
  getch();
7 ^% E! i! w+ q) @$ X  e" ?: M( ]  dcls(0,4,0,79);
' B2 z* T& p3 x) y  a# v1 O1 t  getch();% D! k" ^2 }4 U1 M
  puta();
7 r- Y( I  Z2 b0 h  getch();
- v3 N5 N! d3 q: F7 [2 v  bcls(0,25,0,79);
6 u, B1 Y4 X" Q6 U* v% x( p  getch();
! b1 c! H5 j$ `  puta();& J* E: l& D2 C4 O/ u
  getch();
3 g  Y: W3 O# p" K  c$ L/ I  zcls(0,25,0,79);
: H+ }9 b' J+ `; `+ o1 q$ G+ ?  getch();9 q0 H' a, n  U2 D. M
  }
, f# u- X( ^! ^6 y  /*********center clear screen(中心清屏)***********/, k3 b+ {- z7 Z) j- U' Q2 w4 u
  void zcls(int x1,int x2,int y1,int y2)( D3 i+ p" Y5 c/ d, q
  {! J9 \9 u6 M4 X/ ~. q4 q
  int x00,y00,x0,y0,i,d;
+ R1 I! c1 ^4 z1 H  if((y2-y1)>(x2-x1)){
$ p( C$ W9 n% w+ s5 I& s1 V; J  d=(x2-x1)/2;
) X! o4 |* u5 F% v  x0=(x1+x2)/2;
5 ^- r/ X4 t/ Z9 k7 n1 T- R9 Y# f  y0=y1+d;
- k- A- S; j5 i3 h3 [0 M+ }- Q8 N! N  y00=y2-d;
2 C8 u- s) a; R; }1 v7 o2 Q  for(i=0;i<(d+1);i++)/ L1 O# `' w7 A: s) |
  recls((x0-i),(x00+i),(y0-i),(y00+i));+ y5 y1 d/ r* ]% V% f  O
  delay(10);" U1 _. A. A: M6 b  {  [8 D
  }5 ]0 X6 H; _2 N1 c( e
  else{1 F+ n! L, A- p& K( O
  d=(y2-y1)/2;
# {$ _- |0 _  J  y0=(y1+y2)/2;( m4 Q, @* }8 k1 a4 \2 j. |
  x0=x1+d;7 S* Q, A' R/ R2 `7 l
  x00=x2-d;
! Q2 ^2 X  o& y  for(i=0;i<d+1;i++)
2 |; _2 x' m3 v) K$ e9 b. s  recls(x0-i,x00+i,y0-i,y00+i);
$ S" X6 I/ T& H$ S/ b  delay(10);
% R, B1 W) U( l& T  }! Q/ _. Q2 J2 u! K; r
  }3 e( y2 d' Y; Q1 D5 Y' @2 J& I9 M

) X% `; g9 x& \- U; @, P3 ^& |  /************* clear rectangle side(矩形边清屏)***********************/
% s* \. f. k6 A4 A) l) I( v) t6 v$ }! C; j
  void recls(int x1,int x2,int y1,int y2)
) z% J' Q: T3 @6 g: l% {2 h! A; M  {
- s- ^1 J. Q3 [  int i,j;
5 d6 {+ _7 V1 w. T2 T* \% ?  for(i=y1;i<y2;i++){
6 L" P, N2 q6 |1 A# z6 }& c# G    goto_xy(x1,i);
0 g! l7 ]8 V2 G4 _3 B6 m. g  putchar(' ');
" z6 i- s2 V3 n  goto_xy(x2,i);# _) o8 E9 q. s* Q  S
  putchar(' ');
9 P* T. z6 z4 n# V  L6 I) v  delay(10);+ _) m3 P- N2 y4 D4 q
  }
0 J4 Z5 H  K# j1 K5 `% ]  for(j=x1;j<x2;j++){
2 y7 a9 n' s* a" d9 a8 o* f+ Q  goto_xy(i,y1);
& M2 \9 S4 u9 I) u% [  putchar(' ');, e' [' u! |! t2 d
  goto_xy(j,y2);% @8 P; k/ j. o2 M- W' p
  putchar(' ');$ |! W% ~, n* c2 ]
  delay(10);
) |$ ^$ t% J( X  j7 T/ ^( C  }
) Y  q! U! w- I! r3 d# U* _  }2 x6 L9 o( ?* a
  /******************open screen clear(开屏式清屏)*********************/
% s: N& V# g) m+ Q% ~- S2 n( o
  ~! o0 C9 \+ a3 x+ J; e  void kcls(int x1,int x2,int y1,int y2)
  C4 J% e. o( f; ^  {
3 u! R, G! q  A! I  int t,s,i,j;% b2 M) {! ^# k( W. |8 ]
  t=s=(y1+y2)/2;
$ G( _/ `' E: [% [* t  for(;t<=y2;t++,s--)
7 A2 Q% h' a6 E( s  for(j=x1;j<x2;j++){$ v1 U6 T4 z+ J+ I+ p
  goto_xy(j,t);2 I1 `2 x$ I0 k: U1 v
  putchar(' ');
. }! @5 g: p4 q, C  goto_xy(j,s);! D0 w! R+ l% `% x, R- n. `, w
  putchar(' ');
/ [- L  c- ]- J4 E  delay(10);2 m% r) d/ ~! j) i3 a
  }8 D/ f3 a' c- ^  b* o: N/ Z) H
  }
; O3 X9 H. e  u: `9 |* i7 e  /*****************close screen clear*****闭幕式清屏*******************/
; K4 e& o& R3 X  k/ t; c, l9 A
  ?1 Z( B$ v, o. k4 d; ]( j  void bcls(int x1,int x2,int y1,int y2)' E9 r' a& h$ M/ s* m) p
  {  D. }+ Q" l6 C( _6 v8 u3 E
  int t,s,j;' R& G2 ^1 j2 J7 p2 ~0 y7 f* n" _
  t=y1;5 Y, P/ U* a6 k% D6 o
  s=y2;
& ]7 W/ {( ?7 z. @3 j7 |  for(t=y1;t<(y1+y2)/2;t++,s--)0 m8 j$ t* W" U8 H
  for(j=x1;j<x2;j++){
! _. k1 }3 K- C+ ?  goto_xy(j,t);! s* c- Y* {( e' }+ W, O* w
  putchar(' ');
2 Y! X6 y: v; K' O3 i  goto_xy(j,s);7 [1 b8 c! j# n  i' @5 R9 e
  putchar(' ');
: ?; u3 `6 P  b2 A* F  delay(10);9 ~! c3 i) @% V9 H& X& N, X) J* B
  }
! _: N6 o! G6 g& u, s  }
9 ?# F' }1 \. Q8 o1 G  /******************bottom screen clear(自下清屏)********************/, O/ b' w2 z$ w) x

# n' C% V" i) B* H  z  void dcls(int x1,int x2,int y1,int y2)
' s( s: m; n7 [. M3 O  {
; \! ?) g# i  I& h  int t,s,j,i;3 ~; {' I! b$ `7 e1 o9 u
  t=s=(y1+y2)/2;
3 q/ w- G5 P0 P2 V  for(j=x2;j>x1;j--)2 Z) ]2 c  V+ o/ i  ~! G  a9 I
  for(i=y1;i<y2;i++){2 j$ S* u9 i) ~& I. _. H
  goto_xy(j,i);
# e0 l! x" p  M% u& c  putchar(' ');
' ]' f7 H3 P' h; G% ?  delay(10);: o% J: h  w% ~' F* l
  }' O& _; N# {' ^9 `
  }
. U7 l) U5 `8 B  /******************设置光标子函数******************/4 A& S6 P+ D4 J" [

8 k6 y! y# n! H9 j  void goto_xy(int x,int y)
* b3 f3 c; w3 o. C  {1 v* _/ `" \& B1 |& y3 Z
  union REGS r;( z( L) p9 x% G8 {4 o  Y. n4 X
  r.h.ah=2;
- V1 g# K) e/ u0 B. w  r.h.dl=y;" U6 o" w1 k4 U) ~5 u( K
  r.h.dh=x;7 C3 q4 C9 F- k+ {! {& ^
  r.h.bh=0;) i$ |0 ]7 h: X8 y  n
  int86(0x10,&r,&r);! R5 F. s( b1 Q% @
  }& M- c& Y* F7 O4 x
1 q3 J' G3 o* I
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 t/ B7 W* [, w* P' a0 R
  M3 P" p+ C* T
  void puta(void)) b5 W* Z" p7 B
  {1 C; `: f5 ]1 N6 E
  int i,j;
3 ]% {) q1 N4 A2 f! e( ^% W; A  for(i=0;i<24;i++){
% g. c. m( `# T0 Y, {# I+ b  for(j=0;j<79;j++){
( x$ P: q! m7 ^9 `( x) E+ Z  goto_xy(i,j);9 y* Q) t6 U6 K) [8 E5 v
  printf("a");
% M/ z3 O8 u) G: t7 A. d  }
: J' Y4 L' w9 W+ w2 K( B  }" n5 t( Z6 D7 B0 e
  }

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