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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) C- i% [- _) P' ?5 M
( i" v, `3 p! ?$ n 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 G9 |& h8 J3 F m
* J9 Y6 o( q# P" B 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- f, P9 ? y/ A9 N+ g 子函数及演示程序:% p2 f: [: z3 S$ U
6 j' {& ]* t/ Z+ o, O
#include<stdio.h>
% Q# a U, S( F! G, g# Q #include<dos.h>
, }- r5 ^" \& N1 ]6 q5 E+ ] #include<conio.h>
: {: J1 H# o* j+ U6 C, v% P( J9 |4 e) U$ _( Y5 b: ~. n) p
void goto_xy(int x,int y);
" H$ \ k6 e% ~, o* y* [ void dcls(int x1,int x2,int y1,int y2);
^+ I6 j0 p6 C+ Q& {5 n9 F void bcls(int x1,int x2,int y1,int y2);
s5 W6 @5 L. E" g void kcls(int x1,int x2,int y1,int y2);
. K, R# j6 A5 b' Q3 y1 i! V! ~ void recls(int x1,int x2,int y1,int y2); K7 D$ Z2 C0 H# _$ o
void zcls(int x1,int x2,int y1,int y2);: M$ m! N2 s& M
void puta(void);1 A% F9 E# Q' i: Q+ v5 P
4 ]8 q4 H5 ~2 }9 J" K8 |. u5 z. m
& Q9 l, h$ e! F, |, C& T8 F4 X /*--------------演示程序---------------------*/7 ]% Q+ X, G9 {- P+ J( A4 ?$ s
main()
/ R; d$ \* j/ o i" d' _1 q+ _ {
7 [4 J! J# L) m2 W8 x: N1 M+ a# { puta();
4 ~- h" P1 \6 F4 j getch();
u$ Y. b" g4 p. n6 s& d dcls(0,4,0,79);
! j- m7 {8 w8 Y% v7 }2 E getch();; O) @$ K" U+ I' m! m
puta();
5 W, K' j6 Y. x8 a* ?8 g1 v1 Q- L" s getch(); u4 K7 h+ i. ~8 V) H4 a. D
bcls(0,25,0,79);% L8 x6 n: Q9 ^- y
getch();% {; {8 O3 D" ^4 N' z
puta();7 R6 ^7 z& t @2 E/ M, z- j/ _
getch();
2 j4 U' E* k5 X% |( [- p zcls(0,25,0,79);
' N1 r7 N; C. v+ G getch();' [: S3 b( a" w9 a8 T
}
% b# l: |6 b( o. ` /*********center clear screen(中心清屏)***********/' z7 G" Z! y* l
void zcls(int x1,int x2,int y1,int y2)8 R$ a7 V7 i2 @' f9 _1 |5 ?
{
& |2 a$ ^) r1 ~8 t int x00,y00,x0,y0,i,d;
7 {7 Z+ |) @5 @. @0 o2 f) V if((y2-y1)>(x2-x1)){6 b: o& k1 Z5 S" y8 b; g
d=(x2-x1)/2;6 K" H' g) i& O: b' c+ g( A4 q
x0=(x1+x2)/2;
7 N2 v3 Z& ^% _. b' q& \ y0=y1+d;1 t4 h0 B$ ?. p/ I/ ]6 i3 d8 w
y00=y2-d;
2 S$ r) E# H) u" B) `6 J% N g for(i=0;i<(d+1);i++)9 v4 h" K6 @! P( k
recls((x0-i),(x00+i),(y0-i),(y00+i));
6 d! I1 O1 U; F( ` delay(10);
N. Q. J1 i9 V, ?. l }) l5 Y# I. O( a, g! y8 v$ `5 {) h, a
else{8 v& u7 i: }( p9 p% ?. V
d=(y2-y1)/2;9 I3 E: O, ~1 A: G' j4 s! a
y0=(y1+y2)/2;' i2 S* g+ {- S6 f3 d
x0=x1+d;$ ~3 J- `$ J+ g5 Z) o
x00=x2-d;
# U4 j9 K8 b t" n" E for(i=0;i<d+1;i++)2 C* T; t! ^( f' G4 w2 B
recls(x0-i,x00+i,y0-i,y00+i);1 p. j% L" W# G# C3 _$ M
delay(10);
8 q9 t9 }. r0 n# }3 L% F. W) r }' `( A' ~% r$ t
}
, s0 U& h+ v% Z9 `2 s8 x; g
! \& q1 g$ e }0 s) O8 R6 @ /************* clear rectangle side(矩形边清屏)***********************/1 h! T" K) k7 j! \& _
: D. |; k" C; ]5 e( J/ { void recls(int x1,int x2,int y1,int y2)3 Q# q# s7 N8 U k% w
{# }& I/ r3 K7 P$ r) T
int i,j;
0 q+ O f7 Q; p2 D/ e* e0 J for(i=y1;i<y2;i++){4 @5 f! I' }8 @$ C$ K, [
goto_xy(x1,i);7 Z, X m4 l% I( Y. S1 u
putchar(' ');
2 o7 P8 R" [/ d6 \8 ^ goto_xy(x2,i);
1 o8 h Z l$ A- x4 A putchar(' ');" H- O% @: g4 k$ ?9 U% m
delay(10);8 R! k& j5 _0 ^1 i
}
9 t/ R! X, C/ ~. r+ r h6 O. A, k for(j=x1;j<x2;j++){
8 s7 n0 f8 ^/ n goto_xy(i,y1);
3 S3 ~6 v) K$ e) ~# P6 ?4 m putchar(' ');
5 E8 z0 @5 l# _, [4 r& N goto_xy(j,y2);
( d- h5 S8 I; S2 R6 ]) A, K9 E, n putchar(' ');8 L4 c; m, G) G W: a
delay(10);
9 W& I* U' k# _) }) b% ` }* s- B& d1 J" ~$ x% T$ x' z
}
7 d. c! e: C/ J. l) E /******************open screen clear(开屏式清屏)*********************/
! o" k+ Z9 Y. B9 T1 ~% _) K+ P4 J
2 y6 J$ k2 X2 J+ t1 L void kcls(int x1,int x2,int y1,int y2)$ V4 B% D: e: L7 [( P, n% Z% e
{. P/ f: [+ }# |# e, h! Z# H" V3 r
int t,s,i,j;; d6 } F6 k! U2 f
t=s=(y1+y2)/2;: u+ Z, I9 Z0 g1 |0 d
for(;t<=y2;t++,s--)
% F( H; n4 F; I* l for(j=x1;j<x2;j++){3 u. ^+ z7 B7 |& x' y2 E
goto_xy(j,t);
" @/ X& v7 B" v; b putchar(' ');
3 y3 q0 H9 i4 ^: [9 l! U goto_xy(j,s);* z9 r' Q; ]" D( y7 c$ C
putchar(' ');2 n3 L6 ~; s7 O% |, O
delay(10);
{, [" c; ?+ r/ ? }* U: ~( ~; z) d: w8 E4 Z9 i6 C; K
}
# r* e9 ?; g) {' _. B/ Q* t /*****************close screen clear*****闭幕式清屏*******************/3 W! [9 @$ d9 K8 D7 v# V- W
& a+ [" I* M8 G: }* ^- j- G void bcls(int x1,int x2,int y1,int y2)
: K" g, n- n& F, X {
/ r) {) b6 h+ J, d& m* S) U int t,s,j;$ ~" C( J& V+ P$ M
t=y1;
0 K+ E3 `& g, G2 x! k( r" Q s=y2;
3 @5 {' i+ W7 _, f' o$ b for(t=y1;t<(y1+y2)/2;t++,s--)
4 V0 a& e# k' A for(j=x1;j<x2;j++){. C& ], y( ~8 h% p6 [
goto_xy(j,t);$ h8 s* d# L& U2 c
putchar(' ');# W0 _4 p' C+ P4 C
goto_xy(j,s);1 _0 ^! C, m& w
putchar(' ');- f/ ~7 K5 y. J8 C k, U: q' V
delay(10);1 @2 N* D: V& n% t7 u' T
}
! M$ P% m$ `6 N6 A# l }9 h' z% Q% s& z! E4 H
/******************bottom screen clear(自下清屏)********************/! g8 d# t5 l( M$ E; l5 r7 X M' N- F
8 E; U6 Q, S& G: J, q void dcls(int x1,int x2,int y1,int y2)
/ n# R6 |7 ~' N1 D' s1 B6 ^, R {4 m' m# ^7 C+ y. p3 f9 q' a
int t,s,j,i;
, q* Z9 F+ \' H2 S9 Q7 n1 Q& K t=s=(y1+y2)/2;
$ N- A7 ]: L+ D. J6 @. S8 x: M; @" b for(j=x2;j>x1;j--)
8 G* Y* z# r8 s1 i; n for(i=y1;i<y2;i++){
" Q- T! ^, G) e goto_xy(j,i); `! B8 y6 c5 r* I) n9 Z6 o+ p; v' I
putchar(' ');$ V X' w- t; a
delay(10);5 u; W6 q3 z* O6 f
}, M/ G, D: J( A5 Z
}1 W5 g$ r8 z# w
/******************设置光标子函数******************/( T E4 E5 F9 j* i3 E8 F
' N, j$ p, c3 P$ f7 c1 m9 u" \& B3 F6 @6 E
void goto_xy(int x,int y)
' d8 r( j8 [( ^; ?. c5 E {! S2 _3 |% y, w, q% S
union REGS r;
4 v7 W" f c2 [/ }& B r.h.ah=2;
8 K$ `+ }) T& z" c6 ~ r.h.dl=y;
6 L4 j, U R: Q& f9 }& v% D r.h.dh=x;
0 a* z: |. x2 g4 X' h r.h.bh=0;9 Q; {0 {8 f/ D9 g: ^# k
int86(0x10,&r,&r);
' g) X. u# p8 j- D& M2 o8 l. Q- ] }1 R5 Z0 M7 o F8 G$ y' v, r+ Y9 G
4 i% K- @: Z& p6 _& ]; m' [6 @
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
# s0 Q$ m, [/ t0 R$ p$ F+ v4 k( i( t8 o7 @& y/ ?2 W; j3 b
void puta(void)7 o5 U1 |* ?! X# b7 t0 S$ D$ X
{
# b0 A# t. y, P' J# \ int i,j;
) C% l3 _3 k+ B* y. g: C( Y for(i=0;i<24;i++){1 a ~7 T) h/ C$ N3 J' L g
for(j=0;j<79;j++){
+ D1 i" l: f& C9 | goto_xy(i,j);+ G' p; X% e+ \+ V. w
printf("a");
4 {0 c! P8 j& f! Z( e" d; H }3 M' v7 Q3 V) W7 ?! x0 P
}+ t# c% j6 q7 F
} |
|