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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,8 ~" c( \9 d( U0 B2 E5 ]
/ Z! Y x: n7 n1 {9 r 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& E6 U7 p4 ~" o; b0 z, |0 p9 Q" ?, _
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 T/ ?* o/ z: U$ _5 U. a 子函数及演示程序:+ W0 H( l, V* W( j/ Y/ Q$ y
4 A+ N0 C" g) t5 _9 A
#include<stdio.h>7 \: |" b+ J R3 L# x2 V6 u8 e
#include<dos.h>
3 G e2 T9 a( k0 W6 { #include<conio.h>
/ k# |) Q j6 T& w$ ~
5 r! b G# q( A0 @ void goto_xy(int x,int y);
: p7 D& ^& e4 ?. d* M8 W7 \5 j9 {8 i void dcls(int x1,int x2,int y1,int y2);
2 g- ^; s8 D3 l# F& N2 \0 a- r+ W void bcls(int x1,int x2,int y1,int y2);
6 @" r' A' o+ p) a void kcls(int x1,int x2,int y1,int y2);
# d# u Q( J& w& H* V6 S void recls(int x1,int x2,int y1,int y2);
% }+ n& V$ j2 @$ ?& m$ m) `1 I void zcls(int x1,int x2,int y1,int y2);6 `3 y0 V3 ^, K( u$ T/ [9 D
void puta(void);
8 |3 H6 h0 X* F
# _) e- N! A; T! a( {0 I& H) A' K; R& a, r2 t* ~1 A6 W! U
/*--------------演示程序---------------------*/" v& j" \ s% t1 D4 l5 C9 _
main()
1 M* n: K% m! g- Z, D) @ {
' f9 [$ Y- U0 B7 m) n3 g0 ~7 a puta();
1 F1 E7 @+ U6 V4 s( V# T9 f getch();
/ G+ R3 b4 h# j+ t9 c dcls(0,4,0,79);
7 _" R+ b7 g h, q( o0 F! |- s6 \9 R3 j getch();
/ ^4 @' ]; L' X3 y& l" v puta();
9 Z) F) Z3 S* ~1 E- s8 C8 v getch();
3 ~' l- s1 W2 b0 Q0 N, u, O bcls(0,25,0,79);9 E; }# r& B- F( O+ W9 }, Q
getch();) C/ e" _$ x+ x3 ~4 {( d
puta();; n6 B" c% }& I3 L6 P: h0 X* h
getch();- Z# ]- k# ?; ^5 D+ }9 B
zcls(0,25,0,79);5 B8 Y8 m5 K( ^& a/ I' u
getch();
) ]. w! l2 [( h) G7 h }
, Z) v* a1 c2 g) Y* t% `" B /*********center clear screen(中心清屏)***********/
1 ~' }5 F& U2 N1 l void zcls(int x1,int x2,int y1,int y2)( j% `, |7 s. L! S
{
8 a% ]( U% b" U1 H2 h- Y int x00,y00,x0,y0,i,d;* J$ B; O- ^3 f
if((y2-y1)>(x2-x1)){9 J7 [ x; [* ]5 p
d=(x2-x1)/2;
1 p/ v! d3 Z1 ?. M/ ? x0=(x1+x2)/2;* S$ P" V" O3 t( y0 n( Y) s% {4 l
y0=y1+d;+ o: @* I" j/ _, o
y00=y2-d;5 y# d9 m8 y8 S
for(i=0;i<(d+1);i++)
& i: k3 j0 H* q F5 G4 _* v0 _* j recls((x0-i),(x00+i),(y0-i),(y00+i));
8 j. T, \4 T0 X R1 H4 @ delay(10);
) {4 Y$ c: d; Y2 B* w }: f- o! o: [- [0 |
else{
! k' K8 a$ Z: x6 b d=(y2-y1)/2;
, o% h8 K* {6 b2 s y0=(y1+y2)/2;
1 b# F9 [" b6 ?9 b' z8 U2 U/ K x0=x1+d;
8 o* f7 l# B* b9 o2 _ ^ x00=x2-d;
# `2 V5 r- V7 b0 f! \: h g for(i=0;i<d+1;i++)6 _6 x* ^& V9 d, w! e
recls(x0-i,x00+i,y0-i,y00+i);
' j7 A7 [: G0 O' K" d! k: W% e delay(10);
7 G3 e7 w& {) k) | }
& Z+ R" i6 [/ O3 e5 A }4 l1 d7 w# G9 S
/ y ~$ g& K1 B7 G5 O
/************* clear rectangle side(矩形边清屏)***********************/# p8 V2 A4 R# o6 }
4 A P' Q* s4 u# w5 K
void recls(int x1,int x2,int y1,int y2)& o, a- R/ K$ c4 ^3 L
{# {: x0 D a' ]) P0 Z
int i,j;
+ P1 J# G, d" e4 o! m for(i=y1;i<y2;i++){
* z1 k/ U. a! g' U+ g goto_xy(x1,i);
- n9 Q8 u6 ~; Z( x. } putchar(' ');, b5 R( Z- c8 r9 Z8 y
goto_xy(x2,i);5 Q; B |3 G# Z: O
putchar(' ');4 `0 Y8 {4 {5 T9 y
delay(10);; R `' P5 J% `, U
}
( i$ j* F E* U9 w9 S for(j=x1;j<x2;j++){. }/ R/ t3 n3 O8 B3 L
goto_xy(i,y1);
6 g) g, `5 V: {4 T5 N putchar(' ');6 @1 d5 V' v. a9 ^% r! e3 ?
goto_xy(j,y2);4 m8 _# d- x! s4 T& t: U
putchar(' ');
7 d: x' |5 f1 }$ t! b! `) ^& J* _ delay(10);5 _( C: y8 J6 @! u5 U9 y) O; u( ~
}, g) U& ?, U" M% R+ y0 Q9 m
}
9 O5 c( k+ |7 D; _$ L+ l. ~* l /******************open screen clear(开屏式清屏)*********************/
6 t6 ^& p6 s T: l7 ?- n6 v! T6 J% L# q; C A* j7 p
void kcls(int x1,int x2,int y1,int y2)1 Y) ?- r) F5 z0 t4 C6 Q' d! V, D
{+ b9 e( X ~2 a& W5 m! t
int t,s,i,j;
% h4 m+ ?: d+ q+ m t=s=(y1+y2)/2;
, q! G) y: N& c) u1 ]4 u for(;t<=y2;t++,s--)
& F# z+ Z8 N3 V# ?1 w3 c for(j=x1;j<x2;j++){( y8 L5 u$ A3 c; i! j" w
goto_xy(j,t);
5 I8 u- |5 P7 H: E" Z, d putchar(' ');( ?; B) C9 K2 ^7 }3 u4 Q5 f
goto_xy(j,s);
- O1 B3 F) E O0 I% x) ~1 ` putchar(' ');
) o4 [ F7 Y8 k5 b- {5 g5 t delay(10);
- }5 W% R4 [# B8 k }7 r* w& ]' m& B/ \. C3 P, d, ^& X
}" w+ K5 s$ ?/ v2 p
/*****************close screen clear*****闭幕式清屏*******************/+ I, U3 d" S: M7 N
/ g2 w9 V- X/ h2 T, h: t
void bcls(int x1,int x2,int y1,int y2)2 u; t: O5 {& R$ E% _
{7 O8 j% }2 n, y6 ?
int t,s,j;5 \) C3 u2 A# u! i3 I
t=y1;
" e) j/ x K% n! J( r s=y2;# m; H5 d+ [; p
for(t=y1;t<(y1+y2)/2;t++,s--)
1 R- H: S, H# ]* G+ t& m- ] for(j=x1;j<x2;j++){/ k% C2 ~, E# r9 J* ^# \
goto_xy(j,t);. Y& J. I y# ~# p/ L; G
putchar(' ');- `8 M% A4 F1 {3 `$ u+ D s, T
goto_xy(j,s);
9 x$ w9 X e! _7 i9 B! c putchar(' ');
& g" N7 j0 }/ E6 E1 o- l delay(10);
! \& q+ s1 A" f1 v9 w# n y }
4 d% p8 r' g* z" C }" W9 Y: k* E8 P% u' R! `' r; g
/******************bottom screen clear(自下清屏)********************/
' n" m0 }( z# C
# D- k9 g7 A1 X& u5 @8 K void dcls(int x1,int x2,int y1,int y2): ?+ R0 j# n: }* f: K
{
6 e9 F$ A$ a& S N& x6 U& k- B int t,s,j,i;
& F& S+ b n8 P t=s=(y1+y2)/2;
& l; ~7 h( `8 W6 c9 q8 \ for(j=x2;j>x1;j--)
2 U% @# O5 b, Q3 l$ x2 G2 \ |+ S& I for(i=y1;i<y2;i++){
7 e/ \0 h( X Y% h$ A goto_xy(j,i);
7 ^. h. U0 F1 z6 y4 r3 y putchar(' ');3 D I9 s% g1 l2 O
delay(10);+ @ Y2 f! i7 ]8 n3 E* F
}
: q. w2 S$ n% z" n7 x' [ }
. p+ L. {# A' @( T+ v" O# u: L% z /******************设置光标子函数******************/5 @& r* ^$ z( j& T6 Q
R& n5 g F0 @* S4 B
void goto_xy(int x,int y) K* f/ V6 j8 V
{+ I3 Z0 g+ |( C+ y8 F
union REGS r;0 X* |# Z/ y3 t
r.h.ah=2;
' x' A9 i4 r) G2 ] r.h.dl=y;
M7 t' u3 j6 A+ t! ]2 B3 \. Y' e r.h.dh=x;
0 M1 }' E2 l9 c r.h.bh=0;& g/ I5 P: }' w& D5 v b4 w" J
int86(0x10,&r,&r);/ e& h7 q! [& H' t X' q
}
- `& {3 K' ~4 D" x
3 E3 p& e* D' K/ F7 q /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 ?" B1 I8 X d* K
* Z6 {# L5 h- F void puta(void). T# T' j* E1 o) \
{
1 T! i3 n: _/ T1 E ` int i,j;
3 v6 N2 P( p( f1 l- f! l for(i=0;i<24;i++){4 ~% I( M# R+ p4 f7 g2 B* e' L
for(j=0;j<79;j++){
1 d7 l& d5 K5 i5 ?0 {5 q goto_xy(i,j);
! S# C8 M5 Z3 B/ p7 u% i printf("a");
/ M/ T1 V1 f1 W: }3 a }. Q7 D4 C; ^7 S! e: x7 K
}, V6 C; B2 s# A* Q: r. A& D
} |
|