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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% p9 p$ i% c) v* T- y6 R, Y# I
4 M- U: j' {$ J; y3 z: x 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
! f R+ {7 w Q2 c6 m
7 ^2 i7 \2 I; y I 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ q1 G Z1 L% D# Z
子函数及演示程序:
) V6 u& L3 V6 M R$ z) R( }
- b2 d4 ^$ Y& L7 {+ b #include<stdio.h>1 ?3 i- A# b7 O1 v
#include<dos.h>) H! P8 P& R. v# x. r h$ G
#include<conio.h>
g) Y) W8 y% I ~% `9 \# I/ f3 n( L6 k
void goto_xy(int x,int y);" j' r/ A3 b8 z% p+ _+ ]
void dcls(int x1,int x2,int y1,int y2);0 e' o4 f2 w5 e7 R D+ }
void bcls(int x1,int x2,int y1,int y2);
2 H+ z5 t7 q8 N( z5 n0 z void kcls(int x1,int x2,int y1,int y2);- b p6 p/ j7 D; a. ]1 o- r1 W' ]
void recls(int x1,int x2,int y1,int y2);
4 j2 P5 l% [1 U; c& t void zcls(int x1,int x2,int y1,int y2);
0 i# l+ F3 y7 g( A2 ~ void puta(void);
# {' J4 i" h* R3 R- G7 A
8 u9 W' _& G7 P$ b! B0 V# z/ F/ w: ~; S' X+ w, M
/*--------------演示程序---------------------*/
9 D( P% u; c/ F main(); }) |. T; R2 ^5 q2 ?1 L7 o
{# H7 F, t9 v- V9 k( L
puta();$ n( J5 ?* i. K C: a
getch();+ N; ~9 c& s0 f K; M+ r" U
dcls(0,4,0,79);
1 `$ C7 f, p" `! R& J7 n, E5 W0 a getch();; ~7 z$ t# l3 }- {, a
puta();
# C* {6 w# \$ {1 f getch();. m% z ], J+ L" d7 ^0 B8 f6 H
bcls(0,25,0,79);' g+ K/ y5 S- ?( L
getch();
3 L( G8 O7 T+ S7 J$ {3 @/ L puta();- M4 u3 Y' u! N
getch();
1 M }1 W& R% i) v+ D0 y zcls(0,25,0,79);! I$ o% t2 S [, p
getch();" Z# `2 J5 m3 q& v' ?) Y
}! D! C& h1 s6 _, s' ^
/*********center clear screen(中心清屏)***********/4 `1 ^; u0 J5 o
void zcls(int x1,int x2,int y1,int y2)
. E2 ]& [1 F" V- m$ U% ` {+ U0 R+ ]+ s9 W* p* ~* e8 G
int x00,y00,x0,y0,i,d;/ I) z1 c! c! \$ G) h6 | E
if((y2-y1)>(x2-x1)){
) a# Z& e& a, w1 z4 C' v6 g) H i d=(x2-x1)/2;
' q- C, |& Q; i1 n0 v, C! J x0=(x1+x2)/2;
3 i$ ?. `7 D. T4 { y0=y1+d;/ X8 s' R1 J# `, b
y00=y2-d;1 S! u- `, |- k: E) N" x9 v
for(i=0;i<(d+1);i++)
+ ^$ i7 S2 x( Q$ T# q! Z recls((x0-i),(x00+i),(y0-i),(y00+i));* o% V- F% S. A( {; e. @. V5 R5 y- g# b
delay(10);
3 P& d; p' a: N& G$ I }
1 c- K5 r$ K4 P$ H' q, n else{+ q$ e: q; }6 A# G
d=(y2-y1)/2;- x, d; Y6 y) g/ b8 E
y0=(y1+y2)/2;. Z# Z6 x$ D$ h. a
x0=x1+d;
: s' j6 }7 w6 } x00=x2-d;. V7 P7 t1 E2 I; I- K9 D+ I
for(i=0;i<d+1;i++)
S5 A2 B+ b4 v+ y& q# E3 t" a recls(x0-i,x00+i,y0-i,y00+i);( F7 z1 B( G' ^
delay(10);+ f- T# w# J4 D+ f
}
2 S1 z. L+ p0 w, i }) L) D) ]! g: v
( }/ ~% U, Y U /************* clear rectangle side(矩形边清屏)***********************/
! K4 @ T" w2 S% k9 c6 Z; f w' J m! l( |* S: E0 \
void recls(int x1,int x2,int y1,int y2)/ D, G( R" C9 z" x7 h ~% f
{4 ?0 U) c+ r& S
int i,j;
: y9 e8 X D* c+ u* R1 G3 }) _ for(i=y1;i<y2;i++){, I7 E0 Q( O) b
goto_xy(x1,i);5 C) y9 l h! y! ^8 J/ X" u
putchar(' ');
1 J% e) ^1 H4 n$ X; L N goto_xy(x2,i);
7 G" u9 q$ R& x- j putchar(' ');9 q4 W7 B, _5 _) j
delay(10);
9 v' U8 x- t4 l, U2 S) Q# ? }
' y) H1 U0 k4 a1 b5 C8 u i for(j=x1;j<x2;j++){' H8 ?: B2 F+ m9 O: e
goto_xy(i,y1);9 s8 f' w2 S v9 I% j4 r( y
putchar(' ');$ e/ d. k5 {- z( m3 q
goto_xy(j,y2);
! `; Y7 ?: T/ J" u putchar(' ');
- a( E( n( l/ Y7 F9 m, l f delay(10);1 g; k0 _* l6 L) F. \2 Q
} u+ a. m0 R6 B3 @; E1 F
}, i- Y3 z$ b0 [# O
/******************open screen clear(开屏式清屏)*********************/
( O. e. T k/ G/ T) }& Z: i! _. Y% t9 T
void kcls(int x1,int x2,int y1,int y2)3 s2 E7 {, i2 S& b/ w
{5 S$ I1 H& t- Y% E. R3 Y/ A% }
int t,s,i,j;
' r6 l; c( R/ I1 |5 T: U9 w t=s=(y1+y2)/2;# V' K4 G2 k- E6 W* H, h9 {+ V
for(;t<=y2;t++,s--)% c5 ~$ t' H0 D
for(j=x1;j<x2;j++){
# N& m ?: d, I2 o& Y! O; l goto_xy(j,t);5 _7 W- t% ~- Y% c5 I
putchar(' ');. Q( u/ N; U9 V- ]
goto_xy(j,s);
# X& v$ T: p% j; T0 n: B8 [- P putchar(' ');$ `4 d- s. n: A* S) ] P6 A
delay(10);" e1 D4 b9 j! w
}5 @& ?! C' \, Y0 C- y1 Y! X
}, N* N3 [) D) R' n7 R" @
/*****************close screen clear*****闭幕式清屏*******************/% f8 R$ m6 ~& V6 p: w# x; L' g
# t: e5 w8 G, B' e' v5 D; f( }
void bcls(int x1,int x2,int y1,int y2)
7 G1 y) c' F# \" Q( e/ H X. ^' g {
# n8 v0 }' @2 ^: b4 f int t,s,j;
. f* D* U& L& `/ Y2 N t=y1;5 E% R8 |% F; n' [- k
s=y2;
4 a3 ?" {, N1 a9 h* z+ y for(t=y1;t<(y1+y2)/2;t++,s--)
$ H, k' A4 q4 h5 [+ Y, V for(j=x1;j<x2;j++){
0 x+ q; V3 J) K, Y9 }. z! U" } goto_xy(j,t);6 @6 J8 ? n( {7 G0 \8 r
putchar(' ');4 s. g8 S0 I* `+ ]1 ^
goto_xy(j,s);. V9 K& q3 V. A+ I" C3 b# g
putchar(' ');
* z4 e1 u! u2 R+ f; H delay(10);
" u" h/ B5 w+ }3 M, A }1 Y2 ]0 H6 S% ~0 z$ A" M
}
' V! K* X9 X6 f L /******************bottom screen clear(自下清屏)********************/9 a% U5 _% `! y/ `) Q
5 f! W" R( x; k7 w- @( w& }. }
void dcls(int x1,int x2,int y1,int y2)& ^: H' M4 w1 z" |) y0 t
{
4 J2 z: S1 G& h- K0 g; V, B int t,s,j,i;
: i, \, t+ J- W, x2 y5 X8 M3 f# { t=s=(y1+y2)/2;. n# K; o! D: E, y: A6 i* c, X9 d
for(j=x2;j>x1;j--)
7 ~1 e5 Y4 N3 L! K) p for(i=y1;i<y2;i++){
/ H+ j: R- w: l3 b( D6 C( S' m- D goto_xy(j,i);. v v( o+ t8 u$ g+ d' \
putchar(' ');& R% }% `7 H2 c- {
delay(10);! q; {: e% s' D/ n4 V* J. ?( ]
}: t8 E; N4 |* o# T) t, A2 c
}
8 I: N5 M7 ?6 P+ | /******************设置光标子函数******************/* O8 \3 G5 l& t$ H5 V9 i# M3 Z
1 n+ ~8 L$ ]) v) w+ E" P- x
void goto_xy(int x,int y)
! t+ J$ y: b0 D9 E" \; m6 o. T+ L {
s, v2 j6 r3 b" D1 w union REGS r;6 f S! y& u% [8 B" z$ x
r.h.ah=2;
8 }# I1 s( M* P; l* c; V r.h.dl=y;
k+ b4 k5 k9 _3 i a+ ^ r.h.dh=x;$ r* c/ W( g+ M+ q
r.h.bh=0;2 E* `5 R0 }0 y! Q
int86(0x10,&r,&r);: \3 [9 o& a7 [+ O1 F4 Y( ~
}
6 P% d$ Y& y \+ S2 \$ D" ]9 Q/ ^' U; ?6 r1 g
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
9 Q0 f i3 \9 M# d! G% z& V% x$ g2 {0 G% R
void puta(void)
5 p/ }4 e3 F% a {: j9 N. o5 j1 _8 {
int i,j;
2 h8 T. T e$ d. n- }; l for(i=0;i<24;i++){' c5 r. Y M7 d2 L& ]% Q' Y/ q6 ~! R& O
for(j=0;j<79;j++){8 {, w0 h2 E6 A. f
goto_xy(i,j);
4 j/ `* E& j2 n) B9 i printf("a");( U* i$ X- ^2 b) R. l
}
+ q& u1 V+ A. S }+ F7 ]# Y j" L2 n6 O
} |
|