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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 M3 U6 B; {% w6 g _7 N V9 [0 k3 N
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' c; \ T/ e0 Y t5 P' v: c7 `
6 l1 s; X+ S! w8 k& o
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 G* w7 r9 t. H% t0 r
子函数及演示程序:6 X1 T! |1 w9 ~$ N9 X
/ p% O4 @7 N' f
#include<stdio.h>
1 |9 u1 J( g, W0 b Z #include<dos.h>
+ L8 }: F+ m2 i% r! Q0 r1 d- \ #include<conio.h>% s3 V+ V$ T9 \( d5 y( | \1 j
. h! ~% ]$ `3 n void goto_xy(int x,int y);
7 A( f! @' }% W. N- I$ } void dcls(int x1,int x2,int y1,int y2);
$ |( r5 V0 x8 a* U6 J i0 N void bcls(int x1,int x2,int y1,int y2);
" f/ u1 f4 p6 H void kcls(int x1,int x2,int y1,int y2);
/ \5 @* H# `1 U N# e void recls(int x1,int x2,int y1,int y2);2 R) n5 i; W! V' _. N- K
void zcls(int x1,int x2,int y1,int y2);9 [4 w$ a% O8 |1 Z. m _
void puta(void);
* c' `' W/ L& Z
P" N! b2 w( S; ~; ^# l. Q0 x% ~& v4 J1 `+ k/ `4 c& `
/*--------------演示程序---------------------*/
* K) z; S/ e0 I, j, y; }$ } main()) m) b5 h3 x0 [( |1 A2 ?8 }7 R1 H
{
- \. G! h5 F+ ]9 { puta();
+ q; p+ `! X* e4 X' o9 t/ e" B getch();
' x: ` u8 z6 z9 r; A dcls(0,4,0,79);
/ F( Q6 U% }0 `2 k getch();
8 t% n0 M, @. {2 r; K! t puta();
1 l" u2 c9 v- `7 Y* q getch();# y+ T3 V5 w4 e# F
bcls(0,25,0,79);
9 f7 T6 ]1 a7 K# W getch();
$ I: B/ p3 x5 U; U4 L) _ puta();
8 N: a. r2 ]4 Z0 T7 q getch();
: n0 L) q3 R: V, b zcls(0,25,0,79);% p- @: v6 [; d# z( @ Q: n2 Y
getch();' F2 \+ j# ?2 U% @ Z7 T6 R& Q- G. ~
}
0 m% B. J$ K1 {0 t- E1 J /*********center clear screen(中心清屏)***********/
6 v( J4 z3 Q$ a1 T void zcls(int x1,int x2,int y1,int y2)$ T! Q. Y* H m/ p3 U. X
{: }/ [( \. N6 q( a% F, B
int x00,y00,x0,y0,i,d;
4 l- t ?4 Y, O0 [# K7 f5 j if((y2-y1)>(x2-x1)){! \$ l1 R5 J- W( l. k1 n6 e
d=(x2-x1)/2;5 e2 L' G9 H6 K. L, p5 e* K
x0=(x1+x2)/2;
* ^3 b& G- }9 A9 g( I y0=y1+d;
& r+ l2 f, g( c$ Y, v y00=y2-d;
+ v& f) L; M8 e' `2 ^ for(i=0;i<(d+1);i++); H+ q" W, U8 I" ^ `
recls((x0-i),(x00+i),(y0-i),(y00+i));. u1 y: w0 K8 X7 ^
delay(10);
; H, p) j$ m, s/ r& L }! \* ?# V/ E9 g4 o
else{3 X8 L6 r5 }' X2 r
d=(y2-y1)/2;
8 J# k0 ?1 `5 h5 I- @ y0=(y1+y2)/2;0 V, a+ ]. x( Z3 u, o
x0=x1+d;" h8 G% M( D6 [
x00=x2-d;# b' t2 k x7 v% U, w% M
for(i=0;i<d+1;i++)$ S) e# A9 {/ a2 @' g U2 I$ X
recls(x0-i,x00+i,y0-i,y00+i);
9 Q9 z1 Q) c1 |( s6 W% ~ delay(10);
7 E- T- S% S: e' ] }2 h' m0 e; w1 b+ l- v8 @
}, E! [; L) R2 s, x3 E, [! I& Q/ h
7 E% f) f+ k2 e2 o/ n9 A$ I
/************* clear rectangle side(矩形边清屏)***********************/
6 X; J' t5 |& L7 d; e1 R0 U. T6 o' W( _+ N
void recls(int x1,int x2,int y1,int y2)2 T! p9 [: B3 j: _; O
{
* G- J1 M+ S i int i,j;+ S& _4 s& }! F {! M
for(i=y1;i<y2;i++){
3 N1 S3 O4 X ?1 ?( R3 H8 i; U goto_xy(x1,i);4 a0 s F1 E$ P
putchar(' ');' j$ W; P- @8 i" R1 q/ o2 z
goto_xy(x2,i);# }6 Z& f+ x D) K8 H
putchar(' ');% E& f. P- _. k4 q/ j M& [
delay(10);9 _1 E, O* ~$ `7 e* q* t1 S
}+ U4 t3 w$ V" r( N4 m
for(j=x1;j<x2;j++){* D+ U2 B) E; g. K
goto_xy(i,y1);& Q, I! I: _( Q1 F S& ]/ {. _
putchar(' ');
* q3 J7 b5 Q& F# {, T5 `: K- s goto_xy(j,y2);
3 J- v0 R* g3 P! s+ e. f putchar(' ');
9 d" d) ^9 q$ S! M delay(10);; y- }$ F6 x6 ?2 L
}7 b4 O- f, y- m" I( B
}, u8 Y* c& l; k+ ]9 y( N7 R" b% w
/******************open screen clear(开屏式清屏)*********************/
0 d5 _4 n% S+ K8 O. v! x# C# Y! R7 N4 I( v* |
void kcls(int x1,int x2,int y1,int y2). {4 d) ~* t$ u4 `& B, h
{+ s5 X9 r# H7 o J0 n
int t,s,i,j;
9 |0 U- U u% ^& [. F t=s=(y1+y2)/2;
; L) U( z" Y/ a/ q for(;t<=y2;t++,s--)
& k, j1 v2 C! d* c" n- K9 Q for(j=x1;j<x2;j++){) f0 g# l* P+ m+ z9 a9 F
goto_xy(j,t);
& R, I) z+ H% y# A8 @( C putchar(' ');
: a' K; q9 `$ T: y, \. R8 p, j goto_xy(j,s);1 V" F" F9 z. K& l/ M
putchar(' ');% v6 S4 a; @% g8 k
delay(10);
% a0 A* A! {6 O/ K }- F3 a' s% J4 J/ _* x
}
6 Z7 e8 Y4 X, a; [ /*****************close screen clear*****闭幕式清屏*******************/0 M% ` q0 k# m" [% E2 q
9 q) I2 P W G- n# Q5 R/ ? void bcls(int x1,int x2,int y1,int y2)
1 j5 z9 |. f6 D% f {
7 u) L" q" _( z) F: J) C* n int t,s,j;
! I9 A: @* H! C5 O4 Q t=y1;
) R& E- l; p, n4 i0 m- { s=y2;8 c9 L; H" g& o, x0 z7 S9 A2 C5 l. g
for(t=y1;t<(y1+y2)/2;t++,s--)/ c+ P" ]. y+ ]9 R- \$ W
for(j=x1;j<x2;j++){0 z, d7 s7 p7 F( u* H* q) m G
goto_xy(j,t);$ n0 i2 z" ^, j. G: a. u
putchar(' ');
9 d: u! Q0 U+ R/ ?% j1 ? goto_xy(j,s);. o7 B, L* a5 s& U* I( L6 Y
putchar(' ');
$ O8 b" z% @4 |' e' ^6 r4 n9 h H delay(10);
4 c1 G4 p+ _2 J( p }! u4 P' L: r$ e( }% ^) q
}1 K5 f+ c2 A0 b+ B. z0 w, U
/******************bottom screen clear(自下清屏)********************/
$ i2 r) E e1 C7 u9 K& }* p$ g- A4 \$ ~! k
void dcls(int x1,int x2,int y1,int y2)
3 {4 w* ^/ ^: L& q3 b$ ]5 V6 y4 g {
5 x3 \3 A9 B8 R# t9 ~0 j int t,s,j,i;0 C3 o; x2 j3 d
t=s=(y1+y2)/2;
9 m7 T% ^: R+ [. L) V for(j=x2;j>x1;j--)2 ^3 ]3 q* ]& K' m+ ~8 d
for(i=y1;i<y2;i++){
: v0 O: ~3 a/ ^4 }4 f: l8 H# W2 Y* U goto_xy(j,i);
$ I! c' |' F, a( ]$ G) R3 q putchar(' ');+ {8 N2 C% ^: o+ B; F
delay(10);
* t: E4 u! q0 Y" v }3 i6 [5 T, a: g, X
}
R& D- t( @7 J. `) v3 }6 ` /******************设置光标子函数******************/
& N/ @4 v5 u) [- [9 q1 a/ J( k" B
void goto_xy(int x,int y)
( W+ K2 B9 i; [9 K6 l7 w {3 j+ w4 h; v3 a2 V' v! ]9 I% K
union REGS r;
5 R3 A7 U8 {6 t r.h.ah=2;, C0 \9 t) r6 P' i- h6 {) R
r.h.dl=y;
# s) x8 r1 {& q# }/ p4 _ R r.h.dh=x;2 |* F' [/ \; L; e) ?! Z; n3 X
r.h.bh=0;5 q( G$ `$ C% _; K0 Y
int86(0x10,&r,&r);
4 \( f- A N ^" Z }% P! r" D$ Z7 w+ p6 [* @/ r
. e+ ~* E* I& V6 c4 g
/**********************在屏幕上打出一连串的a字母用于演示程序******************/- Y5 a2 @( E6 p% z
3 I1 B* b1 U0 n! V. e g
void puta(void)
; s' G1 g/ U) Z {! x; Q2 Z. i+ P& F% p% N
int i,j;
' @( f7 V- ]: f! n for(i=0;i<24;i++){
; h, ?1 i D* [% E; R/ R) m for(j=0;j<79;j++){. j! H- M f+ L! ~" n
goto_xy(i,j);
! r( h) h7 j! x/ W8 x4 P. s printf("a");& b6 M' H8 C6 ~" x( q) _3 J
}
- `- g$ U8 t2 R }2 \" r7 Z1 r3 L
} |
|