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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ~. k( d$ E5 \% J* o9 _, a0 X0 y, s; D1 c* B
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 B3 D% @6 |& N, A
' Z9 Y& G( O/ G5 l; q 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# l3 X9 }: s' P$ a& c2 o 子函数及演示程序:
- N+ P5 X p5 N7 j$ E) z$ w& n7 J/ E% i- f0 U0 P% h9 A+ K
#include<stdio.h>
& j9 y- |2 b( \* ]8 i #include<dos.h>
6 K' Y+ L5 |, d, m #include<conio.h># b0 ?: N1 g' n8 w
/ P! z. H+ ^* D* S4 {5 c! [, C
void goto_xy(int x,int y);
, j& \6 V: i0 Q' u( f/ ^ void dcls(int x1,int x2,int y1,int y2);5 U, R4 X: C- D7 @
void bcls(int x1,int x2,int y1,int y2);
) O7 [8 L- v( Q. w9 k8 x void kcls(int x1,int x2,int y1,int y2);! v) ~$ P/ g! q9 @* i1 Q* q
void recls(int x1,int x2,int y1,int y2);% X, x0 r6 o8 F
void zcls(int x1,int x2,int y1,int y2);
4 ?1 n$ e5 h' ~1 u e/ g void puta(void);
8 X3 H" z3 U$ w9 H
, M! v0 L3 c/ l8 U- a
& i- C% M. I; z4 c1 b /*--------------演示程序---------------------*/% k5 j( B- U: H( e( f. ]
main()
, b; y7 N/ r5 B! @( B {3 e* p/ L( |% d9 J8 F2 o7 c' F; ~
puta();
: w8 m# t/ k+ s1 g. Q$ ?! A getch();; m; ?4 r# t3 ^
dcls(0,4,0,79); D& ^7 J c6 d
getch();
1 a" D" H3 f. Y7 I9 Z' v/ D puta();1 O% o ^# b# w
getch();% [! o, R j/ R* @, M+ z- ~( f
bcls(0,25,0,79);3 p1 e7 s- K9 |7 g
getch();: D' ~& o. n/ ?% t
puta();; D* A) V+ K, W: T3 T
getch();8 S& @/ V _% m" r% Q/ l
zcls(0,25,0,79);
& N M7 ]1 n& E getch();
& z7 C/ D: G8 X: u' ?2 x }6 v1 W6 U2 X. n3 Y
/*********center clear screen(中心清屏)***********/# |) @7 O! M: |$ N
void zcls(int x1,int x2,int y1,int y2)
* e. n2 i) M, X/ \$ O. o {/ z* q, P& l+ h- b
int x00,y00,x0,y0,i,d;! ^0 m( `; [, s% [( S% X0 h
if((y2-y1)>(x2-x1)){7 J w! ?: |8 b- \2 g2 K
d=(x2-x1)/2;* J5 U- ?2 q, w, R7 H, `# {
x0=(x1+x2)/2;
* x, L X, z* _& k: O0 r" Y y0=y1+d;. t. S1 ^1 d0 V2 s: W4 a
y00=y2-d;
3 Z p) f; S L for(i=0;i<(d+1);i++)
) Z' m2 D" [( \ G% S recls((x0-i),(x00+i),(y0-i),(y00+i));
( B2 X! c' k5 ~8 J; A delay(10);
" N$ C0 c/ S% T% H# U; S }
2 @3 y- {( X3 k8 j* P# l" ~ else{
: Z E" G6 y ^3 O d=(y2-y1)/2;. k6 Q g5 g3 A2 T4 ]
y0=(y1+y2)/2;
$ O2 p8 ?; T: O( [! S x0=x1+d;
4 s( m) V" f$ X5 R& a; j9 S x00=x2-d;1 ]" b5 y; m5 ]2 d8 Z7 r5 ^9 }
for(i=0;i<d+1;i++)
- u8 B0 \* |, d$ n8 H+ D z: W9 ` recls(x0-i,x00+i,y0-i,y00+i); @) B& X% ?( K) _. `
delay(10);
: x: i! D$ Y2 |# s/ h9 A }
. T' h. K# ~' K }
. g9 \" n7 m1 b o6 D3 H1 e* c+ d3 z% G2 r% Y! e# |' a! z; H
/************* clear rectangle side(矩形边清屏)***********************/& h; |% ?5 A7 @4 {/ `0 f% y/ S
# q8 K% \7 v% d% ]4 l( r9 U
void recls(int x1,int x2,int y1,int y2)
! G$ [6 x) P2 Z& q0 j) b+ e {* v; Z& @" y2 ^ U# Q$ I
int i,j;
- [4 j# u, B: ^( r( J for(i=y1;i<y2;i++){
6 A% K( g, Z6 N- r/ s goto_xy(x1,i);5 V: @" g- r9 C
putchar(' ');: I! P* i a; B9 P7 e3 z9 }7 Z9 j
goto_xy(x2,i);
1 g! A5 o0 C- s+ u putchar(' ');% r* l0 Z2 Q; R+ J% Q+ \5 Z8 e
delay(10);# W, ~. r1 k4 d; ]# }
}
* _8 |1 h- p0 J. Z M for(j=x1;j<x2;j++){
2 M* ?& ^6 \) P3 i. Y% h goto_xy(i,y1);* a/ J" G% ~! k7 A" w0 H l
putchar(' ');
8 h$ G' Y: Z. k- _* F6 ^3 Z( s goto_xy(j,y2);- k9 _3 h7 m( G4 j
putchar(' ');
# o$ J% l) x' D1 I/ N0 j: q delay(10);
2 v3 h6 y) n Q }' z4 y0 y& W* `' }0 j8 a
}# G0 o- \* ]9 F$ P
/******************open screen clear(开屏式清屏)*********************/5 {# Q3 M* b. R/ X& S. \
: w: g! ] q! k/ b; V
void kcls(int x1,int x2,int y1,int y2) [# X0 k4 T- V, v8 M
{
% ?4 ^/ F$ q- _8 U& S$ _" r int t,s,i,j;
' h1 ^- d* A9 o/ N t=s=(y1+y2)/2;
8 x v- ?# }2 z. e3 E for(;t<=y2;t++,s--)) Q. h7 W: g2 x/ \7 C+ g+ g
for(j=x1;j<x2;j++){
0 R* }+ T' `4 g: q2 R goto_xy(j,t);
; q- K c# [, l+ Q" \! m4 v putchar(' ');
( }: c( z" c. v! S9 p" M goto_xy(j,s);
/ `# w8 i1 O+ ?: b7 L. p* s putchar(' ');. {& A. V Y! j4 @. Z1 i
delay(10);
, [5 w% `* K9 x" ?, k }
7 G; j6 Y1 E3 C8 } }$ Z8 g, b7 n h* ?" _9 P1 Z+ m
/*****************close screen clear*****闭幕式清屏*******************/
3 k5 h7 u9 K' s9 \/ |
; ^/ D" h$ Q2 j f& p' C" y X" h+ o void bcls(int x1,int x2,int y1,int y2): D. g, s' v( l6 K. @
{
7 t; {# |. y& C$ k. i int t,s,j;$ ~$ S! L) E. m/ X. [" ]9 P+ w4 I
t=y1;4 y: ]2 U. W+ w1 V! Z* ]
s=y2;2 @* z% t( D9 z
for(t=y1;t<(y1+y2)/2;t++,s--)
! p$ _6 s( u2 s2 e7 O1 S8 S* W for(j=x1;j<x2;j++){
" f! D. M. A9 H goto_xy(j,t);
" R2 s0 i, ?+ `" u |7 d$ ^ putchar(' ');0 E5 r) P: u4 |% f: R# {! \8 w+ g
goto_xy(j,s);% Q. u3 j `" r3 Z5 p# X
putchar(' ');
( Q, G% r# h8 w, H$ N delay(10);
& q) {: j2 Z$ Q& J4 R }& h- Z. r/ ]1 Z G% |
}
0 L7 t) J i; W+ K3 e& y1 b9 T /******************bottom screen clear(自下清屏)********************/7 y# [4 c L# ?* y% ^
3 D" l# [( @% {- ?! B9 q( U7 Z2 t
void dcls(int x1,int x2,int y1,int y2)% Z! R- x# l$ i5 Y2 k, C5 A# a
{2 c# ?' I* z( e, G* I8 }" c
int t,s,j,i;8 I) Z. {: F3 n" F3 Z9 w% t
t=s=(y1+y2)/2;
$ M) _+ h3 I b, e, s$ Q$ ^ for(j=x2;j>x1;j--)- }- F5 u; k( _3 N" \5 M
for(i=y1;i<y2;i++){. t: Q7 h; g8 X
goto_xy(j,i); F# I3 h0 u. S
putchar(' ');
6 ^9 {7 {7 V2 R, U# V# j& S% W, Z X delay(10);/ K O5 D3 Y! T
}0 _% B7 \) ^8 X4 q/ g; k5 G8 k9 ?
}, [8 M) d/ X0 S
/******************设置光标子函数******************/% o4 X5 [7 ?/ E+ S, j
. x/ j3 u& F* x4 |" z7 D* y void goto_xy(int x,int y)# I, \7 @9 Z# H9 ]
{7 W( i+ M) g/ \, o' z `
union REGS r;
O& `8 p% d1 q/ o" V5 ~ r.h.ah=2;; D, T6 w% ?* M
r.h.dl=y;8 B2 `) s& i1 P
r.h.dh=x;
* |# v. h0 ]/ V, o8 d% T; p% ~ r.h.bh=0;
0 n7 |* _2 q9 ^ int86(0x10,&r,&r);% W2 ^" q3 x1 b5 M# b/ `
}1 [4 J# r9 R }/ W$ H, p
/ J2 T7 t/ N @( f1 t% K /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ G, w* ~5 ^% _9 B0 n1 T% h/ ~* P. ?* o" G4 P% ~ l, I
void puta(void)
* p4 l1 C" m8 ~8 g( R' l# t! d) i {
, X. R. f8 H! D- C, Y* u+ | int i,j;
1 d* ?- x9 z& |+ ^ for(i=0;i<24;i++){
" T( H# k9 a' w: z for(j=0;j<79;j++){4 K8 ^5 l8 z4 K
goto_xy(i,j);# g( k, N2 p* G0 d$ C8 N
printf("a");# q2 ]/ t& `% e! L7 p
}( Y* t2 D- N4 v4 c7 N
}* ^, u5 w# ^7 _$ J8 D- c0 Q
} |
|