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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; n! c. t5 ]1 A K+ d) A5 Q2 P* N. a/ ]
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 v1 Z- t, s @6 s$ i! M$ t N
, q0 m5 t7 B9 k3 R 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 C* R0 t2 _" _9 b9 ^* [ 子函数及演示程序:
) o% V x- N3 e" R: w
3 B8 ^# d# a5 y #include<stdio.h>
, m0 E O4 Y J4 H5 N8 u #include<dos.h>
& N2 s, u) v6 _/ D m4 l #include<conio.h>
8 f# i# O2 T$ {. W" a0 C5 r
2 J7 D$ I5 @& F7 ?" ?+ M void goto_xy(int x,int y);
3 h! j6 m3 k3 I0 ^& ]& i void dcls(int x1,int x2,int y1,int y2);# v: H" H9 c" J- H( r
void bcls(int x1,int x2,int y1,int y2);
2 W5 ~& h6 |3 y" u void kcls(int x1,int x2,int y1,int y2);
# B8 C$ ?- ~, d/ W4 f void recls(int x1,int x2,int y1,int y2);9 i) W. r' f$ w
void zcls(int x1,int x2,int y1,int y2);
# n6 W+ g0 J9 h+ s void puta(void);
& N v( ~2 s, |: I& V
$ H& L; R4 c+ l. P. X& Q% S: K( q' Z! ~- _
/*--------------演示程序---------------------*/
, ~$ v$ [* u% {$ C! R main()" O% ?. u2 \' e+ @+ E! M+ P l1 `
{
3 ?" S. z, s' H0 E- A puta();
. A5 |; q) t: a, b, D8 m/ v getch();. d! n6 d+ Q0 p- V
dcls(0,4,0,79);
0 c0 {0 a' Y2 z$ c8 u. ^ getch();
4 W* w& C' C9 T% o1 J% j puta();6 Y) T! ?/ b" v! k6 r' k- E6 Y
getch();$ o, l: k1 g f# X) ?6 t, N; M/ o
bcls(0,25,0,79);
- A# X: }% S, u1 F& X# { getch();
5 Q) B! r5 O+ `1 o puta();
# l7 U9 Y$ p4 h# N( s getch();
6 z0 E9 B* `" y5 R' L0 w0 i/ \/ M zcls(0,25,0,79);! X9 b0 e% {! j, Y+ N( }
getch();
) f8 L6 C- A% H, D* P4 Z7 e& C j7 I }
" w! J" g" g, s7 G /*********center clear screen(中心清屏)***********/
0 r! n2 Q) `, F9 ~ |8 f+ } void zcls(int x1,int x2,int y1,int y2)
?! l; [) h+ `) c) @8 |8 | {
/ d& t6 J; E1 k2 w, }; ^; `% N int x00,y00,x0,y0,i,d;: P, H9 c3 `, b# y% h7 q
if((y2-y1)>(x2-x1)){
6 h7 `% f( M* q. f* R d=(x2-x1)/2;. ~6 T- P3 y6 n
x0=(x1+x2)/2;' P/ g3 N+ ]8 O
y0=y1+d;
7 f. q4 S3 y( i/ o6 s/ V' u! | y00=y2-d;7 I. t S2 {# m4 T0 [$ x$ X
for(i=0;i<(d+1);i++)
" |" G! Q9 r! i recls((x0-i),(x00+i),(y0-i),(y00+i));
& Q3 _8 e3 ~% j$ z7 \1 o/ ] delay(10);2 W; Q+ y) d: X0 @" U
}
9 E% Q3 L6 ^5 E1 f+ c+ e9 [ else{
7 n& c' y, i- z2 W7 h d=(y2-y1)/2;: C, z( x! k. m' c. B
y0=(y1+y2)/2;
7 a6 u! k6 K, ?3 u9 m4 a* r; z x0=x1+d;
5 {, A$ w% ?7 v) |; }& T/ J) [; t x00=x2-d;( M9 M: I& v% y: m; o5 c4 a+ g
for(i=0;i<d+1;i++)
X: {& |) c5 P; K7 r3 z$ \ recls(x0-i,x00+i,y0-i,y00+i);9 n5 _3 `, @- g* [! N& p
delay(10);
6 U3 U5 \. [5 J4 f' u8 G }
# m. v7 V: v, h1 i( |+ L }/ K9 ]) s5 p: M
; U p1 e# D! K0 `* e /************* clear rectangle side(矩形边清屏)***********************/2 h& D) D! S6 b1 j7 X5 S
; F* k9 P( h) X$ f! H' j void recls(int x1,int x2,int y1,int y2)9 w$ ]: n- L; I3 q- b/ I& r
{
) ]$ j% O( e! u" ` int i,j;
3 R: W4 a, \4 m1 a6 l6 }- a( N for(i=y1;i<y2;i++){
/ X) L3 _$ {' x+ s# D1 `6 Q; a6 H* `3 a goto_xy(x1,i);
) c; Y8 D2 e% S( E* _. x putchar(' ');5 w* k9 [+ M6 U
goto_xy(x2,i);
# \" K& S$ Y5 ?. U0 }& B putchar(' ');
% Z N {5 `/ l* s delay(10);( v1 m) G! S; b; s: t) K
}% |/ Y4 M- ]% ~- `+ I9 f
for(j=x1;j<x2;j++){0 |/ ?% I3 [& }8 K9 G( k: B
goto_xy(i,y1);2 d5 \# d$ L3 q- G1 v6 n
putchar(' ');
2 A3 `9 V" G8 C( \4 G goto_xy(j,y2);
5 Q ~5 L9 | I% V6 e* K putchar(' ');4 v. x |! O. h E5 O: Q* v
delay(10);
" l0 E" \6 P$ X3 _. u9 E }9 L& @/ ]! K+ m* M
}
9 R& G) Z) ]7 \, C: H3 m2 ` /******************open screen clear(开屏式清屏)*********************/
/ ^- F0 y7 S* }7 g! z
3 n% I$ x, \! u void kcls(int x1,int x2,int y1,int y2)( [) D% o6 u8 I# n
{# S, w" w0 j8 c! k# d
int t,s,i,j;
g' ?- b0 \3 L5 }1 N k t=s=(y1+y2)/2;; }: H9 g1 X& k d. A9 O9 z% Z* ~* Q( ~
for(;t<=y2;t++,s--)( [4 T7 {" }- y; `
for(j=x1;j<x2;j++){* N) P9 f: \6 z
goto_xy(j,t);
, @# h* d. j: f5 m0 E3 K5 }9 b4 j putchar(' ');
8 k- Y, n5 p3 p goto_xy(j,s);
: _% G) ^( @- G+ c& N putchar(' ');8 r2 k8 l8 H' z5 C
delay(10); ?4 m) r4 q0 _8 Q9 N* K- b* m7 E
}
) X2 h' E9 k- B% d }& Q, P8 r$ p3 u" X+ n% a$ n' S% f
/*****************close screen clear*****闭幕式清屏*******************/
: I6 D( _( |8 Z4 Z$ [3 g+ I* \4 K
void bcls(int x1,int x2,int y1,int y2)
* f; j# w0 M/ P' t {
/ h4 O/ _' G [) p int t,s,j;+ n9 A# y; A6 ~7 E4 r% O
t=y1;
6 i: c3 x) k9 U* X. d! r5 Y4 N0 V s=y2;# O% ] d: v/ k$ b4 ~3 \# h. g
for(t=y1;t<(y1+y2)/2;t++,s--)1 F( u9 L( L' L
for(j=x1;j<x2;j++){
) C$ A, I8 Z7 q2 }' t& o0 I& n1 t goto_xy(j,t);0 L$ C0 h; R& E4 b, `; W
putchar(' ');
! u& @ h5 W; d. Q8 o goto_xy(j,s);
! w) A) f; M6 Q5 e8 B+ A putchar(' ');* M5 o8 L# v2 |* E! c* r+ z/ y
delay(10);
1 n( b( k2 P1 O8 b6 j8 x }5 u' E9 \* r3 X. T8 k
}+ b- v1 w3 \ O& N) @- @ ~/ q0 U
/******************bottom screen clear(自下清屏)********************/" C8 \; T2 d' C
4 ~3 ~2 z- @: ^& R- V4 ?
void dcls(int x1,int x2,int y1,int y2)
' k. b- a2 d( L; T$ F {9 h9 P/ e. Q+ W' ~; v) l
int t,s,j,i;% [# k7 L2 G1 V/ t1 L0 G
t=s=(y1+y2)/2;
& b0 {8 M* G( l6 ?, H. I3 W/ O' M: N for(j=x2;j>x1;j--)
6 M2 b. G/ Y" d1 } for(i=y1;i<y2;i++){% W! ^2 f( n' |( X% {
goto_xy(j,i);4 y0 ^2 T: N6 a/ `* x5 Q! d8 O! A
putchar(' ');" C0 g' u4 ]# e: C$ L9 K: r
delay(10);
+ _3 Z% O5 @% Q4 Q }
* r7 D/ B. [6 r0 v4 Q }) ?7 N0 O. Q6 F- O
/******************设置光标子函数******************/6 A% e- }. F9 z! i
: \7 B) p( a& p7 }
void goto_xy(int x,int y)1 S) \ ?! g+ N0 l3 e! r @
{7 K1 a4 T2 O! q2 s: t
union REGS r;
9 }3 Q% T' u5 [ r.h.ah=2;
w* t1 ]& T# d9 x r.h.dl=y;. p" x+ O( {8 f9 F( v0 n5 w
r.h.dh=x;( O) s4 U" v: c6 [# q
r.h.bh=0;
+ h5 n9 T! [' G7 r9 S int86(0x10,&r,&r);1 [+ Y0 z! `. ] Q
}
+ E0 Q# X) e b( @& z1 m3 ~& r* j& n- N$ X$ h; X% y1 }
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 j( W% ] p U! k9 ]( _/ p' G/ ]' _5 c7 s5 Z7 U' G; ]
void puta(void); P# m. U) g! w9 A7 A6 Z
{+ m( Z, x/ p! l; X
int i,j;
# ^+ f- r5 o2 u( v0 ? for(i=0;i<24;i++){
9 k* j: Q: T# q8 P( G' W& K for(j=0;j<79;j++){
$ G% @6 L: t( e7 u8 w! r9 X goto_xy(i,j);0 R- `1 D5 c/ X* S8 M& p7 G
printf("a");' \# I1 r$ C" a. R' s" U- \4 i/ H
}
) c/ v. Z- V5 I2 |% W }; B- e' `* v3 D5 \) Q+ m
} |
|