  
- UID
- 133
- 帖子
- 51
- 精华
- 1
- 积分
- 186
- 金币
- 55
- 威望
- 2
- 贡献
- 0

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 l+ b% A! q6 m
' q( |2 Q- q4 u 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. @0 |" D3 Q& |/ c# W( P2 P T( m0 Y
+ M. P7 @% ~9 l% ? 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
; q3 E' X/ T) Q$ |+ E 子函数及演示程序: f7 S( U9 H3 X2 G4 V% `
; N6 t, X& c7 P( r2 U& ] #include<stdio.h>
3 M. l, J* G8 x" l( h) F$ [ #include<dos.h>
0 v- [- {/ C3 m7 B; ~5 R5 u% r #include<conio.h>
, z. ~& ?+ `8 A9 S
" I" X. ^& M9 x8 h; B8 f L void goto_xy(int x,int y);
- z. x" v& L: d4 A% l void dcls(int x1,int x2,int y1,int y2);3 j+ b5 Z F! [- l5 S0 i6 {" l
void bcls(int x1,int x2,int y1,int y2);- W1 {- G; A9 @* C- J6 o
void kcls(int x1,int x2,int y1,int y2);! P, _$ g4 z+ f* ?+ Q
void recls(int x1,int x2,int y1,int y2);
6 e V0 V; W7 l9 P void zcls(int x1,int x2,int y1,int y2);* O6 u2 |% v2 }: l
void puta(void);! K- g) c8 v% r8 s4 \
/ i3 z) W% t, o: f9 ~; U& g. _+ C+ A8 a) e- d0 |+ Q% y3 }3 c( f
/*--------------演示程序---------------------*/
: F1 f5 s, b t, ?2 Z main()
0 g/ {. U7 R2 t! g. o+ h {
$ i) B4 W3 i; h# r3 \ puta();
: M* @7 `' Y6 S0 p! F& x* l5 w getch();
8 v4 |) K2 i3 S7 _ dcls(0,4,0,79);! }6 A4 }. ~+ p( ?' p
getch();9 o& r6 {" |) G) s4 s
puta();
! z) I; q! Y7 F" `& ~4 Y% |' B$ A getch();2 o7 f) A3 `8 ^3 A9 ^5 z1 f3 O
bcls(0,25,0,79);" Z% [" l; I8 W
getch();
$ d( X& }0 w& y i& p# F puta();
0 Q+ o' ]+ |0 T8 L5 X( H getch();
; c* |( c1 H, r2 r( i zcls(0,25,0,79);
8 y; K% q9 S7 l# L getch();
8 y z; P' X+ ?# y* c) W% M }! X# i' C5 ~& ?) C. r) j
/*********center clear screen(中心清屏)***********/
- E6 Z& o5 e' l8 {# P( Z void zcls(int x1,int x2,int y1,int y2)
5 B6 {) D S! y {
; M8 E6 s7 P: O( U8 X# c- t0 o& u! S int x00,y00,x0,y0,i,d;/ ?: z' [" ^, C* ~$ Y$ i
if((y2-y1)>(x2-x1)){! v& p4 \2 [- s; l$ ]
d=(x2-x1)/2;
' j) G. @3 d4 e( O, \! q0 B/ r x0=(x1+x2)/2;
+ ~' L1 F' e. H: E$ Y y0=y1+d;; W9 p4 @2 T4 s( T% I# z
y00=y2-d;6 K+ c' }9 w' a; K. t2 W) H( ~
for(i=0;i<(d+1);i++)% Q4 X3 ~8 m8 j2 c) `+ Y
recls((x0-i),(x00+i),(y0-i),(y00+i));5 ?. o/ a3 |/ W/ y- w
delay(10);
& x) j5 R( v+ Z M }
Q1 a* t* k% N else{" o5 V# p( i: q( {
d=(y2-y1)/2;- l" \4 j0 b6 u# P0 |
y0=(y1+y2)/2;3 L5 n2 n, k e6 o& Y
x0=x1+d;, a8 P) h+ E3 b2 U' p
x00=x2-d;; k+ L5 x8 N3 Z1 e
for(i=0;i<d+1;i++)
8 W# e0 X R; A5 v& y: B+ {9 {5 v recls(x0-i,x00+i,y0-i,y00+i);
; j6 Y" r2 M0 B; a2 Z7 O' |+ P delay(10);
/ E: w% E8 H, K }8 o- A+ [" d/ i* L- a
}; {( V- q: n( r6 V! `( o
' U) v. K( r$ c( i /************* clear rectangle side(矩形边清屏)***********************/. @+ o1 H; B; R n. z& M; R, n
7 ^+ r o, L7 ?$ A5 U, F5 Y* ~
void recls(int x1,int x2,int y1,int y2)
; v+ S4 h2 w- \) }% x6 L( c( R {4 b! I) d, J4 O5 C5 |* {, t6 ]( ~
int i,j;
) x5 \" o) ^4 C4 x& w% q+ U for(i=y1;i<y2;i++){
2 B1 _* ]( y+ `3 [ goto_xy(x1,i);
7 Q8 `- b2 d+ L5 G8 W putchar(' ');0 [5 Z3 q* A' @
goto_xy(x2,i);' s0 N; @; ]( h7 `/ W+ V p
putchar(' ');
" T' l$ G4 y' I; Q$ q. A delay(10);; {2 X- j. ?% n7 B8 q8 E. w. e
}; N! t: i3 I" N3 J, U
for(j=x1;j<x2;j++){# Y: _3 J O2 `) x
goto_xy(i,y1);
0 E: K# z" E- S9 z# c0 v2 V% x" F. G putchar(' ');( [3 Y5 a" A; S' l
goto_xy(j,y2);
5 U: {" O4 _$ P+ \3 e0 g: |# q putchar(' ');4 b5 o0 z! K; f5 ? P7 J
delay(10);
7 D; i1 C: r6 g$ V. p! o5 { ] }" ?- E+ L: g6 @' v8 ^
}
* u5 ?3 i; r2 ]1 e( A" h: U /******************open screen clear(开屏式清屏)*********************// A$ R# S: v' b6 B. u5 }
) \ U" A% y6 p: E
void kcls(int x1,int x2,int y1,int y2)
$ s2 {5 d+ C0 t& W, \( Q {
+ `" A6 B o$ D }8 U8 [ int t,s,i,j;
5 W$ z/ k/ j# Q6 z7 w+ @8 K1 v t=s=(y1+y2)/2;
% m- j7 z, p1 l' D& w+ Q- G$ @ for(;t<=y2;t++,s--)
% P6 f. g O8 B5 v( j& ] for(j=x1;j<x2;j++){
% o, T( J' X- A6 m* C goto_xy(j,t);4 O: T: \- ]8 S k# r, t
putchar(' ');
* ~7 k" w( H8 C, q goto_xy(j,s);
) V+ o) K0 E0 |! ?5 y9 o+ d putchar(' ');
( L! ]1 g+ H1 K+ r delay(10);
/ d7 }, c6 E" x }* I6 Z6 [5 K. J0 E; h# b
}
/ ]1 X, x! M. }# b# y /*****************close screen clear*****闭幕式清屏*******************/
2 C* Z9 _( {- H) ~8 `0 p% e1 T- u& H0 b" d/ w# x6 B
void bcls(int x1,int x2,int y1,int y2)
9 u7 L0 p4 \, Q {; L. P6 H5 T+ W# z
int t,s,j;1 s3 ~3 ]# A5 r9 u- b% G+ Q
t=y1;
( z/ v- d z x; q8 v2 G s=y2;
/ U* t' Z7 a' @/ g* Y- y for(t=y1;t<(y1+y2)/2;t++,s--)4 y6 I5 t3 \* @: p' s" z3 X2 w
for(j=x1;j<x2;j++){
' q m4 d$ V4 X* r goto_xy(j,t);* b5 G, x, b; g5 A$ S
putchar(' ');" g' o/ M* y* d+ _9 C+ |
goto_xy(j,s);
; |" d/ ~8 D, H" Y, P; w putchar(' ');
2 d5 |% t& S9 l7 X. E$ j" L delay(10);
+ e3 R& `* f6 ~& d }
: z" K6 l) p! T }
. I u8 z, D9 B7 q+ h+ z' w2 w /******************bottom screen clear(自下清屏)********************/
% @5 A% e/ G4 w& c, Z/ B3 Q1 B G! z2 |
void dcls(int x1,int x2,int y1,int y2)
/ _# k6 p+ k: v {% o% V- u) d! [
int t,s,j,i;
( V* T. p4 Q4 E; k t=s=(y1+y2)/2;
5 f9 B, t) U! @3 ~* W I for(j=x2;j>x1;j--)
; f0 I1 C# N( u+ q# n2 E7 r for(i=y1;i<y2;i++){
: r- O6 ]. H3 r# u0 x0 g: m2 d. W goto_xy(j,i);' x% {" g. s# ?; s; D$ s
putchar(' ');
. y O) C2 m8 o3 `% b& K- N# D: o delay(10);
8 m" C5 f `' J- ^3 G& g |1 h }
$ f( R) k0 |3 V0 G2 D% g; v }
! [! E8 ?$ c7 l! j; m: S /******************设置光标子函数******************/
% C# o' M1 O) g. O) l0 l- `$ g( D
void goto_xy(int x,int y)) n$ B( n- k3 W7 u( F2 @( u
{, h* `& G" h) Z$ }, ?8 d& R
union REGS r;7 T7 [- i+ L- i2 P5 q
r.h.ah=2;! x5 b' ]. ?6 }
r.h.dl=y;4 T1 ^3 R- I: y, R" p M' q
r.h.dh=x;
" f0 k$ E- ^% [ r.h.bh=0;. r: Z. ]3 ~# d! r% v+ N" C: |, W) V
int86(0x10,&r,&r);9 W0 Z0 n/ y- \* h$ f! r
}' U: }9 V! T$ p0 ^7 C+ @
# u: d1 g4 u4 ~/ ~) F) Q /**********************在屏幕上打出一连串的a字母用于演示程序******************/) {! ?& {9 R: r% [9 C
9 Q5 n( Y! p* d
void puta(void)
' z; d+ f* I# Z& V9 @1 `: Z6 _ {, X! i) J7 [1 |2 }
int i,j;0 s9 L5 o& [2 [ J/ M" Q
for(i=0;i<24;i++){% j! I H& n; `5 \9 N
for(j=0;j<79;j++){% o5 f; r0 d, I/ N$ @7 J
goto_xy(i,j);& Z4 ~' @. {% |* u! W
printf("a");3 U( g9 G. u" J4 f( W
}6 v; D, l9 H$ X( C
}0 r9 W$ y1 X7 G, I+ J
} |
|