返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 N" y) x' S# ^/ d1 _; K
' i$ J$ d& P( g8 H: q7 N) b. Y7 S
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 y. T( W- ]& h" {  y  Y% h. y6 I, {" V* P4 P- F) H, A1 ?8 Q
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. % g! a  p4 X/ J6 H' `  q2 I
  子函数及演示程序:6 ?2 g' H; D( m! ^3 s
# T) q. H7 F. s# h
  #include<stdio.h>
9 \3 J4 X# y7 @  J' @  #include<dos.h>6 U) q/ U4 `4 o7 b# ~: n# U$ ]
  #include<conio.h>
1 _2 J5 {4 q: d3 Y  D% K' F% B1 m! a% ]1 B% h. a3 ^
  void goto_xy(int x,int y);
' h7 ?9 T5 z: H! g: Y  void dcls(int x1,int x2,int y1,int y2);
0 K2 m+ q; Z/ C' P" W  void bcls(int x1,int x2,int y1,int y2);
. U6 U1 ~, p: }; Y  void kcls(int x1,int x2,int y1,int y2);) [& b* T( `  y$ R
  void recls(int x1,int x2,int y1,int y2);; I: V$ o& ]0 g/ Q* l" L: C; t
  void zcls(int x1,int x2,int y1,int y2);
# m. G8 D- N) [& }: S, `8 q+ ~  void puta(void);
" c( F# A3 B* p3 R' J4 \+ `; P: N! `/ u. y/ S6 \; O7 W$ |
5 @0 m; f" o7 ^, J  L$ s* I
  /*--------------演示程序---------------------*/6 G" U+ q9 k$ @& u7 k$ M
  main()
) t( {) Y0 e" L  `; f  {" |7 [( ?: N3 y" x
  puta();: a! v  i1 s. d' c5 j' q9 i+ y9 J
  getch();$ \/ }. R& h# Y  {7 H1 x
  dcls(0,4,0,79);2 F6 [. U/ S/ |# U9 j- o
  getch();1 q- u. Z+ c* c9 `& a4 G
  puta();7 e+ i, A: g( u3 Q0 I  t
  getch();! @; J  s% q5 n* h' p' s
  bcls(0,25,0,79);7 b/ V0 B+ U. f7 s6 l; o# [/ v8 v
  getch();
# q! s0 X0 i# c, e3 N, |  puta();' {# ~$ y3 z/ Z! v3 p
  getch();
" i& h6 Q9 z# g0 c  zcls(0,25,0,79);- L' D! N" N1 i
  getch();; s& ]1 P( x5 f/ G; x
  }4 A6 x9 o8 y1 v& W. J
  /*********center clear screen(中心清屏)***********/
/ S8 x# g  k8 a' [$ x  void zcls(int x1,int x2,int y1,int y2)
, S( k' }% Z7 I  V- |8 t$ P/ V  {' M4 `* _( ~; ~8 a
  int x00,y00,x0,y0,i,d;
- d9 P( v2 P- ]' Z& z  if((y2-y1)>(x2-x1)){
% b  ~$ A1 H  @& I9 d- e  d=(x2-x1)/2;
; C, G, H5 U) T3 H; R( z7 w  x0=(x1+x2)/2;8 `& T# L* ?6 a: V+ v7 k' v; e
  y0=y1+d;
& g4 c6 F, P8 e4 v1 l$ M  y00=y2-d;
, x5 ^7 H' ?5 m+ e- x  for(i=0;i<(d+1);i++)" N. g5 f6 q7 x- [8 x
  recls((x0-i),(x00+i),(y0-i),(y00+i));
9 Y' `( _2 \  P! i: X# U. ?  delay(10);
# r2 Q+ x  h) r5 f4 Y# s  }
2 s" N6 |9 W) p' A' ?% n  else{
; U7 K: g' {" K' s  d=(y2-y1)/2;; T0 C: b8 p* A9 N& O# s2 O
  y0=(y1+y2)/2;
0 b# z8 a& @1 U! @8 L  x0=x1+d;
1 ^5 U, O; K1 |  x00=x2-d;- c9 Z4 L+ X0 i3 d- g6 q. S
  for(i=0;i<d+1;i++)0 D' e" m; P( \; I
  recls(x0-i,x00+i,y0-i,y00+i);; D, b' V! J: B! L
  delay(10);1 N  J7 y, V) R: w
  }& N6 \' P* X) I7 t3 ?0 V6 Z
  }
& |* b0 S' h% l+ W' }4 H: u+ j' ?8 k! J: m
  /************* clear rectangle side(矩形边清屏)***********************/1 M# a# U# D! h9 T+ C
) D3 E8 O; S' e
  void recls(int x1,int x2,int y1,int y2)2 `. a. o9 X) F4 Y% f/ _7 B7 U
  {0 f" V0 K. Z8 Y! t  x7 q, N3 ]# u% w
  int i,j;
: a9 O) Z8 o. _8 J) M! S4 b  for(i=y1;i<y2;i++){
. |5 a  c9 y! w' G    goto_xy(x1,i);
. }& ~! i- E" Z  f  putchar(' ');
* j* u  D( h$ A3 _5 v  goto_xy(x2,i);" X/ G% Y2 F8 }* F6 @1 N- K
  putchar(' ');( n' F3 F4 H2 m
  delay(10);
: ~! K1 @+ d( e: T& x  }
: O% C! D( W; e  for(j=x1;j<x2;j++){$ f8 S1 t! ]  H; N. V" K
  goto_xy(i,y1);
! G4 R. t3 y9 o  putchar(' ');
& R; R5 }5 m* I9 l9 o* m  goto_xy(j,y2);! C7 c7 [; O5 S* {& r* ~0 E  o! a5 U3 `  u
  putchar(' ');
% U3 B; e' Y& `5 ^# w  delay(10);
" {& u7 {  p- S& i7 I  }# M6 c/ v6 z! J% C4 j2 h% S( A
  }
