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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ D. T8 v/ C" c7 L1 p1 o- o
L3 J, k0 _3 `' Z3 Z2 U
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
: H2 X7 q; H, o' A: x
! R* } |! {3 X! ]* f$ w0 f 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & g4 C5 g+ t3 e9 Y5 H: X9 W2 Q* c
子函数及演示程序:
5 F( S! Z% c) V. F) f8 n$ ^* C7 Z+ z3 B) y S& n' c# P% P
#include<stdio.h>0 S9 o1 ~% K7 N2 T3 g0 r1 T
#include<dos.h>
& e+ }2 Q9 b5 z3 u #include<conio.h>
7 F V4 l2 Z9 `5 [ ^3 z* n$ X' [
9 V" n* M# P. u& h/ z1 r void goto_xy(int x,int y);
8 q; C! m! _' L! p& a void dcls(int x1,int x2,int y1,int y2);
3 w* G2 X9 y! H- m7 X( t void bcls(int x1,int x2,int y1,int y2);% d5 D; a9 ~. {3 A% Z. n
void kcls(int x1,int x2,int y1,int y2);
I% s6 r( m2 c6 h( C1 y void recls(int x1,int x2,int y1,int y2);
9 n6 I9 ]- p2 A0 m; d' b. T+ K void zcls(int x1,int x2,int y1,int y2);( S, P+ j$ D" f9 E' k0 C0 x) `
void puta(void);4 V6 y$ c- l: X' R+ `) G1 A1 N
. |. ?- R4 ]4 R) x
' f' v+ w' {. k% C /*--------------演示程序---------------------*/
/ W# A$ s% k; _ F1 T7 y main()3 u% P/ B! e0 o& `
{# N/ ]6 d$ A1 n& E) p U
puta();
. G# A8 x: X, I' j F getch();7 [" L, s! W' W
dcls(0,4,0,79);
6 A" N" C! F- P* W- b6 { d getch();+ w6 J4 }8 [- H) C
puta();9 {& O" B3 F; D0 u/ u
getch();) I$ S2 c) k2 n+ C( ~7 \; H
bcls(0,25,0,79);' t# ^; V5 Q- G3 v/ ]: P; S
getch();
7 @" y+ j/ t- g0 Q" B. S puta();
( A2 E$ }9 B1 h9 ~4 w3 Z8 O- { getch();/ d$ K- S& y! p7 D
zcls(0,25,0,79);
) w4 z* Z% }( t# Z: ~) E4 x6 j1 ] getch();* K. Z1 I/ B9 J! w3 [( s3 ?- {7 ?" x
}, y* R. A* w$ D3 ]
/*********center clear screen(中心清屏)***********/; c7 j$ ^& z. X) a; H! Z
void zcls(int x1,int x2,int y1,int y2)0 {7 O' c2 ^% Z0 n0 D" f
{
% s! }+ W H/ C, P6 i: L6 I# D9 u- A int x00,y00,x0,y0,i,d;
# n4 G+ V" ^# F+ a7 A& b2 z: @ if((y2-y1)>(x2-x1)){/ w0 j, c& k: f
d=(x2-x1)/2;
" l) t( }# A9 L& O# I0 X x0=(x1+x2)/2;
7 m: ?, s; d/ \, Q$ q, n3 ~6 U y0=y1+d;
# m4 R0 {. N# w: }- O0 s y00=y2-d;4 {$ ~9 \0 S% N4 C% W, X) b" H) i
for(i=0;i<(d+1);i++), d+ {5 `9 q1 H8 {5 x
recls((x0-i),(x00+i),(y0-i),(y00+i));
4 {4 @( e, z9 e% W; w4 h delay(10);
, F6 T) F* J8 x* _' Y' X }
: e/ Z0 M! H3 N1 u' S else{: \, F I6 c4 l: V! Q
d=(y2-y1)/2;
/ j, D. E0 Q+ s3 \! n& u m* f* ~ y0=(y1+y2)/2;
9 Z, {( s: l, B# k7 Z( a x0=x1+d;, M/ ^" m g/ D5 v4 F% a
x00=x2-d;/ p2 t7 a* h& c+ E' a, Q7 O
for(i=0;i<d+1;i++)0 z0 w' F7 ~* E0 F) |
recls(x0-i,x00+i,y0-i,y00+i);
7 @7 p; i5 k: v, A9 ~ | delay(10);$ m; k2 l) v! ^) Q1 a6 v
}+ M6 Q# s4 x2 V& k# }# }
}
5 C6 A$ k P: ^9 K
4 T/ [3 d3 v$ S3 ] o+ X e, m /************* clear rectangle side(矩形边清屏)***********************/
a; d, E' J* Z8 x& l+ G" l7 |. S. f" y! ?
void recls(int x1,int x2,int y1,int y2)4 t; \9 |* }8 w9 \+ G0 v
{
- Z& a9 L# H0 k+ \7 Z int i,j;9 H$ ?! J3 k9 l* d/ ?8 o
for(i=y1;i<y2;i++){
5 b1 Z x6 O% |7 q8 q. W1 V goto_xy(x1,i);
- F/ W% }4 D4 o putchar(' ');2 t6 W- F3 k. H; k
goto_xy(x2,i);. L: i9 [1 _- ^# r* c
putchar(' ');
+ E+ l" e& X# ]7 \. @ delay(10);
& m B( q9 f6 j O$ b3 t/ n }0 r( x: g* d. q% _7 p
for(j=x1;j<x2;j++){; e. h1 s+ x0 @5 |" q' S2 I
goto_xy(i,y1);: t- A( R; g4 k' Q5 C/ X
putchar(' ');6 a+ P* V1 H1 C, j! `+ \, Q7 ?: |
goto_xy(j,y2);
$ R% S6 U# o* U0 s) B putchar(' ');
/ o2 R% H! s9 B' ]% ^0 G1 a' C delay(10);
) E( e4 D R/ x3 d" D! v% P% s7 [ }
0 F/ ~2 G: [$ A+ B" ~4 Z4 C& b }. R2 X& H+ ]& j! J( l
/******************open screen clear(开屏式清屏)*********************/
$ K3 i& G3 w% V1 P5 o, v9 I& V* M( ?0 y
void kcls(int x1,int x2,int y1,int y2); `3 l" k( D/ G" e. o+ n; m
{
7 \! |9 P! c+ X% [ int t,s,i,j;
6 c( m {' X8 a5 H' D% I' f t=s=(y1+y2)/2;+ Y7 c/ b& u+ s; q1 t4 r; _
for(;t<=y2;t++,s--)* ]% N: Y$ D: F; n4 c d& c- s8 b
for(j=x1;j<x2;j++){
$ l* y8 y5 v2 X: w( R2 P goto_xy(j,t);5 H* W: b. y: I5 Q5 X1 w$ k
putchar(' ');7 N1 ]+ v. A# \+ k
goto_xy(j,s);9 z& U' u' I6 Y$ t$ e% b T
putchar(' ');* E" ]6 |1 ]$ y; g1 [$ D( B
delay(10);& I/ S" t0 c8 n! P' Z6 T
}
. e6 a6 z6 k7 e+ e5 |7 S }
2 G7 |) `# g" Q! S! n /*****************close screen clear*****闭幕式清屏*******************/; s3 t3 k# z7 n( D5 K( Y$ r/ U
! P0 c, E/ k/ S1 M+ C6 ?7 b void bcls(int x1,int x2,int y1,int y2)( V" m( G6 C! a* o
{
& F! d% i& k+ Z6 W; I6 F int t,s,j;
4 ]4 c/ ^* L) _8 H& p& b0 E t=y1;
) Z! I) b# r' K, V$ S s=y2;7 c0 G& h+ k/ ?' J ~: o1 A
for(t=y1;t<(y1+y2)/2;t++,s--)
5 I+ b8 X9 [" \8 s8 P' u for(j=x1;j<x2;j++){# y* H4 t6 E. v" \# t
goto_xy(j,t);9 H4 ^4 E% v! w7 d
putchar(' ');# P) g5 ?2 ]( v1 ?! T
goto_xy(j,s);# H9 d/ @1 e7 S5 ^2 L' s; k! d
putchar(' ');6 G+ X% Z' n( m# p
delay(10);
], Z7 O& [: Q; @- R# w1 o& u. \ }
( N; j' ?" W( f( ] }; u3 L- Z5 Q8 w; w( b
/******************bottom screen clear(自下清屏)********************/
6 p# d1 @/ T& W/ c3 U) H I1 M' C8 X% }+ J
void dcls(int x1,int x2,int y1,int y2)
4 |: F( P3 \8 O: ^# ? {; n6 K; X+ N' w* Z ?/ c
int t,s,j,i;8 m' j& W: O/ I8 A5 R
t=s=(y1+y2)/2;) u' T6 Y# z* T5 ~' n5 L
for(j=x2;j>x1;j--)
! l1 o( Z$ c) T* j" a for(i=y1;i<y2;i++){
" O q; p8 P5 I1 r6 A o% { goto_xy(j,i);5 s) @8 ~ _8 Y. \
putchar(' ');
% u. t% @9 L; q* o delay(10);
4 k( S; \8 h# L: f }! U) q3 B2 @& ]' o, f$ m% g
}" p+ g! S1 B* ?9 n
/******************设置光标子函数******************/
1 c+ t2 z5 y' |. P* ]
4 D$ v( E; p2 S) O void goto_xy(int x,int y). u2 K7 d( h. F( j
{, J" p' u, N3 Q* A* e" s0 O7 ?& X
union REGS r;
: P% N5 {( G- Z. g5 i- I" N r.h.ah=2;
2 Q; d( s! L, v* L) t r.h.dl=y;2 b$ m7 }; A2 Y5 u) ^% v2 c8 x8 i( e3 D
r.h.dh=x;! H: w# Z. R0 O* i
r.h.bh=0;
5 r8 @8 z# t: m1 N( ^/ [ int86(0x10,&r,&r);
# l: @ @$ ?1 j( R9 L& I3 F6 Z& g }' N9 F( j3 A C0 t# P0 z. L
+ T4 V5 H$ n4 {) c5 ~- p$ W
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
! R3 R; `$ S) r) O. a+ C
7 Y. n0 y- \7 y6 P void puta(void)
" t+ S/ T7 ]; }/ q2 W# k {( V3 e9 b; d# Y6 i% ]: I, _7 D( y
int i,j;$ s+ O7 l) T3 i/ p
for(i=0;i<24;i++){8 a) a: ]. m2 \4 }! T
for(j=0;j<79;j++){
2 |: j. P4 w T7 R goto_xy(i,j);/ T' I' r& N- v% U/ ^
printf("a");
4 U9 ?; |/ }: ^7 E, n$ i& I8 m }5 ]4 Q4 G& V6 D/ Q( [1 O; s
}: ?# v8 G/ V, y/ H
} |
|