返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,! N; I2 d! j. I' _* B* z8 |

* t9 {& W1 I6 G  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. j5 `* X/ O9 U2 d7 _; Z3 v
' w4 V$ f1 S9 z2 Z  Y* v  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! Z# [6 E7 B% y2 }% s' e% f9 c  子函数及演示程序:
) W+ H, Q/ V& _8 _1 G( g4 C" |, z1 A& l- B4 i6 G4 [
  #include<stdio.h>
& [1 p7 ~$ u$ P+ S: c  #include<dos.h>
: G& ^  l1 e5 A  #include<conio.h>
5 r7 P! G1 k, b5 {+ Q2 n" M. R  a% ~
  void goto_xy(int x,int y);" S: \$ R4 k( L0 w
  void dcls(int x1,int x2,int y1,int y2);
. x( R: ?* w$ g2 Z* l; a. F8 t6 G  void bcls(int x1,int x2,int y1,int y2);
9 C. m- d8 l7 w- g# D5 x  void kcls(int x1,int x2,int y1,int y2);9 H( p$ [9 U+ X& |; y; I* n8 p
  void recls(int x1,int x2,int y1,int y2);( W/ [# M' Y% Z
  void zcls(int x1,int x2,int y1,int y2);
) p% b9 }  b* a3 ]3 W  void puta(void);, I6 Z$ Z0 U8 ?6 ^4 o  X2 T
7 t4 F/ K8 `  T3 E. g' i3 T8 L9 @
* `- x* A! e9 u2 T. J; h/ q9 d
  /*--------------演示程序---------------------*/
3 |1 G+ S; y/ k! z  main()0 [9 D' s) `+ @6 }9 E/ e& e+ v' o
  {
4 r) k8 |1 F/ s; a- M  puta();
  t$ l3 ~1 n# T% _, p  getch();
* C8 y( [9 F; r6 v5 b  dcls(0,4,0,79);
) Q* t4 t' k  M& ~& {. j  getch();: }6 a3 @# i. N% n2 ?
  puta();
  ^8 Y' S/ q' d+ h" }  getch();
$ m5 i: U* ?" h- W. ]  bcls(0,25,0,79);
* m3 Y8 l9 q7 W  p8 R: o  getch();1 V% ~+ a9 u5 _2 a( ~
  puta();" Q8 r7 G6 P: T# `3 `5 z
  getch();; j. C( |. u" U- O; J
  zcls(0,25,0,79);
- [; c% a5 C1 {* _3 x1 K& B/ T  getch();
5 C! Z' u" H- ]  }
, @1 E5 X8 R/ _! o, M  /*********center clear screen(中心清屏)***********/
. ~8 Q6 e1 {" Q5 [" K  void zcls(int x1,int x2,int y1,int y2): ?8 H! {# R0 ?- n
  {
6 h  j) s* X9 X0 }  l  int x00,y00,x0,y0,i,d;
' t2 a  z! {4 Q/ M% z0 B  if((y2-y1)>(x2-x1)){
5 U! @* }( Z" s* T3 B  d=(x2-x1)/2;; T3 W# O( Z# @, Y
  x0=(x1+x2)/2;9 `' B( |& w7 L$ D8 t# l6 d
  y0=y1+d;" y/ J0 F# d5 s% z
  y00=y2-d;
5 M& b' }5 r; @9 P# P4 r1 T  for(i=0;i<(d+1);i++)1 v0 x# K/ M6 t! h7 Z# g
  recls((x0-i),(x00+i),(y0-i),(y00+i));* M- H) s1 v) ^& w
  delay(10);  K3 Z+ t8 o7 ]8 o! A7 `  x! p5 A
  }- b  v) `$ T% `* o0 V
  else{$ g+ L9 ~/ v, y2 N7 L' K5 P
  d=(y2-y1)/2;; ~+ C) B3 }7 \* L3 |& \' v
  y0=(y1+y2)/2;# W. x" L" B3 a* _! G0 r* d
  x0=x1+d;
3 [9 K6 g4 @9 e. A  x00=x2-d;4 X) p1 I1 A" \0 f) z
  for(i=0;i<d+1;i++)
# ?$ \+ a' e  `; a) G" O  recls(x0-i,x00+i,y0-i,y00+i);
3 V2 j* |: s' h; ]: k  delay(10);' z" m# C5 R2 K$ i, R# m- x7 A1 ~
  }
$ F$ x5 ]" I# r5 h' s0 J  }9 H( O% K8 g5 C/ J8 z* X+ t

. l0 j# X4 ?7 A: f  /************* clear rectangle side(矩形边清屏)***********************/
  o4 L& y% U3 a$ x6 q
5 a# x+ j1 F( U: M0 F' G  void recls(int x1,int x2,int y1,int y2)
- a7 S; c6 h  n5 M6 _  {
& M. a' [3 R2 ~* b  int i,j;
! F0 k; `- C7 C& A  for(i=y1;i<y2;i++){
% k+ P1 ~. X% \) _, t7 C    goto_xy(x1,i);# T; ~, B" R) _3 p5 P1 C0 L* n
  putchar(' ');  @0 x6 I2 p8 M3 W8 R$ P
  goto_xy(x2,i);: h4 T; d+ w" P4 X& I( ~
  putchar(' ');$ p6 v  ~/ `0 ^7 d. i- |0 v0 V
  delay(10);9 ]/ S6 j1 H; L4 }2 `# J' R
  }
3 l/ _" t: x& L' I/ |  for(j=x1;j<x2;j++){
% f1 T5 @( o9 F& G2 U: s- c" K  goto_xy(i,y1);1 j6 o7 S" S5 ]% Z2 V# U
  putchar(' ');+ b6 g; ~% |7 ]" O
  goto_xy(j,y2);( D# x! [; A7 v9 J4 }$ I5 ?+ K
  putchar(' ');  i1 x9 n. \2 o( S3 k
  delay(10);
6 `) {+ n/ y# }' C  }
) g! W8 ]5 X& C0 D2 [: @  }
' G0 d" q1 ~: c$ x! ~- _& [* z  /******************open screen clear(开屏式清屏)*********************/
$ Q/ g6 B2 _% v' s/ K! J/ C0 |  R% z! @! X* M6 j/ z
  void kcls(int x1,int x2,int y1,int y2). C6 i7 q& F$ T/ ?! X; B+ T
  {3 F0 y2 v" n" ?. U; c
  int t,s,i,j;* {$ t, S: M4 ]) @# c  J0 ~' c) T
  t=s=(y1+y2)/2;
