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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) E: N7 D! Y0 T0 [. `0 s" u) o
6 B' U5 \+ j- S. K I7 N+ }) t 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* ?2 r) S% S! A0 m7 \6 J4 A9 P! ^1 @. X
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# s9 g( ~$ h) X: h0 k 子函数及演示程序:% c! M8 f1 e7 ]& R0 `
- Q' {0 _7 u8 N3 c l5 t
#include<stdio.h>' v3 R }/ e3 Y6 L: r; S; ]% y( X
#include<dos.h>( P0 ~. Q' s2 R9 q |0 |
#include<conio.h>
+ X& g- q+ [, V/ A7 p9 @/ S3 x& u0 _1 d
void goto_xy(int x,int y);
) {$ }! m& M: y; T6 A! S+ O, v: n void dcls(int x1,int x2,int y1,int y2);1 |) a/ }5 }) ?% @: x% I
void bcls(int x1,int x2,int y1,int y2);
, p5 v; V" m* G3 a! C* Q" ~ void kcls(int x1,int x2,int y1,int y2);3 u2 @+ r/ i) k/ L" [
void recls(int x1,int x2,int y1,int y2);
/ }' u! y* o7 y. C* r/ ] void zcls(int x1,int x2,int y1,int y2);
3 z# @3 H K: J, F* B7 q0 w5 H void puta(void);
0 U) O# K5 q E0 u+ x+ n6 e
0 I) U( d! K& I" l' U+ }1 m. f* m2 G5 _8 p. {( T3 z) F
/*--------------演示程序---------------------*/( j3 A( W" B% C
main()" o6 f% }- l$ u! `# {" k9 q, o2 ^
{
' [ l7 @* N2 d4 h. n4 u puta();
" H: B; h# c/ y" w! @( k) f- n/ k getch();! \6 j" c6 U* e" @4 V! x
dcls(0,4,0,79);
) C2 B. r# N9 s' l% C: w getch();7 |5 E& u" a$ f7 x6 G8 Z
puta();
$ A% H5 K9 r6 e3 L/ y4 G- } getch();
4 A% Q w8 ]" F( H bcls(0,25,0,79);
/ l, c% W0 ?( G# Q* L; |& d" h5 N getch();: w0 E/ O& \) ~% m: V- Y; Q
puta();
% c3 d, G7 W0 ~7 W: u( J O getch();
$ X( X; |5 Z5 r zcls(0,25,0,79);. p7 l/ I1 T* y7 z' }
getch();
/ R1 Z7 N/ }0 S- y5 W5 ?: F$ C }- [7 K' ?+ E. s* U1 q0 B/ ]1 A
/*********center clear screen(中心清屏)***********/" M; N8 ?8 _* u$ V7 c
void zcls(int x1,int x2,int y1,int y2)+ @# g; ]8 t6 y/ x/ ]
{
9 b J+ B0 Y, {! G e int x00,y00,x0,y0,i,d;
Y" H6 B' N$ N$ L7 B5 m# S/ t if((y2-y1)>(x2-x1)){& [# c( Y$ |) F
d=(x2-x1)/2;% _' y- ]% d; J1 P7 P
x0=(x1+x2)/2;
: K/ x, A2 l# ]8 G8 J0 T y0=y1+d;
$ m' T+ E- k3 J# J1 p1 [5 X- b5 D y00=y2-d;
% R% F0 H* ^ E& C$ j8 ^4 n for(i=0;i<(d+1);i++)
7 j5 z& V$ J7 V# G! a recls((x0-i),(x00+i),(y0-i),(y00+i));
z' m/ N$ Y4 | delay(10);
- O$ W% P4 C. r }
2 Y$ W2 E' b7 n# w0 V. f1 k else{
, O8 D7 K1 X/ a d=(y2-y1)/2;# e; _9 t9 U( K) V3 b# U
y0=(y1+y2)/2;$ t- d0 p+ {% e* n5 T2 L: E
x0=x1+d;
8 l* y/ {* o" s: l x00=x2-d;
8 O/ v0 |# j% \$ w) k! F for(i=0;i<d+1;i++)0 j: k* F' q& J9 `
recls(x0-i,x00+i,y0-i,y00+i);: Q& g. j9 |1 m$ Y' ~' B
delay(10);
+ `3 E6 _5 O, ~' F3 l }
' h. s+ O# G. z" M1 W; H }( f$ t+ h/ Y; S' b
. b x; }* x/ \ /************* clear rectangle side(矩形边清屏)***********************/2 J& H* K: z& W) `/ G3 I
2 C0 O' W, ?+ d6 n/ Y
void recls(int x1,int x2,int y1,int y2)# |* i, r: F. ^! I0 o
{; s( `) J) r- S$ |
int i,j;7 I7 m) Q2 w" b% |) I' ^ i) o
for(i=y1;i<y2;i++){
9 V, Y( e9 K$ L4 q7 S% N goto_xy(x1,i);
/ c7 H1 o+ T$ W" G& C/ W3 K putchar(' ');& h% O v' w- b, N: v" t
goto_xy(x2,i);
# J' I$ E2 Z. I# K) x putchar(' ');
8 o# m6 w4 F: D* e delay(10);
, o1 ?, a, V6 I7 c! o }
3 u2 G' \, ^) _4 a for(j=x1;j<x2;j++){" U6 g( i* J L: w( j3 f
goto_xy(i,y1); G- u9 F$ S2 {. x
putchar(' ');
. R# o% E4 j: p# p goto_xy(j,y2);
! j8 p: C) ~( i) ^ putchar(' ');
; d* ~/ ]2 d; N Y delay(10);
7 v: x- _) h3 E: s& N3 L }. `. H3 h; d# e3 @5 b9 h3 r
}
4 K( d {, c6 ?# E) z4 `4 j3 B /******************open screen clear(开屏式清屏)*********************/! F- D2 W. O- q5 U) Y5 |4 o1 l3 r
b+ m+ c S6 W# I" } void kcls(int x1,int x2,int y1,int y2)
% y% V+ U; j0 y9 Z {
; T& _8 S& J- F' O& _3 [. R, v- P int t,s,i,j;1 h, ^! f/ g( |& C8 y/ f9 `9 P# Y, f
t=s=(y1+y2)/2;$ {; X3 S9 j' \9 e3 f! y2 \* O. P
for(;t<=y2;t++,s--)
/ F* p7 ?- P, S- N1 ^ for(j=x1;j<x2;j++){' D& B. U7 d e( N1 |2 a
goto_xy(j,t);
2 i% E. c+ u6 Z1 a- N putchar(' ');
( W) I6 T8 V7 G) {) U goto_xy(j,s); L% o) f: n8 n
putchar(' ');
, I1 q$ B! ?* k) v' p delay(10);1 ]$ G& g9 A, v, g2 s
}
* O! W& I1 J( a. E }" @0 ~8 R; |2 h6 n5 [3 [ P
/*****************close screen clear*****闭幕式清屏*******************/
1 K) Z _; K' W0 D) n- o( j8 S+ j8 p. _2 Q. ]
void bcls(int x1,int x2,int y1,int y2)
! C/ k8 W+ c- F0 E7 j {# i K" o5 W+ o/ z
int t,s,j;
+ G+ e/ p9 Z8 w$ z$ b t=y1;$ W/ D1 d6 y+ p, T" L( @$ n G6 a
s=y2;
2 t( ~/ L d5 [6 O( E0 K for(t=y1;t<(y1+y2)/2;t++,s--)" y$ s& }" @) j! V, O
for(j=x1;j<x2;j++){
0 W6 H" L4 p, P# {7 T; k* B1 H goto_xy(j,t);
5 n( ` o' h- U putchar(' ');. P2 q. D% b8 G3 v9 q
goto_xy(j,s); A# [: M: B- X2 m# ~% H
putchar(' ');
/ m1 {5 J( N+ s' O0 L5 o delay(10);
; M- ^6 |3 q- T b$ U }) s/ i1 n$ v9 j- a- y' n
}4 S F" m* k8 _: V8 z3 C8 K# I" T
/******************bottom screen clear(自下清屏)********************/
- o& }) o; ^: m" `# o( w
+ u: w( U# P/ G% }" Y void dcls(int x1,int x2,int y1,int y2)
! S, e. O4 h, T: H4 E8 s {
* x2 S0 X8 l8 X* Z9 m0 S int t,s,j,i;
# m5 d8 B6 @1 a! l) L, u t=s=(y1+y2)/2;( v) @# r" b# G5 g, f2 k$ k% s
for(j=x2;j>x1;j--)
( S5 L5 j/ ]5 {- {: C U for(i=y1;i<y2;i++){
8 t; }1 u1 u S5 s goto_xy(j,i);
% g( e5 @% k! W- T' O: C: } putchar(' ');
; p' Y: H4 |" u: @ delay(10);- Z9 l/ y# u! ~0 \7 x
}
& |3 A' I' ]0 Z' _* X9 M }2 \* D9 T& x! `/ s! ~
/******************设置光标子函数******************/
: F( r; m4 }% s0 w; ]
7 j* N2 F' u$ q* V, v void goto_xy(int x,int y)
; D, n; |5 G9 K+ y* u {. A0 M' w9 a- b6 i% r3 O
union REGS r;" d5 l B9 T/ V; a8 [5 \; f
r.h.ah=2;* a( W1 E0 c7 m1 l2 K
r.h.dl=y;
. D5 u6 V$ R5 }" a, r" | r.h.dh=x;" e* M) f) ?' m
r.h.bh=0;0 y+ @# T+ W7 x) i" T6 Y
int86(0x10,&r,&r);
) g, }5 ?( _6 R5 i3 L5 H }
5 A: M" `' y0 G7 v e F' q* e; z8 q: }0 ?$ {" x
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
; G; K0 Q- y! v, C5 ?% A. c; v: f
- p% t9 k/ \2 O) ^ m' `- I void puta(void)
7 `) {7 W/ d4 k1 ^: H3 W {2 q+ ]& ?, t5 x0 M0 K: B
int i,j;5 H5 A7 {( A6 F: a- m
for(i=0;i<24;i++){
- X" p" u# ~* B: P% p+ `. [ for(j=0;j<79;j++){, `3 D7 f- i/ T: Q/ {& a; M
goto_xy(i,j);
; \) y! b* L' [$ b( @$ ] printf("a");- Q3 k& ~! \: \: @
} m4 `6 |4 f0 S0 r' L$ L. l! O$ j
}/ A0 w1 F. @8 h/ J9 k- B
} |
|