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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 m8 K- n7 H: I! h' i( n! A; e+ v
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里( X! r p: q( _9 L0 T
) y; h: I; z; E% j9 D" z ~' N9 J 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# F- c5 h9 s8 f! T 子函数及演示程序:* Q( l/ y7 }. }) ?; M+ z$ ?
3 E9 X' H1 \( x# w+ j8 U+ c' ~6 }- c
#include<stdio.h>
C% a9 i5 B3 c7 d #include<dos.h>4 u2 E; D0 j8 B" a4 K; ~2 y
#include<conio.h>3 j# y$ T& D0 _; c9 U
; {8 T: @) w' C& U% W5 x
void goto_xy(int x,int y);% o, T- S! u- h9 o' f) n4 U, X6 z
void dcls(int x1,int x2,int y1,int y2);# G% B% A6 k) c' y- L7 `
void bcls(int x1,int x2,int y1,int y2);
$ |6 J7 b) Z3 R* j! ]; `. R void kcls(int x1,int x2,int y1,int y2);
. x% d) V1 d* ?4 H7 C R void recls(int x1,int x2,int y1,int y2);
0 o1 }' _3 D/ V) r) _ void zcls(int x1,int x2,int y1,int y2);
5 D' h# z# y$ P! w/ E! b# H void puta(void);
- w9 u P( X5 z1 z; k$ ]; m; B y: x1 v- V$ Z8 T: E! J
# v; h! `! g: e$ [ s4 ^( F* U' S6 V! Q
/*--------------演示程序---------------------*/5 B" l7 G+ @4 X% n: `) H. Z3 l
main()) p: q2 M$ U$ m( s" b- r7 P0 w- i4 \
{- x. L o" S' }5 o/ T7 ~; s% M
puta();
/ _9 q. r& l5 g4 }- r4 j5 H) \9 _ getch();- o Y1 \0 t d4 x, z% ` Z q
dcls(0,4,0,79);
2 Q+ X, I( W" t z4 j8 ~9 ] getch();
9 @- l- }+ f* \, D puta();0 v; M1 n9 [1 v$ q) d8 o
getch();
6 k; F! L& C& j8 i! v0 h bcls(0,25,0,79);
@1 }6 _3 @: W getch();" n4 q+ _) r8 d' x3 o- i L' h, K! P
puta();% p# V; N% T" B
getch();
5 W+ L+ o) m" m9 V zcls(0,25,0,79);, ? T5 j4 s& b# ]( w
getch();' [. E+ C' @% K3 v
}
" D* o/ T2 P( Q! z /*********center clear screen(中心清屏)***********/
& G2 I7 }; w0 ?6 L9 {. @ void zcls(int x1,int x2,int y1,int y2)
. K+ z% C U6 [3 k7 D( [$ y i {6 f+ i; s b# f( ?- j; H
int x00,y00,x0,y0,i,d;' X E1 G7 Q7 v
if((y2-y1)>(x2-x1)){
- z9 ^, P' E- x9 @7 @ d=(x2-x1)/2;2 i8 ]% X1 o, h
x0=(x1+x2)/2;: }% {6 [; U7 h: s/ h+ p) Y
y0=y1+d;
@" _' G( a* f! `9 F0 \ y00=y2-d;& \2 `) c; w) O3 T5 d0 e
for(i=0;i<(d+1);i++)( L) @$ F+ s' l6 P, s5 e: P
recls((x0-i),(x00+i),(y0-i),(y00+i));- h/ w# v- m( m& ?1 a1 I: A, z
delay(10);; d S/ D( Q7 Z, q T! z ?
}4 C+ {- {! H) P2 \4 I) G2 P$ D
else{4 t6 H9 F" Q1 @+ r* r. _
d=(y2-y1)/2;
$ O% _3 S. I; G/ w y0=(y1+y2)/2;
9 [0 z0 o. V, @# m( d4 y x0=x1+d;
1 r0 ^1 K; Z7 s5 r% i x00=x2-d;4 ^3 t' Y( W. o9 z% b/ [( `
for(i=0;i<d+1;i++)0 Y$ k4 Y( n' P* Y* C X0 ?. s
recls(x0-i,x00+i,y0-i,y00+i);
; q3 P$ Q' K( [4 v: X$ c delay(10);4 O5 D1 ^& O7 L( t
}
% I( l$ d: @6 q& G7 S/ `, Y6 [, f }
) W. X' o! g# |5 ]( \3 S5 \* g
% R" U( f1 w% C; B9 _ /************* clear rectangle side(矩形边清屏)***********************/) L L3 E5 p, E7 i N
; X/ D8 \. u0 V" w; y5 K void recls(int x1,int x2,int y1,int y2)
: v4 Q2 l" v8 J {' J# b: E3 ~$ U! x
int i,j;
, ?. V+ G+ p' W. X1 F( L0 t7 s for(i=y1;i<y2;i++){
; M9 l4 h! F; s/ H goto_xy(x1,i);9 a% U4 ]# j* \/ U
putchar(' '); `. s" ]6 Y3 ^: b# c3 K" Y
goto_xy(x2,i);2 l) D5 g- o" V3 Z3 o
putchar(' ');
4 q0 G# ?- `! x3 ~, {3 Y delay(10);
% z% L1 v" b/ X }
1 p1 w7 f) B/ \0 q for(j=x1;j<x2;j++){* b# o: o! C5 k. X& B9 t4 a! t) d
goto_xy(i,y1);+ T( x+ @& W5 q2 y4 \ n& D
putchar(' ');
9 {8 w# P7 |# A" O goto_xy(j,y2);
e6 `! ]# [# Y4 p/ t/ s3 G4 k putchar(' ');. q3 S, b" }9 N! G/ q
delay(10);; p" b7 n" _ _! y! \
}
! I/ U" X3 s% t9 d j* Y1 f }
3 f; T, D. K0 m" J7 K& y /******************open screen clear(开屏式清屏)*********************/
/ ?) Y8 q5 G0 q8 W
3 @ r7 }: W* z6 S1 D- c void kcls(int x1,int x2,int y1,int y2)" A6 s4 P, }9 l- G7 `" |
{
5 @( y* M- j) m7 h int t,s,i,j;% z) i8 q. Y; i- ^
t=s=(y1+y2)/2;
; q* O1 k. ]3 ?7 U for(;t<=y2;t++,s--)
7 q6 c/ X! V2 \! ^+ q3 A% l for(j=x1;j<x2;j++){
X. d8 Q) w/ Y. h& a3 j goto_xy(j,t);% Q( I9 p5 o% R+ S: |, j
putchar(' ');
/ f/ a9 s2 J) |) \' f8 y goto_xy(j,s);
' V5 ^6 q* q: n. L |& B- T putchar(' ');8 ]4 t5 i4 B! Z. z
delay(10);
( R* B2 x4 I8 E6 n' {9 P Q1 l5 C }
+ Q) u* F" d' i. Q0 ` }+ x: o. I5 d$ R
/*****************close screen clear*****闭幕式清屏*******************/
6 D2 R# p8 P- l( p0 k" c# x& b, G* L; i' S l
void bcls(int x1,int x2,int y1,int y2)
$ V) `- D: \% r/ B- H8 ?9 B {
0 Z: g, W! c/ b( D2 }: s E9 s1 @ int t,s,j;
* n: n: }0 X8 e4 h9 e t=y1;
9 l* C* k% i" d0 H; Z' m s=y2;
: x1 R! @$ @* X& H1 i for(t=y1;t<(y1+y2)/2;t++,s--)6 K& n$ {$ r9 M- C4 u9 W3 `% @# l% B
for(j=x1;j<x2;j++){! J* T1 v4 S W* P: r5 J
goto_xy(j,t);
+ I9 I# [; U* D' d putchar(' ');
( t5 I0 T6 r0 D' [' x goto_xy(j,s);* N- h7 N4 S% X& ~$ {2 o. A
putchar(' ');- h# j1 O) y+ a$ X
delay(10);
1 K( J, r2 T: i) l1 N) Q } b2 b% ?0 |3 w) W: W/ f
}, Q' q3 ]( S( |/ h1 P A% C
/******************bottom screen clear(自下清屏)********************/
9 _) a! @( m: I: x$ [7 X# i+ S; b6 k: d" }) Y+ J4 O% S
void dcls(int x1,int x2,int y1,int y2)
& \" @$ x7 f; X, }7 g0 v8 S {. I# b* S) r/ @3 o
int t,s,j,i;
4 Q1 c& j U6 `3 h. { t=s=(y1+y2)/2;
- p8 L- }- n! L; e6 ` for(j=x2;j>x1;j--)
2 T! K6 q' C: D3 G% M1 ~ for(i=y1;i<y2;i++){
) I9 v8 S! _5 d9 y goto_xy(j,i);1 ?( d% C( g0 V- {/ H8 J7 X4 D# o
putchar(' ');
( s P5 ~+ \/ z2 u$ D M) _ delay(10);
% b3 K5 ]3 P- {. D3 k }
- U3 }) A! a5 K9 K# g }
) C' m# E1 m& J# Z$ T7 p /******************设置光标子函数******************/
$ z; i% H* w+ g* A
; G# }8 c0 b/ [ void goto_xy(int x,int y)
# V* i$ H: `; }6 A0 g4 x- R' p% @. S {
4 h, g2 v1 q9 x, v. ^ union REGS r;
/ l; f( q+ R7 F. [& U# m r.h.ah=2;
- g4 W [) \3 A9 y0 R r.h.dl=y;
4 k. ]& `2 ?# l2 b: M r.h.dh=x;
; B% F, D. n! m9 r1 x6 M r.h.bh=0;" x$ O- E8 e+ Y9 C) a8 H8 E
int86(0x10,&r,&r);6 o$ f8 M1 |- _" x- M9 h
}# v3 B, Z* D% v) C9 o: d
0 x- X" r" `9 ^/ b( o /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 l4 l. f4 Y6 a! z( R' O0 p9 U0 a0 k3 p, F+ e
void puta(void)
6 L* x" U4 H9 s) `" E9 k/ Z/ R' ^( u {
* O. v) b* \/ [+ V! Q" }. u' Z int i,j;' c' W& d7 k4 j5 I9 C
for(i=0;i<24;i++){* C0 ^- P! U' j9 B7 I
for(j=0;j<79;j++){
8 w& L2 q# F- W6 F- R1 H goto_xy(i,j);
. q% Y! |; B a' }8 o printf("a");* s7 L: b* M; ~* H4 ^
} D6 ^+ y# C+ N3 p
}
/ O7 D( S- i) ~* F5 Q( q( N6 N8 c } |
|