0 n- A+ K, X. ?3 V  for(;t<=y2;t++,s--)
. k5 @/ k3 P  ]0 p# [  for(j=x1;j<x2;j++){
5 g$ z, `- \% \' c2 x  goto_xy(j,t);
  C* U/ l0 [2 K. r  putchar(' ');
# V, P# A1 I5 ^& h  S3 H  goto_xy(j,s);( U3 R2 i5 B$ f, k- c; \( ]% X
  putchar(' ');$ Q, S+ Z: y6 d1 C0 @
  delay(10);) z8 W" Z, N) A! F, e
  }
0 R) |4 @* ^* a$ W7 x  }' W  p% H4 }+ I7 I% F7 V
  /*****************close screen clear*****闭幕式清屏*******************/- Q; c% Q# y  `* B, @

$ B7 ], @( M& a+ m  z6 Y$ q  void bcls(int x1,int x2,int y1,int y2)0 Q, m: ~4 e- O. |6 A/ V
  {- Z& R9 Y* w  B# V+ E; `; j
  int t,s,j;0 X$ S8 E) p/ H7 N. C; r3 b
  t=y1;% v2 ~; f  H( H
  s=y2;" x( J: I/ L: T
  for(t=y1;t<(y1+y2)/2;t++,s--)
& H3 o: H$ w' ~% n$ ^4 C7 g  for(j=x1;j<x2;j++){
, L- S3 p6 g  _- A  goto_xy(j,t);
- w; y1 q  [8 v9 C! N- }; o  putchar(' ');# c- l: r$ `* ~; i
  goto_xy(j,s);
% _% e' c3 ?: i" U6 ?) x  a7 ?  putchar(' ');
- o3 X" s+ n8 y3 Q- x2 J  delay(10);& R, s" A- A+ j  ~4 D& n$ u% }
  }
  s$ y1 |0 D( ]2 L: K1 p8 V$ \  }( F+ _' H" V6 A$ Y+ T2 y- D& h( K
  /******************bottom screen clear(自下清屏)********************/
4 {: ^: T" \! C( ~& J* R- F2 \  Q) G" c  J& o; O" |
  void dcls(int x1,int x2,int y1,int y2), v& v4 E1 v$ E
  {; w* d. b4 R# X5 H% u! Q
  int t,s,j,i;7 G! i3 x; r8 C/ Z2 k8 |, ~
  t=s=(y1+y2)/2;
1 ]) q. P/ s- K5 s  B( g  for(j=x2;j>x1;j--)7 R$ Y9 z4 y6 ^, f0 @
  for(i=y1;i<y2;i++){+ c  ?; F2 E) r+ W. P; c
  goto_xy(j,i);
+ [+ b2 k# c6 `; M: L1 L  putchar(' ');* v) c+ g; [6 y8 ~$ d5 N; o" `
  delay(10);) m% d; h) }3 z9 }- p6 o
  }0 r) ^6 z/ N8 H7 z
  }
0 m* X. [' j! w( z" R# x  /******************设置光标子函数******************/( @" g- c8 M* l. @
4 _8 p! n4 K0 O6 W1 q- |7 |
  void goto_xy(int x,int y)
+ u; Q4 A. x6 Q  y0 ]  {) P6 Y' P: S2 k8 m% d+ a
  union REGS r;* z- Z; h- V) F. S0 c8 A' q- o
  r.h.ah=2;
* I( M& O0 |' @- Z" J  r.h.dl=y;; f2 u4 H. |+ ?& c
  r.h.dh=x;
' i6 r, K1 B4 m6 A/ U: W  r.h.bh=0;1 c* y# @/ g7 K# y4 }
  int86(0x10,&r,&r);0 m- a! N+ O3 x7 |$ o- E3 n  V
  }  V6 @( j2 P; G

2 j2 U* W5 a. i3 j6 v* w8 K  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 [' y; ?( N4 _2 z: v8 d8 p
- n7 R$ ?5 F2 I3 N# g+ m$ R  void puta(void)% R" X' z2 q  d- o6 C* z0 t% Q
  {
3 H* i& j7 N" k& q0 ?+ e  int i,j;
2 A8 N- u( D4 W: V) u4 J  for(i=0;i<24;i++){
- r% |/ L! ^  I8 v& b2 [- r6 g  for(j=0;j<79;j++){% ~: b( U& L! p) O' p/ A: k6 @
  goto_xy(i,j);. T9 [0 Q/ y8 E
  printf("a");
* [9 Q* Y! {; g! i$ t% G  }
9 C6 o) E9 e) t5 L: y# C3 _  }. {5 V8 i$ P, b4 H
  }

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