返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ X! J' w' ?0 ~4 o) y1 Y1 [
0 j) m# x+ @7 F5 v/ R$ D, S
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( V" g* H" q! H9 b* W
* s0 u6 R" w7 ]  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 G# g- d. g* a9 [/ @8 @
  子函数及演示程序:, A8 v, j2 Y8 H3 R4 R- p! n

% J; C& L' p+ f" G  M: l9 p  #include<stdio.h>0 \8 g% y1 B& o
  #include<dos.h>
! G+ ?5 G: @* }5 g7 Y9 C0 ?  #include<conio.h>' U' _7 N# e! m1 ^  k- F8 p- F3 I

! c/ H* L$ K8 }: z$ D  k  void goto_xy(int x,int y);3 l# a; `; ?) v( x- a5 M; v' O
  void dcls(int x1,int x2,int y1,int y2);# k& ]/ {7 S* x, L  \4 T# {
  void bcls(int x1,int x2,int y1,int y2);
2 |2 M3 e8 q& T4 l1 ]  void kcls(int x1,int x2,int y1,int y2);
" e$ b6 A+ K7 K' _  K& o/ [  void recls(int x1,int x2,int y1,int y2);
; @  G- u8 l4 [3 S, E  void zcls(int x1,int x2,int y1,int y2);( Z' c& I2 |4 H) C  F4 g
  void puta(void);
0 S  `2 z5 B  K  _5 b/ A- D" _7 t
  O. {; ]$ n* C2 c
0 H2 [8 M  u9 f  /*--------------演示程序---------------------*/9 A/ a  _+ l( j1 o6 Z
  main()
3 c+ [6 a1 ?# ~) r9 \( @  {6 |+ X. }( o1 B% n2 \
  puta();
7 A! z  v) j* j+ s4 T" i/ i  getch();, e8 \) J, x5 Y5 F( y3 I7 T( R
  dcls(0,4,0,79);9 o* V* ^- b$ y- d- V
  getch();' |. ?" z( O/ n0 s9 q$ e
  puta();
2 X- ]2 {5 {# M8 H! v) i+ B: l0 x  getch();
) }# L" f3 Y8 F  bcls(0,25,0,79);
6 S" J- C# H$ ?  ]( }2 X$ ~  getch();$ Z0 B, k+ [" V/ {9 o
  puta();6 t( |) X% s, O2 J) j6 f% [
  getch();7 m, I# U5 ^  o6 P
  zcls(0,25,0,79);2 Q3 B  w. t$ P0 t+ b
  getch();+ ?6 s0 E8 [- x4 A- x
  }
. b9 j' J& m5 C( ^1 z- ~  /*********center clear screen(中心清屏)***********/. \4 ]7 v. p4 n
  void zcls(int x1,int x2,int y1,int y2)
* y2 V% F- i; p  H  {6 t$ ]" v: ?% Z3 b7 a; `
  int x00,y00,x0,y0,i,d;  K* n$ _7 l( @, {* K$ w5 e' p3 o
  if((y2-y1)>(x2-x1)){* [: y6 u5 `% w7 q
  d=(x2-x1)/2;' J) D' I) ~. b/ ]* s$ `
  x0=(x1+x2)/2;0 A& T1 `* q* R( l1 O8 n
  y0=y1+d;
0 |7 X$ y1 c5 m0 _( l, G  y00=y2-d;
" `2 b) k$ q- \2 ^+ s( A7 }4 Y  for(i=0;i<(d+1);i++); R3 i# n- @- ~3 h1 v% d# i
  recls((x0-i),(x00+i),(y0-i),(y00+i));
6 M+ p# [# B( J6 d  delay(10);& u/ X& a1 }- D% o: [/ t5 d
  }& Z+ C, B. t1 y) J6 B
  else{
" M  s+ w2 Q% k% s" s, K" {  d=(y2-y1)/2;. l1 J3 Z* ?. c
  y0=(y1+y2)/2;9 e2 g. U, K. O6 g- Q* D/ f
  x0=x1+d;
( e1 `( W- I7 v" Z0 T$ [  x00=x2-d;: X- v% P; P9 u' [
  for(i=0;i<d+1;i++)
/ \9 {5 R# t1 u* n0 f& L  recls(x0-i,x00+i,y0-i,y00+i);) [7 q# o, G( P. k9 @
  delay(10);! K+ e1 w& w5 h; o: `) D5 ]2 z
  }2 }' p7 j' ?4 G. J3 E
  }  ~, F" Z. k5 v& C( K  M3 N
