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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,0 g" c8 e! G, b! ?+ I. g0 y! D" i
$ s, x9 B. k- M/ [8 w9 V
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
+ y! H: S0 g5 ~0 z' Z4 O; r5 j% |% d( ]' a& z2 I
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 M7 e* V. I! Z1 f
子函数及演示程序:* n& |8 v/ c9 T+ {1 ~3 w
' {0 y; @5 ~! v
#include<stdio.h>
`' ^4 [/ j8 G7 x" b( |1 @ #include<dos.h>
7 j" S9 M9 V1 f: _( q3 X2 o #include<conio.h>
. T5 P, v5 T* p2 `+ T3 b7 _3 c7 k
void goto_xy(int x,int y);. u) t8 {) y, w8 P
void dcls(int x1,int x2,int y1,int y2);
5 V/ C$ v( G+ h/ Q: @ void bcls(int x1,int x2,int y1,int y2);
0 `4 y+ a& D" m: \8 R void kcls(int x1,int x2,int y1,int y2);
4 @& {9 O5 C9 D8 a9 E/ m+ L+ d; ?; z void recls(int x1,int x2,int y1,int y2);9 @' \- Z9 f* s* i; f
void zcls(int x1,int x2,int y1,int y2);6 C3 D0 z+ C1 T4 S
void puta(void);! ]7 \ B7 |+ \1 J1 k4 `4 E3 n, L
; l: ], T2 m" B: }
; l! \+ H$ w2 q' g, q& c0 P2 @ /*--------------演示程序---------------------*/4 h5 T3 ?5 y5 H( D& |; A! n4 Y
main()) m: [$ \, r$ @. \' m" c2 @% M
{
% u3 [. V) ~! }8 m. A puta();6 o' o5 S: \, U+ K( ~! a) i2 S
getch();% l) j" y5 H* X7 I! x+ y0 |
dcls(0,4,0,79);$ u- h9 `* t1 Z, i
getch();
! S" _ [0 ?# O5 g9 q Q puta();6 Y3 R) }; G+ H3 ?% o1 X! V! B7 F
getch();
7 p. y' }( G9 f: y. F1 r z! _ bcls(0,25,0,79);
( Y/ | _1 g9 A getch();4 r% u% |2 O) a) B& t$ v% e
puta();" l7 N" C$ z1 E$ _/ r1 m
getch();
, u6 I& b- |" A* } zcls(0,25,0,79);
2 S# O3 ?0 s% I, L- p; j getch();
5 Y; N C2 _- Z% R/ Q }5 c% a! {$ L% S$ K9 q m
/*********center clear screen(中心清屏)***********/
/ z3 R* Q0 s3 E% z2 a) s void zcls(int x1,int x2,int y1,int y2)
% j4 `# u7 } j7 [$ m l- ^2 u: C2 y {
2 F* z$ g' v7 z7 }- e int x00,y00,x0,y0,i,d;! r+ w6 x7 S+ {
if((y2-y1)>(x2-x1)){
, j6 \3 P" ^% c9 n) r+ Q6 j d=(x2-x1)/2;9 @* T$ M; N e3 s: [
x0=(x1+x2)/2;" l3 x. U9 M2 R2 g" Z1 D
y0=y1+d;. @5 T" o$ }/ o; ?( M# h7 ~7 q
y00=y2-d;
1 p- S( B/ Q) b4 u for(i=0;i<(d+1);i++)$ V; x8 ^1 G' b, c" Q
recls((x0-i),(x00+i),(y0-i),(y00+i));
& I4 U# O+ i: i9 i3 O, W$ U6 N delay(10);0 h% C$ Q6 E' l0 @; _1 M
}5 q( U; }$ t6 ]9 E$ C$ u# t
else{
/ N4 C+ j: u/ p U d=(y2-y1)/2;$ e( b1 J A9 h1 u1 k
y0=(y1+y2)/2;4 J( F& V/ @: ~8 b- z% W I) o4 h
x0=x1+d;
# r G% D5 T/ E5 h1 U3 f x00=x2-d;2 v2 s" V4 d- _ ?; _! B" _
for(i=0;i<d+1;i++)" g7 E) ?. F( w N/ B
recls(x0-i,x00+i,y0-i,y00+i);
7 V: N" Y, z+ ^$ |3 b) u$ M delay(10);$ E, Z9 [3 a P# s
}( Y8 G9 L+ z* a3 r3 W. `
}/ ]7 {8 w6 S+ d- ?( x
& N; {/ t% }0 F8 H
/************* clear rectangle side(矩形边清屏)***********************/
- F* | x$ A7 i! x
; B7 f: W" p2 n7 E6 j7 ~ void recls(int x1,int x2,int y1,int y2)
. H9 P$ l5 N" i4 M4 f1 P {5 d! ?2 L0 G- f: n. Q4 G- W
int i,j;( ]5 D* F6 R* x0 s9 j2 u( d
for(i=y1;i<y2;i++){
8 x( @# ]+ U7 N8 ]8 b9 W6 @ goto_xy(x1,i);
* w6 d3 }% \. { putchar(' '); S! L E6 ?" ^
goto_xy(x2,i);6 I- y/ D6 P0 g: h7 n8 o
putchar(' ');
p- Y* ^, |9 Y6 d) ^ delay(10);
: ]$ M( A+ W* P1 b }
7 p1 a0 ~& P$ C* x for(j=x1;j<x2;j++){
8 b8 \% S9 d7 [9 t0 R goto_xy(i,y1);* d3 _$ D& i5 T
putchar(' ');
: ?. t5 N" @1 c* n1 t4 q9 f goto_xy(j,y2);
; F! G I5 E$ T4 U6 D putchar(' ');. |- R- q) h; `7 h" H
delay(10);' s" O U& k7 X2 {% Z* x
}6 M: |3 @$ y$ Z+ ?8 `" M( ~
}3 R% J. T" s B2 J6 d# [
/******************open screen clear(开屏式清屏)*********************/$ o7 C% a8 W0 n E
! T' v# p# n& O3 w, W7 v! P* l void kcls(int x1,int x2,int y1,int y2)0 N% l- A. s" W& u; V
{8 h; d4 `% G! `7 q8 M
int t,s,i,j; F4 X( O0 S8 a) J- E: u# C
t=s=(y1+y2)/2;
3 [% \9 M5 k1 i/ j2 p) j! ? for(;t<=y2;t++,s--)- t, {- B* S7 D6 ~
for(j=x1;j<x2;j++){
- M' y' U$ S: C, {" a; J: ? goto_xy(j,t);
2 T* g8 F( E- j% Z putchar(' ');
/ ?$ S5 k3 P) a. F' _% _7 Q# M goto_xy(j,s);' S" l) N# D+ V4 i5 U
putchar(' ');& Q y4 Y+ z9 E( N) A
delay(10);
: \/ R* M# M" [' L" Q } c, b. z7 _% a9 ]* W3 {
}3 }& @! `4 g, C5 u8 M
/*****************close screen clear*****闭幕式清屏*******************/
& J+ O: W" _# b3 p' V- h& G' h) o# |6 H% p- a4 d
void bcls(int x1,int x2,int y1,int y2)( k4 e) v# L6 m3 Z& C$ C
{ d6 d! m0 z* {- K
int t,s,j;
/ z. Y% o; E4 i E t=y1;
3 S. I0 v5 T2 t' e1 W$ r s=y2;
& r# g7 N! t8 o1 F; i for(t=y1;t<(y1+y2)/2;t++,s--)
1 m' l& A" V& Z/ p+ y* \6 L for(j=x1;j<x2;j++){
! p# P$ u$ q& l7 g6 }- D1 ^ goto_xy(j,t);
; R, k z; \. Q: R( f putchar(' ');% D( g5 w u2 ]. R
goto_xy(j,s);( f7 Z% w7 Z) ~6 Z5 t3 E6 W$ @
putchar(' ');' s( V7 t* V8 {" G4 T
delay(10);
$ b( Q6 W, y3 S/ t) D5 @ }
. F2 A( @# T# S3 j0 z# u& _6 V" A+ b }
: p o# K# k, f w( P* K /******************bottom screen clear(自下清屏)********************/% e- Q* }, r& @4 r
; z- E9 S1 `* U1 g6 a4 F void dcls(int x1,int x2,int y1,int y2)
! u; R2 d1 p' W' @8 n5 I" z {
3 N9 D: q/ n+ t# M; T g, O int t,s,j,i;
O% ^. ^ w: f2 x3 j" o t=s=(y1+y2)/2;
5 b- S7 {+ @9 L! | for(j=x2;j>x1;j--) q* A8 b; I0 s8 R+ H
for(i=y1;i<y2;i++){* |2 r. S' @" E4 n J" X2 N
goto_xy(j,i);
/ u, x' n- ?% f: C2 N putchar(' ');
- E. K% i: N+ _3 ^ delay(10);
' a* n- p3 W5 P0 N) o3 \+ k4 l }9 o( u) `/ L; G6 D& m% [9 ^9 y% s
}) x8 E3 Q: A: d0 D9 ^& b
/******************设置光标子函数******************/
* [; @7 y$ N$ ~' J, f
: S9 g3 p3 E# o# n. K- d void goto_xy(int x,int y)
' h6 I' u- Z7 p \' M4 C, ~1 Q {7 P- d _% a) {7 t
union REGS r;- E) S$ p4 A. u, O9 o Q
r.h.ah=2;
3 E+ v p z% X3 v$ [ r.h.dl=y;1 D6 Q" A. F: ^0 Q
r.h.dh=x;
( K) @# ~' f. F% o) {8 W7 ~& O7 t r.h.bh=0;0 K4 b( h3 i% ]1 l3 ?
int86(0x10,&r,&r);2 m0 R' N1 n. l5 n7 {* C' Y# |
}
" n3 k9 Y' \, ]& T9 w& Y) j' ?& _6 E5 H! a7 a
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
; Z3 Z% s% g* n. Y# V2 l& N* ]% y3 T+ u3 o+ C" D2 _7 \# Y2 {
void puta(void)9 i& _# }* o& I) b3 o/ j
{
- l' O! `/ y' i7 |, i0 L, } int i,j;3 d: P. L5 D3 N) X
for(i=0;i<24;i++){
" s* B# ?; G! u" S; f. _# w for(j=0;j<79;j++){7 W A2 _ N3 X. R q D/ b1 y
goto_xy(i,j);
6 U# Z, f+ j" w printf("a");
* N) f/ m Z! w7 i }3 a r4 v$ k9 E3 q
}
# a: j: [; T5 a0 [ t } |
|