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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ h& C; B, J2 a6 `" r$ a# ^) j) T& T; z& x5 B6 [7 z
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ p! m, }# T6 F& I# d( \  B4 n! L3 r; ?3 h; E
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 P7 ?$ k& c4 P7 `& t7 ]
  子函数及演示程序:
8 _& ?3 N) w, W! s7 S6 ]
# C8 ^! v% J9 A! ~  #include<stdio.h>( K4 B) S+ i# M) Z4 a) O( e  Q
  #include<dos.h>
1 _( L/ {5 b5 r4 ~% J+ ]* G$ w( f  #include<conio.h>
3 C9 m# I. S* L2 o3 h/ [- x# {! f% v7 I" x: d7 ^
  void goto_xy(int x,int y);2 i4 K: N" i; _, r4 N. p* Y
  void dcls(int x1,int x2,int y1,int y2);- r- J7 b8 [9 {
  void bcls(int x1,int x2,int y1,int y2);
  ^3 a# h5 Y; @9 F$ a  void kcls(int x1,int x2,int y1,int y2);2 D! B) o% \( ~. w: y
  void recls(int x1,int x2,int y1,int y2);
: E* Y" v3 q2 q% ^  A  void zcls(int x1,int x2,int y1,int y2);( N+ P' B1 V- S; ]  ?( Z0 t; S
  void puta(void);0 F% k; ^2 R: }% K

2 h3 \5 M, @# @1 C* a0 R7 b+ f" D. X6 I  s1 g
  /*--------------演示程序---------------------*/6 C6 V3 P3 ]7 Z8 o$ X- K) M
  main()4 Q& t/ x+ D% j, _- `
  {/ l. f1 ^  S3 \. A
  puta();
4 d* J& V3 u  A1 W- P0 n6 W  getch();
: i9 H4 T, M( V3 U3 u+ M  dcls(0,4,0,79);
- G6 K8 Y( }0 q" D3 S& l8 w  getch();2 c5 i3 K& `- N+ u- b
  puta();
* ?% I. ^  v" u# i  e% Q: L# c  getch();! u6 T+ q1 Q8 M9 [% e  R0 c, `
  bcls(0,25,0,79);
: L1 d9 w+ n9 a0 G2 w# _$ K6 H  getch();0 J) K% \7 E7 r9 M) ]2 k8 @: D
  puta();) }% o6 D' W8 c4 x/ t, t- {
  getch();
# X9 m; {9 j' X) A: I" f- B  zcls(0,25,0,79);
2 ~5 {; @3 t! c: ?  getch();2 i: _: n4 O* c9 f- M6 \' j/ C" _9 J) n
  }, K% o" H$ d/ m/ C
  /*********center clear screen(中心清屏)***********/
0 `; }  d" t+ C% N9 A  void zcls(int x1,int x2,int y1,int y2)% @4 W' e4 i& Z! T" A
  {3 e1 j7 R7 q7 H
  int x00,y00,x0,y0,i,d;
% ~: ^$ \) |& p& P  if((y2-y1)>(x2-x1)){
* b* u6 k$ f3 v# O% T  d=(x2-x1)/2;
, h5 S9 x5 {9 \  ~  x0=(x1+x2)/2;' P( \5 h5 o& H! L% C. @
  y0=y1+d;- C/ `0 |. v, p  b2 F9 l
  y00=y2-d;
! a& j( X& n  u7 S7 S2 @" s  for(i=0;i<(d+1);i++)  i/ w1 B# `* q2 u/ b
  recls((x0-i),(x00+i),(y0-i),(y00+i));3 P, L* H# y, C
  delay(10);
, }% W/ O# i) h5 Z  }
& N" Z! O4 K' b0 o+ B  T5 N- q  else{& B( _8 M5 y, P: d  m5 G+ e7 }2 G  z
  d=(y2-y1)/2;7 k# P& K4 W* k6 ]7 A- ]! ~$ c
  y0=(y1+y2)/2;& Q1 @1 t/ D# A% Y7 P* V; T
  x0=x1+d;
- v& F3 x3 N: m: y  x00=x2-d;
4 E4 O$ Z5 b5 t( E0 j( H  for(i=0;i<d+1;i++)- G4 C' V  B  j9 ~5 p" ]# W/ ~- K
  recls(x0-i,x00+i,y0-i,y00+i);/ S. B" i/ D: c; m' K- U  E( ^
  delay(10);7 A' @+ b4 D7 H- l4 N
  }
! M1 U4 s! v: z  s5 J% R2 |7 K  }
4 ]$ \9 Q# c- K0 O7 j' n: k( `& v& h: H0 b1 K' k! Y
  /************* clear rectangle side(矩形边清屏)***********************/
