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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 }1 R7 F: F" Q. a/ B( n2 J
" g9 C1 F7 X8 e( A 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 \4 L$ E. B0 d
. A7 Y7 A; w/ u: F 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' ?1 L; q+ U8 J! r 子函数及演示程序:0 z$ e1 f# [ k. d! M5 C
+ S5 V; F( B$ G4 W* P
#include<stdio.h>0 g$ \; D+ Q+ u ?' s
#include<dos.h>
# [* \" F& U9 [' f J& B$ F #include<conio.h>9 k6 W! d' c, N& S- y9 e. x! T& I
$ W1 I, U4 D8 {8 Q Z& x+ N. v# g R void goto_xy(int x,int y);% ]3 A( @$ q; q+ T7 Z5 H, D' G
void dcls(int x1,int x2,int y1,int y2);
, O# q1 q3 x: g, i& P: F+ x" c. o! E+ a void bcls(int x1,int x2,int y1,int y2); ~# S# }5 J6 F. H4 f7 t m
void kcls(int x1,int x2,int y1,int y2);8 g I0 M: ]+ a. V: L
void recls(int x1,int x2,int y1,int y2);0 K! g% z: I5 d2 {$ T
void zcls(int x1,int x2,int y1,int y2);
- Q0 w; H' l/ |* _4 v$ ~0 ^ void puta(void);3 L7 j5 D. ?: t1 C
- |7 ]. [/ Z" E+ h
^6 L' k+ R7 W* u6 u! S2 J /*--------------演示程序---------------------*/' E& u, Q- I2 B/ B x* @/ J' X' `
main()
* W' P/ @1 G& {) ]$ C) l/ `: p( t& t {
+ N2 D& S! m. {6 r% ^3 e% w1 q puta();3 T, J/ U& f0 _) F: a
getch();
% p ~ J% I* s/ R+ Q dcls(0,4,0,79);
/ ]% r: j: }" k. U6 j6 z& m; h' s1 c getch();' Q/ r% l/ d$ j; P& g
puta();: H5 [$ l8 ?4 f4 U6 m9 q/ r
getch();
8 f" d) \& L* N \8 V bcls(0,25,0,79);
7 i) `% s! d1 O1 t/ k- x4 g* Y getch();
" f4 h0 Y0 R. Q/ ?) P$ y puta();
8 Q* r1 m& R! g4 v+ Y* r# ` getch();& J& s: {3 c3 X6 g) ^& b. G3 ]
zcls(0,25,0,79);6 t [, a$ @& i8 e! D2 r5 i: e' j( |
getch();
3 Q: n2 B- d/ V& m9 _ }& [: D$ H+ ]. k' Z1 G
/*********center clear screen(中心清屏)***********/
' [( p7 ~' M3 m8 A! u void zcls(int x1,int x2,int y1,int y2). c3 Q: a; s+ x
{
6 |$ M; }" r+ Y% L8 Y& o; u int x00,y00,x0,y0,i,d;1 V( s o& H6 x8 J% R. z& q
if((y2-y1)>(x2-x1)){
. h# {! t z+ e d=(x2-x1)/2;- Y4 t6 @/ n$ t, a$ G, H
x0=(x1+x2)/2;) H: K% Q6 y: a0 D& K' Z1 w
y0=y1+d;
' [& U- E( ^2 L; w y00=y2-d;7 q# h% d0 j7 d Z0 ~* @5 {
for(i=0;i<(d+1);i++)( M! E3 Z8 J. Q! ?1 O
recls((x0-i),(x00+i),(y0-i),(y00+i));1 s6 ?1 a, k) a- E
delay(10);
$ I+ A- _! o! R7 j }! Z/ s/ x' n \- @1 @* x: v
else{! N& g7 d4 o0 Z) {! u* r
d=(y2-y1)/2;: r& Z& ]0 k. w1 p
y0=(y1+y2)/2;
' J% p! H4 i( |" }; { x0=x1+d;
[- W% [+ z/ M- G0 `, j: b x00=x2-d;
J9 |( w* M/ } for(i=0;i<d+1;i++), C( o/ m* h. ?; U: D" `
recls(x0-i,x00+i,y0-i,y00+i);% Z; Y9 [7 K5 k
delay(10);
0 I$ D9 x, g$ u/ H; S6 b }" k1 a# `7 w! Y" T! u# T0 {) l I0 v3 n
}) g+ w% I( L/ T) O
" y) n" C7 `+ @, `8 f" M: E
/************* clear rectangle side(矩形边清屏)***********************/
; ]5 p a/ t; x/ C6 |3 w" S' Y+ a" j. U) O0 j9 I
void recls(int x1,int x2,int y1,int y2)' V, ]; A @7 B! E& E
{
% f1 A, K4 q* F# _+ W( H int i,j;
1 g5 z1 Z- w0 `( _; _5 \ for(i=y1;i<y2;i++){2 M) O' O" H" L' g9 ~; P9 \
goto_xy(x1,i);
5 @ f) k) b: ~9 L1 x7 i3 Z putchar(' ');8 F0 }5 A' W2 Z& @! X8 \& l$ N5 @9 z2 H9 Q' t
goto_xy(x2,i);, h7 P# S8 `; Q
putchar(' ');% ?+ [8 h5 c R( B# X
delay(10);& v+ _3 K" n- u$ S% p
}
& b; m7 |" q8 Y9 `; Y0 s; g2 t for(j=x1;j<x2;j++){
- @' |; F; r; C! \/ ] goto_xy(i,y1);
' P/ y' C6 I! w6 Z putchar(' ');1 F( g) g$ ~" C( z) U
goto_xy(j,y2);- m6 M) e3 d, E7 r/ j! j: Q
putchar(' ');
) s; U3 M7 X6 C6 E+ {+ Y; S0 d; X' G delay(10);! P( V2 H, B) C H5 g7 @! e
}8 q5 _) X3 k$ d, \8 w* j; L$ h
}
& L( d& u% A0 e9 O( ^3 e /******************open screen clear(开屏式清屏)*********************/5 T9 {8 k8 K) G5 M/ U2 A* ^0 @
2 }, R4 I1 B! @# c: y/ G! x' B' l void kcls(int x1,int x2,int y1,int y2)
# Q+ \; i' s7 ? {# B4 [; W6 F( q4 \! I+ @
int t,s,i,j;
0 O" \: w) G* Q6 X% i4 B t=s=(y1+y2)/2;
( k8 L7 L. f4 n& \ for(;t<=y2;t++,s--)
R) {1 E/ @6 ~/ `; G, x/ } for(j=x1;j<x2;j++){
; Q2 M9 Z1 ]+ P) y goto_xy(j,t);
, R& P4 n' _+ t9 ?: Y0 R* b" w6 | putchar(' ');
7 f& K& V9 s1 P. D% T4 i4 b* b6 i' f( S goto_xy(j,s);! Y. i2 _, m1 W! x- d" @
putchar(' ');
# N0 R8 p/ W/ [# S. P$ i2 T6 K delay(10);
6 [' s9 t5 V2 z' V/ W/ Q }+ ^% [! a% w& Z4 D: B
}
& ~0 d/ h, h* p5 p+ Y, s /*****************close screen clear*****闭幕式清屏*******************/
+ C; b: r/ e* n6 b/ H' f7 W2 L; {0 z( Y% L% x' O
void bcls(int x1,int x2,int y1,int y2)
0 U. A, s1 @9 ] R! B( G {! l" B+ u( D$ C1 [/ V, m
int t,s,j;
( W7 G, D' @1 w t=y1;) d9 b. s6 u Z, ?1 B6 H
s=y2;2 g' B/ j$ M; u" v, v. T Z
for(t=y1;t<(y1+y2)/2;t++,s--)) ^: s* T* T/ x9 J4 Q% S8 }4 V
for(j=x1;j<x2;j++){
+ D7 Q, g7 {2 D* c goto_xy(j,t);1 D$ i8 x$ x. L% _/ f& v+ o; A, x
putchar(' ');
7 }; F7 y) d3 \( s goto_xy(j,s);
+ X' y/ B5 }6 W putchar(' ');
- {3 X% h4 O3 @8 N) J delay(10);: ]2 b) T5 L# v* c+ [+ y
}
; W$ |5 W0 w% f4 G }& f/ C& J/ H! d, R1 x3 x. I' L
/******************bottom screen clear(自下清屏)********************/3 N* v% r* N0 v: J
" h/ m1 @ j& v- ], k2 M void dcls(int x1,int x2,int y1,int y2)
# [2 b5 x( M& {8 }7 L {
5 U. N* W! h/ |! c9 Z `' `, F5 { int t,s,j,i;% U7 L! e* a6 P5 j3 c
t=s=(y1+y2)/2;
_) z# d" ~% N" V+ Y for(j=x2;j>x1;j--)1 z$ F8 l8 T5 T8 w, C7 e/ K3 m
for(i=y1;i<y2;i++){$ g6 a" h$ D5 Y
goto_xy(j,i);
, _$ G! t3 L4 q! b# F2 i putchar(' ');* L3 o& s9 H8 K1 g/ ?, s) S+ f
delay(10);
( W- C: p- i2 y! [/ P4 h }
$ d2 R1 m. ~0 n# x! u- K }
( ]: g$ W$ Q' C; k1 O- b /******************设置光标子函数******************/
) B- w+ z; f: ], p
5 V" J4 ~( }0 c J' E p void goto_xy(int x,int y); d5 {: s( X! _3 y: o4 S
{
2 P* I1 h! [1 d/ J& s0 T9 @ union REGS r;* x! t7 s( J' E! B) m
r.h.ah=2;
7 U f+ ^# _+ _4 L: h r.h.dl=y;
. p+ z" Z6 j6 P4 e4 |# T3 s r.h.dh=x;, E9 ]* P0 t, y# N- G
r.h.bh=0;
& |$ q! ~- f& {7 b* h/ N) B# l4 j int86(0x10,&r,&r); d7 [! m ~2 |6 D# V0 `
}
5 c& ?+ Q. G) ^: t/ b' |
! L0 A+ ?3 W7 @, ?# Z, Y n /**********************在屏幕上打出一连串的a字母用于演示程序******************/. y+ l; N( L& \6 O: k G
" b: x: L6 u) y3 K3 ^5 X7 o! }9 M8 i void puta(void)+ ?! T+ c, N$ L3 S0 a
{' [2 v5 s" x o
int i,j;6 I$ c- J' r( l- e
for(i=0;i<24;i++){/ }+ Q% \+ p8 g O- Z
for(j=0;j<79;j++){
; p; J; ~9 ?$ ]5 ^! @/ b goto_xy(i,j);
3 p% O- P$ P5 q, ?9 P, P printf("a");, ~7 ^2 f4 d- \
}
# i9 M/ x* [5 m b }8 A5 }8 c* W; L$ \; b8 S: {$ C! T
} |
|