返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* t! X( J2 @: g9 e
1 S5 `) r$ i: q( W) n" E& b9 @  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里: K( g; q* Q8 w, l+ _: f  A# e- e) Z( T
. D. o2 B, W0 s# D8 B* i9 A, T
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.   ~" e# J2 W: h2 b3 e( N
  子函数及演示程序:
. j7 B# g. P; d9 S7 n
/ k" U7 ~% N+ `, U6 Q* x3 \  #include<stdio.h>9 k+ \; X( _, M- B* C: b% t8 y
  #include<dos.h>& g% L' j8 u" _7 ^0 w. b) k$ R
  #include<conio.h>- m6 d* K6 n0 d1 M- w+ r
8 }. D0 B0 A8 f, G/ R
  void goto_xy(int x,int y);' u9 F9 r+ o' f+ `
  void dcls(int x1,int x2,int y1,int y2);
+ M( R2 J+ E$ T1 M8 C6 ~/ j  void bcls(int x1,int x2,int y1,int y2);+ [' H1 T" J, t
  void kcls(int x1,int x2,int y1,int y2);" ]6 i) Y  ^& w5 E! M
  void recls(int x1,int x2,int y1,int y2);
0 o6 h" {& T) Q% `- C( x  void zcls(int x1,int x2,int y1,int y2);
- ~  x/ S& O5 I: I  void puta(void);( U% A8 T& s: |9 L! i+ m  Y1 Y

- c) H& v4 n, W/ {, S+ R' n2 A( x- @! k& \( a. y
  /*--------------演示程序---------------------*/& _; B) A' ~; v3 y5 a$ D
  main()) E3 F7 }$ G! K
  {
+ y, Z+ o! F* }, ^( I( L  puta();
' h% n( u$ n( [7 h* l  I& U6 v  getch();
3 l; m5 ~0 e4 P0 p  N  dcls(0,4,0,79);
$ R! A" O7 O. A7 v7 ?2 _  getch();
. g; f: p8 p$ _  puta();! T: x0 q0 t" v! l2 Y2 T: {
  getch();
! l. P+ U/ @7 M( h1 W  bcls(0,25,0,79);# p" a8 O  `/ w  a
  getch();- B4 i" L# a6 p0 B4 M. H" F4 ^
  puta();: t- @6 I* ]3 ]7 d) [" \" E" t' G
  getch();
. R- C& F# O& b! l# }# P! m  zcls(0,25,0,79);) q" o7 h0 U# U6 H
  getch();
5 J1 F# W9 j4 ?" x8 M1 M! ?3 G1 e  }$ w' |( ^- m, a3 ]/ _/ R7 f
  /*********center clear screen(中心清屏)***********/
  C& x* l. S- B) _. s  void zcls(int x1,int x2,int y1,int y2)2 Y. i/ k- p+ H# u
  {
- r; a/ m4 b' t5 e. Q6 [) i  int x00,y00,x0,y0,i,d;
$ k$ Z7 s: t, q7 b  if((y2-y1)>(x2-x1)){
2 z" m% Q/ A3 o9 _, K' P  d=(x2-x1)/2;- x5 n  y# S" {  J  S
  x0=(x1+x2)/2;- G0 m$ v1 @/ g- O$ C! Q* e
  y0=y1+d;
& T, L! q1 e( K* H$ }  G5 R  y00=y2-d;. r5 T! E1 v( k- n7 h1 y0 {/ X: ~9 m
  for(i=0;i<(d+1);i++)) E1 _6 k% z% g2 D' o% E1 j
  recls((x0-i),(x00+i),(y0-i),(y00+i));
* b4 {, x8 d* G3 |' m2 k% g# {  delay(10);7 ^6 N9 Z% L+ y, H: \
  }
5 n% {8 F( b. R/ x  else{
  T' N4 ?5 N5 y  B( s' D  d=(y2-y1)/2;
! a: y/ c: q( }5 \6 j  y0=(y1+y2)/2;/ ^9 b0 f( c- @
  x0=x1+d;; S, D# t, G$ h1 X$ u  C) c
  x00=x2-d;
, k$ k) [& c4 d  t3 |% w& I* C* L" l  for(i=0;i<d+1;i++)
6 D  f4 G, G+ j, w7 T) P  K  recls(x0-i,x00+i,y0-i,y00+i);
) y1 C; E. g, \1 B6 @( [, R  I  delay(10);; `% S: Z( V6 E$ U! b$ I
  }
" W" o& D. e9 r* p, R  P0 J  }) R8 m1 H6 Q2 A1 P! k

, r9 a% i5 m7 d  K; ~  /************* clear rectangle side(矩形边清屏)***********************/
, F+ W; {& t2 O  [- {8 c  A
- ?, Q4 K# S# O! Z/ e1 i6 U2 _  void recls(int x1,int x2,int y1,int y2)/ \# ?( z0 Y2 H! ^
  {) u. M. q9 I6 Q! l; S
  int i,j;7 f3 c* ?7 a2 c3 F3 T; g
  for(i=y1;i<y2;i++){; A+ z; s2 k/ H6 b' D
    goto_xy(x1,i);: Z" a. \$ Y7 }; I! Z% f9 @
  putchar(' ');5 y3 j9 R; F# c: Q! V
  goto_xy(x2,i);" U" }3 O: N0 L# L. o( N
  putchar(' ');0 C9 a! o5 v) P7 f9 F/ r4 S
  delay(10);' e9 R# j5 n5 j* [  W
  }
; K6 W. J, F3 T: v  I2 z8 `2 W  for(j=x1;j<x2;j++){, `) N: O1 @$ e$ N9 Z7 I$ v
  goto_xy(i,y1);
: R% n  q0 G" `2 ]! N8 B  putchar(' ');1 v1 N/ G$ E6 K' u; L4 i
  goto_xy(j,y2);' |( \2 s0 L6 H$ S* Z
  putchar(' ');' y5 E6 ~5 q4 |
  delay(10);
" Y3 a% e: S8 B, K  }
2 i; h  h: u3 g& B& h  }
, U. S: k4 [! B9 i. `' ]  /******************open screen clear(开屏式清屏)*********************/
$ W8 |8 S% A' s% _, i& X/ r. D6 S& y4 Y+ x7 x1 w
  void kcls(int x1,int x2,int y1,int y2)
1 Z+ u0 y- v0 v" N* G9 a  {  Z: N4 [$ e& D+ z
  int t,s,i,j;4 o$ d' m( I: q1 I9 {9 B
  t=s=(y1+y2)/2;
+ Q$ G6 n/ w9 N; X9 r  for(;t<=y2;t++,s--)2 ~& s8 q) d( ]$ X
  for(j=x1;j<x2;j++){2 a# L. `- [. f
  goto_xy(j,t);* F7 f, ?! g& ^, @7 a4 K9 {
  putchar(' ');
5 X% ^9 ]+ \) t1 N9 X6 ^  goto_xy(j,s);8 @" L( x' i% @7 ?; ?
  putchar(' ');
, O* U9 O+ @+ U3 `' _7 h  delay(10);+ C2 E/ h  _1 @& x- V9 y$ v( `, h
  }7 g* I2 d1 i  D' I/ J& s
  }6 G  p# Y% I- O, B/ ]2 k$ S
  /*****************close screen clear*****闭幕式清屏*******************/
3 B9 A4 n- N% R$ ?) G& M
$ ^+ n" x: {- z7 I; \: i  void bcls(int x1,int x2,int y1,int y2)
) K) E0 b' l! _2 M1 t) Q6 y% G  {$ Z" k0 `8 d- b5 b. A
  int t,s,j;7 r% L9 J) c9 N7 v! r2 ]0 f& D
  t=y1;
. T8 w+ ~. }* r1 i  s=y2;
2 `; J5 F9 J8 m8 _% M) y" U# N, u  for(t=y1;t<(y1+y2)/2;t++,s--)- ]3 ~' [0 T9 G8 x. x# i
  for(j=x1;j<x2;j++){
  P: s" p1 L2 Z9 R  goto_xy(j,t);/ n: l' g4 n9 c5 f: i4 m
  putchar(' ');* }& B" Y4 t+ l3 g8 b% Y- g
  goto_xy(j,s);
  p2 l: i7 O. z3 W3 D  J  putchar(' ');3 \1 }/ A# }$ F: ~. ?7 K# R: C- \
  delay(10);
% k6 b4 \3 n! i; i5 \  }* [0 p8 d/ H& w( r# u* [* D: L
  }" u0 r( n9 Y7 C$ P& p7 @
  /******************bottom screen clear(自下清屏)********************/
2 f. C# w2 F- _: b! i( t+ {4 K
' O, E2 I  ?; n7 ^2 Z7 k2 S  void dcls(int x1,int x2,int y1,int y2)
( r; ^+ N3 E, P% s7 D! Z5 o& F" V  {
- s( [$ |& P! q  int t,s,j,i;
3 j- a4 q" E$ f- k# D  t=s=(y1+y2)/2;
7 t" Y' F6 H; z" S  `  for(j=x2;j>x1;j--)7 `* n4 M4 d1 X. E
  for(i=y1;i<y2;i++){# C  L5 v/ @- @
  goto_xy(j,i);
" _# a/ W2 n' j6 j; I7 Y7 U) O  putchar(' ');! u" O; F& w0 e
  delay(10);, _4 `3 P* c, F
  }( E% z/ q2 h7 {' h7 F
  }
( T. W! S- T2 H  /******************设置光标子函数******************/% q1 c$ W5 D( E9 ~
( q# a% R/ C  P$ c% t
  void goto_xy(int x,int y); T+ W3 C" I9 f) E4 k1 I5 I4 i: B
  {4 [8 T" }% D5 ^. m
  union REGS r;
  ?3 U- I2 W( D" i5 j  r.h.ah=2;% L9 J) N. [$ d9 T- C) @
  r.h.dl=y;0 r* M1 N$ l; T% B3 V
  r.h.dh=x;
& D( I5 M0 k/ M) H0 ]  r.h.bh=0;& D9 _: P) Y+ G
  int86(0x10,&r,&r);
  G) p) R! A( H+ Z, g( v! Y" ^/ G  }
2 s- t) Q8 R% C( b0 V3 v5 W8 Q& |4 ]5 l* V' [
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/6 {; j7 t3 @0 y# F" |8 m9 S6 {
2 @! `. e" L3 e" c' X/ [# K  a
  void puta(void)% t4 |4 _' a* Q, t. a
  {
- [. F7 R5 L0 J' Q& X6 q  int i,j;
4 p* R+ z) O+ u. Y) h  for(i=0;i<24;i++){/ ?" G9 y3 B% G, v1 J+ O# B
  for(j=0;j<79;j++){
/ i. b6 y7 t, |  goto_xy(i,j);
: V! `+ @1 Y3 V" h: S7 X0 d  printf("a");' Y6 q7 j( R5 @5 _
  }
; S# J- K7 c/ V% r- p4 a  }
: i; p  z' d# x0 w5 M  }

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