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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,3 W. B- v1 a) k" E1 l s! I
8 @, T- J* o4 B8 W3 }' Q3 Y: J 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里# o; O" ^' ^$ N7 r3 n% G( J
# k7 p) X3 T8 \8 d 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # g; l5 c* O: _5 E- F$ A
子函数及演示程序:8 P0 M0 `# T2 h$ S, p0 W
9 V2 I0 F7 A7 B2 D1 y #include<stdio.h>
$ I9 z' |/ ~% S3 D: b9 P #include<dos.h>
( m" H7 y4 _( n8 S0 ~% n( q #include<conio.h>
1 L3 D0 y s' R2 @# Z' N
. [0 j, j4 _6 }, N0 e c7 ]- n! T void goto_xy(int x,int y);
8 M0 H! O) n7 W5 b void dcls(int x1,int x2,int y1,int y2);
2 G4 h# [+ j( ? \4 x: } Q void bcls(int x1,int x2,int y1,int y2);
: M0 K% H: N" D, V8 @ void kcls(int x1,int x2,int y1,int y2);
: h$ C5 s2 Y3 ^ r! d0 q% ] void recls(int x1,int x2,int y1,int y2);. x* n F4 h" C5 F l5 P5 @6 h
void zcls(int x1,int x2,int y1,int y2);( |2 m$ F. R& V. C- V' w8 U
void puta(void);' Y" z0 r) M0 r. B- Z5 K
1 X* i4 H r2 y, E& j4 }7 U" c( i7 K1 ~) N# S9 X8 w* z
/*--------------演示程序---------------------*/0 u* D0 O5 x" Y, M* ]0 Q) S
main()
0 ]/ f2 c. z" e' G {/ j7 `1 s. J) M3 r8 n5 a! y1 j- ?
puta();
/ I" H# a+ L1 ], w1 Z9 e getch();! Z9 y& X" [% n& j5 `
dcls(0,4,0,79);
! x3 h) F& m% m3 b! _1 | getch();: _! M, r5 y! o( J$ m( j
puta();
/ X4 C# N9 |* Y# T/ }' j' [4 r/ U getch();% @, k- _, y. g! s3 k
bcls(0,25,0,79);& O2 |6 u$ \, E
getch();% i. l; j- i/ `3 q s; l0 p
puta();/ G8 v: r$ L4 S, I s \6 f
getch();
" Q$ u: M( K" s7 @% m* [! q8 H5 [ zcls(0,25,0,79);
) \9 \9 R: |) H# n% B getch();8 l6 q4 ]2 d. r. n6 i. T
}
6 ^6 `* i, t. D- T% s4 }( ]* f& f /*********center clear screen(中心清屏)***********/
0 C& K" T3 \- c7 T$ k' ]0 I" a void zcls(int x1,int x2,int y1,int y2)
6 n$ V3 A8 d, `, S {
" Y, }' r/ [% q7 ?% j int x00,y00,x0,y0,i,d;
5 d% s& S L X, m) V7 t6 T if((y2-y1)>(x2-x1)){
( g0 e/ X4 n% w# W d=(x2-x1)/2;/ ^# E, U) N F$ z6 ?3 Z* K
x0=(x1+x2)/2;
" j* P" K5 q3 {. I( L5 g5 M y0=y1+d;3 J. d; p& A% I- r8 [
y00=y2-d;0 w+ E- G& b4 L! u. ]: g$ ^2 V
for(i=0;i<(d+1);i++) t+ h5 J! m4 B/ z0 a- ]
recls((x0-i),(x00+i),(y0-i),(y00+i));
~% A; ^2 |5 w0 l delay(10);
6 u. r- K5 M' b o }, Z( q7 `- z; I' b* f/ x, R
else{2 g/ ]. w" o4 d% M
d=(y2-y1)/2;( e' o- V4 ?# x- B, C; i
y0=(y1+y2)/2;: `. ~# L ]3 `' F
x0=x1+d;
+ a. l; Q$ v. J+ R: j- v x00=x2-d;
- R0 G- ^* Y& T7 \ for(i=0;i<d+1;i++)
}1 i! |& I$ `0 J- _. @8 D0 g, X recls(x0-i,x00+i,y0-i,y00+i);- A8 Y( z. l: n: Y" H$ d: A
delay(10);; Y; B( W1 _7 `, P
}. b3 V. e& R7 t& E0 Z) W
}
# n/ }2 W' K' Z" T5 |( F" p( O7 x* P/ y @( u! T7 k6 F
/************* clear rectangle side(矩形边清屏)***********************/
4 w" L+ l9 g& ]7 b. @6 K$ l: a6 M3 s
void recls(int x1,int x2,int y1,int y2)$ ^! Y; U% c1 n. ]1 W6 w
{* E0 A+ l4 `0 G2 F0 s. t
int i,j; q O2 R1 I! v& _, C5 N3 q
for(i=y1;i<y2;i++){
" K% m, S) D* F9 U1 g goto_xy(x1,i);
" l5 H" D8 l/ Y+ A putchar(' ');
. s, u) g k( K7 b) N @5 A/ E5 T goto_xy(x2,i);& y$ _/ ~; i% Q w& v1 d
putchar(' ');' E5 K( H8 K1 K' K/ s0 v
delay(10);
, [! h6 \% ~4 E ~& j! O- @1 n }
6 L; s0 g5 a) }/ R$ q for(j=x1;j<x2;j++){& N& I/ n0 O2 w V5 Y
goto_xy(i,y1);0 q4 _+ U8 d* S# d" h
putchar(' ');! w& r/ R9 Z4 F' K9 b% o
goto_xy(j,y2);2 f$ R5 R5 g# U) f5 z
putchar(' '); M% b2 I& G1 L; K" A' a& P
delay(10); d( F4 s# v" g E
}% }' t7 W- U3 h
}5 ~" Z {7 z3 z2 U- N7 M8 a
/******************open screen clear(开屏式清屏)*********************/
v( w' s3 j- G4 i. b B6 f* C+ o9 v3 [- y( P" S
void kcls(int x1,int x2,int y1,int y2)3 B: N6 f" @: j8 |2 K3 o5 ^
{
; U: g5 V6 v# y7 a2 H3 m) s int t,s,i,j;* o$ ^+ @: N! h8 b- s
t=s=(y1+y2)/2;
' W. m4 m' L* \6 r# W8 o for(;t<=y2;t++,s--)% {6 j- p7 I; o) g
for(j=x1;j<x2;j++){
8 N. I2 M% F4 n; W8 p H& Z goto_xy(j,t);
1 G& B/ [2 X8 q5 y- l4 y putchar(' ');9 U4 a* C' |) L8 I" C
goto_xy(j,s);
0 c9 a! G; c) X" D% P: Y: R putchar(' ');* V7 K1 D0 K# w, @5 T" t
delay(10);
6 S3 b# V" n& E2 u- k- } }3 ]! N5 a/ x* V' P2 `2 P
}3 s) }- ?9 V+ w8 t
/*****************close screen clear*****闭幕式清屏*******************/6 \! f" y. Y; F4 R
' i" a6 F# w' r( r$ ^/ a$ u
void bcls(int x1,int x2,int y1,int y2)$ Y8 g( b+ q! x3 D9 U/ z4 P/ L
{
/ ~) F6 {+ Q8 E% m) a3 t int t,s,j;
/ Z5 d5 N' J0 H t=y1;
D% `& Y! Y, |+ ^- Y s=y2;
- d5 G5 v- e* P/ ~* P K3 x7 t for(t=y1;t<(y1+y2)/2;t++,s--)
& W) A2 N2 H; I" y" j for(j=x1;j<x2;j++){ u W0 e* L' A7 n D2 M
goto_xy(j,t);
9 s3 k6 z6 U9 c7 T putchar(' ');
; i1 Z2 u. O! @0 ~- g7 ~" h goto_xy(j,s);
6 V T0 p. t3 h& q! w4 t putchar(' ');
- b( Q- U4 S: y delay(10);
1 |4 Z6 N/ e: C. D" W4 v, T% @ }
% @- z+ ^9 C# M& o0 K3 c }! x$ k8 p% q4 j. t; |! U0 l
/******************bottom screen clear(自下清屏)********************/% E) b" n9 q, i k7 ]
5 }0 \! o( F/ w
void dcls(int x1,int x2,int y1,int y2)
: h, f- Z% ?* S {+ J8 N- K/ Z8 s$ X
int t,s,j,i;6 X& Z. k+ z& J7 Y
t=s=(y1+y2)/2;$ n# W* S+ m; s: ]8 ?8 _- D
for(j=x2;j>x1;j--)
/ ?8 A0 O6 [* p5 w: V for(i=y1;i<y2;i++){/ [- A; Y. J9 ?
goto_xy(j,i);
& T; J- |9 b+ |' v) ^ putchar(' ');
5 H2 T/ W& v4 A8 N delay(10);
9 n/ ^9 _3 Q/ \1 y/ W, r; k }. {+ [; ]( S5 ?2 N6 C
}1 {1 u' q; _0 ~2 i
/******************设置光标子函数******************/
G/ t- Q1 `! @1 U+ D2 j( m: u
( G2 k1 Y8 Z; o# u% B void goto_xy(int x,int y)
( u6 h2 d" J$ E9 O/ K- n. W0 o7 v {
V& X) e; ^# I) X4 ^# X6 B union REGS r;$ v- M7 X4 U6 r$ O
r.h.ah=2;
& k1 k. w3 k& s1 M( G5 P% ` r.h.dl=y;
4 z$ U) [, |1 M- o+ u" C% J m r.h.dh=x;: i7 ?% g- `) X/ |. B2 ^
r.h.bh=0;
; A a* F/ r5 s5 L int86(0x10,&r,&r);
+ |. Q1 K$ b& N! ~ q7 g& E% j }* V7 m. Z; W. b/ c& @8 T7 H
1 x$ ~, T+ x. c, w# t$ V3 D
/**********************在屏幕上打出一连串的a字母用于演示程序******************/$ ^+ x# G- W9 X& y P* b
0 \( v7 d) k5 {7 ~1 _: N void puta(void)
" M) c$ n3 `, x: H3 E' M/ ^, a {2 M! M# E% i# j& ?9 e
int i,j;, n& ], Y9 R) F1 Z0 Y! ]& G/ ^5 c$ S
for(i=0;i<24;i++){3 U- I* b' c5 L6 W; o
for(j=0;j<79;j++){
) `$ e' ^+ j; Y) H% \ goto_xy(i,j);
3 x. Q# K( x2 g# z printf("a");
! K- R5 {2 s9 d- J }
+ Y4 N, T* n% j0 y, u6 S }/ E. x- q2 t8 ]5 T6 k6 j
} |
|