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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
: Z4 O7 y1 V3 Z0 V% Z" }" R- `" P+ G. @- l7 v: p
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里0 @$ }0 p7 I' g( M& x. l0 W* b# d$ U
( J/ u g6 v( g4 |
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ; a7 L1 h4 q4 t4 u$ Q) W
子函数及演示程序:" l; { Q; t" ?5 n$ b
% e, N8 S8 o, _, U9 ~ S #include<stdio.h>$ h0 @( J0 w; p4 C
#include<dos.h>+ g; E# Z" m- j7 Z
#include<conio.h>
3 y' Z% W7 a! I3 z" P: F6 E, d# a; B0 ?3 _3 l: W6 k; J
void goto_xy(int x,int y);
# a5 m# o7 N; R& p void dcls(int x1,int x2,int y1,int y2);
- q4 {4 g7 [$ a, q# P7 j void bcls(int x1,int x2,int y1,int y2);* \1 k. G7 k4 {& [. q6 c" e' p
void kcls(int x1,int x2,int y1,int y2);2 D% n/ B, i6 U% D$ y
void recls(int x1,int x2,int y1,int y2);
; I" @2 w; K6 Y7 _6 _4 P- \: O void zcls(int x1,int x2,int y1,int y2);
' E: z0 ~% S) q6 @, V# V+ l0 ~2 L void puta(void);
1 {7 p8 Y$ R' ~$ [) o
7 N% v% o0 Z- j. ^4 S
* r; n- B ~, J; ^' } /*--------------演示程序---------------------*/( ^7 U& {. N7 ~8 C
main()
, J; v8 P5 D% ~2 i2 i& m5 } {; @" g1 v8 Z1 H D- Q' q0 C
puta();
& d* T+ C) z3 \% z, n1 U# G% N getch();
! C4 p: U5 n. B1 J dcls(0,4,0,79);7 A. l/ T. z; \" p2 e$ {- y" e5 S1 p
getch();
9 g. F( k& E6 s9 y, W6 l puta();, z; d: F( k5 Y: l2 O
getch();
( `$ h) U/ G( {; S0 C+ Y bcls(0,25,0,79);
& u w* q9 h* _& ~0 d6 O) m, i. N getch();
# x2 p# X8 ?! c, p" u9 S8 Z7 v puta();
8 \1 J( F/ R e; M# | getch();
' E7 S+ w7 t3 y+ S zcls(0,25,0,79);4 A' b) Z5 Z1 O) E( j/ ~* w+ K# ]
getch();
. K0 ^# X# t' e( V5 |; M }
5 c ~* m9 T) P- f; z$ s% z# c /*********center clear screen(中心清屏)***********/
% H) s. F% O4 y7 ] void zcls(int x1,int x2,int y1,int y2)
/ ]4 @+ \$ _& ] {) W' x0 O$ b7 C. Q9 P2 T, S* x" O p
int x00,y00,x0,y0,i,d;
5 u( q$ R, m: p* k2 f$ k9 P9 c if((y2-y1)>(x2-x1)){
. a& y, T+ O; J e: F) f d=(x2-x1)/2;
6 V% {% m" N2 j- H# ]: [& _$ r6 ~ x0=(x1+x2)/2;0 X1 I) A" S: a5 M% C
y0=y1+d;) @& X( u! y' c6 n s( {
y00=y2-d;" ?% Y5 T" r3 S3 V
for(i=0;i<(d+1);i++)
! F6 ]9 M1 M% ~# K/ o6 j6 q recls((x0-i),(x00+i),(y0-i),(y00+i));
; e5 U2 m/ @) j delay(10);
8 S- U4 ~, S' h0 p }7 X- f* x' Z4 G+ U/ _
else{& H7 e l' | p' ~8 f
d=(y2-y1)/2;% V' B0 i$ T' n$ } j; c
y0=(y1+y2)/2;
' Q# e8 j6 }- t7 \4 K x0=x1+d;% J2 `4 t( `9 [" H) P
x00=x2-d;* r6 Y. C9 m/ n: ~1 w. O
for(i=0;i<d+1;i++)
4 h: Q+ z# r/ J% b recls(x0-i,x00+i,y0-i,y00+i);
$ d( r. f2 L. I$ v* M6 F- \ delay(10);
2 O& G d" g6 [" g8 j* O }
9 m# J c. n+ ^9 Z# L' m }. ^" X& L8 V$ I- i' T8 i
% q. l# F/ L6 \ [2 |) \& @9 O, \) J /************* clear rectangle side(矩形边清屏)***********************/1 w- e3 U5 A) q* d& Z* U+ x4 f
. e$ S0 r7 a( R3 ]
void recls(int x1,int x2,int y1,int y2)
: O0 K+ A" f9 L {
- V( T; U% I. @( s7 B! C4 N A$ T int i,j;4 T7 O) E0 ~$ i7 [7 H
for(i=y1;i<y2;i++){% M% p/ R, x% m9 i7 L8 i
goto_xy(x1,i);2 L$ i8 i6 i7 U& y% y
putchar(' ');
9 F9 x2 Z6 F+ a% E( x) H goto_xy(x2,i);
) B$ ~7 V r3 @ putchar(' ');
. _. p) I, U( M- k6 O delay(10);1 h/ A' o9 Q, i9 M" p
}$ u9 |4 I5 {* C( C% N& Y6 E
for(j=x1;j<x2;j++){, [8 C9 I p8 F1 g Y! G
goto_xy(i,y1);
, E1 F _; X: p/ r4 _ ^4 B. f. S putchar(' ');$ p0 \1 N. P9 I5 c: ?- X1 w
goto_xy(j,y2);
" g* \' I; p5 [/ X* X putchar(' ');
- ?7 e+ X8 F: p/ l/ Y1 J' z delay(10);
2 p) w: s( w0 x8 W4 o }
4 a2 p$ e' x6 z% J1 J; I }
7 n1 S. W2 p$ t2 a W7 G' x3 r9 G /******************open screen clear(开屏式清屏)*********************/8 S' J5 k( M- U F: P+ C m5 w: Q
+ _. X$ P# f2 S1 j5 {3 J9 C0 e2 _
void kcls(int x1,int x2,int y1,int y2)0 o: e6 T, }3 W
{
1 c. Z; M6 c7 k( Q) _5 o- N int t,s,i,j;$ \8 Z$ ` H/ n0 I9 ?
t=s=(y1+y2)/2;
, `% n9 b( H ?& s for(;t<=y2;t++,s--)5 K& @1 P! |8 X
for(j=x1;j<x2;j++){3 a; s" p7 H2 M
goto_xy(j,t);
V" x4 L/ M% g- `- ^1 _2 v putchar(' ');5 u4 ^8 H. p# r" S0 [2 }" z) G
goto_xy(j,s);- @5 u" }& k5 T, U5 u
putchar(' ');; ?6 a; e: p1 b! `/ I- |0 S
delay(10);: o: X4 K$ M/ L# t
}
- B4 I! E/ }' H @ }, t' W# m. ]+ Q _3 w# X5 h
/*****************close screen clear*****闭幕式清屏*******************/) ^; B4 n* Z( `4 |/ ?2 e5 y
# `# ]2 {: A8 Z/ H& t4 ^
void bcls(int x1,int x2,int y1,int y2)
; _, O. N, y' s4 r, }; ~) s8 P {1 M3 H& h- X$ s- s9 q' c7 i3 _
int t,s,j;
) E9 @/ j( }$ a0 d t=y1;
) F: y' }/ S8 g2 q s=y2;
5 D7 N ^5 U5 o for(t=y1;t<(y1+y2)/2;t++,s--)
( h5 F) _' [) j% J1 z4 O for(j=x1;j<x2;j++){) b: D0 J4 ?- r7 D+ t+ e
goto_xy(j,t);
, ^: ]" B0 v, n putchar(' ');
8 J6 Q4 z, U" W$ s/ o& P goto_xy(j,s);) _9 M* _6 D& }, r6 S% P' t
putchar(' ');
3 D6 s& G8 a) ^4 A' N delay(10);7 `9 w3 y* @" c X
}
8 E) U$ l3 Q4 u7 f' ?+ q* ?/ P }
) t3 \& r4 p2 `3 c4 \2 f /******************bottom screen clear(自下清屏)********************/
1 y+ ^ e) ` ]
6 n1 |5 S% z) O0 D9 p8 }3 A void dcls(int x1,int x2,int y1,int y2)' Y* ?. x7 ?$ D" H/ `0 n
{
$ a6 B6 `3 j1 M3 C5 q int t,s,j,i;6 Z5 [0 j) P" ], D( l
t=s=(y1+y2)/2;
6 G* T. q$ ^( v for(j=x2;j>x1;j--)
0 S( J1 `& \6 C& x% G for(i=y1;i<y2;i++){ E" |+ z# l9 `7 Y n
goto_xy(j,i);
9 K2 |' K& q8 G2 Y" W7 m% a$ w putchar(' ');3 {6 H; @. R b* {3 f" l+ |* `
delay(10);2 H2 _' V: t6 Y; V! @7 u
}* K0 T3 T1 @; S& K5 T/ }
}9 x7 n8 h& _6 }% i5 P+ h% s
/******************设置光标子函数******************/
3 C4 b4 R# w* g* K' D* p- ]9 D g5 m% b9 s
void goto_xy(int x,int y)
+ Q0 Z! P3 f) z" { {
5 |9 \6 I1 j+ T$ x( M4 \: s union REGS r;$ o9 `2 f) A" N7 p: t3 A
r.h.ah=2;
, J$ m, x9 V# t0 @ r.h.dl=y;
- x# a* Z. ^/ c$ ?4 Z& z. F7 g r.h.dh=x;
+ n* _ V* d1 p5 X' }# S# E- s- U r.h.bh=0;& Z3 a m6 w: U7 K+ N5 ?) n* p
int86(0x10,&r,&r);* ^) {5 G( b0 U0 l, o3 v, @& [7 ?0 L& [
}
8 y# X. i W7 h
3 z/ S/ c# a+ d q& I7 h; m: \ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& S' _2 ^4 a& E" \ F& j
( S6 f+ w- } t2 _6 z void puta(void)6 H+ \. \& c6 {
{
9 j) `. `( r6 @7 V7 Y1 k int i,j;* K$ V4 y: g" l8 M! L% k9 q& K4 N
for(i=0;i<24;i++){
- J" j8 V1 [9 K* c" \+ b: V5 L; E for(j=0;j<79;j++){7 U3 l% l2 s3 n+ f* P* Q1 [. h6 p& v
goto_xy(i,j);
8 E. `- o3 {2 G* I printf("a");
- I2 }6 \# H: r, z9 O% d/ ` }
! H5 S9 U9 Q, h4 @) a; V }
' e6 @8 L) \4 n2 o% r } |
|