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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," F& M5 ]' R! n/ r7 @) q* |& T9 h! Z
9 z+ s; B, Z2 y
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ B9 T3 F# |& u+ M, b
4 u( c$ u6 A$ m! H \/ I
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) F0 Q& g3 Z! y! m+ ? 子函数及演示程序:
% A/ t# l9 F* c- P5 `' x K( j+ c4 A3 l
#include<stdio.h>
6 }, a2 C7 _& M$ a #include<dos.h>
$ ~/ N0 k C/ z) d; R! I #include<conio.h>
6 n: x. U s( U. P/ R
$ s" i- _" Z i- |6 r; ] void goto_xy(int x,int y);
9 V {0 l$ a" q4 z5 G5 E. w void dcls(int x1,int x2,int y1,int y2);
$ S5 I9 r! |( b void bcls(int x1,int x2,int y1,int y2);8 r# H4 j+ i, V4 B
void kcls(int x1,int x2,int y1,int y2);3 i, C- W# r0 h4 r3 O) M3 A
void recls(int x1,int x2,int y1,int y2);# z8 ?8 b; t* J8 z$ `
void zcls(int x1,int x2,int y1,int y2);
/ Z% c4 k) M! c8 F$ Z void puta(void);, B0 k. e* l/ Q
! j7 O) B. x' F! N" M+ n" i9 ~; z5 Y$ T
/*--------------演示程序---------------------*/1 U* Z! J6 n/ w+ W7 r! D) l* _
main()
; o+ F3 Z& M6 W {" f9 Q, ]3 y e
puta(); F, }0 g8 ^1 H5 I' V% `: U
getch();1 W: V+ y8 v! W. C; A" R8 }
dcls(0,4,0,79);0 v% x* t9 V! T4 Z
getch();, ], O! f) ~9 c( p" J1 \
puta();* G8 F2 B4 h; s( }
getch();- ^6 E r" p1 d ?1 [! w3 t
bcls(0,25,0,79);
+ F& _' {5 o0 D2 U* w getch(); a) D. P* Z) ?2 J* g& Q% V4 r
puta();
. V- J7 s6 d! L3 m% y6 `% H" | getch();
3 b R/ o4 q% N! e3 r+ v$ c zcls(0,25,0,79);
# x9 A# t4 ^3 U j. P getch();. G3 B+ G+ m s# v* u
} R1 U5 r2 {9 K$ d$ p7 X: q% X
/*********center clear screen(中心清屏)***********/
A2 @# T3 X( X void zcls(int x1,int x2,int y1,int y2)
. i$ ~: L" x& k {
c/ G% }; F) }; d! d* [" k5 b int x00,y00,x0,y0,i,d;
# r. M' M$ o1 h% h8 s7 J if((y2-y1)>(x2-x1)){
! @! ~0 N3 K2 ?' Y5 k8 P d=(x2-x1)/2;
& E* E. r( a3 y* d, ] x0=(x1+x2)/2;$ q2 [2 _) U9 s) L. n
y0=y1+d;/ T/ n% \1 F8 ]0 A0 @5 A
y00=y2-d;2 L- m% ] ^: a/ \( B5 e6 M1 C2 L
for(i=0;i<(d+1);i++)
" {! y& [2 c& _( p6 V, }: s recls((x0-i),(x00+i),(y0-i),(y00+i));
. l3 T1 H5 q# G3 n delay(10);( S! j( z [; t- R ^3 c
}
4 W- }# Z9 U( @& z else{
* Z6 B/ i$ @1 E0 j* l d=(y2-y1)/2;
7 ^9 P. S& V3 j$ n0 z y0=(y1+y2)/2;
! `4 ?! M/ W9 H/ `! { x0=x1+d;
; A) t% d: z2 m' ?8 n7 D x00=x2-d;+ S `1 ]9 m4 T0 @! H+ P5 x" {
for(i=0;i<d+1;i++), R% |6 s3 c3 \2 [+ s
recls(x0-i,x00+i,y0-i,y00+i);6 i- M6 \& g4 u8 y& b( [% o1 Q
delay(10);) C1 E( n. P' R) i* c- N4 N2 u9 n% }
}
0 O6 `) h) B" Y5 x. h$ K }, S! m" V8 w* J* e( C* _! \+ `# w
! ^3 G( N# Q x1 e/ R$ X /************* clear rectangle side(矩形边清屏)***********************/5 W O) J% U/ ^( o6 w
" Z$ @) v) }/ s" ~+ N \ void recls(int x1,int x2,int y1,int y2)
# R. m/ ~: m5 c) u( v/ p1 v. a { c9 l6 l: s" a
int i,j;
8 z' y' w v$ m+ `& U( L8 N for(i=y1;i<y2;i++){6 N: Q2 u0 ~! f" o M
goto_xy(x1,i);" C% \# \5 I, I$ {9 j, M, u3 N
putchar(' ');
: `3 z( D0 R. [. j: A9 ~2 W, s goto_xy(x2,i);
) D0 D) ]' _, E& J- d/ Y9 O* N putchar(' ');9 z; k, Z) L' j& {1 H8 W6 c) z& }
delay(10);0 J. l, G8 G. W/ c6 a& n
}: R' F' E; o9 t. q; a
for(j=x1;j<x2;j++){+ V/ Q9 B8 g* p0 i2 \: e
goto_xy(i,y1);
* @1 u3 {6 A5 k% e putchar(' ');
& b6 Q c& }- R5 l goto_xy(j,y2);
3 z) P+ I' ]# L. G$ x putchar(' ');
7 `+ x3 B9 S/ O1 \/ ~6 Q delay(10);
3 u+ N+ L5 d! q7 A3 y }" r% A+ D: Y7 r
}+ \+ L) r0 Q+ @- k6 Z- [
/******************open screen clear(开屏式清屏)*********************/$ `+ l& v/ H, ]& F! X" v- p
' U- h# O3 d! w$ b& m" F. j
void kcls(int x1,int x2,int y1,int y2)
/ @ R: K* D ^) p {
( U1 ?, h7 y9 ] k! B! U# T int t,s,i,j;
5 _) o1 k! ?# {# i! a( D S t=s=(y1+y2)/2;
: E- C! P' p5 F' _ m, u% ]6 K for(;t<=y2;t++,s--)$ i/ t3 w: k0 N
for(j=x1;j<x2;j++){
$ q0 i, P/ Q+ U; m1 { goto_xy(j,t);8 P7 D! f# a- m4 T
putchar(' ');7 R5 n9 r% u& d. n8 J' h3 F8 |- I2 c, c
goto_xy(j,s);
9 r; A# V0 R5 ]7 T$ v a3 I putchar(' ');, e% w1 \6 |7 Y/ [! n: j
delay(10);
9 y# P7 W4 e2 I- N- a% O* n* h }
+ s9 {' j' R1 K5 z1 X D7 B7 l }
1 a' I, ?6 _1 ]7 n+ z2 X /*****************close screen clear*****闭幕式清屏*******************/
) p; r: ~" ~8 B# m5 [# g* S& W o+ t Q; A/ A# L
void bcls(int x1,int x2,int y1,int y2); Z3 n' F# M. \8 J
{
% p: k' @' k m f- I int t,s,j;0 }8 F$ }/ p& p, }7 n
t=y1;
% C( o+ A$ ~5 S. ]# e. y1 | s=y2;$ i. y8 S$ i* @/ U
for(t=y1;t<(y1+y2)/2;t++,s--)
; I L' X/ z+ v for(j=x1;j<x2;j++){
, H" Y* _) e. d2 a goto_xy(j,t);
5 T" D& {, D2 x; N2 i; L putchar(' ');- G5 W$ [5 X' O- F7 G+ `# e
goto_xy(j,s);9 C, ?0 K/ N' B) q! d
putchar(' ');5 n% o) N% a4 D8 a4 A @
delay(10);5 z: @# `, p' o! w* H& Z2 I* r
}! P$ O, |( [/ D, D( ]+ x
}
% u. t2 V" `/ i, f# R B /******************bottom screen clear(自下清屏)********************/
' i4 t4 l) w6 X! y3 o1 d2 m
6 X: ]+ F0 v$ @ void dcls(int x1,int x2,int y1,int y2)0 C, Z7 P& U3 G( e- y: P8 l$ e7 V
{
; h, X$ y) J% _6 q8 \) \ int t,s,j,i;
C. L3 w" c3 P% h t=s=(y1+y2)/2;
$ s& x6 }% F1 a$ T for(j=x2;j>x1;j--)
6 v+ G& i I0 R: `3 g for(i=y1;i<y2;i++){
4 K% W/ B2 H3 `' A goto_xy(j,i);0 e/ u- b7 D5 E! B0 x; {7 H8 n$ M
putchar(' ');
% ~+ d9 |9 o3 y3 E. [0 l3 I/ ` delay(10);
( K4 u+ M! {0 L9 h3 m }
* z5 l2 ]& V' L# }$ J* h5 A( s }5 g \" [ ]8 R' j$ r5 R5 x
/******************设置光标子函数******************/5 x! ?8 P T+ w5 z2 y+ J
9 {' {9 r# X% q! {+ o0 g# m6 C% O4 I void goto_xy(int x,int y)+ Z5 c- c* M2 d
{5 o; H% _9 H0 z
union REGS r;) d$ O C/ A! o" h* N
r.h.ah=2;0 [- u0 l3 F k1 a$ X; v0 R- k
r.h.dl=y;
7 L( _( M- m: e+ { r.h.dh=x;
. [: X9 b1 _' W* ]% b; s$ Q r.h.bh=0;
+ B l# R% ?3 I w8 T" s! j. B int86(0x10,&r,&r);; i' @: `1 b" o M; ]
}9 H+ t# ^. [( H9 q: U+ g o% @
! `# `- ~ c0 Z# r* y7 b
/**********************在屏幕上打出一连串的a字母用于演示程序******************/! ^, U( g+ o/ X
" y: |3 t! q' e; |# `% |' i
void puta(void). M2 D5 v b5 O
{
. ~$ m5 H# L3 x int i,j;2 q, G1 d; b7 P& l5 F' E, Y/ o
for(i=0;i<24;i++){
9 A0 L& Q! ?3 {$ i3 B for(j=0;j<79;j++){
6 `- S* b* N$ E goto_xy(i,j);, _. ^; e. O1 p# T+ s7 n% _2 x
printf("a");$ O2 H3 v6 X% U" Q2 e
}$ R; j4 Y9 q2 w. I) }3 Z% ~5 x2 p
}9 [' i6 B( H* ]; _7 o3 |; ]; u
} |
|