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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. I7 _$ D& |9 [ w" Z+ U
+ x! N2 n( F: ]' }- O7 p4 X: g& Q- g 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ q ?4 l1 K5 E! f$ b c9 b
- {4 Y _5 N& i0 m) f% t# x1 A
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - C! O9 K" h ]; o5 ~
子函数及演示程序:" m- E' H; W" i& x, J$ b5 K
, v) e8 h$ y# d #include<stdio.h>
/ z d; b: M$ i. R# X #include<dos.h>
+ }8 C2 ~5 }, l7 q #include<conio.h>
% I( c; w. r( q; P6 O3 G1 m& B( @3 Z4 w4 N# O$ P
void goto_xy(int x,int y);4 d* ?! u# ~, u( l/ h7 Y* P' o, u6 T
void dcls(int x1,int x2,int y1,int y2);% `2 _! Z7 D) a" b. g
void bcls(int x1,int x2,int y1,int y2);! ]8 Z; E8 i- X' T5 h" C1 o7 x
void kcls(int x1,int x2,int y1,int y2);
8 K3 R, Q4 _$ p void recls(int x1,int x2,int y1,int y2);
$ }" f0 O6 G7 |' `( |/ W) e void zcls(int x1,int x2,int y1,int y2);
+ ]- u$ B. |$ D$ o; ?) s1 F1 f void puta(void);
Z) ~1 |, v* v5 B% d1 I0 o0 ^8 ~8 _- M/ Z- S1 ` f
7 P" o+ I4 q7 t- K; s l4 p
/*--------------演示程序---------------------*/
3 L" z0 w% @: N' y& [/ c* O main(). w' ?) ^: E0 b s; }7 B2 y1 x. J
{8 ?. G! U5 x7 E+ S( Y$ v2 @% X
puta();
9 `( S" P+ [9 I6 L+ q* S getch();
8 Y5 h2 q8 K' K) M1 ^ dcls(0,4,0,79);
) ?: O; p' y S" n' o getch();' H' t3 Q0 ?* ~/ D& L* w9 f
puta();
3 Z7 u" }* Q8 U; v getch();* Q l" j) V- c) R4 k+ S7 i. S
bcls(0,25,0,79);4 n9 G0 l+ K, r0 i
getch();* [ L* P2 Z9 U3 d. F
puta();: ]2 @- V4 ]% x6 R( s* w4 t
getch();
% O# F$ d* [# W+ c" J: Z zcls(0,25,0,79);
+ V* N: y% L+ F* M Z+ L getch();; [ \6 l+ }( S# ?$ I) \5 m& E
}
& i- r8 U& G! C# z% |& R; d) C /*********center clear screen(中心清屏)***********/1 l% [; ]$ P. S, D3 w1 i/ @7 h
void zcls(int x1,int x2,int y1,int y2)
: q$ F9 y, c7 m. P/ O! K6 |3 B+ i' u {. w5 y3 k. ?$ E8 @: h5 a! q
int x00,y00,x0,y0,i,d;6 u+ u9 z' v! M. i! Y% p
if((y2-y1)>(x2-x1)){
% n9 x; b; ~6 L9 N/ p6 ` d=(x2-x1)/2;
4 f/ |; G* W9 v# j1 L x0=(x1+x2)/2;4 r" y3 O) ]0 D& E& ^
y0=y1+d;
+ @3 l- r2 ]4 B y00=y2-d;
7 x/ |0 X/ P, p2 A for(i=0;i<(d+1);i++)
/ t( a7 s& _. N) l1 @ recls((x0-i),(x00+i),(y0-i),(y00+i));# d/ c5 |0 ^) [3 G0 ~& @
delay(10);( ?- G2 e+ x( ~/ L4 \( @0 U6 ^! v
}
, n* }1 G }; J; Q else{- V/ r, l* J+ d
d=(y2-y1)/2;% X( G/ s1 A/ I. I5 d
y0=(y1+y2)/2;8 z' G9 e8 h+ l2 a! W+ p8 I% h
x0=x1+d;
7 p) ]3 c. [: S x00=x2-d;2 t5 q) b8 Q3 w& C2 j8 ~& A' w
for(i=0;i<d+1;i++)9 b$ _( P$ v$ N4 Z. A" h
recls(x0-i,x00+i,y0-i,y00+i);
2 @% r( c7 a9 R: F! `" |; y D. { delay(10);
6 R" C* I# h" a6 m. K, Z }3 f: Z5 v5 K9 R) w# Q
}
) t, W% p% z" k; P; z: Q3 \* m
/************* clear rectangle side(矩形边清屏)***********************/1 Q& E; _$ J, I2 x0 ]
* |, R6 q0 r: [( m0 E x
void recls(int x1,int x2,int y1,int y2)
& P* \/ T" W9 U/ K {3 j* U# Q5 G& f& X( l+ Z5 |
int i,j;/ J7 R9 X) N+ r; k
for(i=y1;i<y2;i++){2 Y% y& a2 S! I, O2 F- O
goto_xy(x1,i);
5 A0 z6 l& p* Y- s1 s putchar(' ');) m5 a. B0 D' j; D( H) {/ v' |+ S
goto_xy(x2,i);
, v; g, ?; B$ e% n putchar(' ');
4 A& ]+ T- p/ l7 S7 m delay(10);; N1 O+ U6 L" m9 N
}# `5 i" p: g/ P6 |+ g( {
for(j=x1;j<x2;j++){5 I! S' W. M# N/ Y% t) v# i3 Q
goto_xy(i,y1);
8 y. Z, i5 t/ _) E, i0 d putchar(' ');
- L, N" L' W; t$ d goto_xy(j,y2);6 u* [: H0 r: P8 ^- W
putchar(' ');
) c5 m9 V: E. J$ C5 g6 p% L: E- G delay(10);) R$ h) O; } F; h; F8 ~9 ~1 J
}4 m, n$ [; j7 ?0 b/ s9 T, a
}3 H' A* H e% x0 O3 i
/******************open screen clear(开屏式清屏)*********************/+ g' t8 i! T# {2 x( v0 f+ T* ~
2 Z% l2 u% f2 m9 V1 @
void kcls(int x1,int x2,int y1,int y2)
3 _; Q8 R/ h/ p6 E4 R {
4 r) Z. k9 F* \0 F int t,s,i,j;- h" s4 B2 f8 [# O( L' `0 y) C
t=s=(y1+y2)/2; p; A7 y6 y+ u! l
for(;t<=y2;t++,s--)$ \# a# S* u0 g2 T* b% d6 x
for(j=x1;j<x2;j++){
" B2 B0 F0 R* i7 l. h goto_xy(j,t);- R6 R3 x6 ^, m9 q- X0 S6 m
putchar(' ');
5 M* a" U4 z9 O# b3 d6 U; t# z goto_xy(j,s);
5 O& y$ w7 X# @6 T& Q# U putchar(' ');5 W; O! _4 M; d. ?3 L% I5 L
delay(10);1 ?5 o& k X: |/ l3 N
}0 [8 ^7 {+ ^! @$ i
}2 }7 v5 [) b1 d) y2 c
/*****************close screen clear*****闭幕式清屏*******************/
b3 w# y8 A y5 ?+ i
0 ~) ^$ r: @. |2 N1 k, B5 O void bcls(int x1,int x2,int y1,int y2)
( {: S v8 m& J: k {
' O) G( V" _9 f int t,s,j;# c6 r# z0 [7 ?9 Y% T h2 M
t=y1;0 L1 g% \3 n4 R3 Y3 H# {- ]
s=y2;
' J0 s! S3 x# c8 } for(t=y1;t<(y1+y2)/2;t++,s--): a9 \6 X! ~6 f3 m5 k8 e
for(j=x1;j<x2;j++){9 @( n2 |0 Q) V5 V% E# k7 v
goto_xy(j,t); x) I" @4 x/ b) e6 C! }) t
putchar(' ');, N4 ]' D, f3 ]6 b$ `/ w
goto_xy(j,s);
8 A2 s( y# ?$ ? putchar(' ');
8 I! U1 {: H! _+ ?+ c delay(10);
. V. l" M+ V- v1 e' P$ d }
# b+ f0 `7 D- j! L/ d, U# b! ~ }
B ?) J2 j0 c# K: _9 H /******************bottom screen clear(自下清屏)********************/
/ M" |) y- p( m: a+ L5 ~/ T1 C5 S! I8 y3 C$ ~- ~) l+ h/ o5 k
void dcls(int x1,int x2,int y1,int y2)3 I. _7 G% t1 N) z
{
& z# t% i0 r. I, h! n9 L int t,s,j,i;6 F5 T" J" R+ V) w/ t& J6 ]
t=s=(y1+y2)/2;& }4 P+ [# W/ l* G3 Y7 f! r
for(j=x2;j>x1;j--)) N% J. Q. H! W0 h
for(i=y1;i<y2;i++){
0 g& }+ ~" `3 F, i: K, n) S goto_xy(j,i);
7 i& F& b# q8 ?9 i putchar(' ');
1 m0 f4 C; w& ^" S delay(10);
: C D2 B; K4 I* k5 S; P }5 }$ _( r) W* p3 ?7 V8 l5 @
}
- ~! F7 p" q: S0 P$ F# p0 B! C# Q /******************设置光标子函数******************/; a! R7 l3 _% y8 v; Z& T/ }
5 G/ v: X! q# N# l
void goto_xy(int x,int y)
' }8 o# t) Q* B/ T {# b) F4 \# c0 S
union REGS r;
4 ^, G0 S7 f8 i1 ^* z r.h.ah=2;
?2 V* ?5 ]% | E3 q. r7 R5 g+ k r.h.dl=y;
2 S1 n8 \1 k: a' z r.h.dh=x;
9 o+ ?2 a8 _" [! |6 R" O r.h.bh=0;1 Z& a# \$ m0 p8 [, S$ y6 \
int86(0x10,&r,&r);
+ F F$ ~8 ]; B3 R# S0 m( S }/ E, f/ S6 L3 \0 I* q* B
$ A% [; ? I; K' T% f1 ^" |
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 J' R& @7 r+ c" j( b/ P; z6 V( Z8 E% w9 `+ [& c L
void puta(void)' F, V0 v1 w& E/ f" b
{; K& J+ R8 K4 y' F# i+ w8 T4 A
int i,j;
7 X5 l, m2 t& F8 G% V& O for(i=0;i<24;i++){
. F2 l' Y. o% T for(j=0;j<79;j++){/ z& C8 U6 q$ P* Z
goto_xy(i,j);
# h# q/ v; l4 U& E7 C2 |' [6 A. b6 t printf("a");2 ~$ S3 p, L: Q; r
}1 X" w8 w' \0 U0 H4 C* w
}$ K7 a( ]- J k3 R8 V9 x! a
} |
|