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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ w/ G5 ` W5 i# J( X
; [4 U/ h" e! _' O8 u& j 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. P+ s- Z8 O+ y' {: q
1 j! h; G" z5 ~, ~; X 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 ?, _' V* A, b. K: _0 |
子函数及演示程序:
3 e0 Y& I6 m* j. \$ T" r9 ^3 N4 r
, m2 h! x' n- x% n3 f3 N5 z #include<stdio.h>
_* E$ X: }$ I Z# y( c #include<dos.h>
! Z! Z: s2 r$ S$ x #include<conio.h>( z8 y! t% o$ T9 o# r' v+ j
# R( I& j+ a- }6 V" g# X void goto_xy(int x,int y);7 `! s: {* v- s9 Q% q+ g7 s
void dcls(int x1,int x2,int y1,int y2);' @& F, H) j% Z
void bcls(int x1,int x2,int y1,int y2); V: R$ o. T7 g7 C3 N* v6 U
void kcls(int x1,int x2,int y1,int y2);: t2 l* _" I2 l- x0 n. ?
void recls(int x1,int x2,int y1,int y2);2 |' O+ H( _# h% [
void zcls(int x1,int x2,int y1,int y2);
1 o6 _! @- p/ o6 O9 X8 y+ H void puta(void);0 k: I) s4 s/ m: }5 D1 Z- ~
9 e& L1 }2 V4 p* w& C2 O S
0 k( Q9 D; @1 w /*--------------演示程序---------------------*/
" a r; y5 H9 t" g; C- V main()
5 ^6 v+ e# L) A3 B4 A4 ^ {5 S3 V7 G$ ?9 T
puta();. b0 i3 N' o/ |. ]$ [! p5 u F
getch();
& B3 z% a2 T$ U) x dcls(0,4,0,79);
1 N+ w" g$ S1 m7 M F* D# W8 Y7 B getch();9 [ r+ |$ T% \4 f5 o* U
puta();
+ r% Z' f7 Y7 a6 J/ Z8 X getch();
" }& R; ^( r$ O( y8 {! n) w bcls(0,25,0,79);6 n; v( \0 d8 F3 Q+ y
getch();
- u, {* y- {, C: t/ B; h, V; } puta();
! Z. P* _& S7 p: w8 C, Y' [6 S$ g- I getch();
& W3 ?- j0 {9 J8 b zcls(0,25,0,79);; R; z' t4 T8 Q, q! \
getch();0 @8 Y3 B) [6 _4 ]
}
4 n: z! v0 |( B" V" ? Z# L% S% a /*********center clear screen(中心清屏)***********/
, P6 c" ?& _% V* }. ?6 q0 C void zcls(int x1,int x2,int y1,int y2)( w6 a0 g9 L/ n5 \# g/ ?
{
) Q: {# n, K1 H5 {/ t6 H1 c int x00,y00,x0,y0,i,d;
. F/ {1 l4 F) g0 A- l1 V6 A if((y2-y1)>(x2-x1)){5 }" l/ `+ q9 X% t0 n E* f
d=(x2-x1)/2;
3 b5 T5 g( J% @( O x0=(x1+x2)/2;
2 a% Q- X6 u6 z1 _5 ^' Q y0=y1+d;
2 w) _9 R! t) H1 F% c' Z y00=y2-d;
% g7 | J8 P2 x: W h; Z for(i=0;i<(d+1);i++)
V* \8 w! t; j3 W9 Z recls((x0-i),(x00+i),(y0-i),(y00+i));
' e A) b c2 u delay(10);
: \0 ~) N9 g/ h+ r, D }
/ f. P! R3 E6 P! H- Z) a else{
. K" j$ t) ?! i% w d=(y2-y1)/2;( A5 `. G" f, z0 B- i" [
y0=(y1+y2)/2;3 s- s: M. C" s% n' d7 @; J% V
x0=x1+d;9 `+ m. |" S& G6 r! X' T
x00=x2-d;8 p9 ^) K$ \& e
for(i=0;i<d+1;i++)
# v' b! y) [. J& S5 Z recls(x0-i,x00+i,y0-i,y00+i);6 j9 J! N4 P2 g8 K k& C/ e
delay(10);7 y: j* {8 d* }5 `; N6 z2 b- Z9 i
}! e% j. L: G# _
}
: I) ?2 c" F8 s0 z3 d! w2 F1 D
7 Q1 u9 j7 l7 _1 v; C' ^: K5 x: g /************* clear rectangle side(矩形边清屏)***********************/
t9 \+ p& v0 J
0 @( l+ Q6 G# a* g# } void recls(int x1,int x2,int y1,int y2)/ |. O9 I! v% h) d5 t# y
{7 I* m) u, N0 |3 Y2 w
int i,j;
$ c4 ~( s" K) ]4 q1 i' K for(i=y1;i<y2;i++){) o N) w/ W+ M4 w) p
goto_xy(x1,i);
; ~1 M8 h# Q. B2 e7 f2 e putchar(' ');
! d; h: z+ V! h3 I goto_xy(x2,i);9 u g# \" ~1 {9 k
putchar(' ');5 d$ K. v4 }) P3 o9 S
delay(10);
* p+ X' \' r& w! J( @7 x }
* t4 Q$ @% u. \! w- v for(j=x1;j<x2;j++){
( N& T; e, R' j# I: E( \ goto_xy(i,y1);
4 K) n" n" y# [2 l- x, H: N putchar(' ');' C7 C9 U3 B5 {8 A& O, B2 u& A
goto_xy(j,y2);
* a! v+ E! c8 c7 g& A5 ^ putchar(' ');
: z) C" T6 h; n ? |2 K$ F7 J delay(10);
' H0 Q: f( j0 a' h& w4 i; h }( p- z8 B) n% a% p8 C- {
}( R) f0 ?1 K4 k+ O
/******************open screen clear(开屏式清屏)*********************/3 }/ {4 q8 I! ?* ]+ D& p0 T
& Q5 w% D, q$ k: e6 i! N2 |
void kcls(int x1,int x2,int y1,int y2)
- P3 C. Y8 G+ o% U% c {* }7 {4 d8 e# z+ s/ i. h- a
int t,s,i,j;
( S- D! h5 r i: I! j5 A& ] t=s=(y1+y2)/2;
/ M8 M& O& v5 w( i: ?' s for(;t<=y2;t++,s--)( `! B4 B% U8 m! b# a
for(j=x1;j<x2;j++){
6 c- ?, E+ Y( l) O) ? goto_xy(j,t);
- L; |' _/ M, u( x9 b$ b putchar(' ');
) H- f$ Q# i2 Q" J goto_xy(j,s);
8 ~# l' O( [ N$ P7 E3 Z# W putchar(' ');
& k4 j5 J3 c* ~. R& \ delay(10);1 f$ w) J0 d8 F: H5 T
}
; Y& f& Z/ W- L- {+ ? }1 f# e4 q! S3 p6 e/ k& r9 G/ a w+ y! O
/*****************close screen clear*****闭幕式清屏*******************/& g; Q# K: @' ~0 Q& F& z6 ^+ J
$ z6 k( Z8 r# E' J void bcls(int x1,int x2,int y1,int y2)
- S }( @' g8 t) a4 L# B: a {
* F! E% Q- g3 s) ~! l7 F* ] int t,s,j;
$ H; r. r- O- q1 q t=y1;4 d& ^% q0 ^( f: J9 k0 Z& P! e/ @
s=y2;
. I( F* E/ } ]' w. |, \4 v/ e; d for(t=y1;t<(y1+y2)/2;t++,s--)
# H: W& O, _- ^. \: }1 X9 S1 i for(j=x1;j<x2;j++){/ T9 G; P/ z1 G
goto_xy(j,t);
4 m: X$ m- h# c1 @ putchar(' ');) E- T4 W, `% {; E- v$ x3 N2 Y5 ?
goto_xy(j,s);
Z! h2 d1 O$ q9 A4 ` putchar(' ');
* b1 v! F+ V, J% I) c u- g9 R1 Q delay(10);
F/ S# [3 m' X+ H% t0 { }
' l+ \2 h3 Z+ y }/ F r$ Y* u8 N( L$ \
/******************bottom screen clear(自下清屏)********************/
0 L3 ^ J Y: P1 ]8 t
/ u3 c' I, D$ m void dcls(int x1,int x2,int y1,int y2)' L8 `$ W) D, k- c! o1 G/ ?
{$ H3 W7 d. D. s( S! G3 c$ Y
int t,s,j,i;( x+ ^7 c) b. w& E" E' F7 V
t=s=(y1+y2)/2;
2 Y( {: S% Q+ f( c2 F for(j=x2;j>x1;j--)
6 P$ e5 ^. e; v/ F2 E for(i=y1;i<y2;i++){9 T: h( q. Q+ s5 c7 \, Q
goto_xy(j,i);
# `" e. [+ `, L: h! @! H; O) G' e; @ putchar(' ');+ x, ]9 V! e% ?- P# Q2 ]% `( A
delay(10);
. B J, [# K. J; k6 l }
% t! [1 b# }' J/ V1 j7 V% |1 d) A }
' x/ E$ w9 |" x /******************设置光标子函数******************/
+ r7 | h/ G+ }: J7 R. `( q9 g% k% \9 ^
void goto_xy(int x,int y)$ q; |* s) Q7 ?9 b |, b$ G
{
) E5 d& w7 X4 ] union REGS r;
8 R+ X. {, i1 y; Q r.h.ah=2;
, Q* @' u: x% V( I/ [. v r.h.dl=y;
: g- d/ K) ~' G8 M* F$ [ r.h.dh=x;
# g( [6 ~5 j5 V$ r0 D3 O r.h.bh=0;
3 i3 t* }4 L: K; f2 u4 E int86(0x10,&r,&r);
+ K0 D0 b0 M: p5 u }+ C' r( R9 B, c6 }% H
4 b# s U) Z* _* f2 B# C /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; G5 I" ^9 q) A5 a
- x7 o$ k5 S+ m9 h9 \4 E void puta(void)
: ?8 W/ Z4 ]" v5 z! T& H& S/ B# c {
& U5 ]; M5 C& n/ b \ int i,j;
8 p7 }" p$ j' L( f- ~8 m( P b. b' N for(i=0;i<24;i++){
3 ^: u; j: [4 O for(j=0;j<79;j++){
: Y; }8 e$ D! \9 o3 l8 [. e {' A goto_xy(i,j);+ S6 E; h/ F4 Y6 k' q: x* x
printf("a");3 s( H# i: L9 [# P
}
5 w" N9 x& D3 N6 E: | }
0 l& s: g1 [8 s* _$ A } |
|