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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8 T$ d/ H8 @& S+ t+ `7 \1 ^
; o8 i! ]" q$ c+ V  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 |! U# S" ~1 @1 x: n* @" `# @# b5 Q" b" p& h+ \* N) a9 ]: C) u
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * u/ T2 B7 H' a
  子函数及演示程序:
4 U  l+ J- L! I9 ]. v$ A6 ~, ^
  e) [5 |7 M' x( g- z3 N! l  #include<stdio.h>1 q2 R0 _! s  O0 q- e: A  i
  #include<dos.h>4 b9 J0 M8 W6 H1 h% q+ k2 Z" s' L3 T
  #include<conio.h>
* [& M) e# K. s2 O: T8 r5 U& E  Z, j. y& I& o' U$ e
  void goto_xy(int x,int y);* B. I! D" x8 V5 t
  void dcls(int x1,int x2,int y1,int y2);
4 T* @6 s  m1 a! N1 S6 Y) l  void bcls(int x1,int x2,int y1,int y2);
/ D5 j4 e. _- {  void kcls(int x1,int x2,int y1,int y2);
& `( v. e& e2 i0 J  void recls(int x1,int x2,int y1,int y2);; Q& D0 ]3 n+ k2 U0 l% |" a
  void zcls(int x1,int x2,int y1,int y2);
# z" o6 g2 h( Q1 a  void puta(void);7 `1 o" ^8 N3 e1 K" I
8 b0 \$ B4 J! C& z- ^. x
3 O; b8 Y3 n( r' E& W" h
  /*--------------演示程序---------------------*/
" ^# e" }- O( h3 x  main(); t9 m  c' L1 w* b8 z; j
  {
$ X4 j) ~& x: a% L: }  puta();
; Q+ x* K$ K2 c- ?3 z% |7 b9 F' ~  getch();. G0 N+ a- ~* D- K/ K
  dcls(0,4,0,79);$ j2 m) {; N# L' i6 Q1 j0 Z, c3 M
  getch();
, I. m( r4 M) m' M  puta();% U- x$ @7 e# U% [+ T' k
  getch();
+ C+ B  V: }' o2 c& u  bcls(0,25,0,79);- Q, n, W# K) }$ @1 X
  getch();
; f7 S5 C* `2 {% Y! V  w! L1 S, z  puta();
0 {* @4 x! J% Q  getch();
. P/ g1 v* j+ y) S' l  zcls(0,25,0,79);& n6 e7 q% q+ N5 B. `
  getch();9 A9 Q# m4 Z2 e! v2 W4 a
  }' _% L+ o* F$ |, q9 C
  /*********center clear screen(中心清屏)***********/; z5 h3 T! m$ P/ J9 W7 Y( M
  void zcls(int x1,int x2,int y1,int y2)
# ~2 I; Q8 p8 J: j1 C2 O  {" _! N( u7 K; S- y8 N
  int x00,y00,x0,y0,i,d;
- f. m9 t* D8 a  if((y2-y1)>(x2-x1)){3 a/ }+ M8 V! _+ i7 @# I4 D
  d=(x2-x1)/2;( }% t: D. W9 e4 g
  x0=(x1+x2)/2;! }$ e0 M; f) m
  y0=y1+d;
& R- M7 ~( H  V9 }% b  y00=y2-d;+ V& G% W* |# d8 W7 _! h1 C( q
  for(i=0;i<(d+1);i++)
4 H& r( J3 `  B0 V* R  recls((x0-i),(x00+i),(y0-i),(y00+i));1 S! e% v! d: f0 r3 M1 V% R$ O
  delay(10);
) {+ `1 I8 {; F+ g) a6 X  }
! b' j  x& T5 z. |4 S7 m  else{3 C5 ?$ Y1 Y4 p' C8 ^
  d=(y2-y1)/2;
( H, {3 y0 a3 e9 }! @: p  y0=(y1+y2)/2;. f2 N/ s+ M9 o/ g. T# J, t5 [
  x0=x1+d;. l% J, l: f4 w6 q  I3 M6 G) T. i3 X
  x00=x2-d;5 s: U" [* H* F) h8 e# {; E
  for(i=0;i<d+1;i++)
; C3 W/ w) \2 d  recls(x0-i,x00+i,y0-i,y00+i);
' l0 p7 t' \" g8 W1 Y9 q3 H  delay(10);
* |, u- p& D3 h$ r/ F4 L8 N. E2 x* I  }
5 g# y( V" q, u& b4 p  }
4 d$ O- Y7 f* L& f: h# v' l0 B6 z9 S& L! d* f( c, d/ M
  /************* clear rectangle side(矩形边清屏)***********************/# J4 M6 g% e1 L; p6 C4 H" P

