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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) d9 q+ e& l- j
3 b5 g5 s$ x9 i/ O# L 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( D w3 s1 X4 o$ m l% Q2 U
9 e3 |* u& T" T( f- E( T. q* p 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ) }2 \- M3 V" i( R4 C8 m- X
子函数及演示程序:
& C, ^1 ]7 c9 m( o- H6 p" J F
#include<stdio.h>
# d; {8 O" x9 w1 A' X: a #include<dos.h>
; l; G1 w: W- ^7 i, W9 I% d2 h: [ #include<conio.h>
' w( ^2 P" R3 `+ j! }" m; s) ]" J7 o# C& j+ w: l) p& J3 t8 i* b g1 a- M
void goto_xy(int x,int y);
% M9 E" w1 D6 h' C void dcls(int x1,int x2,int y1,int y2);
9 Q! z- H/ m/ w! g \8 y void bcls(int x1,int x2,int y1,int y2);
+ g! |1 v+ ]+ M3 H- f void kcls(int x1,int x2,int y1,int y2);
' ]) [' f# C; R void recls(int x1,int x2,int y1,int y2);
2 y# {/ N6 }. E+ B, m7 M void zcls(int x1,int x2,int y1,int y2);
6 F/ E4 _; z& P9 z! N" Q5 T6 u void puta(void);
) W7 c& p5 `+ z% Q) }0 K( O
3 R( M. O h. |% s7 S
) J% _, p* }4 I) z( P2 l /*--------------演示程序---------------------*/, d, k( g% j& { r d
main()
5 L I+ b" |7 U {- a. I- k1 e9 c" D6 Y' B2 F1 h& W
puta();
5 V3 |/ l2 o& [" E/ c getch();2 w/ m" T* ^% |7 w$ y9 k" f) b7 e4 |
dcls(0,4,0,79);
+ z; v2 M9 e) A$ ?: m% g. O getch();+ p5 w _$ P# U h5 H3 E
puta();+ k2 m0 a- J, n
getch();
9 F3 O+ @* B6 s- f bcls(0,25,0,79);
* }% C3 D D( I4 K0 U8 g getch();
! K1 e9 T$ j$ Z% c puta();
4 c* ?0 Y! A% L$ H5 r' y N getch();- N2 i, p- [3 t
zcls(0,25,0,79);6 z5 G; {! |7 S9 c
getch();5 \+ [+ e, F3 b2 Y9 c
}
; K% U/ Q$ c/ ?( I' p, m /*********center clear screen(中心清屏)***********/
- T" H, F3 s- U5 u6 ] void zcls(int x1,int x2,int y1,int y2)# t8 _3 d7 f$ c& w* g1 t
{/ F+ R( d# P* H. z' t) X
int x00,y00,x0,y0,i,d;' O; u7 X4 X7 f- X% b; B. |
if((y2-y1)>(x2-x1)){
2 p+ o- F' X+ @4 L3 {3 u0 R# L d=(x2-x1)/2;
3 P7 G. w# b- A6 K: [ x0=(x1+x2)/2;9 A0 ~1 f7 \+ f A! j$ J
y0=y1+d;
V2 t7 s* o8 s) i5 J- ` y00=y2-d;' t% v& ^: l% k& u( W+ Q
for(i=0;i<(d+1);i++): R5 r) B9 s2 v: F% E8 c
recls((x0-i),(x00+i),(y0-i),(y00+i));
$ [ r0 w5 r/ j5 N/ t* k% X9 c delay(10);6 t& h% f0 y* m2 N
}8 U( `* z2 Z1 q L) C" d$ |/ B
else{8 t0 A3 D; P- p; H6 V7 g
d=(y2-y1)/2;
& T& k+ `5 Z( l y0=(y1+y2)/2;! [- q' c4 n! R4 f `! P; @
x0=x1+d;
% _8 Q; m. k5 i5 T, Y6 O x00=x2-d;+ C t1 [! J$ H) ]0 a$ E/ Y. I
for(i=0;i<d+1;i++)
9 i9 l# a0 s# L; r" b0 B recls(x0-i,x00+i,y0-i,y00+i);( L+ G/ a# { G C& p, q
delay(10);
* l' T+ [3 y" P( U7 \& d }
& l( T& r' ^/ w5 m# i' w }
9 O" P0 o, O9 ~! @; a+ q5 @8 e @% c; s6 l* X
/************* clear rectangle side(矩形边清屏)***********************/( x6 F3 M; @# h+ E
. b7 y E9 _- m; {. ~# q( ` void recls(int x1,int x2,int y1,int y2)! n1 D& U6 c3 h; l0 _9 L
{# q6 U) Z! [, G* I% E
int i,j;
9 _5 r- `; T; W% I5 F3 g5 { for(i=y1;i<y2;i++){! O1 }& Y7 I. I) O
goto_xy(x1,i);
. z" D. L3 S% o4 z0 {. v putchar(' ');6 e) ?9 @7 v8 y* y; U w
goto_xy(x2,i);% {' b6 [; K* ~& M
putchar(' ');' ^) x% u. A3 ?& N' C2 R. d1 ~1 H
delay(10);1 Q0 U" t# A- P; Y( S, C! Q
}+ {# d/ N. T$ q1 |# }! A: d# u. O
for(j=x1;j<x2;j++){
. F ^; y0 v" r; j9 Y& y$ e goto_xy(i,y1);
% u. Y; [/ p' V putchar(' ');
- P( n q, T- {( x. D" P goto_xy(j,y2);8 O/ X1 q# S ]" j3 \0 z1 I
putchar(' ');
4 X8 T' C+ S, |& E delay(10);
7 u7 i4 b- k! `9 t" L& Y }) u2 e; y) Y0 \ i4 z+ r
}
% h, P* j8 o8 z4 Z% B+ c* B0 C /******************open screen clear(开屏式清屏)*********************/
6 ?4 h' }# ~9 K/ f) T; Y, ]
: t- ~" h5 f+ u1 T& @ void kcls(int x1,int x2,int y1,int y2)
9 e3 @( o, x; y1 y) M' s {
* I1 J7 ?( B! f int t,s,i,j;; v# }0 I4 f( \2 E8 }
t=s=(y1+y2)/2;3 b/ l0 j; j& O
for(;t<=y2;t++,s--)
/ u& }0 }) r, I- ?0 y2 D- W for(j=x1;j<x2;j++){% r+ U j% k+ {
goto_xy(j,t);# W, e0 S: @% v
putchar(' ');
' N! z% q* M! p% F8 w7 T8 f goto_xy(j,s);
. D1 e3 M8 ~6 F7 t% {( c putchar(' ');" K/ P# U8 a( r+ @! O: D9 Q) [
delay(10);
0 y. U; R6 [7 K/ v: N( f) m- ~7 O7 ] }
3 b: h9 J3 X' ~7 a! J2 S }* l& U, J! _0 I6 I
/*****************close screen clear*****闭幕式清屏*******************/
2 S$ g8 _; P" `" s
) }3 Z# n# Y0 B! ~; \" j. l void bcls(int x1,int x2,int y1,int y2)6 t9 u# N3 Y1 `( y6 U0 i
{+ V$ m! B/ F: n9 y2 k# `/ @# D
int t,s,j;
& c3 } K h B. m t=y1; `% O8 ]" T. d) d/ G/ K
s=y2;
0 p0 F; ~: _& Q" H6 w- I for(t=y1;t<(y1+y2)/2;t++,s--)# \# P4 }# O v% L. J& f# B
for(j=x1;j<x2;j++){* ?7 Y1 f8 _- m
goto_xy(j,t);
7 I3 m: s% i+ o8 {) [. u3 X putchar(' ');
$ @! f% w4 S" v goto_xy(j,s);
0 O8 T; |" t, v& Q9 `5 c6 f putchar(' ');
# I8 R3 A+ T) w; _* M. J4 n delay(10);
& t! N1 l* ]4 n- e }
1 N- F5 n! r& V' c& E r }2 z: r6 K8 r# Q. j- a
/******************bottom screen clear(自下清屏)********************/; a. d! d' F8 v; f9 V: d
4 r8 O, L- A j6 i' Y1 _' U
void dcls(int x1,int x2,int y1,int y2)( U p) e) E: d2 |$ K$ ]* x3 }8 r
{
: J! D7 L8 D4 q* T" u( w int t,s,j,i;/ A. N' b' J( V7 r/ }; ~
t=s=(y1+y2)/2;9 y, ~- j) U5 X+ `4 M/ e( h0 s9 t
for(j=x2;j>x1;j--)
) l9 c* p; u' `: o) u, U for(i=y1;i<y2;i++){
0 g) p& a$ r* h2 d( d1 ^& u, C goto_xy(j,i);, ^7 y1 n( i, C. C' c( Y) J( m$ z
putchar(' ');4 C/ l2 b3 [, D V
delay(10);% w" _6 E! i; P o
}) F" f5 a9 v7 H# @- u: L% ^
}9 \: z+ E: \4 f1 @: E3 t' f) a9 s
/******************设置光标子函数******************/
( i7 y7 i. T7 U! U1 n$ F4 K! n
/ {. ]" G F- ?# n. |+ R( Z! j6 d void goto_xy(int x,int y)9 S( j: }9 J+ w" |* @9 n
{
" Q$ Q% @3 t& z$ | union REGS r;
( D2 ]4 ?% M% ^ S: P0 F6 B) `) _ r.h.ah=2;) _- f9 E" Y* r" t$ f, y( K r
r.h.dl=y;1 e& t- n8 b( h* H4 i
r.h.dh=x;( }3 M8 i5 m- H. v
r.h.bh=0;" a& F, m+ F7 Z. a8 x' C
int86(0x10,&r,&r);
/ J- X# c* t# F- i U$ P, Q }
4 @" X! `5 K! z; ]+ |- U( `. @! U/ A+ `% a" u6 e7 w
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 K: p# r; b2 i
6 z: k4 F6 R6 u( @7 J: Q void puta(void)4 Y9 C; d) x: s: I v& ?
{
0 o! e, R7 U2 ~$ I6 {3 p. H int i,j;9 o" s, O X+ I: R& e# F
for(i=0;i<24;i++){5 M" q! n2 e6 O/ c$ ^" |! B
for(j=0;j<79;j++){
7 Y* E3 @1 h' o goto_xy(i,j);* G& W6 a% k" O2 s( l
printf("a");
" p9 z! x2 v; e/ f0 W A, z }( j; ^, q5 a0 q1 h! D
}( V5 l: N# w0 b" e. w$ _) G
} |
|