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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 s. _, `! @5 [8 _3 J, L. j6 a7 y6 f' [1 R# n5 L$ \% l- f
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, F& q+ U& o( `
( b! x) z0 M d- o
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 }9 v i$ ^( A* X2 O# F& N- V+ Q. ^ 子函数及演示程序:
/ p) P4 k$ I8 E' i: b) E
/ b7 w% O6 b: } c0 @& M* f$ b #include<stdio.h> S2 ]- t. w5 ~' [. j
#include<dos.h>, Z+ j& V: e5 q# f
#include<conio.h>
+ \+ H* x9 N: z4 r/ ?6 K+ E& m* y! Y. K. e% n# d/ e, ~
void goto_xy(int x,int y);
$ h. v9 N4 O/ d; Y void dcls(int x1,int x2,int y1,int y2);
: f7 V! L0 k% d7 c3 R. { void bcls(int x1,int x2,int y1,int y2); F g: }0 E+ u( q! ]" ?
void kcls(int x1,int x2,int y1,int y2);1 ?0 @; U# p1 O1 A0 \: Y
void recls(int x1,int x2,int y1,int y2);8 r+ |# P8 {' s5 O% w4 K! x7 N1 p
void zcls(int x1,int x2,int y1,int y2);3 c% v9 |+ B8 u) q5 p8 k3 y6 @
void puta(void);% P- f. m$ Z4 o* e! \
- ^# n) V( x" o4 H* j1 y
7 M9 }: V4 d+ r/ b1 j$ @: } /*--------------演示程序---------------------*/- M g, R0 ~$ F8 ~; ]* H- N' ~
main()
; l" A+ @- U i, G: {) S1 V {
2 R% L2 t- V$ C; V8 F puta();8 X" b# d3 Y* N# F
getch();1 t: u5 N: ] m) V9 L" R
dcls(0,4,0,79);8 y5 v- S1 d% j" `7 g$ e
getch();
6 p0 P, L, k2 i/ Q; Q Z puta();
- F6 M/ z% j& L& `; M getch();
0 H- j: f( x* m' {( ^ bcls(0,25,0,79);5 L4 ?. T/ z6 U
getch();0 `9 h# p0 w/ V6 N& [. Q: A6 S# x
puta();
2 O8 H0 P" l$ @% x getch();
/ Y* j- D4 B9 k$ ` E/ R zcls(0,25,0,79);( d* m6 f5 L7 P$ W) M$ ?2 ~
getch();/ R( ] N0 j1 z& K( @( T! [9 L
}
! \2 Y1 U% o% l# v /*********center clear screen(中心清屏)***********/2 l1 g$ Z+ T* l+ _ z4 P3 h* C
void zcls(int x1,int x2,int y1,int y2)
3 C% ?- ?& @! P8 X {% v; c# I# U2 x. l
int x00,y00,x0,y0,i,d;$ r# l+ [: a* t+ O5 v
if((y2-y1)>(x2-x1)){ Z5 X+ O# c% O
d=(x2-x1)/2;
2 {0 a. ?5 E* `8 G5 E x0=(x1+x2)/2;
/ F" b* V+ ^+ O y0=y1+d;" \4 L8 f g# Z
y00=y2-d;
! a# P0 c" g& v8 D% s for(i=0;i<(d+1);i++)3 L# O/ n+ C1 j( `; l0 \
recls((x0-i),(x00+i),(y0-i),(y00+i));9 [! t+ u: C' K% I' u* ^: Z
delay(10);$ Y5 ?. H* J1 v% `: g: P8 P! {( j
}
# j6 [; i2 {& }' K3 N: | else{
$ n) a: `3 i/ o& t1 L3 l5 B4 n d=(y2-y1)/2;! q, n, c6 `) c
y0=(y1+y2)/2;5 j0 Q, \ S- E" z
x0=x1+d;+ B" K+ C- w# X q
x00=x2-d; M4 \: a' n8 O& C
for(i=0;i<d+1;i++)2 H# p' U" H9 H4 O
recls(x0-i,x00+i,y0-i,y00+i);
, r- K, G3 N( _ delay(10);( ~2 J/ {1 B* o
}+ f* X/ q: s. }7 o+ q1 [
}
. k* t6 r5 s# r# ^; o# y! |4 e( d' V" K- b0 n
/************* clear rectangle side(矩形边清屏)***********************/5 U* w( D' U3 q6 M0 p: K4 ~ s- Q
/ K8 I1 |' A, A3 F7 `4 \
void recls(int x1,int x2,int y1,int y2)
) i: ~8 r* A2 A5 f {. j9 R. E( t- z1 q* n
int i,j;
2 ~) ~0 h0 Y. K1 |8 F& ^ for(i=y1;i<y2;i++){: O7 f( s, u8 U w9 Z! _
goto_xy(x1,i);
Z( U2 J- k2 E3 B, N putchar(' ');
3 {1 W8 x% E9 N( M% f o goto_xy(x2,i);; I! L' ^! b1 I5 e/ N% @
putchar(' ');8 d1 a; c3 r$ V
delay(10);
" Q1 I9 \$ ?& g }5 Q! V8 N, V) @6 q, U2 }
for(j=x1;j<x2;j++){
0 c) o6 o2 Q; r% q2 m goto_xy(i,y1);; i( L7 y- K' `/ g, \& O
putchar(' ');) f: S1 N' x2 s" j% T8 l8 t& V
goto_xy(j,y2);0 }! P, M3 }5 C& d* h$ l2 @
putchar(' ');; m. \$ c+ q; X
delay(10);
/ i' r3 u; {+ |" g/ V9 n6 C$ Z }& k( X6 n& b' \3 [; a; o/ F
}
0 h* R* M6 n. p& K3 L7 j /******************open screen clear(开屏式清屏)*********************/
0 l; H4 i# y- R# {, m6 Z5 O7 l/ d7 `, ]' g3 a( ^3 J
void kcls(int x1,int x2,int y1,int y2)( [& S# Q6 U" F6 M) r/ F) g7 l
{
/ s" Z5 L) B+ n+ l int t,s,i,j;
. j m7 e4 q* D+ E# {( l t=s=(y1+y2)/2;
' ?/ z% Q% o& T0 `4 `: P for(;t<=y2;t++,s--)
# g' i) a0 ]: x1 X( ^$ m. Z for(j=x1;j<x2;j++){, [( i" a& q% X. c! Y
goto_xy(j,t);* S9 A% J- }% m. X1 p/ o
putchar(' ');
. J$ v R9 u) g2 ]% v goto_xy(j,s);# S: z1 I+ ` J* _
putchar(' ');
) [) ]1 { v+ ? delay(10);
( P6 D+ y7 J4 i: O1 } }: l [9 N3 Y- H3 _4 m
}; Y+ L+ H# ^4 g
/*****************close screen clear*****闭幕式清屏*******************/
' M3 M6 Z. Y7 F. h! K; U1 p# S6 v9 a0 X
void bcls(int x1,int x2,int y1,int y2)
0 e8 h5 V2 [' d* j0 \& } {
2 A, G2 G2 r7 j6 x: \5 \' s; x int t,s,j;
9 F/ M- E% q) ~: V t=y1;. p: C$ u4 e4 O
s=y2;
9 `! C1 \% D4 Z+ `7 G& y3 J for(t=y1;t<(y1+y2)/2;t++,s--)2 t8 j, x5 N# u
for(j=x1;j<x2;j++){# ?( j2 K, @+ b3 s# j3 N
goto_xy(j,t);
; u$ z$ F7 l4 k5 ` putchar(' ');" C6 c/ |/ e( u- o# @( _
goto_xy(j,s);
, T9 a5 {& g' p( v# o; N putchar(' ');
: E- o) H& T R0 l1 D delay(10);
0 T6 V) K3 E% g9 o; H: G }
@3 h% J+ _0 e q/ D6 @; R }
& B- u$ w; r. W% @) m' a! E6 l /******************bottom screen clear(自下清屏)********************/
! D& j U. ?0 Z) V8 {- C
/ e) E$ j, X5 {) I6 i; F3 m4 { void dcls(int x1,int x2,int y1,int y2)5 }' c4 _. O7 i- c
{! A3 ]7 b9 w& Q, Q% Z! h: t" }
int t,s,j,i;( Z6 J8 Y. o' H6 N+ N
t=s=(y1+y2)/2;! ^/ M0 `3 I4 P" K" x5 Q
for(j=x2;j>x1;j--)
: u8 F1 H5 X1 F: ]/ F q( w for(i=y1;i<y2;i++){$ l2 K5 s5 T' H$ [7 [, q; u, \
goto_xy(j,i);# R O* k' w; k* p/ K# q
putchar(' ');7 n/ C( g: Y+ W- m: p4 w
delay(10);1 g( S# F5 C: X) E4 c' z
}5 U1 y6 E, {- _( H2 C+ B
}: n) w/ P+ X+ H% q
/******************设置光标子函数******************/1 f0 `$ I+ F1 Z2 c1 Q5 g5 Q Q2 n
/ P! o- C7 ^* n3 O3 V; Z void goto_xy(int x,int y) ]2 m- |; v2 V9 w$ D
{3 B: F7 {/ {+ v x) s( P: t1 H" }9 c
union REGS r;& k* Y: E5 O) {& n" J+ M* y
r.h.ah=2;! l* I; _9 e8 ^2 t* g
r.h.dl=y;6 _4 @. B; l6 h9 w5 ]# b* j& S J
r.h.dh=x;, Z) L( K9 f0 c- h6 p d$ \
r.h.bh=0;
2 e- z) r1 M4 O( o3 i4 i: _% \- Y int86(0x10,&r,&r);
( a* v/ P y6 M6 P, K& I5 m% w }8 d% _# M% B# Z+ v
& B+ t* }$ q O, r$ R /**********************在屏幕上打出一连串的a字母用于演示程序******************/: r/ W8 ?: g/ D( h' N6 a
X% e0 o* @4 d' ^+ ~5 t7 Z" v void puta(void)
3 S# P+ Z1 h" ~/ | {
: P( o; b' K! I- \) @+ Z9 s int i,j;
7 J0 x3 i7 I3 b9 l8 u ^ for(i=0;i<24;i++){
( m/ n2 g" D3 o: q0 |& H for(j=0;j<79;j++){" j) _3 d+ @2 U6 p ?; P2 Q
goto_xy(i,j);2 E: }3 ^1 G) ^; s1 @* }
printf("a");
/ Z2 \+ Y' a& N }
, t9 g, J0 g2 c% ^5 a$ l( k" Y }
# x' M" o# B& D8 H. ]2 G& \4 N& g$ j } |
|