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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 U. A6 |& e j7 H; p7 P; n, h e" W4 x( h% L; l& w, V0 a
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 U/ B" w" i9 y9 M4 e" F, `- ?, g0 Z* K" I- e0 f* e
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 6 r! w5 v/ h2 Y$ Z$ y7 G% [) K: |
子函数及演示程序:0 {: Q6 d* W i/ _8 S; @# Q
0 }$ v. x3 q( Q: Q7 l/ R #include<stdio.h>
! t1 n" n7 V6 v9 R: R K7 ` #include<dos.h>
8 c: R& I5 `7 x9 x #include<conio.h>
( V5 V! z" `+ V8 F) B( M% [" z3 V0 [( _) z R' ]
void goto_xy(int x,int y);$ R" `$ {8 G2 h3 ?/ {5 p+ H8 T
void dcls(int x1,int x2,int y1,int y2);
/ m9 m& j- Z }0 Z# t( m- b( s3 Z void bcls(int x1,int x2,int y1,int y2);1 `1 ?$ G& C/ J' L) T
void kcls(int x1,int x2,int y1,int y2);
+ k$ G2 }1 [5 [ void recls(int x1,int x2,int y1,int y2);
7 v8 J2 S' x9 k. l void zcls(int x1,int x2,int y1,int y2);
# G5 l3 ?$ K% V' I& T void puta(void);
7 }( {: z$ P$ g( G5 x# t1 c8 }( p5 D5 Y. A) c7 x9 u$ \
- z: z/ v3 I6 {+ j /*--------------演示程序---------------------*/* o1 G, U0 I: M; q" I0 N' ^5 M& f! D, p
main()+ N$ D/ \2 H; z0 A$ R2 R% d$ a
{
) E# H" P3 a) K0 h. o' d, t puta();; |. ]' Q. _4 y7 s
getch();# d$ Z" c. ~) m7 ^! D! f" D9 g
dcls(0,4,0,79);8 i' O5 @) b& a+ _/ h9 _- T
getch();5 r* b7 z0 |7 H. U$ q& j
puta();+ p/ R( |, b. `/ s0 W, R- m, c o
getch();1 x8 s! w e T( \5 t. D' L
bcls(0,25,0,79);
F% B* U( m8 C1 P getch();9 N6 h7 @' `9 E
puta();* _8 f: [0 K/ @4 l @
getch();9 Y* T+ Z" T z$ w6 e6 A O
zcls(0,25,0,79);
8 v3 x2 j& v. L2 [* ~ getch();
5 `$ V& _6 T I5 T: f }
2 S X3 l5 \! {' q /*********center clear screen(中心清屏)***********/& k" I; a% m O1 h( `6 F7 O
void zcls(int x1,int x2,int y1,int y2) S1 U) d+ O0 [$ E ]
{" l2 e$ u& Q, }
int x00,y00,x0,y0,i,d;% G2 ]/ |% g$ h! F+ d8 e* | L4 r
if((y2-y1)>(x2-x1)){
) U2 b8 U5 `% O$ v: ?# j d=(x2-x1)/2;' _% l4 e: x" f7 I# F
x0=(x1+x2)/2;# I* y+ Y: p3 |* o. ^/ [
y0=y1+d;
$ f7 {: r; n- O: V$ T y00=y2-d;; t3 o4 ?7 K0 t4 {6 c0 A1 u- J
for(i=0;i<(d+1);i++)! @0 ]; I" a; o. Y% l: O: B- F
recls((x0-i),(x00+i),(y0-i),(y00+i));
8 u( V1 H9 l E( I delay(10);8 B) z8 B: v' Q6 `& u
}9 o: ` U1 ~8 o2 W( j3 P$ l1 O7 b/ F
else{
& O, T* m* I) r$ l1 O, q d=(y2-y1)/2;
1 {' @9 D& B$ R. F y0=(y1+y2)/2;( \0 Q: C) q8 S% u0 s" H6 g L
x0=x1+d;
/ E! n7 b* v/ c: D( ~; L" m0 d x00=x2-d;
1 s- R- [5 k- [" p* T1 N/ a4 a for(i=0;i<d+1;i++)
~% P4 L q8 ]' D# M- B$ { recls(x0-i,x00+i,y0-i,y00+i);5 {' M) J2 ^8 {' p8 O
delay(10);
% L3 v, x* |% x9 h6 H }
' P' S) f' _# m i, k }
- |" ~8 p5 i1 V- O" i; c# O/ s1 F& p* _7 g- H! |
/************* clear rectangle side(矩形边清屏)***********************/9 V! b m7 \/ \( e+ R6 M( q9 u
9 y' D% `% L# b4 E" R- b
void recls(int x1,int x2,int y1,int y2)
3 S1 H. }2 J! X4 i) E4 k {
9 }6 P `; Y Q4 @ int i,j;
+ m( G p, W# s5 n" E- i* J( C for(i=y1;i<y2;i++){# _* X. v6 V5 |0 v9 }
goto_xy(x1,i);
( h. N5 ^) b0 X5 c0 z7 | putchar(' ');
$ Y% b2 d6 `5 d0 I goto_xy(x2,i);
3 I$ O8 ]5 Z! O% K( E& { putchar(' ');# e6 p! _; e+ i1 C0 O" }! C7 X3 Q
delay(10);
d) a: h1 ^& E' \+ S# ]: V }
( Q t P5 L* M6 d A for(j=x1;j<x2;j++){
* e% ^3 W2 i* g; B1 f goto_xy(i,y1);
' X/ [- @4 i2 } putchar(' ');
6 m9 ~8 k. g4 n goto_xy(j,y2);
9 n" E, ]) v# `- v( b! d. g putchar(' ');$ X O' ]/ N V% X6 F
delay(10);- H! b* z% q; }, O! r# G
}
4 b3 o/ S9 ^: R! f }
$ \0 T* u" f1 a( z9 P! p- ~( I /******************open screen clear(开屏式清屏)*********************/; S$ Y# p) ]# }. F! b. G
8 Y7 Z# X+ _7 _1 W0 X
void kcls(int x1,int x2,int y1,int y2)
, x' q3 t4 i, W" n$ N G {0 W) l1 j; {8 |5 G U {
int t,s,i,j;
4 X) L: ]. ~' O t=s=(y1+y2)/2;
' X7 i2 E8 b# M% f2 _& P8 P for(;t<=y2;t++,s--)
, t2 V3 q L4 S/ h/ K8 [ for(j=x1;j<x2;j++){
/ {3 h4 x- K2 z8 M6 t; X goto_xy(j,t);
/ C2 _* a1 x# V2 L9 l putchar(' ');6 M# x1 x( o8 [* h! R, J
goto_xy(j,s);
( ?+ r+ c1 j/ n, r7 e1 x( G putchar(' ');
1 h# D' a- ?) _( W delay(10);! |3 }6 k' \9 Z" x3 B" P) z" X
}8 u! m2 h3 g9 ^9 o1 Z$ o* b& L$ I' i
}1 N+ f9 k& W0 p- L
/*****************close screen clear*****闭幕式清屏*******************/( k T: I. {. h; f
" Y& t& i4 Q \$ H5 g S$ p' }
void bcls(int x1,int x2,int y1,int y2)
& {' ?5 L7 D4 B) R0 s( [1 b {
/ U* j! ~0 n1 f s3 |8 C) D int t,s,j;7 C* Q: P2 M; c* S1 q
t=y1;3 H! c! e, o6 c4 m! k8 a H# n. Y6 X
s=y2;
$ Z; I" c q; b, V& p for(t=y1;t<(y1+y2)/2;t++,s--)
& {( A: O8 Z+ m. T% D for(j=x1;j<x2;j++){
$ q6 V- j/ m/ j$ _3 [$ b6 ?5 X goto_xy(j,t);$ W+ |; E7 V$ V( e& u
putchar(' ');. S# Z3 Z) H+ F
goto_xy(j,s);
( f1 H. P3 a( S0 [/ @ putchar(' ');7 F7 K- z( E8 R/ q0 n9 z( _1 _
delay(10);7 F; ~, A3 p& I2 Z3 D# p. F& c
}
+ G& h- |" U6 \& a8 u }9 Z/ M1 M0 ^9 z) S' b
/******************bottom screen clear(自下清屏)********************/+ i1 i4 f6 m2 G- j9 u
. i$ A9 ~& ^6 d, r4 r2 [5 P; b void dcls(int x1,int x2,int y1,int y2)
6 e4 T- W2 [: W* j {* M& ]2 d2 S5 h
int t,s,j,i;
4 r2 x4 B: F+ G4 A* U, z5 U( X t=s=(y1+y2)/2;
8 g- ?" D2 X- ^. ?: a for(j=x2;j>x1;j--)
$ T8 p6 q# @/ r3 l, \: [; A for(i=y1;i<y2;i++){2 D4 J' M. j1 I K/ q
goto_xy(j,i);
7 c9 |) U3 U" d7 y a putchar(' ');8 b U$ P0 _# q' P" E7 x
delay(10);0 ~8 |# |1 S' [$ U. X/ S; f1 y
}8 k4 G2 b' I; o6 A: P+ V
}
! T5 O- r! f D3 J6 n /******************设置光标子函数******************/
, K4 J x6 ]6 C+ v5 x' o" D' p& z& b/ j7 o3 }
void goto_xy(int x,int y)
8 t; i% @; M4 K G {- _1 E& R+ o8 q, ?" I4 b8 f7 G4 f
union REGS r;9 K; g) x5 e6 {2 p. b7 e! t0 l
r.h.ah=2;
$ J) s' v4 A) Q% } r.h.dl=y;1 r0 X4 F0 Z+ v+ Q; f, I+ W$ L
r.h.dh=x;4 C+ P% v6 H; D7 E1 ^% J
r.h.bh=0;
/ B* i+ g; d. A' e3 b" G+ Q! H int86(0x10,&r,&r);
# }' H; E& B. Z6 O }
@+ s% q. z) e7 D5 Y# q4 {8 v4 Y& R: ?, e/ I( W; t$ U
/**********************在屏幕上打出一连串的a字母用于演示程序******************/% b! u" e/ V1 a
( _% O. ?6 g5 a/ S* P
void puta(void), s3 E- e) [2 }) b' o# o
{
d8 Z. b" v+ j+ o9 | int i,j;
! V) z- E1 j1 J0 Y for(i=0;i<24;i++){( N4 l, m6 d" ~* r, B7 B
for(j=0;j<79;j++){
/ ]# Y$ E4 Z8 a9 d" @" [( y3 [( Y goto_xy(i,j);) s2 {( n3 P' C) @$ P3 Q3 _1 P. P5 j
printf("a");3 e0 V0 i- {) c: U6 H
}- d$ y& }/ e, g: B
}
- ]% a! J8 P- Z* Q( P& Q+ S } |
|