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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* ?; \3 U, ^8 l; E) G' \1 W/ U5 x' E% @
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ W4 @3 {7 }- a# A1 h! l
' d: W: u0 W. x! X8 { 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . H& @ M B' o3 @ E$ R4 F/ R
子函数及演示程序:) b% @+ v- h) V$ I& _! v
" o$ g- ~4 u! z9 a7 v$ [1 ^
#include<stdio.h>
g& l1 n2 w! j) @* ]% \; o4 i #include<dos.h>
4 a: k3 H- ~' j2 c #include<conio.h>
8 X$ e# Y. W8 g1 Z1 J
& E) q1 f7 C" c) V void goto_xy(int x,int y);3 \% q/ w Z2 y# u
void dcls(int x1,int x2,int y1,int y2);
9 B7 G1 x" p5 p9 {2 n8 M void bcls(int x1,int x2,int y1,int y2);
1 }/ r) v6 F9 p2 I1 q2 @, m' b$ r void kcls(int x1,int x2,int y1,int y2);
6 \6 S4 J6 Y/ N# f2 G$ P void recls(int x1,int x2,int y1,int y2);
& `& m3 {/ P6 |( L4 S, W void zcls(int x1,int x2,int y1,int y2);
$ W/ w9 ^! U) H$ x+ \& c) Y* k void puta(void);/ L$ x- P6 ^7 |0 j z1 j
! w( g3 Z. ]! _! @- H3 U
; s. F6 \+ x) H8 j /*--------------演示程序---------------------*/
5 A3 M- u3 _' }3 K6 ~7 [3 ? main()/ S0 D" `4 j( o
{' H2 k& |3 _$ A- l# W1 L
puta();
" L( g5 f' M5 B2 F5 A% X getch();% Z$ ? ~! n- D4 I5 |' c
dcls(0,4,0,79);
- A- a4 I" S8 ^7 G1 \ getch();
( u) q2 p6 b, S- z: [/ V0 [ puta();: X( Q; ?, y% q/ R
getch();
5 Y) Z# Q4 s7 g# p7 R9 l0 P bcls(0,25,0,79);
/ u9 c1 a! w# @4 x9 Q* t& o getch();- M: E7 s0 ] A1 u
puta();
6 o+ S; B3 }5 `4 B$ b/ b getch();% T" T: b& K. o5 h/ y
zcls(0,25,0,79);+ m" A" z: f }' A) r8 W+ j$ d- f
getch();, [0 G4 y6 B, o5 `, x* X
}
3 O8 W- T& j6 k9 y /*********center clear screen(中心清屏)***********/
2 f- e! p, V, X% z; Y1 ~4 `' @$ @ void zcls(int x1,int x2,int y1,int y2)# r; v+ l3 X5 f% T% V: S# g
{
0 N# s+ n0 [1 c int x00,y00,x0,y0,i,d;% N1 \) \4 q9 K0 Q; \4 I; s
if((y2-y1)>(x2-x1)){8 L: x) h' q2 w3 {/ l% ^
d=(x2-x1)/2;1 j, [. R$ u4 B3 n* _
x0=(x1+x2)/2;# ~8 k8 T& r0 u, `- U+ v
y0=y1+d;
! r, I" P. Q' C+ `* k. ? y00=y2-d;
* @7 m1 _' C7 ]. d! o* t for(i=0;i<(d+1);i++)
% \. v9 e* |) i recls((x0-i),(x00+i),(y0-i),(y00+i));
) ]* V1 Y- G* ?8 u0 } delay(10);
: W/ ] S3 \8 i3 O }( x! x& N: h+ _2 [$ M
else{; b) e; S* G# F5 x6 K( `6 ^6 v
d=(y2-y1)/2;' E1 @+ h/ N, k4 K, _
y0=(y1+y2)/2;4 d# I @$ I4 w* ?* ] z
x0=x1+d;
4 L" q$ F" t. f; C+ A. o x00=x2-d;
9 }: g2 M: ^9 F* \; A0 e5 q/ J+ c for(i=0;i<d+1;i++)
- T( d5 b) R& A. G recls(x0-i,x00+i,y0-i,y00+i);7 A3 k$ t9 x* z# b$ }$ g
delay(10);' V( u \$ ?( t
}
8 n- O: p [! C# A4 d7 o0 @ }4 N+ G! _5 G1 Y. P
* C% E( q6 G$ u2 u' A* f/ Z
/************* clear rectangle side(矩形边清屏)***********************/
" m! o3 T/ ~: P- w
) H) _( _; O% K. k7 r void recls(int x1,int x2,int y1,int y2)7 {1 ~! f, g6 y* q
{
# t9 b+ I" j* r. W& g- k4 o int i,j;
, F; S) g1 ~8 y& a+ I for(i=y1;i<y2;i++){
4 M% g3 h$ v: r; v0 h goto_xy(x1,i);
7 A4 s7 u: A7 q putchar(' ');
& `) a" E; F, q0 y- z0 A$ u goto_xy(x2,i);; S, `4 u; C ?
putchar(' ');* O/ y0 h3 `- C( x8 p9 k3 b. `
delay(10);2 k* c! @/ L1 z" Q, V% |
}# A, E; W% N- W4 R, F
for(j=x1;j<x2;j++){
0 S# {0 X' }4 y4 x: B goto_xy(i,y1);
8 _! {" p/ t I i% r" J% W putchar(' ');
8 R1 t: l& \, u! Q5 z' b& g1 V goto_xy(j,y2);7 k9 y# r" E8 V" f2 F0 R9 q
putchar(' ');$ T* W w3 W8 ^( _% }" D
delay(10);" f- v3 v* p- l! q& w9 Z
}) c; m" l) j, {0 n+ D
}
: X% l( D4 @2 W5 d0 j o /******************open screen clear(开屏式清屏)*********************/
6 e1 E/ j* l) J/ o: {( S: d2 k" l) b9 a7 X' s. A
void kcls(int x1,int x2,int y1,int y2)/ [ J) ?3 g z; m7 C
{
9 ?5 | W; Z# i4 @ I int t,s,i,j;+ h2 b& p, y2 Z. G: l( O8 O5 B; t9 [
t=s=(y1+y2)/2;
4 b$ C0 ^6 U5 E- d6 o for(;t<=y2;t++,s--)' D6 V. T, S& S O
for(j=x1;j<x2;j++){, `; k7 q4 \1 B! n+ @3 ~
goto_xy(j,t);
2 p0 \/ D( N% E$ q6 h3 ]. ~ putchar(' ');
# Q3 e' Y2 e/ r goto_xy(j,s);
5 k+ R" w% z m putchar(' ');+ ]/ C% j: a( G _( K Q$ O
delay(10);9 z: t& a6 y: ]$ I" N$ |
}( @. _" s/ H/ _4 D2 p/ i
}4 D$ Y B* l, R" T7 Y
/*****************close screen clear*****闭幕式清屏*******************/ H; k) ]* X( ?1 G0 l
" g4 F! \7 b+ ]7 d void bcls(int x1,int x2,int y1,int y2)
$ U0 T: Y( L0 c2 U- l {! f" U/ H, k9 [8 l
int t,s,j;& l4 K0 T3 T6 t( ^+ k
t=y1;' ^6 W9 J" c* \ t
s=y2;) G0 c, I5 K. t' g( z( x0 L
for(t=y1;t<(y1+y2)/2;t++,s--)
E5 n8 J6 {6 u/ y7 E) j for(j=x1;j<x2;j++){7 j7 T- G5 c0 F# D5 `
goto_xy(j,t);2 t9 R) I/ f5 H; t; w) r( I
putchar(' ');# F3 N* q" w; x
goto_xy(j,s);3 E9 V8 ?) U4 e/ Z
putchar(' ');
1 a5 ^0 O: q. Z$ r2 R, f# ]7 l; [ delay(10);: D/ A6 i9 `0 G
}9 D" I* c( V; R Y" j
}( {7 F1 q: m* h. C Y( R1 l' b
/******************bottom screen clear(自下清屏)********************/
% ]5 P% I& u# L; S3 b
5 J9 Y! u/ k- u( ]( w! v void dcls(int x1,int x2,int y1,int y2)
( r8 z3 F! g2 n% W+ w {
7 ^2 O4 q, t7 O% n int t,s,j,i;; ~ f* U: u6 g9 f6 O/ C
t=s=(y1+y2)/2;+ O* y6 q/ p6 k. _
for(j=x2;j>x1;j--)
, K7 q t. o# z+ ` for(i=y1;i<y2;i++){0 f: v$ q* _; Q$ B
goto_xy(j,i);4 j: h" B- C7 U6 b ]2 E
putchar(' ');
, o8 I3 ?# q. u( R# d! M' k delay(10);
L1 I& _8 r; R0 H }
5 L9 @0 |$ g, R& o2 j( J* M* M }/ U9 Y3 r7 z" B c8 p- J. n
/******************设置光标子函数******************/; R& H6 M1 q+ L3 p9 z: T
5 \. Q- Y0 m/ u/ e0 D
void goto_xy(int x,int y)5 g1 c @: u4 z! {0 ]; H
{4 q" }& k& m! j X3 H- b4 n
union REGS r;
z: ] j- g. B. B: \3 {: {9 D r.h.ah=2;) _9 v) c7 }9 w; q- o* l
r.h.dl=y;
2 K5 D. ~+ o, \4 V6 F& v8 R r.h.dh=x;0 z3 A9 A6 u8 q
r.h.bh=0;: k3 {3 J( h1 y. U x8 H/ @
int86(0x10,&r,&r);
8 N! e! K$ T) W9 _9 S }7 |: g$ w2 [" L! k. D
8 Z0 X5 x8 R* f9 U /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ e8 D! V9 h7 }8 {/ B- w2 w
& o/ Q7 u0 r1 z: P void puta(void)! N3 i' q4 ]* Y, s3 }9 ^
{
( u9 k9 O6 }' Z, S4 Z int i,j;
, O8 `* w# U3 H* k for(i=0;i<24;i++){0 z4 t" a! H9 `8 S- o- @
for(j=0;j<79;j++){5 _0 F; z- b' Q# p( a
goto_xy(i,j);
8 m! Q" ?" j% i printf("a");
1 F. Y& s# } m) i }1 H7 e5 B: g3 }6 `
}0 q, w& r& i8 C# Z' Q& g% T% E
} |
|