' {( ~4 S+ h2 u. Y) X
  /************* clear rectangle side(矩形边清屏)***********************/; v* L% b8 i; K7 x; Z9 m; j% `

+ c* d" p0 d1 p8 A$ N5 C  void recls(int x1,int x2,int y1,int y2)
3 m# s. `4 J# @0 H0 U  {
4 \, P8 D; q  M4 w* A* s  int i,j;% S+ g, F, h. V( J, k9 y
  for(i=y1;i<y2;i++){
2 Z* m1 z; N/ F! I/ U4 M    goto_xy(x1,i);7 Z6 `2 w  N) n; ^
  putchar(' ');! f* {. J' g/ [( I' h
  goto_xy(x2,i);
  E$ w+ c6 m' q" {/ D  putchar(' ');% A& R: w' E% R9 Y8 F! t4 q$ E1 w
  delay(10);" {* h1 ^( v% J. N; ?2 F) u
  }3 H: ~/ B& ?5 h
  for(j=x1;j<x2;j++){" G6 `  G, J; m- B
  goto_xy(i,y1);. \# F1 t% w% h- T( ~
  putchar(' ');' S" y* r3 N+ m6 E# \3 Y
  goto_xy(j,y2);
' ?6 E  A. E) y6 n# e5 K  putchar(' ');  o9 G$ p, p9 E1 }7 J, A
  delay(10);
4 \5 U5 ?* O% N- F  }* J5 P( P8 a# Z9 d
  }. j. u$ x2 z; D' t  p. L8 o
  /******************open screen clear(开屏式清屏)*********************/
+ }) l; _. `2 A+ e1 i% K, O2 `
- ^& K% Y9 ]8 ~9 o. S% }; a# R2 N/ W$ `  void kcls(int x1,int x2,int y1,int y2)
( u7 _' O- n- p3 V% N$ Q# w  {* d9 Y, k4 P% h7 O/ L
  int t,s,i,j;" \$ f! T: |1 D5 W1 \- E# `+ G, a( `3 O
  t=s=(y1+y2)/2;
( c( l, J6 A( s) U* U" i  for(;t<=y2;t++,s--)
" r# u- Z( Q; t) N% M7 J7 j  for(j=x1;j<x2;j++){7 Y& j  Q+ c3 q
  goto_xy(j,t);
8 @: O3 p8 x2 P" a, `( h, f  putchar(' ');
$ E* y! m4 z1 F/ m" l) V  goto_xy(j,s);4 R5 U: S0 h7 U6 _  }
  putchar(' ');2 X4 R0 I& j3 _
  delay(10);8 F0 M* d% B* Q1 y
  }7 \% a+ N1 v) W) w2 \
  }
1 |% H" j: j/ ]  ]: e  /*****************close screen clear*****闭幕式清屏*******************/% r: m3 L$ k$ J+ ?" x

" j' @. {# o  ^5 `3 S! J  void bcls(int x1,int x2,int y1,int y2)) H# l, K# @0 E) _
  {9 {) p( h, a% b3 z$ c7 [
  int t,s,j;
5 W3 `- B; M7 j7 J* C  t=y1;3 H; a# V- Q/ u$ V$ g* K
  s=y2;# [. _6 o5 }& i# t, _
  for(t=y1;t<(y1+y2)/2;t++,s--)
8 T, a8 K6 K1 {( J8 y. z  for(j=x1;j<x2;j++){2 r: Q% ~  o: p6 I- n* K; k: _% @) p
  goto_xy(j,t);
/ S) B0 I( G( D% D# n; k  ~  putchar(' ');9 x+ M/ v! i2 L9 t
  goto_xy(j,s);
, L( @0 a& L0 b. [9 G! Z: r  {  putchar(' ');# q4 c. {  m5 E$ B( T3 r! \* D, m
  delay(10);
6 u3 z) C( `7 t- d  }
* X4 R4 x" [  W6 `7 k5 W  }
) r* \$ c3 `+ V. {  /******************bottom screen clear(自下清屏)********************/
3 N9 S3 i/ F7 c5 s5 V: M% I% F7 K' u' C$ e6 R# n) D
  void dcls(int x1,int x2,int y1,int y2)
2 s& a6 Z% w4 k0 V  {! Q( z3 r/ n! T" W) x  A
  int t,s,j,i;! L; v# t& X$ \9 P- G7 g
  t=s=(y1+y2)/2;0 w! A+ P4 o* D
  for(j=x2;j>x1;j--)
: D1 L& ]: Z) j7 ^7 ^; w  \9 s. ?/ U' j  for(i=y1;i<y2;i++){
* q: k8 d' r' a9 B  h& ?  goto_xy(j,i);8 ]9 S/ _2 y8 b# E- x) C
  putchar(' ');3 \$ @# f% W! I# x7 v$ @
  delay(10);  w8 v: I% J5 Y7 g
  }( T( q4 z' P! {0 g' E
  }
/ L1 q% V7 ]6 {9 r  /******************设置光标子函数******************/8 i; r7 H% |- k. s& Y
& g5 D( ]2 Y' A/ z+ V
  void goto_xy(int x,int y). {' n3 I) ^. n5 p
  {- D! X8 A: D* Q6 s- d% P
  union REGS r;
; D! k' L9 C8 x  r.h.ah=2;
! D1 W' L1 C/ B- s6 W  r.h.dl=y;
; R8 a# c9 q" H  r.h.dh=x;
3 n% D1 b0 j: [* b3 W: T: i: f  r.h.bh=0;
8 }6 n; w% ?9 F  int86(0x10,&r,&r);) t9 S" l. X' |: T: K+ m
  }
/ y" x* |; U9 D4 g+ M0 {+ F9 Z
+ x+ R0 p; Y4 t: F  /**********************在屏幕上打出一连串的a字母用于演示程序******************/( S: f* e& }6 k+ ]: f

6 y6 W' m/ G5 T  void puta(void)
4 C, O* e. N. O1 d# x  {
& y* z6 u4 k7 }) B' `  int i,j;
6 q5 F/ x& V& b8 W. ^! p5 u$ R5 U  c- Q  for(i=0;i<24;i++){
1 E; `" B0 G+ r) h  for(j=0;j<79;j++){
8 Q& x6 N) M9 v: i" q  goto_xy(i,j);
' e( S" J, O2 U8 `0 e! v  printf("a");( s1 z, z, n: t% Z3 R$ ?
  }
4 V9 ~" ^  \* c- S  }! t1 R0 y+ I! ^5 g' n
  }

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