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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( P8 e9 u8 `% x4 _9 @3 m h8 V$ X: m
- \. U+ v& ^ }2 J; E8 P) L+ P2 \ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& p: V% F( Y' X8 }3 D+ a# a
0 O' H7 I% F4 R/ x* L' \ a 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 P+ j ?) m; K' @ 子函数及演示程序:0 C4 s' Y' y- G4 b
# x, Z2 v. C7 R5 A2 ?
#include<stdio.h>
% |& B/ Q/ ^5 a7 m #include<dos.h>$ t$ o. p: v2 K$ J. Z
#include<conio.h>
$ x8 R$ h6 ]( z1 _ @# u: ^& L) `
8 ^8 R; N: i# o/ V5 V% X void goto_xy(int x,int y);( [; k4 Q, Y: X. w1 e5 Q2 w/ v7 H' w
void dcls(int x1,int x2,int y1,int y2);
4 ~1 P( E5 f) f/ E void bcls(int x1,int x2,int y1,int y2);
8 ?( }0 X4 }/ G0 l) y$ {7 Z6 c) J; g void kcls(int x1,int x2,int y1,int y2);
0 |* k! @7 P8 Y5 R- Q. [ void recls(int x1,int x2,int y1,int y2);6 |" K' h( ]; M& Y& _6 v$ ]
void zcls(int x1,int x2,int y1,int y2);
" H5 [) F4 P1 h' V9 O void puta(void);/ S8 q7 u7 d5 w5 i
9 T. h$ m0 a7 A+ r
- m) N1 P# P7 ]# r7 L7 O$ _
/*--------------演示程序---------------------*/
& ?$ ~$ ~* f4 P4 e% O main()8 T' T& ~7 R6 X9 z! h! H# k: R* X# x' z
{4 F8 F2 L) U* E+ k9 \
puta();* X8 L% f7 u" o0 P5 B v$ ]' ?. I
getch();
! G' T# c( ?/ P+ f& F dcls(0,4,0,79);
, U8 E! D+ A4 d/ ~9 H getch();
5 C9 I/ X6 c% L% [ puta();
: Y/ i, n) d0 g$ D t; b getch();
* h) ], l( F, ~* q3 f# r3 h bcls(0,25,0,79);; x5 S3 `. V. ~3 p, X, q5 X
getch();
) g; I: j8 a7 r% g8 r8 R puta();
) q ~& w3 L+ J8 C+ _ getch();
% c, H9 G6 z8 }- ]4 b# Q( b( s zcls(0,25,0,79);8 d# Q% i/ ?- Y6 R4 |. i* I1 I% b
getch();/ Q1 C0 l! k8 b4 a7 Q+ p3 a% c% [
}. w. G$ ^, h8 y+ z& ]$ y
/*********center clear screen(中心清屏)***********/3 q; _6 [* T& T
void zcls(int x1,int x2,int y1,int y2)9 @5 Z( N7 M: Q4 S# r+ t' C
{3 l0 e. K% G9 a! O! J' l$ a
int x00,y00,x0,y0,i,d;4 p2 k7 E: z" \
if((y2-y1)>(x2-x1)){
; n, [2 z9 ~3 w8 X d=(x2-x1)/2;% L6 b; u: {2 d" u+ W
x0=(x1+x2)/2;% K; m+ h9 f( c
y0=y1+d;) {% {: P& v; E) g1 }" I7 F
y00=y2-d;! \% d% l+ K' w* ^* j4 C+ F
for(i=0;i<(d+1);i++)/ E7 g* ~7 Z. D, e
recls((x0-i),(x00+i),(y0-i),(y00+i));6 N0 H$ z1 G3 W* R! o% G, I
delay(10);+ ]7 K& v" [ |: g$ V- o; c5 f
}& F$ g' V' ^; U! h, E* \
else{
% G/ P' G, o" w6 c9 s9 I d=(y2-y1)/2; [$ i$ p+ E# ]" ^4 t
y0=(y1+y2)/2;
" e4 E( `3 `, p4 g4 `1 X1 q2 w) S x0=x1+d;
* B1 A8 P0 R, j: q# Z x00=x2-d;: m, Q3 p( Z! O) y
for(i=0;i<d+1;i++)
# h$ k& B; j3 t: X recls(x0-i,x00+i,y0-i,y00+i);
& W5 B! Z( R4 Y5 a b$ F/ R delay(10);) O+ L* K" G! r/ ~, s3 g
}
) n) A4 W4 Z9 x. u }
0 R( \, N0 j4 B
) Y, F% a! O$ t$ W" Z7 a9 G /************* clear rectangle side(矩形边清屏)***********************/* o+ b+ D( e! D' k0 c
; x# s8 d, d/ D; s5 C2 y
void recls(int x1,int x2,int y1,int y2)5 d, c1 R6 V& l9 q2 w; C) D# J& ?
{% ~. i( g3 l( \; w
int i,j;( b# i) w2 A0 O* E2 l9 I5 d
for(i=y1;i<y2;i++){
6 G) P3 ~% F8 a$ D% _# k' P. r! k goto_xy(x1,i);6 A5 o0 \+ W$ G+ g& B- ]
putchar(' ');
6 Q) \# T4 z+ i0 p. D. O; L7 ` goto_xy(x2,i);
4 z4 F+ ~5 d6 v putchar(' ');
! s g/ Z$ [, A7 E# U delay(10);
7 V# V8 `; U& |5 R7 F7 j1 |- l }
- P& k5 o9 `# S( {1 w9 L for(j=x1;j<x2;j++){+ U- H' \. U9 M. H
goto_xy(i,y1);
5 [" O0 J# |) H+ W putchar(' ');$ f" f+ a9 C X. `! C
goto_xy(j,y2);! k+ A( d; Q* b2 `' v
putchar(' ');
: ?& j y+ d6 k4 o* m% z delay(10);# g3 U. l* O! ~# B
}# T Z# G/ B2 ^+ L. [$ a3 I
}
3 z0 h4 v$ t" q: O /******************open screen clear(开屏式清屏)*********************/! {1 G2 N6 S% h1 N* K" Q
# r, c! Q: d4 c# H: e( w( o
void kcls(int x1,int x2,int y1,int y2)) h; k9 H. g" C
{
3 L8 \4 T. U- M# V6 o int t,s,i,j;
1 {! y& Y/ r, @ t=s=(y1+y2)/2;* ^" s; J* O0 t* n5 d( j+ U/ \8 u
for(;t<=y2;t++,s--)
8 P/ t: o1 _4 z/ ~: B& w) @ for(j=x1;j<x2;j++){: L- B3 e, Z' h: z# ^4 @
goto_xy(j,t);
( z! c, Z8 q) H: E) |( ~ putchar(' ');" U0 j$ L1 c' O- D$ Y
goto_xy(j,s);/ K6 L9 ]3 {7 t
putchar(' ');
7 S( R0 R9 T3 V1 l! ^ delay(10);' k5 B9 m+ r# Z& E+ u2 ~
}
# t; u1 b( m1 _ }
9 x, S9 K8 c; o0 D6 B1 X, {/ ^0 o, r" p /*****************close screen clear*****闭幕式清屏*******************/& Z* N9 W2 q2 C$ D% v- ~
' n2 F) F% M- a/ o5 S( B& w
void bcls(int x1,int x2,int y1,int y2)
* K/ A+ w2 ~: w9 b+ }3 h {* C( F0 ]- X; E9 J- H. ]0 o9 s
int t,s,j;! k: J3 ]5 S+ Z6 z
t=y1;, I- F' p# I% p2 n6 P. q
s=y2;" `# `7 `' p+ \/ V3 ?9 X
for(t=y1;t<(y1+y2)/2;t++,s--)
: }7 P2 |& t2 J$ l1 w for(j=x1;j<x2;j++){
( p6 P* C$ Q, D* Q9 R$ H6 q1 S goto_xy(j,t);
% V6 f" |9 D6 q0 j putchar(' ');
) _1 T& v# y3 C- _2 Y U3 E2 R+ a goto_xy(j,s);
1 g* V3 w, |7 o2 L( N5 C- E; N putchar(' ');+ m, p& V: y' W" V! c- h! y
delay(10);
( t x6 o. |; p }6 ~% K% {1 n( s" B' w4 v
}& C# S# o% q0 Q) i% i$ z
/******************bottom screen clear(自下清屏)********************/
! n$ P: X3 p2 ^" b9 _# V
. z9 v# k$ k2 E, v7 r$ _ void dcls(int x1,int x2,int y1,int y2)
5 a5 U" C& s+ l D2 t* M. Z' @ {" |9 d }, t2 d* x
int t,s,j,i;
( `2 i- H6 i& \% ~6 o" `' J! |3 W$ L t=s=(y1+y2)/2;+ ~3 \! g6 V1 n/ [) z
for(j=x2;j>x1;j--)
( U8 ~* o( G. X; w4 o for(i=y1;i<y2;i++){
3 ^3 J B. H, E goto_xy(j,i);
3 |6 \) |8 [, G1 U/ m: e# e putchar(' ');& `. ~3 b8 F0 Y
delay(10);( B( n" W! f- I6 Y$ F
}' e( s8 y O7 ?8 V# T; w$ W
}
- h8 x W5 u: h3 V- o. r /******************设置光标子函数******************/( ^7 a1 s9 ~1 _! i
6 p t! `) N3 j0 o2 ^/ k* r" C3 e- T
void goto_xy(int x,int y)
8 \. R1 i% u% i- p5 b {0 H9 J9 ]' Q, Q+ O7 q
union REGS r;$ m$ c2 L! b( F. d& v
r.h.ah=2;
2 k3 H5 q3 Z/ f2 w x( Y r.h.dl=y;
/ i( |' [ C2 \ r.h.dh=x;6 S8 v. ?# w# C9 @# v) p, y9 h5 n( ]+ X
r.h.bh=0;& ^7 M+ D0 E+ C9 X
int86(0x10,&r,&r);3 ^! O0 q( X5 e) ^) L+ `
}
5 `! \8 m8 ^4 ]4 ], |" z
. W. @' t4 z: _- P6 m F( C /**********************在屏幕上打出一连串的a字母用于演示程序******************/2 H$ }8 ~2 p+ v- X9 K- k1 R$ q
9 L2 P' b- m! c4 v
void puta(void)
3 P6 R9 U- T4 O# A8 f ~3 M {
, U% A3 e4 F5 O s int i,j;8 q, @& g' A% ?( S/ d
for(i=0;i<24;i++){- J3 M7 K1 t3 x J2 z& s/ O
for(j=0;j<79;j++){4 C4 N2 j _; ?- `8 S
goto_xy(i,j);4 y% F5 `5 l, `! ~* ?' ^
printf("a");
( {3 }2 A8 M9 S$ A" O r# M }
; f2 s7 m; Q4 `$ \( \" d }* U1 x2 |# J9 b* T
} |
|