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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," M F$ M. [* m* B1 E
4 [$ V) E" u3 g9 ^% L* k
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' U. s1 t/ G* d/ t2 j
7 A. l% T; t& \6 V+ J+ v- e 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / S' x8 M4 W8 V: H3 D1 Z$ K- P' X
子函数及演示程序:# u$ {. ^& u/ F- z) L/ i$ g& c* H
8 G" h$ {3 P4 n y' n #include<stdio.h>
# g+ @" _; w8 }& v: J" V; {9 y1 L; \ #include<dos.h>
. }' q. W& X0 Z, c# X. D #include<conio.h>6 c4 }; N9 }2 H9 u2 q2 L
) z% a; M" n$ w; c" D
void goto_xy(int x,int y);4 @+ a! H/ j7 h' B5 m" Z2 ?1 Q0 k. p. h
void dcls(int x1,int x2,int y1,int y2);. |" g& N x, F* y3 H
void bcls(int x1,int x2,int y1,int y2);9 B" C$ z. T I( {0 B' U( ]' ^$ f
void kcls(int x1,int x2,int y1,int y2);
2 E. [- @7 O1 P3 I5 x3 C) N0 o/ u void recls(int x1,int x2,int y1,int y2);: K3 T# e. T. E0 N& n! @; M
void zcls(int x1,int x2,int y1,int y2);- T9 }9 J$ y9 I/ r) R# |
void puta(void);
! S- d- \, x) A- f5 y. ~1 s" i* U/ u- f- z/ ^$ _2 F
" Z& K+ ~" k( o+ v, c. a /*--------------演示程序---------------------*/
" L* q j$ z& Q) ?: ? main()
4 B w( l' i3 F% B6 m6 O* e1 S {
! F; P/ {+ B0 W/ P$ o" N puta();+ A6 m, P6 o/ i9 g) G1 d
getch();
# P1 n# g) j/ \ dcls(0,4,0,79);: s( M! }" ^' J. u* u
getch();! n0 W3 K y* {. y3 g3 ~ T7 Z
puta();$ d+ e- ?' K( T* I9 W2 I
getch();% L0 ^" L6 _2 Q& B
bcls(0,25,0,79);
( h5 K/ ]+ j1 @0 X. w getch();
: c5 r; X# W, M9 t. |6 l0 P3 r2 ~ puta();5 O+ T6 | l* S$ z8 C/ |9 R
getch();
, D9 N0 D- J) c zcls(0,25,0,79);5 B: q' m2 \! L' ^) q3 u/ Z/ R2 z
getch();* S0 X. G" u' `- K+ F
}
3 W- y0 n, K6 |) L& t /*********center clear screen(中心清屏)***********/* r; y) B; D6 D' j9 ]* V
void zcls(int x1,int x2,int y1,int y2)
( S5 H* [. I% p' F; x e {, e' v& I8 C; | ?
int x00,y00,x0,y0,i,d;
, a/ O' a1 u4 r V- Z if((y2-y1)>(x2-x1)){0 B1 y: j8 Z) }; h
d=(x2-x1)/2; N/ Q1 H! {$ e' R
x0=(x1+x2)/2;5 |/ i2 C/ {: C1 {. N8 p/ p# ?
y0=y1+d;% Y9 B5 o. i; c& b }
y00=y2-d;
) Q& V8 S5 m0 K7 E for(i=0;i<(d+1);i++)" u( h) L- H% e- A8 n
recls((x0-i),(x00+i),(y0-i),(y00+i));
- W9 M# d, ~$ `4 \) a delay(10);/ S7 n& W/ P) `/ A: P6 s% c" _
}' O5 |! E9 y8 P
else{
6 W: Z8 G2 Y4 F d=(y2-y1)/2;. Q1 {$ Y! w) O8 ^
y0=(y1+y2)/2;
' B: r8 b& v ?4 l& i2 W6 M/ h3 Q x0=x1+d;+ R# p3 q: U, Y3 V
x00=x2-d;
+ |4 L, d+ s5 j8 m5 Q; R9 B/ w for(i=0;i<d+1;i++)
% i1 Y5 ^2 A. [! e recls(x0-i,x00+i,y0-i,y00+i);
7 z( A0 w0 ]6 d6 n0 h/ U delay(10);7 w& w1 ?1 i5 J4 _
}# {6 a3 [: Z, r! I
}
2 U+ B" o# @ g p. v( F
3 v8 x6 Q5 A' }# c1 h$ c$ a. B2 G% E: [ /************* clear rectangle side(矩形边清屏)***********************/
* H3 v- X: g' |5 @* Q# [/ }( Z, y) m8 d2 D6 R% n5 I% Z% ~
void recls(int x1,int x2,int y1,int y2)
3 v$ x# y1 p6 G% y* c3 i {6 n: E) J3 e8 J# T
int i,j;1 H& g8 i- w+ Z& C1 b; g
for(i=y1;i<y2;i++){
% p. H" s& P8 {$ c H7 ^4 N goto_xy(x1,i);; o' B! I4 E5 ?( ^
putchar(' ');
6 q: S1 _/ W7 I goto_xy(x2,i);
* ?7 h- U6 f" L( ]! C putchar(' ');
+ N0 x4 L7 I( v0 u( x delay(10);
8 l8 Z1 y2 \; l. w; v3 C' P4 [ }
6 }$ F: @$ I: H$ u8 g for(j=x1;j<x2;j++){
/ z( E4 C1 X8 \" G goto_xy(i,y1);
7 S4 T. G7 Z: y' _ putchar(' ');
5 d) l: P* ?: i+ n Y$ ` goto_xy(j,y2);( b2 N1 `$ K1 u' B+ c, F% a
putchar(' ');
- o$ R4 I, F. r" z delay(10);7 [: E; K. f0 h0 V
}9 u6 k( W& i8 S- P% V% @
}
: `4 f; ~( m" b+ j3 y /******************open screen clear(开屏式清屏)*********************/! I1 n# Z& @8 ^" T8 o+ f+ h& ]" Z$ q
! v2 d0 ?" v, k) _# a1 c, V
void kcls(int x1,int x2,int y1,int y2)
5 A# i7 u( A' b3 } {
8 G3 G5 D/ x. s$ X& w& L( e4 P int t,s,i,j;
' m3 R8 _ J: `3 N/ | t=s=(y1+y2)/2;
! r7 S# ?1 T |/ U7 R* c+ z for(;t<=y2;t++,s--)
+ V) M8 b! F/ H for(j=x1;j<x2;j++){
0 V9 R$ R; {! s3 s( W goto_xy(j,t);: ]3 n% K/ c( p( I* U# t, w+ n
putchar(' ');
9 [8 Y. Z9 |1 E1 l" o: P goto_xy(j,s);
, c3 d Z5 H, {% b putchar(' ');
' B6 ]& L% z- @2 F" z$ H delay(10);
) Z( W4 Y9 [# m5 Z. e, C% d }! N0 n) ]* [5 d L& N* W" A
}
6 Z1 Q, ^! f+ F- K5 Z( x6 k C /*****************close screen clear*****闭幕式清屏*******************/1 D2 w* c; @% N8 ~
, O( ~2 h( v8 u/ _; W# @ void bcls(int x1,int x2,int y1,int y2)
7 o8 A4 ^" C; |6 O) L' S0 i {
2 h* b+ f% b: w7 z2 O9 v int t,s,j;' U9 o W7 C" b" u& F
t=y1;
' q' `# l6 Q; z& _& G" f s=y2;
- C! x R9 D- S6 p7 z" u for(t=y1;t<(y1+y2)/2;t++,s--)
* R5 t" U3 X: W* b( r/ r& C0 J for(j=x1;j<x2;j++){" W9 L% A9 _! u& x
goto_xy(j,t);( s V' c+ A7 S( S6 f1 x) ~7 P, D
putchar(' ');' h2 H% k' o5 n) a- c" ]
goto_xy(j,s);; o7 _9 D0 S, v" Y
putchar(' ');5 ~6 M, {. u; E. [, l
delay(10);
* k n. _5 g" D }3 J( u& J0 s9 l5 A7 R4 T
}
$ v/ N& r/ e1 @) q& f /******************bottom screen clear(自下清屏)********************/
+ y2 J5 c2 L" o7 e$ ~# j7 `5 r% e5 ]6 _1 ]5 l: w6 A$ U
void dcls(int x1,int x2,int y1,int y2)
8 A4 D; |' M. h* t) T {; l' l. Y1 d& P- o( H: C
int t,s,j,i;$ k& {$ e( {3 T2 ~6 H+ r
t=s=(y1+y2)/2;
% a. Z" Z! E% t; C" b2 b for(j=x2;j>x1;j--)
0 A& T- M5 a- M* u, w- G1 f ?4 v for(i=y1;i<y2;i++){; i3 W5 }8 j! b4 Q6 h; X
goto_xy(j,i);7 n6 A, p+ C8 b" r6 J
putchar(' ');
! @/ R# [2 g* a6 M delay(10);
" z0 A' y @7 s4 Q( N8 y/ h }
`) f: e2 r8 R6 t/ t2 P8 S: v* w7 p/ j0 a }
# [; b) n3 G& Q6 ` B' K /******************设置光标子函数******************/
3 Y. K: v7 s; M3 U6 q7 N, J! i0 V: z4 c+ [& M* w$ m( h7 w
void goto_xy(int x,int y), N; t! s" z" j3 @( \
{) o% b7 l& i6 t$ m
union REGS r;, A* L7 C; u/ W; [' R
r.h.ah=2;
1 x! G( L& G2 n0 c* |2 v9 q7 y! x' v r.h.dl=y;
! ]1 O' j$ Z: ? r.h.dh=x;
' s# E$ r, c* ~( U3 @( d1 b# Z r.h.bh=0;! ~! V9 P* P# ?) ~- M8 g( C" y2 K
int86(0x10,&r,&r);
/ F0 X3 {) O% c! v6 ^7 E8 h) h }/ T1 u; Z- X7 l
! B- y! K/ F8 g /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, \+ v: h8 W& E7 U% e; l5 W4 h* P0 W8 {' d4 N% [+ Q3 t* N! ?
void puta(void)6 r( r/ k/ z$ h
{% t8 t- N$ N2 n& r" d0 z' y3 A& a
int i,j;
7 E% I! z( Q3 U& u& A$ M( R/ X) F for(i=0;i<24;i++){& n: L/ _+ L% @. p$ D* E% G
for(j=0;j<79;j++){7 f' ?- P6 T1 v& f' K3 h
goto_xy(i,j);$ n3 [$ `5 N- ], P4 `, h
printf("a");
, |8 I/ x. _+ |: S: e }
* w. [7 s4 P+ m( w4 F0 Q3 J }% ~. t, i% d( b3 b
} |
|