9 y' d! X- x8 e- I$ o- m; l) a3 S' e  }! G  B* k
  void recls(int x1,int x2,int y1,int y2)( r( o* ^8 J- G( g
  {
) }( i0 g8 T0 a: t3 M- [2 Y$ O* g9 j  int i,j;9 \) c" I4 ?- U4 P2 @+ m! h: U
  for(i=y1;i<y2;i++){
) l7 [7 p: [  }; P    goto_xy(x1,i);, |0 S9 K, R/ o
  putchar(' ');' z2 h# z  X5 O4 V6 f% R/ }8 {
  goto_xy(x2,i);# Q0 Z$ Q9 c: r) `2 J5 \  d
  putchar(' ');. h7 U  s+ F/ s* G* M9 u. P' k
  delay(10);
; F/ n0 z$ @  D8 ?$ P0 u  }
/ A( L, I  e0 D  for(j=x1;j<x2;j++){
& g. p% A2 w+ o  goto_xy(i,y1);
7 [0 h" s9 ]; S1 T& T  putchar(' ');8 B8 y! i8 w: g4 q; H' N
  goto_xy(j,y2);
- i) l/ x. D+ T5 i  putchar(' ');
* t: r+ q: Q& A  delay(10);+ k6 h* B7 C- @1 n
  }
( P" H' g+ I4 q7 r  }
2 l, Y: b. e1 ]1 k# f# ]  u- g  /******************open screen clear(开屏式清屏)*********************/( |7 X, K) B; n6 H; o( q0 h
/ q: J" S% f, t4 x& L4 h
  void kcls(int x1,int x2,int y1,int y2)3 M$ o$ n9 R* J# i
  {: l& x3 }0 U4 g0 f& S$ M! `  g
  int t,s,i,j;4 ^! e& C, B, h# r, a  z" j( _) _
  t=s=(y1+y2)/2;" U. @. a1 o% E5 J& o
  for(;t<=y2;t++,s--)
, k+ C% f. g' f  h1 J  for(j=x1;j<x2;j++){
4 c6 Y+ x  k1 Z- ~2 I+ [2 ?( d6 a# s  goto_xy(j,t);
8 }% E& Z- D* ]8 J2 N& {) C  putchar(' ');! e8 C  n6 }& i. P' A
  goto_xy(j,s);
4 D- D. b# t9 V" d# d  putchar(' ');
3 T, C! L/ {* X2 v  delay(10);9 b* h6 @1 C) U  I* o7 M9 O
  }
2 O% A7 h6 x) e% c0 |/ ~2 ]  }& |. `7 y! V0 J" v. I6 v
  /*****************close screen clear*****闭幕式清屏*******************/) U! {8 F0 b) N, B+ ]( K" g

  n6 `- V( N: H  void bcls(int x1,int x2,int y1,int y2)- t) z9 |- b8 u0 Q/ ?  l
  {
1 C0 r1 O$ y, k4 S5 C3 P  int t,s,j;% Z1 f0 H+ y. Q: F' d' s! R$ b+ u
  t=y1;, I1 }9 H# l  x; H! Q
  s=y2;
2 {; Z* }1 C9 ?( J& _7 c  for(t=y1;t<(y1+y2)/2;t++,s--)
. U! n- u/ Q+ J2 C8 v  for(j=x1;j<x2;j++){
# e! l5 T. f% Q) i! g' n7 _9 w! x  goto_xy(j,t);5 k9 c1 y% z0 }( U* {
  putchar(' ');
9 Y1 K! |- n# C9 [  goto_xy(j,s);: i0 E# r( `, b% ^0 z" w
  putchar(' ');* [3 N" W2 Z5 W3 g) l
  delay(10);+ l3 ?  }8 H( P- M  T9 C
  }8 }; g  \& i+ h" i1 N& }4 e
  }7 ]( \9 U1 P# @; P  {9 T% K
  /******************bottom screen clear(自下清屏)********************/
: T9 H- j. m4 k4 p6 |3 I  q: C
) [' d8 T: v% M+ p6 @  void dcls(int x1,int x2,int y1,int y2)* j5 n% p+ j2 l  f; r! z5 g/ C6 C
  {* _$ K0 x& S3 \/ g4 o8 H
  int t,s,j,i;
  n2 e0 q% @( S/ j! |  t=s=(y1+y2)/2;7 J5 P9 k: A8 g2 C
  for(j=x2;j>x1;j--), g+ g; x: U3 o
  for(i=y1;i<y2;i++){- S7 q+ u  k6 N0 W
  goto_xy(j,i);
$ m4 E+ b- p7 j- m  putchar(' ');/ e! q8 B: u6 r) T* F: G8 k
  delay(10);
; J* ~( Q% b! U: H/ k! I4 e  }2 e1 n4 i  {: x" v
  }
- I' L4 s4 ^' j* s  /******************设置光标子函数******************/
" r- z" Z1 B5 W$ s( w3 `4 O" n. c
  void goto_xy(int x,int y)
' p5 y7 U( J  m5 W/ ]  H  {
& a( ?! Q) B+ {: k3 |  union REGS r;
/ ]* y+ J3 V) J" _2 s3 X5 Q* A  r.h.ah=2;# E. h' m$ L/ V* V* P& [
  r.h.dl=y;
! m% B6 e8 r4 F4 ~  r.h.dh=x;
. K9 C: `: y3 t, j- q, r* V0 O  r.h.bh=0;
; J: t8 @" w2 r/ Y# b* f9 k  int86(0x10,&r,&r);
3 s9 U1 a2 N, k2 X4 `# q  }
' X9 p: `. ^& k: ~/ A' r1 O$ d' l& ~; J# U
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 Q, R% K, R, J3 ~, Q/ Z
4 k* o5 v7 z* Q8 T7 V  void puta(void)7 n1 {) e9 X+ U* }# q- l  E) Y6 T: n
  {; X( P2 B7 D) D" U* I- D0 z6 ?! @
  int i,j;7 V& k4 c( u, L6 I( D. h
  for(i=0;i<24;i++){& I7 b* X/ `) q/ R. F
  for(j=0;j<79;j++){; J; z- L+ C1 E
  goto_xy(i,j);- s! u6 w' Q0 f
  printf("a");, P  h  X+ O1 F7 s
  }9 B; ]. Q% ?8 ~* w
  }
5 N  K# U/ y' o% d  }

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