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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
' E/ S# k, X _# S. _& p2 g+ O7 B2 H, P3 r! f( U" h6 u/ I
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
4 g" i2 x8 U9 q( ]
) ^: z5 j& r9 A+ b; Z* k 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 u g9 w, F! O" D4 W7 o' R: J: k9 X 子函数及演示程序:
5 Q# x) t; {6 h/ S7 w* h9 @! Z; W! t
# S P1 M6 j( c/ H #include<stdio.h>8 l: s& ^9 j/ G e5 W) j
#include<dos.h>
, P0 I* e- Y( a' ^" c #include<conio.h>
: s) a/ c, O; _# |' f) [5 ~6 S% h7 K3 d; ~( b1 u
void goto_xy(int x,int y);6 A# l" v9 A) ?2 E4 Y; ]
void dcls(int x1,int x2,int y1,int y2);
( p+ M" N7 r/ T- ~2 c+ v void bcls(int x1,int x2,int y1,int y2);
0 p) h* V6 C' f; }0 `; E% ^ void kcls(int x1,int x2,int y1,int y2);
) e. o4 z( P( E0 v' s$ ` void recls(int x1,int x2,int y1,int y2);; ~3 R- h8 E0 y
void zcls(int x1,int x2,int y1,int y2);
! k, f8 X, d) ~" k" t& l& s void puta(void);
! Y+ e) p/ u+ u p) }5 b* l- Z
- S2 X* c* n# o( s
; W0 {8 }7 a4 T+ a /*--------------演示程序---------------------*/
- u* V0 D2 s) P main()- @! |) @8 V) h0 H& ~5 i! z
{
2 R/ F& h5 }6 ]5 F/ p8 n puta();
4 l! Y9 @+ G3 t. k! m& Y' U8 P getch(); v9 H6 q; E& s8 U3 j/ O3 A6 \
dcls(0,4,0,79);3 D Q/ d8 i- c" Q1 A: {/ Q( U4 I) u8 S
getch();
, r1 C( v7 z( ]. j. v0 ` puta();
6 a& ?+ b) T. ^3 k; D2 d getch();
2 u2 v6 r: k5 m- p4 L bcls(0,25,0,79);
6 S3 p: i6 F, K4 G8 p) Y getch();
* f9 K; a5 s6 v' g" t3 }3 D puta();
1 ^+ I d E+ H2 |, K7 j) i getch();
1 v; s- T5 T7 Q; s6 `4 J* [ zcls(0,25,0,79);
' `* t5 Z3 E: `7 m: z getch();' Z; i) n' Q, u6 E4 Q9 h
}
+ H" ^# |: E( q3 _! } /*********center clear screen(中心清屏)***********/- g2 B+ G& f& `3 x5 o0 C
void zcls(int x1,int x2,int y1,int y2)$ o; b e- ?* R
{ |" ^2 S- w6 u# s. v& ?( p
int x00,y00,x0,y0,i,d;
2 ^) J5 k E( w3 l) K( B- p if((y2-y1)>(x2-x1)){) l Z+ O7 j9 Z7 h5 I8 A: p
d=(x2-x1)/2; S f# i$ z- L' F& Q9 i z9 ]) l
x0=(x1+x2)/2;6 A+ v. G6 [: |2 C
y0=y1+d;7 v6 K" Z" b# N* E8 l, a4 M
y00=y2-d;4 ?: T' Y7 C; Z5 l$ N
for(i=0;i<(d+1);i++). y7 P3 I* Q P
recls((x0-i),(x00+i),(y0-i),(y00+i));
7 _% O+ S$ R( y, E; Q delay(10);7 c+ C" H1 k! U5 I, @" f
}
% l+ U' V' _. a" C( n else{
E( S3 i0 v0 ?* N) Z @ d=(y2-y1)/2;0 t3 y3 U7 l. f6 c
y0=(y1+y2)/2;, m# S* ^2 M8 R7 n4 c. D
x0=x1+d;$ _& p: W; D; p; |% i4 ^5 i
x00=x2-d;. R) L7 C, w4 v) j( [: H2 E; y* i
for(i=0;i<d+1;i++). s4 K9 g# T: ?$ m2 ~5 B
recls(x0-i,x00+i,y0-i,y00+i);
9 I% j; s$ ?" W2 w; s; } delay(10);
4 ?$ M3 N# J, f; A7 x) G7 B8 h# b }" O" c1 w" E4 O: X3 @
}
! j5 S# g6 j( b$ \* z% ?$ Z) j @ l. k' w4 F: s9 |
/************* clear rectangle side(矩形边清屏)***********************/9 G3 w$ H: s% H$ O0 g
0 ?$ c( y) C! ?/ f( X) k. D3 c/ z( M
void recls(int x1,int x2,int y1,int y2)
0 l$ Y0 c, j, E+ V2 |. p {
% e H: V& k2 w5 D3 j" F. s, ` int i,j;+ l, K5 @! h2 r/ }+ [
for(i=y1;i<y2;i++){
8 u/ K r) A8 W3 u2 O goto_xy(x1,i);0 _& h% j6 ` _. N2 K) D* Q8 A
putchar(' ');
$ X* T9 B: A! V* w5 p3 q$ y" w goto_xy(x2,i);% }% v. b: ?' C5 R3 t# A
putchar(' ');
6 S3 J5 x- a; |( `) P: w5 B delay(10);& F4 o$ y) X1 \" D
}& R8 R8 p3 _1 J
for(j=x1;j<x2;j++){+ Z6 V! W$ e7 ]/ ?$ f
goto_xy(i,y1);0 A' }5 F9 `5 ?0 f: k$ O O
putchar(' ');! b! Y p; c y7 F- v$ b
goto_xy(j,y2);0 ~- ~, `! o, _
putchar(' ');
' q& F. y/ k+ k( h4 M delay(10);; D& w7 g( X9 M1 u5 [: n
}+ ?6 I% P$ a! F$ b
}
" K' Z3 @ F. G /******************open screen clear(开屏式清屏)*********************/
7 v& E: Z9 ]' v
( |6 c0 ^" l$ y* u, ] void kcls(int x1,int x2,int y1,int y2)
, H7 G5 [& c2 h7 J. H A- T {
6 P9 i% }. g+ A# U- P) R int t,s,i,j;
- S7 c ?+ Z/ z' h* h9 k" G t=s=(y1+y2)/2;. @3 Y$ u x" m4 p
for(;t<=y2;t++,s--)9 Q, Q2 F# S3 T# _
for(j=x1;j<x2;j++){
6 c/ i1 L Y# F, @: h9 V! P goto_xy(j,t);6 k- d5 h5 x& |8 Y6 Y* ^2 v
putchar(' ');1 L* ?/ Y J5 J( ^4 [8 a! b
goto_xy(j,s);
V1 K5 @( Y/ F4 K/ v+ r3 Y putchar(' ');% G s6 f5 U p1 ]7 {# f* r
delay(10);
4 R; r9 P* x+ W4 ~6 u6 | }
/ I" O+ v1 w( N$ v! p0 O. u }
/ p9 K& u; ]1 |$ [ /*****************close screen clear*****闭幕式清屏*******************/
9 n( a: x! o4 o t. {8 I6 m! }' H$ n/ l0 E5 t; ~: E/ s; P R0 |$ z& m
void bcls(int x1,int x2,int y1,int y2)
5 R: j( b# I3 S4 E% v6 `( Q {8 i6 |) N& K5 K2 t# [6 `2 U( O* Y
int t,s,j;
% z% o( }$ z7 D2 B+ \. ?1 _ t=y1;& h/ f. R9 @1 M7 }
s=y2;6 @4 f! ^; T, n' I" e) n9 S
for(t=y1;t<(y1+y2)/2;t++,s--)! J6 l- X4 C! l( W9 _# ]1 V
for(j=x1;j<x2;j++){ a* i/ {3 X1 k& D8 W
goto_xy(j,t);, @6 P( u+ t$ X/ F. T8 ~/ }: V: [: [
putchar(' ');( f" i2 I D6 j8 M: l: M
goto_xy(j,s);
8 O) B c0 R& d putchar(' ');
( b& ~3 _- N4 z delay(10);
. @6 t) f3 H' A% _4 b }
5 j$ I$ i2 _) D$ U# E' L2 H }4 b1 C' z9 L: Q, Z% t( L
/******************bottom screen clear(自下清屏)********************/& `$ m" w+ ]4 Z
0 M4 _$ S7 v0 x9 C- t' ~7 k( b$ g6 N
void dcls(int x1,int x2,int y1,int y2)
& b0 k4 q& `. C {
5 M. n4 P0 F/ u3 h' ^4 b+ G int t,s,j,i;0 a; a7 k' C* n2 O. e
t=s=(y1+y2)/2;
/ I7 U1 q' L! k8 i& U9 N- ]$ ` z5 \ for(j=x2;j>x1;j--)" Z8 [* P4 b" d2 ~$ B; V
for(i=y1;i<y2;i++){6 l: J$ M5 p# r/ @+ [
goto_xy(j,i);
" s4 \3 h' T9 I' E putchar(' ');
6 k& h q; z9 u9 t) a delay(10);
5 @4 q7 Z3 K0 v+ [; `, \( n6 T }
2 W+ D0 t# p, D& |/ a, { }
6 ]7 h( c4 E: l3 y8 ~, d /******************设置光标子函数******************/- K0 n. K; M Z) @9 A
! ^9 E0 b# k. G5 X void goto_xy(int x,int y)
- H. H% Y8 P9 ~ {; T8 C8 l+ z! x: E, j
union REGS r;0 E4 B- ]# z% |0 W& b$ I ?
r.h.ah=2;6 b1 o+ ~* O3 K
r.h.dl=y;, s; V3 h8 S! e! K6 H& p; |& U; L
r.h.dh=x;0 B/ s- f0 I) R5 y m1 s! u- ?) B
r.h.bh=0;: b! ^" W* R/ V0 A$ @* n" W
int86(0x10,&r,&r);
8 y. w1 X1 I* |0 C# v8 E% ` }9 A% s' w5 M5 u* X/ |
" _3 q F4 v8 ~% x) ] /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 W1 U( U" w( f: ^9 c6 y
# A" D. W( a* Y2 E8 O void puta(void)3 s& P. [ z: a6 `/ O
{+ l7 n- R% q8 G8 G X3 U' n5 `
int i,j;# I* V1 Z& f) v" I0 T! {
for(i=0;i<24;i++){
" h" W, C% ]* ]% \7 ~3 b8 R for(j=0;j<79;j++){/ C; i- w" Y0 W# s7 L! G" z
goto_xy(i,j);
?! W3 c1 F$ u8 | printf("a");9 s5 X( Z4 I1 G: T# @
}: M5 D# d/ r8 n; y
}1 ?1 k( B" t( e* s
} |
|