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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 z3 c2 h' z, r! n+ [0 z0 o3 u
, I) l! Z: e) h9 h7 Q: c* h 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" B( ]" B; S& N x4 N9 S( w; c
1 h3 E% E" k( t4 S6 t 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 m3 U7 O# T1 ~9 ~ 子函数及演示程序:
0 n( x1 y3 R+ n, {. q9 W
8 m) z! f* B v1 X #include<stdio.h>
X2 X! p% L; c) t #include<dos.h>
8 q. Z7 y. T% o/ U$ B) K8 r #include<conio.h>1 p' V; s5 ~' P$ F
; k/ r2 g, \( P/ e void goto_xy(int x,int y);/ `' o: ]$ z* Z( o
void dcls(int x1,int x2,int y1,int y2);9 _% J% c: l/ B% k! o: `
void bcls(int x1,int x2,int y1,int y2);
. @+ j6 K- m8 R% G: d" g void kcls(int x1,int x2,int y1,int y2);
% U9 x; ~- x2 \9 u& {# P* E2 B void recls(int x1,int x2,int y1,int y2);% Z. N$ D% y& m+ s4 b4 l/ m/ X
void zcls(int x1,int x2,int y1,int y2);
7 N6 J0 m6 k. S; J) G! ~1 i void puta(void);2 r1 K7 h) L- E2 O8 b
- K- s5 @3 e5 X
9 ], h5 z! q+ Q* d* o /*--------------演示程序---------------------*/
3 I3 u, Y$ C# \' k2 P5 a. G/ R9 W main()' M- \6 Y+ f- O- A+ k/ X1 y* P
{" x4 A- y& J; a7 M5 w$ e
puta();" j' l2 ?9 z8 S+ z9 N, z& o
getch();
1 ~' D' L: @ c2 F. A dcls(0,4,0,79);
4 V4 V( @& J+ ]0 C getch();
& _$ Y( n8 l' r2 h5 V6 l, C puta();
) t$ j: U( B! S3 N0 h9 n getch();3 w6 [7 w8 n* {7 c z3 e8 T) [
bcls(0,25,0,79);5 C2 Y4 x+ b6 _! I/ A4 ^9 G
getch();
, D6 Z+ E1 T4 H6 I2 x5 H- l+ m9 d. p puta();
/ \* P. t/ R6 ^ getch();
! l& V$ O, V, f% n; t zcls(0,25,0,79);5 i! j9 j5 \- B3 K
getch();3 J. j- E& r8 A
}
# v' h- ^3 Q4 u8 X /*********center clear screen(中心清屏)***********/+ r1 B7 }- r$ ]' w/ T+ }
void zcls(int x1,int x2,int y1,int y2)
7 a& \ Q( A) ^8 @/ j {9 [" a$ H5 ]6 K1 ^: X
int x00,y00,x0,y0,i,d;
7 z4 G8 L- A0 w& M& | if((y2-y1)>(x2-x1)){$ T. ^) D& g0 s: {! x U8 @; q
d=(x2-x1)/2;* c$ ~$ s( J/ n! i
x0=(x1+x2)/2;) `6 b) I* x& s0 F# g. }& W$ |
y0=y1+d;
% s6 U9 b9 ]6 _6 @ y00=y2-d;
2 ?+ v' ~# f! I# {7 ~ for(i=0;i<(d+1);i++)5 m+ m* t2 X) J$ b( `
recls((x0-i),(x00+i),(y0-i),(y00+i));
0 u* ~& q; ?) w! t% Z3 u& @9 z delay(10);2 c* d4 R, j$ @2 \! N, D
}8 O4 m! g8 ]% |; ]9 Q! p
else{
" y% y3 ^% A' m d=(y2-y1)/2;
! T: V8 W& z3 L3 D% `( s y0=(y1+y2)/2;
`' q9 f) Q9 |- M x0=x1+d;
4 T7 S; t; E) V% g x00=x2-d;
! r4 i1 N, Y1 U8 V, o3 y for(i=0;i<d+1;i++)
3 X7 L& D3 R j5 v1 c, ^ recls(x0-i,x00+i,y0-i,y00+i);( A( E9 s" d* G2 w% h& q
delay(10);
1 S* K& h8 i" t }
* b3 ?% E, g5 F! r }. F7 B; _ X6 S
0 o6 L7 T1 ?8 f/ S9 t" D9 Q /************* clear rectangle side(矩形边清屏)***********************/
7 Y$ x9 ~+ c, o& M! ]* s( v/ d' b" [* Q& r2 K# S
void recls(int x1,int x2,int y1,int y2)+ ]# a6 D |8 \8 P
{6 r* l% B- i6 T) a* p
int i,j;% H* b6 x. _# i0 _
for(i=y1;i<y2;i++){5 x' t3 b& Z& s7 ^* A
goto_xy(x1,i);0 D6 W; m- z! b
putchar(' '); z! g# S" w: R9 m E2 i
goto_xy(x2,i);
( Y2 I1 \: K) S1 G5 X putchar(' ');
; G: ^- x3 Q% _0 X, l8 S& R9 @ delay(10);
4 g, j& i# g1 t- M! o3 N8 ? }* h. ?% ?8 T0 f
for(j=x1;j<x2;j++){
" L+ S& \# {3 h: _5 j" ?9 ] goto_xy(i,y1);6 I0 _9 x& F n m
putchar(' ');
, [* V9 y9 r7 d. S7 |& P goto_xy(j,y2);& q; c% }) G7 |2 y
putchar(' ');
9 {3 Y( ]2 p3 h delay(10);
$ n) R9 C0 r9 y2 c$ H } f, e) `; M. R
}
% \4 G! @) p) g( { /******************open screen clear(开屏式清屏)*********************/8 K# B M6 Z3 M5 H+ w- i
# |$ T* H$ w. i
void kcls(int x1,int x2,int y1,int y2). U0 D1 p$ G. k6 P: R4 [ U% C
{5 s F9 R* v7 m: U: t
int t,s,i,j;- g& x* k0 o6 \+ X0 K
t=s=(y1+y2)/2;
+ ]2 x* L, e; d1 g }: A* z8 t7 p for(;t<=y2;t++,s--)
4 i w# m5 l( _- H for(j=x1;j<x2;j++){
+ }8 P9 y+ a% @7 N% `9 O e6 ` goto_xy(j,t);; C' o0 c* Q/ A- j/ I
putchar(' ');
+ q; G# u- N2 g- Q9 K: K goto_xy(j,s);
% D+ \3 _3 [! N2 Q+ i( x putchar(' ');
9 E. D& E- l$ i1 k$ X) I delay(10);
) P2 U) J& m# g$ o5 s. ? }
5 x+ z0 H( q$ {, E$ Q8 j }
1 v$ T3 u7 K) g* |) j /*****************close screen clear*****闭幕式清屏*******************/: [6 T/ G8 }. o4 Q8 i: J5 b, c
1 }* A% N; l( d3 x' x8 p- L void bcls(int x1,int x2,int y1,int y2)0 B+ J3 w5 h$ ]) s
{' X( l1 o9 Y, s/ I: z! G; k% g
int t,s,j;
- w) L& [6 w- f0 G; {: U# t t=y1;
. p9 P6 M- _3 T) j s=y2;' K$ b( n h- l7 s
for(t=y1;t<(y1+y2)/2;t++,s--)( _1 a) P! q5 H7 k: I1 G
for(j=x1;j<x2;j++){1 H/ o% S$ q" K
goto_xy(j,t);5 A+ ^- l5 `* J/ b6 V k0 n5 ^
putchar(' ');! f- Q0 m+ F4 B& `
goto_xy(j,s);
% n+ U( v! ~; }/ Q1 x* h- Z @ putchar(' ');# P& k5 H# F8 R ]+ d8 x6 ^
delay(10);$ `5 T+ @3 ? r
}) H, C& t+ Z3 [ B! m. L
}
5 j5 h8 \; u9 [7 ^1 ?; k, e8 w /******************bottom screen clear(自下清屏)********************/
2 s3 C; l0 ^2 K0 a1 P
3 c3 A; Z5 N' v6 b! b4 ~4 w void dcls(int x1,int x2,int y1,int y2)# r$ Y8 A2 S' x1 p/ h& P
{# t6 C4 |2 U) s! d
int t,s,j,i;9 o J0 o; U7 Z0 v# d
t=s=(y1+y2)/2;$ S& j5 l+ s1 N9 C* T
for(j=x2;j>x1;j--)
( m0 c6 d" V% h# [ for(i=y1;i<y2;i++){0 l( p& K; C* E9 |6 Z; z* _% M3 U+ @
goto_xy(j,i);
/ x5 u3 o' i5 i, w. t8 I putchar(' ');
" b n+ h8 Z0 `! K1 c- r7 _ delay(10);
7 l3 f* }2 R1 ?5 p5 y. O( p }5 x) q8 s, t" w# A/ L; X
}
0 T( w: f$ g- I4 c4 ~1 G. ~+ a+ v /******************设置光标子函数******************/# H6 t* Q; Y: O: a/ j+ _/ L- P
$ [! r M6 z2 ?! {) o7 S void goto_xy(int x,int y) ^9 q4 Q2 b# h3 v" x7 J+ D
{3 J% d' c- k4 z5 g. g, j
union REGS r;
3 O$ h# {2 S5 x r.h.ah=2;
1 m0 V* }( O2 H# s r.h.dl=y;
# B7 Y7 B. E( k1 L r.h.dh=x;) S3 Z P. y# _, F1 `) Q# H
r.h.bh=0;
4 E3 j$ a4 z0 } l int86(0x10,&r,&r);
& m: }, b2 B- B. Z& P }' v1 B8 I8 r8 M: N
& ?, f4 O9 D6 F. _- U: J: U /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% K- p; j8 E4 m3 B% Z2 D0 E
* L# }$ ~- s" B; ] void puta(void) V5 _. s" s2 ~* i0 V- y, ]
{ I8 p) c% y2 A6 d, q# i
int i,j;' P; s- v. s# `2 p
for(i=0;i<24;i++){' B0 i* |5 n( n
for(j=0;j<79;j++){
% N z( b! t0 Q. t# p goto_xy(i,j);
$ l0 h3 J7 P! C9 B- a! F printf("a");
9 N6 I& c1 z' K$ R" u- K3 F2 ~; G }
1 D4 D0 [3 p2 y* O }
! Y! F0 D: k* ~ } |
|