返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' E- P6 U# \; _( A0 \+ P( f

$ X6 x: d+ X. e4 @9 t+ c  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" Y3 X3 N; V; `( W. K% U  p: u3 S& m# f6 h. M% @0 d
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # i$ k! B- p9 R
  子函数及演示程序:* o& e) c, l; t0 P  [2 l  |* L- {; z
" V+ x6 X9 ~. m# j9 Y& |  D( A
  #include<stdio.h>
1 K8 t6 `5 n7 k9 v) K7 ?  #include<dos.h>9 ~0 h4 e% A: L* N
  #include<conio.h>5 h2 h' \6 h: Y* x% L' I# J

& V+ Z) Y% t6 I  void goto_xy(int x,int y);: ^- Z4 g) J+ S; l$ _) r9 p( A: i( i
  void dcls(int x1,int x2,int y1,int y2);2 o8 M) E$ z1 w1 @4 g
  void bcls(int x1,int x2,int y1,int y2);
9 {2 e. `2 |2 S( m% u  void kcls(int x1,int x2,int y1,int y2);
; u+ x7 o: R3 L, n* w4 ~/ y: Y  void recls(int x1,int x2,int y1,int y2);2 G% B2 d& n% R# t8 D
  void zcls(int x1,int x2,int y1,int y2);0 c; z/ Y  X; l- y+ L) N# y! ?! A
  void puta(void);
) u) \( N. e* B& J- y: S2 w& q* M* ]: B% I9 |+ c+ A1 i; S9 I
% p  c- Y5 C! F- {& J1 A+ A6 _) s
  /*--------------演示程序---------------------*/
1 J. K% O0 u! }" a8 e9 N/ y  main()
- S# ]1 J4 q) h2 @  S& ^  {
( H5 O- U  o$ ^( Y" |  puta();9 v5 I& m: o7 _/ K7 C0 Z; O! a, h
  getch();
! u0 S) s8 T5 c! w  t" ~$ l" Q: w  dcls(0,4,0,79);
/ t1 h: }9 ^7 ]- l  getch();
' g* I& V: g; i5 s, T9 {  puta();
# E& g0 H, k) V8 O  getch();
- C( ?; v" O4 }4 U- @; w. T  bcls(0,25,0,79);
& A2 J% n" }3 l2 L3 r, e8 o  getch();
# K# I1 M. C7 z1 h8 J: W( n" {  puta();
9 F  K5 N' l/ h1 ]9 M  getch();5 {) d3 B* H  S3 K; j- u
  zcls(0,25,0,79);
$ B; [2 C  M' I9 n" a  getch();, J( t: T  ~9 G7 ~/ D( q$ f6 y
  }
! C+ h5 {! j) S9 Y- S  /*********center clear screen(中心清屏)***********/
% ]6 @) D) w9 I8 m2 Y) {" l0 Q  void zcls(int x1,int x2,int y1,int y2)
9 }8 R, y8 q/ Z" Z7 Z  {7 v0 M; F7 P+ t8 N
  int x00,y00,x0,y0,i,d;
" D2 R! x; r# v& z) T8 h, U$ n# D2 Z  if((y2-y1)>(x2-x1)){
! m$ d: z! @4 p* k7 k! m# |6 I  d=(x2-x1)/2;& t. x# I( C5 M
  x0=(x1+x2)/2;
% \5 S- Q, D& Q  M) H7 s0 H* }( E  y0=y1+d;0 h2 \$ V) U% A4 O% {7 M
  y00=y2-d;
6 B* f$ T$ Z0 p: q+ p5 D6 X  for(i=0;i<(d+1);i++)
$ r% t1 C  X; Q) B* g7 f9 c  recls((x0-i),(x00+i),(y0-i),(y00+i));3 a) t9 R' z5 e$ O, j3 Z
  delay(10);
6 Y6 J. G9 \! [0 |# L+ a# `9 i- k' r  }6 |  W4 ]1 ^  v/ a
  else{7 V3 ~+ d. P$ q; F9 o* n7 Q
  d=(y2-y1)/2;
- Z# k0 m9 e2 {) I$ t- ^  y0=(y1+y2)/2;$ r2 t- G" U) `& i/ V6 J
  x0=x1+d;; H3 h/ d& s5 E% S% m2 d6 S
  x00=x2-d;
  c1 m% N* b' n3 y2 }  for(i=0;i<d+1;i++)
* X- G4 n5 Z; [  recls(x0-i,x00+i,y0-i,y00+i);0 B6 s' _4 |! n+ s) g7 P* L
  delay(10);; i" a) x' a. t% [$ @3 y( k
  }
1 Y& p  a% b2 d0 E  }
+ u+ X. E2 L9 Y. Y) g$ U. {
& x' {  z) ?" w2 I  /************* clear rectangle side(矩形边清屏)***********************/
+ c. o# i/ ~2 F! Z3 {+ {0 z7 v/ ?8 B
  void recls(int x1,int x2,int y1,int y2)4 i6 E- ]  s3 U" j% I
  {
- P7 Y0 g/ z" K+ J$ |* L  int i,j;
0 X# q9 a$ A3 s. O# z  for(i=y1;i<y2;i++){, t: {, z/ B9 S4 D
    goto_xy(x1,i);
; B$ X  f/ e0 e7 U& i- R" d. r; O  putchar(' ');$ ?( ^, Z& ~2 d/ [1 Y  |2 \
  goto_xy(x2,i);
& _5 ^" e7 o4 `- I, a. ^  putchar(' ');
! B, v1 Z0 {  v- v5 y& z. @  delay(10);
$ Y( m2 x9 N) |; s) G  }
; s! H8 Y+ T# B  for(j=x1;j<x2;j++){
  ^# J/ T+ Z/ @* {  goto_xy(i,y1);& Y( J5 P7 ]6 D9 C! \! F
  putchar(' ');
