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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 Q, L( Z# c! M+ k' h% `! P
) ~9 S, t, f1 X1 _/ C* h0 x2 P" Y 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
! s1 b3 m# A: V. h# R8 V. B; H. K! F% n! V# X% o8 s- k+ H" g
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 R8 W* L3 m' i' x' d P: A3 r
子函数及演示程序:/ g" z1 n9 B1 ~, G) m. J# V
- U' s8 S! e, x: A #include<stdio.h>
8 n3 h& t% M4 w) [5 V3 K' J6 `' } #include<dos.h>( j+ w2 j: C7 n( y" f2 d5 |
#include<conio.h>6 M. Y7 y; I' @! L1 P9 d- P) s' h1 V
/ U4 A3 E. J) \ void goto_xy(int x,int y);8 ~9 s$ C4 d' a9 i j
void dcls(int x1,int x2,int y1,int y2);) B! L# b& A1 H- [
void bcls(int x1,int x2,int y1,int y2);, l: `3 |5 H7 @9 b9 F, q8 t
void kcls(int x1,int x2,int y1,int y2);# t- L5 |; |" n+ X; P
void recls(int x1,int x2,int y1,int y2);
1 v+ N$ m; a& f* H, i void zcls(int x1,int x2,int y1,int y2);
0 L/ @4 k$ f0 @# z# f. d void puta(void);
4 u: c1 M* |, _# J/ e4 ?* O# {/ }; Q) s
( M; A- g: z$ L: d4 N
/*--------------演示程序---------------------*/
& t# {2 ~" O' ]7 Y9 x2 M/ | h: V& b main()
/ m5 n! r( F; ?! K {5 `" ^1 ]2 c% \3 x7 e- b" v& e2 D
puta();; t1 \0 w+ e8 H* i# H
getch();2 d- j# j( w( E' G D
dcls(0,4,0,79);4 N O& A% K$ ]6 g# X( A
getch();# O0 {6 h8 U/ _% N
puta();
1 u4 y; e+ ~ K getch();
5 T; H, u7 a! t' b7 | bcls(0,25,0,79);& d* k; ~0 a- b5 ]3 K- x' A
getch();9 b& J0 O+ {: Y& q
puta();
1 v& T6 m8 ` I; f, v getch();6 k4 s* C0 m4 N- l
zcls(0,25,0,79);" \$ ~8 ?% Q3 _, k
getch();
4 L. Y: ]. C$ G3 w0 \- V' w$ N h }9 e2 _) m* x8 ^( l. i
/*********center clear screen(中心清屏)***********/$ C4 `$ y; Q! X
void zcls(int x1,int x2,int y1,int y2)% O8 `3 ?& u8 ~# M6 n) f- Z, Q+ W8 H
{: j( Y- `/ g) \4 r$ ?* K% C5 S. ~
int x00,y00,x0,y0,i,d;, N/ h: I( J+ C" R S! k* k
if((y2-y1)>(x2-x1)){
1 a7 j. Y/ P: }5 M% b j d=(x2-x1)/2;
$ s- f5 F' v0 [" m/ n! @ x0=(x1+x2)/2;
' K) o' P% I6 N2 n& K% m3 N, } y0=y1+d;; J2 u7 m4 X4 i; j, @6 Q- _" |
y00=y2-d;
) {: {3 s# K- _' S( f7 e for(i=0;i<(d+1);i++)
' [7 U8 ?% _" _( g# j7 h6 R# M recls((x0-i),(x00+i),(y0-i),(y00+i));
3 w% p. @! A$ `3 C delay(10);
/ r' L. ?0 A: o, L }* v( t! B3 f4 I9 H5 N
else{ ]* ]* q7 w, T& b) n' P' C ^
d=(y2-y1)/2;
W& Q- Q0 s; m1 \9 Y4 } y0=(y1+y2)/2;
( F! ^& g. ]/ l) k' o( C x0=x1+d;
7 x1 V# A" Z4 i% y x00=x2-d;1 q" ]6 |# y$ ?( q d* _- Z
for(i=0;i<d+1;i++)
6 H9 Z" v4 n4 x recls(x0-i,x00+i,y0-i,y00+i);5 n! l+ ~( Y7 O
delay(10);
, Z: h8 u2 S, P3 {7 j7 } }# E6 j1 n3 l+ a. G* c
}
4 ]) P1 r( d/ R7 q J* V' U/ J
( G2 A3 x: ?- r8 E7 ^& b" Q /************* clear rectangle side(矩形边清屏)***********************/
0 Z! V6 w' y- b( R/ W$ r/ t( H6 n. _! D9 [, G j% x
void recls(int x1,int x2,int y1,int y2)
9 M$ s" E' M! S+ g" D) Y( p {
1 V; n& @$ b" B9 C* [; g( b int i,j;
( c3 x' t1 l4 P- Y& I$ c for(i=y1;i<y2;i++){
; i/ J4 {* _. H5 V goto_xy(x1,i);
$ u4 P- P) j$ J5 y7 @1 h putchar(' ');9 z8 V; y$ A U8 x/ [* e/ N
goto_xy(x2,i);, B: @% d& x M: A2 T1 ?; c
putchar(' ');. |& z+ I$ d& C* p; g( x! E2 r
delay(10);( Z5 O! W5 q7 d, h5 E4 B. \# D w
}9 b. l5 s9 u0 V
for(j=x1;j<x2;j++){% X [5 j2 U' g7 X: e: R* A2 m, ?
goto_xy(i,y1);
. ]' T3 B2 y; S3 u# o putchar(' ');/ Z, W. P& U3 Z7 A* F: k a
goto_xy(j,y2);8 G8 I9 r. m6 x! I" B$ P& K
putchar(' ');- N! t u! h) b) W
delay(10);# r6 r2 M0 u& x" V
}; W* v. |# @, y$ n
}
0 g N6 C) g* r, ~1 M; w* Q /******************open screen clear(开屏式清屏)*********************/
2 o& N6 X+ F8 N" r
! |8 a! {) c# C; K1 j6 c2 J; T void kcls(int x1,int x2,int y1,int y2)
2 G% X( q3 n a; \# Y {
7 G/ o# v) ?3 f int t,s,i,j;
" l. I, j1 p( W r5 J7 E0 [. P t=s=(y1+y2)/2;
1 Z* P# t, O, ?: Q, i$ E for(;t<=y2;t++,s--); ^( f& E6 |. s) E
for(j=x1;j<x2;j++){: O: N# `6 R' [2 S( M: H$ u; l
goto_xy(j,t);
/ ^) a6 x+ V! C* n! h* b* r1 e putchar(' ');: e& M# j' Z4 w$ X4 g; P% g8 A
goto_xy(j,s);
+ C2 G" e) ]" \/ e' J/ I putchar(' ');
8 d1 v0 p( s$ G3 g1 V k( _! l' y: g delay(10);% u8 O* U; ^) d! q$ k1 f; T& a
}
# o! g. A- q$ c9 U }& x! T F* l/ b5 N7 G& f
/*****************close screen clear*****闭幕式清屏*******************/* ?, I3 `$ Z' B6 d4 c; ?
" E* v; k0 u' ?+ W* @& }1 ~ void bcls(int x1,int x2,int y1,int y2)
1 F! [1 A! E+ L0 U+ Z% d) S { j+ A7 w; H9 }7 s' r$ X. w/ e) d
int t,s,j;
& r; R1 \. j; ~ n! R$ {& Y# `+ X t=y1;: ?! S R7 [0 p) r7 |
s=y2;% @/ `8 H) G6 l4 s
for(t=y1;t<(y1+y2)/2;t++,s--)
& J5 l1 S6 P2 g2 h) M2 ?! g! B for(j=x1;j<x2;j++){
( Z6 \7 y% ^! W5 _3 R3 U goto_xy(j,t);' }5 j6 w3 C C1 g u* W p
putchar(' ');
: R3 ~: _, w; u2 a7 I goto_xy(j,s);
* o5 V, `8 x) |" ?5 N$ Z8 {% `8 F putchar(' ');
8 V# s3 M+ f" u0 q! Q delay(10);0 }5 O; B) x' D M. e( ]
}: a9 R j2 f$ M: W8 x! T( v* i; j" ^( ]
}
/ g9 ~3 |" p& d" [ /******************bottom screen clear(自下清屏)********************/
6 C2 I# H$ c7 G4 p$ `7 v! v1 j* r
$ y5 X7 J* g1 ~. ^" w void dcls(int x1,int x2,int y1,int y2)
/ S. e8 B4 {7 U {! K; ~! q" E6 w x& m Z, g
int t,s,j,i;7 u1 X1 c0 V. W I- N8 [
t=s=(y1+y2)/2;
. n2 Q4 ]; B, w( A8 z& ]3 U for(j=x2;j>x1;j--); t) J# d8 |6 ^ a% ~5 B
for(i=y1;i<y2;i++){3 @; b! ?7 r7 a9 Z3 J: z
goto_xy(j,i);+ @+ u- A# C9 u4 @' n4 a/ {( e V
putchar(' ');2 v3 `3 a9 Z) [
delay(10);+ z4 r3 C# P/ j! B9 Q3 t
}3 h# m; E; K- H& D& K
}) n' b( K! K5 }+ z, H
/******************设置光标子函数******************/" X+ A( b/ e' i$ q* |+ Y
6 _5 ?# S, z1 @9 P! A; e% \ void goto_xy(int x,int y)8 {6 j8 |/ e6 S+ g9 l. X" N( p
{- r' d5 f% q$ E* [$ {, R) n$ s# H
union REGS r;4 _+ L+ Z7 ^/ r( s6 Z- a
r.h.ah=2;
% f. ^* l$ m, p$ f! C r.h.dl=y; q) m9 p: V! _3 K
r.h.dh=x;
% \2 J4 z4 S. S1 m; r$ i" T( ? r.h.bh=0;
$ Q# l* k% x7 m int86(0x10,&r,&r);
% e! n9 \' G( i' Z }
# l0 \7 @7 L$ J( C' ~+ H$ ~' M$ _
/**********************在屏幕上打出一连串的a字母用于演示程序******************/! h: z; b- m2 z+ K3 H% q6 Q" O1 G
0 X' T( D# V S5 A2 I void puta(void)
, T9 q5 U, W: L* N1 q, t) n {
6 Y k; N0 U0 o9 [% E/ ]: x int i,j; k" n; M$ `' P! B- }$ i4 z
for(i=0;i<24;i++){- a1 X6 H6 Q2 J- q, b
for(j=0;j<79;j++){$ V) t6 \2 k& f. C- \# ^, B. o
goto_xy(i,j);- z1 I. q5 p6 J7 z
printf("a");4 m" b( v4 ~1 N5 o: U2 R. S
}6 m4 O% a7 @) m& r5 ^2 x
}9 z, H/ p* q3 B
} |
|