/ k' v# j0 p* {! Z& j  void recls(int x1,int x2,int y1,int y2)- W9 g- G0 [& j
  {
* |" }1 }6 J8 p0 ?, ~8 {  int i,j;
' G( K: |9 B8 ~4 @( q5 v  for(i=y1;i<y2;i++){2 ^0 k# E+ }9 |0 J
    goto_xy(x1,i);
/ M% L3 ?# F' _- y( U* i  putchar(' ');
- G- [2 q8 R/ D  goto_xy(x2,i);
+ w# c* M6 d8 z& \! z9 T  putchar(' ');6 |' L/ Y# i# ^/ y6 ~6 R+ p
  delay(10);
8 p- B; M; L+ u& R3 v7 H  }
4 |9 Z7 c/ Z6 t! {  X  for(j=x1;j<x2;j++){
0 V$ F- f2 U. Q* r  goto_xy(i,y1);
$ k# O! i- p# |( u1 G! B  putchar(' ');5 [5 K- E0 M4 g) m( f+ D- y; j: X$ L
  goto_xy(j,y2);9 e( a0 L$ m5 u! q* h5 j& w
  putchar(' ');* e' g, ]; L% ?$ L, u6 v% z
  delay(10);
; R9 [8 [- Y- W$ l. Z  l$ d  }
- @" _/ A4 K+ n+ P  }
* h8 h9 M, L! r5 o  /******************open screen clear(开屏式清屏)*********************/
; j+ z/ S# P2 x/ i: l: G
4 k4 ]% g+ f4 T) O  void kcls(int x1,int x2,int y1,int y2)
: K% r3 p! b0 v; [3 N  {
! b. c  b, j6 Q  [  int t,s,i,j;7 [- {" G8 j+ {6 \+ i% J7 \
  t=s=(y1+y2)/2;
8 t' v. `% S1 z$ P: s) I3 r  for(;t<=y2;t++,s--)
+ c" z8 n+ Q7 E3 i  for(j=x1;j<x2;j++){% z4 O$ q7 ?! N8 K+ ?1 @, E; m
  goto_xy(j,t);9 Z7 [; i7 C& ^. {$ U
  putchar(' ');
0 ^& p+ Z# v2 m  goto_xy(j,s);% r/ l! M4 P! P) R1 L+ y. ]
  putchar(' ');
% b* ]2 `4 ]" k: M; J" |( S2 _  delay(10);
# c- l; L. t/ S9 {+ r  }
( _5 p& A2 d& R! W+ u  }
; e# P! j5 q( x8 c+ n; ~2 Q3 [  /*****************close screen clear*****闭幕式清屏*******************/
- w) {, e4 m" M+ c3 l' o- c9 R+ q$ M# y* \
  void bcls(int x1,int x2,int y1,int y2); f5 ~4 d( i4 C% h
  {% ^% k7 M% c5 C" R# R5 f  ?
  int t,s,j;" V. R, T/ i6 w4 Z8 d0 V( c$ Z
  t=y1;  w1 _* u( r& B* u1 B# C
  s=y2;* a! D$ j* m$ ~
  for(t=y1;t<(y1+y2)/2;t++,s--)
' O0 f$ G( A' \  for(j=x1;j<x2;j++){
6 l# E2 h  [. L' {  goto_xy(j,t);
3 y# T9 [$ a* v3 H; x1 ]$ s( u' k  putchar(' ');; u( E. \: j- c- p) i
  goto_xy(j,s);
5 n& m  J/ [; A- q/ q  C4 s0 U  m: |# R  putchar(' ');/ `0 q) d$ S! E& W
  delay(10);+ z# k# w* a* f
  }. L& ^! U( X8 {7 L  Y# n& \$ P' ~. H, F. \
  }" R: n' i0 A4 l3 n
  /******************bottom screen clear(自下清屏)********************/
% H  l5 E+ V) g! E6 o) y; ~4 S. z, p% e( _+ ?$ j
  void dcls(int x1,int x2,int y1,int y2)
" Y8 Y* t' f0 O: w+ _. v8 }  {
9 ?+ k2 {4 g& z# Z& ?, u  G: q  int t,s,j,i;
% g+ Y- d: R7 o, h# q  t=s=(y1+y2)/2;
0 \4 M$ J  f- W$ W6 y$ A# ]  for(j=x2;j>x1;j--)/ F" g  R  R5 A5 C- ^: B  D
  for(i=y1;i<y2;i++){0 z# m8 L% @  `* _, j  K3 J5 t: s% r
  goto_xy(j,i);
7 A) J$ P3 Q5 d/ ?# g) S( ]  putchar(' ');
( s4 ]- T& }9 c: F9 V* y+ Z  delay(10);
/ Q( ~- p! j8 u  }
2 F& w( n7 {: E. z2 c. c  }
0 R. ~1 v8 P: q+ S8 a  /******************设置光标子函数******************/
% k- y  X# W- b! ]  \3 p' d0 X4 K+ R/ U& S6 f, w
  void goto_xy(int x,int y)
( E4 n: S9 ]& Y' c4 I! E4 ^) T1 {& s5 T+ U  {
: E" s8 u7 k( b# _9 }2 {1 B  union REGS r;
1 _& T! |1 u) q# N* q  r.h.ah=2;# ?4 L) F5 ^2 [/ H  ?) |
  r.h.dl=y;
/ }! Q* K! E) ], H" m/ L" m: [% p, u  r.h.dh=x;7 h$ z: d3 h5 r6 }% s! W
  r.h.bh=0;* Z+ T9 U2 A9 p' G) n, Z2 p5 r
  int86(0x10,&r,&r);
4 }2 g3 x+ i; S, N  u/ ?; }' p  }; u. P- {. s- g, T% B1 M

$ D* V* e' t" ?# M. N  /**********************在屏幕上打出一连串的a字母用于演示程序******************/" h8 x" k* W- d! @& E( I' c

  p9 @' v. W% G/ ?4 i- K$ n  void puta(void)8 P/ v# H& i. _0 n& ^" P; s& f
  {3 ^4 V* g4 z  U  K
  int i,j;
; j# i9 `0 a. e9 _/ v( P! M  for(i=0;i<24;i++){
$ l- G' n1 M3 U6 w* a" U' s+ a: W  for(j=0;j<79;j++){
' F5 S' z- M& Y. i  a  goto_xy(i,j);& o" ^5 ?/ r( L2 x
  printf("a");
# u' h% e1 b+ ?% ^  }+ o! d6 A: ]9 m2 b7 i# c( N
  }; A, e: L7 H+ p2 |" z2 {2 o
  }

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