3 i; ~$ p+ Q, k# r  /******************open screen clear(开屏式清屏)*********************/' F$ t6 s( Z! M4 r1 s, p
# N. x9 X8 X( `% X8 h
  void kcls(int x1,int x2,int y1,int y2)
: l9 P0 r, p5 o. h' e  {
* R8 ]) ^- n/ q$ K! C# J+ D/ \  int t,s,i,j;
# a7 A* `/ s2 u1 ^  b' t  t=s=(y1+y2)/2;
& U! P* H  J% ~' b, I  for(;t<=y2;t++,s--)
7 ]  G+ R1 n/ n- t& h) _  for(j=x1;j<x2;j++){
/ J4 e. b2 G' @3 I" a4 w  goto_xy(j,t);
- X0 y% I# H  q5 B& @+ Z8 y; [& T  putchar(' ');
9 w9 F+ ~6 M% z* H& F1 U  goto_xy(j,s);
# l2 Y1 \6 \5 _1 r9 j; V0 L$ \  putchar(' ');
0 K, t! q) F) z/ E( p) |; f  delay(10);
, M+ l) S, i7 F$ _( v2 M7 m+ B  }
& R+ u5 t8 Z7 C- Y  }3 X  u2 t8 D' j- _
  /*****************close screen clear*****闭幕式清屏*******************/
: Z* M7 S, i; }5 j1 x! @; z% K* s# N$ b
  void bcls(int x1,int x2,int y1,int y2)& z) B: n0 [* u( g% \
  {
; A/ U: b9 r( O; p  int t,s,j;2 o1 B. g8 e8 K. P& t8 H# z+ n
  t=y1;
, z* a7 w9 V. ]  s=y2;/ }# o: @, @0 W3 ^1 c+ d
  for(t=y1;t<(y1+y2)/2;t++,s--)# ~. ~5 w- F8 w
  for(j=x1;j<x2;j++){* @8 j3 Z( m7 z# G/ z0 B
  goto_xy(j,t);, j: S& j/ x" K& c2 Z- O
  putchar(' ');- {( s0 `" \+ \, v
  goto_xy(j,s);
1 {1 S  `" B" y: E+ g9 |" d  putchar(' ');8 J& e$ ?. D% ~1 m1 H
  delay(10);) r# Q! J4 s, @, ?! Z; ?$ M
  }) f8 ~0 S7 T7 {$ V& Q  t
  }
; h$ p- ?  B6 ~' |! y  /******************bottom screen clear(自下清屏)********************/
' @+ {) R! G7 y6 ]8 D3 v! [/ a! |# o7 @1 P- c# g
  void dcls(int x1,int x2,int y1,int y2)
% L5 i& ?/ `. x* c& q" h7 @9 [  {
/ D/ _7 Q; f( \) U7 o( ~+ v  int t,s,j,i;# T) [, B" J2 B# O4 W6 t2 |! w
  t=s=(y1+y2)/2;# q$ u/ |! x. v- E
  for(j=x2;j>x1;j--)7 D* ~0 S/ w$ C8 y, j% e, i
  for(i=y1;i<y2;i++){
& D, X' U7 ~) S% f  goto_xy(j,i);$ O0 w. g/ V: m( y+ F
  putchar(' ');
6 u* M( n' X+ @6 ]2 A3 w  delay(10);8 t( Q- S! Z' K7 Y2 k! Q
  }
- y8 G3 m: S3 N7 r# Q8 M7 I  }( j) k2 b) D* O1 W
  /******************设置光标子函数******************/
) ~) P% U  b# J. ^2 I0 \
  L  Y: Q  _9 b# [2 {7 w  void goto_xy(int x,int y)1 O' M% j1 k9 z; X; v
  {8 G8 `  s3 B8 U: ^
  union REGS r;
9 c- c, r7 ?: G' L  r.h.ah=2;0 ]4 @8 w6 {; t4 F8 z) F
  r.h.dl=y;
* M" d; Z  \7 B) _' a" v  r.h.dh=x;
: x$ p% G7 {2 S9 M  r.h.bh=0;  M( b6 S# ^* H, S) Q  |
  int86(0x10,&r,&r);* b% C# l: ^: ?$ G" R
  }( n$ ]9 {' y2 }( B1 u3 \" P

$ N1 w) r& p2 G0 p; s: G  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 N( B0 J5 p8 m9 y( J+ Y3 G$ f$ ?
3 o0 j# K$ j' ^8 a; c! E
  void puta(void)3 P0 Y. e  r9 N
  {
% a3 T0 b& }5 A% i$ H+ S  int i,j;$ E8 J9 \/ t+ O5 X3 |9 y; s+ v3 ~# J
  for(i=0;i<24;i++){
$ t& O( p4 ?: P$ d9 Z* R  for(j=0;j<79;j++){
9 {8 w, D4 n3 n# D2 f0 a+ W: @$ k  goto_xy(i,j);
: a/ u) J# M# s$ _: F  s  printf("a");. W& j0 h% j" O9 _$ Q
  }
# u% x& o" z2 n: W$ Z4 y% F1 ~  }
$ u9 g9 x  t- T! X7 n% h/ q  }

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