0 D' S8 I8 \+ o; f9 }  goto_xy(j,y2);) Z* D1 M2 D0 ^4 A9 n+ F$ m( t! K
  putchar(' ');
$ P2 G* h' c' l( h' Q  ]  delay(10);
8 v+ R: g9 r0 H7 {& e. H/ o  }
4 L: p# K& J9 [( }* V  }
4 j) I, y9 b5 ]1 ~  /******************open screen clear(开屏式清屏)*********************/
8 J. K; P  s, X- p# y+ w! t
& |) J- F2 g* o+ ~2 l  void kcls(int x1,int x2,int y1,int y2)4 u! C6 R# D6 A) }7 q) A
  {+ e. }3 v- g) ?
  int t,s,i,j;( f6 O  _+ m7 I+ M  S# s
  t=s=(y1+y2)/2;0 v- u/ z2 P$ Y: @/ A
  for(;t<=y2;t++,s--)
. c. o* Z& i9 r, d( L  for(j=x1;j<x2;j++){
2 g; l9 Z/ ]3 j) _  goto_xy(j,t);; |# ^: K5 \, Y9 a& ?
  putchar(' ');
+ o( W) n" t* j" k! F; B$ F  goto_xy(j,s);
: I: U" B8 c3 z- ^, H) W  putchar(' ');3 e3 D0 i- E- }7 ~
  delay(10);
" H5 P( _: U2 O) @7 a$ p0 p& _( Z  }: q" _0 c; i; f3 q5 a! A6 {0 Y
  }
, M5 ]" [" G( v9 _7 [  /*****************close screen clear*****闭幕式清屏*******************/
2 V1 @- w2 R; q. M4 ?  M9 V
/ P& z, }" Z: p  Z" X* j  void bcls(int x1,int x2,int y1,int y2)' ~4 ]! \7 ~, S' n
  {
+ d, D) c4 f' \  int t,s,j;0 L; p9 f5 u1 u) E2 k- G8 [
  t=y1;
! u) j; O# N- B) V7 _! J) }$ P  Z4 \, Z# S  s=y2;
' Z9 P* I2 r, H7 `$ L; Z+ e  for(t=y1;t<(y1+y2)/2;t++,s--)
0 d1 p$ O8 l. D/ I$ U$ Q  for(j=x1;j<x2;j++){4 y  h7 e+ s) M0 z6 a) N$ U
  goto_xy(j,t);1 ]% f+ N# R1 k: |9 \
  putchar(' ');! A& D& h+ I) T' r* u0 ^
  goto_xy(j,s);
/ m! n/ a/ w+ Q( }+ v  putchar(' ');9 C, N( v6 v& h3 [* i% p- B
  delay(10);
" u7 `* _- U% t; N  }% i. D1 {, O" w$ s/ H5 c6 u# Z
  }
2 e+ f" M0 @' e  /******************bottom screen clear(自下清屏)********************/
# ]8 v5 ~& r0 g3 t$ S; v1 {
$ A2 e0 h& R; z1 j# I# d1 s* z  void dcls(int x1,int x2,int y1,int y2)) [- p, p5 ^8 z
  {! ^2 B! h' k% Z1 W! r
  int t,s,j,i;6 m5 o; t0 |5 F' {$ z/ d
  t=s=(y1+y2)/2;
4 Q" N; n: L+ j+ ^  for(j=x2;j>x1;j--)4 S0 `+ v2 l0 |3 h; `) ]. u
  for(i=y1;i<y2;i++){& H/ W3 j& F) b! G
  goto_xy(j,i);
' n2 o; V+ X6 V' s- t( R/ `9 l  putchar(' ');; P7 ?% S0 W1 i
  delay(10);
- n% d/ n) n9 t! ^  }
: _) h" X) m, G0 R  }5 V" i$ T. O' l  Y* b  d* M8 k- e
  /******************设置光标子函数******************/
3 \5 O* P9 c* i5 D' c
7 K) c* ]4 T1 {6 F, M  void goto_xy(int x,int y)8 {! \. `. A0 ^( a* f
  {* t& o5 }4 V( p6 F% s! e( L: v) j
  union REGS r;# V; [0 h: e; b+ W4 g
  r.h.ah=2;
! [, P6 T1 K# P6 b  r.h.dl=y;$ M/ w8 E# B# q! _
  r.h.dh=x;
2 _* F, o# V3 q+ o7 ?  r.h.bh=0;
! G+ f" d+ \* O' r  n/ l( l  int86(0x10,&r,&r);
5 y9 S  B2 y6 h7 E6 T6 ?- s* J' \  }
+ g+ N! G, t8 X7 Q. z0 a3 g  F/ p- @, L4 |) n
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/# U2 P/ F/ ?/ p
5 H0 q) G2 Y+ W' R& j6 \' N
  void puta(void)
3 A' c1 v1 N: I, K0 A$ A  {
$ n8 p- r& m9 d8 f5 f$ \  int i,j;5 F" U) P  }' X) v
  for(i=0;i<24;i++){. t. E; f8 G4 P/ m* l( S
  for(j=0;j<79;j++){' |+ G- \5 i8 ^, a- v% w
  goto_xy(i,j);
1 T0 u$ y& t/ `" Q  printf("a");5 Q3 W# r' O2 O# M: M
  }3 r% Y  N& m8 Y% E
  }, C. o$ ?5 N: [' N& `
  }

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