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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 m, e; {. A+ s, p$ p* N, | k4 S6 z
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( E( g7 Q- v. U- ?. O1 \$ Y: M9 b0 _& T4 \# e5 ^) F
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
, ^/ D- `: K1 t1 e9 G7 [0 \& | 子函数及演示程序:
2 j' q* P$ q+ f8 g- s, r0 w
7 e# M/ d/ r3 T( ^# D #include<stdio.h>7 m+ }9 F! I3 h5 k6 v+ ^
#include<dos.h>
0 p7 V: W5 A0 ?' N7 Z$ B3 p A( ` #include<conio.h>- l# z1 C0 L3 b# l6 q. D
+ Z) S1 S* ]5 R6 `+ v( ^ void goto_xy(int x,int y);! K' u! W( C8 L6 }2 Y* [
void dcls(int x1,int x2,int y1,int y2);: b, z2 r7 _" E) T+ n
void bcls(int x1,int x2,int y1,int y2);
% C8 C% @- Q" y7 ]7 o9 N& o# c e void kcls(int x1,int x2,int y1,int y2);5 W: L+ R. \- @' w5 g
void recls(int x1,int x2,int y1,int y2);
) s7 G K5 b3 e+ S void zcls(int x1,int x2,int y1,int y2);
- `& Y: B6 q- u; C3 J void puta(void);
( z7 m2 a6 w( i
& x" ]9 t2 e, p/ q$ \7 C- n# m5 A) \9 o4 G3 X
/*--------------演示程序---------------------*/
% S; h$ A2 v. Y4 g h: m main()8 @9 e" i; `' K, s, D6 d
{ t* X: `6 s7 {: y; |# h" A
puta();
) O- \$ g: q4 e getch();
+ p" X8 h* |1 s5 L' U$ O9 P dcls(0,4,0,79);6 M: a9 Y( `% a$ _6 A9 t4 E
getch();
8 y! c1 J+ b2 N7 [# h6 h/ V% N0 W puta();
5 @4 W# e4 j8 B* \' H0 A getch();
) K& N4 d/ E- i6 k bcls(0,25,0,79);
+ F: o. N' ?8 w. V4 A/ ^. l" D$ y getch();
% l0 c( A- t9 i6 f$ o6 I% [ puta();: `, }+ u- N& D) y# n
getch();2 m/ f: P* u8 B& T7 n- r9 w
zcls(0,25,0,79);
9 P. \: q8 f9 ? q! @* q getch();) F6 i: e7 W9 t/ ~
}
. f2 d1 I c7 ]. C1 i. T /*********center clear screen(中心清屏)***********/$ [5 o" n* R$ x# G! A, y
void zcls(int x1,int x2,int y1,int y2)
1 R0 N; Z2 r# a/ A' y0 e {
! |3 f, ~4 F3 h B int x00,y00,x0,y0,i,d;
) G' W9 [$ c3 o if((y2-y1)>(x2-x1)){; b0 ]$ |% @: U% m! n% k; H$ M
d=(x2-x1)/2;
I* e7 _3 w' n7 {5 U: G2 R. H1 V x0=(x1+x2)/2;; R1 i: M% `- m. g$ s' o. |8 }# b1 L
y0=y1+d;
9 e/ S# P& u( u9 D7 C5 z5 r. S y00=y2-d;( Y; k6 r" u. D! z8 f4 \
for(i=0;i<(d+1);i++)1 P# A$ s* X+ `
recls((x0-i),(x00+i),(y0-i),(y00+i));
+ \8 N# {: |; O delay(10);8 m0 C' S" d( N. r
}
3 y: a$ K, u, ` else{
2 ~4 r, w% L( h( D% o2 I2 k d=(y2-y1)/2;
. P! C1 @" }) s( M% e. m2 ]+ l: V y0=(y1+y2)/2;) {, X" \0 [; Q
x0=x1+d;
5 `. F) T D9 i8 u5 z x00=x2-d;" c* K5 G) Y) P6 x
for(i=0;i<d+1;i++)
. p1 J7 \# b" X( Y+ R8 Q recls(x0-i,x00+i,y0-i,y00+i);
: |' `9 Y1 y- \ i delay(10);
! O9 q0 O1 \: G. w }
8 _6 M( Q; [( h }) Q9 `# t }( @* @7 ?5 _ K1 A3 G% v' L
m3 P9 }* I$ p M2 p$ c9 X# W
/************* clear rectangle side(矩形边清屏)***********************/
8 q) ]: v6 l& Q U3 s0 E* z1 m9 f1 S2 z" Q* g% a0 C) s
void recls(int x1,int x2,int y1,int y2)
$ C; N8 {* @$ ^ {# h }- ^6 S" L: b! U
int i,j;# o! p$ f" Z9 A
for(i=y1;i<y2;i++){
& a; m% }: k2 A5 c' h goto_xy(x1,i);3 [. `: V* ]: l. S4 g2 F; C$ m
putchar(' ');
: a% V6 h8 \- |5 z' l. [ goto_xy(x2,i);
' d: h! C. t6 G. a$ b putchar(' ');
' T# u# a' Y. e( T& ~# \/ K delay(10);( r- m8 M/ v' D, s6 c+ X
}
" ~+ h, B' N( z' Z3 I4 H2 Z4 W for(j=x1;j<x2;j++){' t8 @. M! e# t4 o; L
goto_xy(i,y1);, Q# F1 c; G2 d) H) b/ D
putchar(' ');
: S0 [7 X3 v9 w goto_xy(j,y2);, B7 z; Y7 G- m, W
putchar(' ');
$ U7 J B. O1 D% P0 K% M delay(10);$ \3 c. t+ O. o: W( O
}+ s7 E, J% w: z8 a- q" t+ W
}* f" l% v" |2 n) q+ q6 R3 \' b
/******************open screen clear(开屏式清屏)*********************/0 `3 K+ E/ B: ?& t# ?- ]
7 N/ }( \4 g( { void kcls(int x1,int x2,int y1,int y2)
& a8 c+ x5 c$ d {
- {: @. }! l5 r7 w5 |+ L6 M6 q( X int t,s,i,j;
( H p. H. I2 S* O t=s=(y1+y2)/2;2 r/ L" E a3 a9 X3 w/ `; L! Q& @" O
for(;t<=y2;t++,s--) s3 ]- \; K ]9 w" h+ R
for(j=x1;j<x2;j++){' V* X v% g" i, |: ]7 W
goto_xy(j,t);. A' T6 f# O2 m' R2 O
putchar(' ');
2 e, T% r4 [* Q, O5 }! i goto_xy(j,s);; B1 L9 `, |5 c# @
putchar(' ');! ]. s5 \1 N+ q% s' _9 W$ _) a% A
delay(10);
a& o' g6 \% P! u* R6 Z& a8 _: { }
2 F* m5 t5 F+ y* b% {! s* B* C }
6 S7 ]& k$ g! }5 O /*****************close screen clear*****闭幕式清屏*******************/
9 P( U% E; r0 |4 Z' j1 z0 {$ ]$ H+ m0 J8 h: k% {( P- v/ W
void bcls(int x1,int x2,int y1,int y2)8 A+ j$ s' D8 @" R! e
{
7 _/ r9 A# }% U7 V4 B2 \ int t,s,j;# I9 |- {7 D1 D0 o' b- m h+ v( l
t=y1;$ F: w2 j% [* {. U- \% X
s=y2;. O [0 A" V) `: h6 l
for(t=y1;t<(y1+y2)/2;t++,s--)
; b( E) b. K! H8 u/ J& W' w for(j=x1;j<x2;j++){
1 z& U* F: `0 g% y8 N: X goto_xy(j,t);4 Y# w# L( j' @
putchar(' ');4 R9 d2 D$ @, K
goto_xy(j,s);. O; l; n& O0 T1 Z' Y
putchar(' ');6 t* }) n8 \- l7 d$ A
delay(10);: s$ [& c! L1 Y& N
}8 i7 G' n0 x; h9 o
}* l0 Y4 c$ h/ F. _; [& }
/******************bottom screen clear(自下清屏)********************/0 r' j4 i- K# B2 v
; ~+ e* L% p" S; a8 T( D, s+ q
void dcls(int x1,int x2,int y1,int y2)
0 _, o( Y. Z' J% E$ ^# R {
2 p; u$ _. V& U" _7 D: D( E int t,s,j,i;
/ p q1 `. {9 {4 j1 V/ [# @8 T t=s=(y1+y2)/2;. L" q7 _; ?, ?+ Z4 c
for(j=x2;j>x1;j--)( z& P& E/ G! n4 ~7 F& H6 M- w
for(i=y1;i<y2;i++){3 A$ {# y2 y; z/ b: D- c, B
goto_xy(j,i); n* j- c. C0 }5 `! U9 R; `
putchar(' ');
, b! u& X' `0 O0 P$ W2 O3 k. a delay(10);
) O: w2 }) e8 }& I }2 b: r _; I8 ^1 |, t% e
}1 u- r/ @) v! s# l* Q! Q/ P) N
/******************设置光标子函数******************/0 n* }. z% X. r6 N) M q& v2 F, C
$ S8 S7 b Y3 Z, Z9 }$ P: ~# f0 _. R void goto_xy(int x,int y)" G" o: o' f" P# b" j9 C5 f- L& ~
{
: b) D# \1 Z3 j' n: @# }. B) i$ b) v union REGS r;
7 c1 R$ @, q" F$ B; V r.h.ah=2;
, r9 X! @/ b6 f1 W5 c K9 z% P* p r.h.dl=y;
1 q! Z( S( m: Z" S, l3 ?% h r.h.dh=x;
8 }( s% o1 ], t r.h.bh=0;7 c. ~; C( Y" `8 `
int86(0x10,&r,&r);, x0 S- n% S1 [4 p$ O: }% @8 F' d
}7 U8 }4 N; |3 X ? n% r) N! v
$ B4 d% i( g2 R/ _. `9 t, a
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
# h+ Q0 v. l7 p6 X% {- W; B0 x3 H* N9 n1 m0 r, W. K8 D- S3 V
void puta(void)
: p5 C2 s9 D# a0 X {
7 [7 k0 [4 U0 R" L4 i- _ int i,j;. ]0 ^/ }+ v4 v
for(i=0;i<24;i++){/ q8 N8 c. @ o7 s; U
for(j=0;j<79;j++){
# F$ {! Z! @- G+ j goto_xy(i,j);6 w9 Q* i; Z. H3 _
printf("a");' o A1 b) w1 |4 @+ h n; G3 C
}
. U( o* z. y3 ` }1 E, s ]& s5 B( P" J
} |
|