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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* O( t5 R# C" _" i; T8 ^5 H
2 |8 g# u5 h" E9 P 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 I$ o9 I/ y D- z
/ `0 S( x2 m8 u- f 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
( y* w' ?2 B/ X0 O2 ]1 c9 P5 z 子函数及演示程序:, T8 ~ p) d5 Q: T _- C
# g, U7 c3 w, V #include<stdio.h>
, ~ ~5 _& h, K! H& O #include<dos.h>6 }& w- q7 X. [; F5 X- s3 P, ^$ N/ x4 B
#include<conio.h>, U, w! u: l) a) `& o# H9 e* Z0 D
# p2 k m. t. T! Q4 ~! V) ? void goto_xy(int x,int y);5 \5 I' D; X, L: N& W
void dcls(int x1,int x2,int y1,int y2);
7 b7 J. }+ D" J v$ F! P void bcls(int x1,int x2,int y1,int y2);4 [- p- D: w( v3 t& C
void kcls(int x1,int x2,int y1,int y2);
' d( E! S t0 D; _: b void recls(int x1,int x2,int y1,int y2);9 \, Y% E# `9 Q, m; D: g* v
void zcls(int x1,int x2,int y1,int y2);: z! ~( ^" m* _! ?7 \) O7 {
void puta(void);
* {' d5 _0 L7 ?$ C" O7 t9 s
: L' M. u V6 T$ u. Z3 ^% o, {. l) B! U# s5 N- O' P
/*--------------演示程序---------------------*/
& m8 N) F8 r, }- M- l( W6 q/ l main()
5 U1 W# B6 p- B0 d/ E) U9 C {
# R( }& S( V1 k! @7 A puta();* @0 G3 S. `: s5 W5 V# N f8 v# i6 @& D
getch();
. z# }3 p$ S1 k) m% _ dcls(0,4,0,79);# A( Z, L. `) G
getch();
- w! a% t0 r Y# i puta();
% I) T; ~; S- L9 p; | getch();. E l9 x& _- T' d6 N& W; y
bcls(0,25,0,79);
. U6 o( a2 Y8 z7 f: R( ~( b- h! @ getch();+ |9 q' M5 X5 g4 m+ z* o# h
puta();
$ U: P0 {4 b" t$ R- ] getch();: b3 V' O! K; X. m F6 w$ a4 c5 h
zcls(0,25,0,79);, O! c& q9 n: E5 x
getch();5 u- \2 m% F' f! `7 E$ L% H% E
}& h/ X2 {5 G( V1 {
/*********center clear screen(中心清屏)***********/9 Y9 Q7 N0 R& p1 K' W/ ]
void zcls(int x1,int x2,int y1,int y2)' w+ ~. p C& Y/ t1 x; K: N
{- B# @( @! v0 b) u) o# u
int x00,y00,x0,y0,i,d;
) _2 `/ q9 t# {* e8 p' n+ {5 Z; j. G if((y2-y1)>(x2-x1)){: n/ d" r6 ?5 X' L& a k3 N
d=(x2-x1)/2;) m, k) D( ?. T2 K3 q& q
x0=(x1+x2)/2;
' h9 T2 d' _$ g$ p; w Z K; v y0=y1+d;
4 S4 \# q7 F: ^$ Z& P y00=y2-d;
3 _2 H( F3 [3 ?5 X0 ?- w# D# F) n for(i=0;i<(d+1);i++)
+ \4 p5 v, ]; M+ r3 [ recls((x0-i),(x00+i),(y0-i),(y00+i));
6 |1 a, b0 s8 u+ u- C) J delay(10);
) o6 Y9 S3 J7 Y3 ~. f) P* g! ] }+ o1 k. C; x' L
else{5 D% c) w$ K/ D2 E# `
d=(y2-y1)/2;
. W# S$ a; ?5 d- ^4 X3 [ y0=(y1+y2)/2;& T8 |) k8 [3 \8 u: [2 p
x0=x1+d;4 t# q% p# i, s9 J7 E- _+ c* a
x00=x2-d;
V/ p M6 z" N& L5 y. i for(i=0;i<d+1;i++)3 s% z* X! s2 E* C6 v! I* ]) R$ z* a
recls(x0-i,x00+i,y0-i,y00+i);! m3 M3 k. B2 d. V* @
delay(10);
# b6 y- e9 U- g5 O! M }" P ]7 J9 \& P7 A1 ^; J7 p/ G3 I
}, r) a( S% c/ }7 g% O& ~
) I# d Q7 J# T3 _6 Y
/************* clear rectangle side(矩形边清屏)***********************/
4 K% g! @7 b* h: {' j* G- w3 J% O" b* W& o/ z+ F) S/ x
void recls(int x1,int x2,int y1,int y2): i8 {8 }7 y: g
{- @& o6 N; R) a- k3 H J
int i,j;
0 e0 L+ O0 k+ z/ C4 E$ N; g2 }' ` for(i=y1;i<y2;i++){3 Z# G$ H7 R" g' F
goto_xy(x1,i);
1 p: J' L u' C- ` putchar(' ');2 L% R/ \& f) h) s5 G2 h$ Y* x
goto_xy(x2,i);& j+ _& }& _# S6 J; a- `
putchar(' ');
9 |* ]% Y- C. u6 B5 {% j delay(10);
/ L7 ]& L5 C. X }. @+ ?3 H0 d/ F/ }) s. m
for(j=x1;j<x2;j++){
# l+ k4 d- _2 P+ K goto_xy(i,y1);4 n% I5 o4 a4 T
putchar(' ');
+ C) |: j/ |9 t& P goto_xy(j,y2);/ z' Y7 c, B H( R. z: U
putchar(' ');
# V \( f+ u2 H2 s6 s) [6 _ delay(10);
7 ?& B# e, ^2 Y, ~ }
' ]3 z) z: p7 ^' ]( r }4 ]3 G" `7 ]5 b5 b. q a
/******************open screen clear(开屏式清屏)*********************/
) Z/ N& h+ v; u8 k. Q5 h5 I1 Z9 m) Y
void kcls(int x1,int x2,int y1,int y2)
* A1 t( T" s5 j, L {8 d2 w/ D, Y Y( n) J
int t,s,i,j;
/ E* R( b' E; }! Q/ O' r% u; I t=s=(y1+y2)/2;& }8 s8 N8 O& y6 W* @" {3 E' J
for(;t<=y2;t++,s--)
( E$ r7 @; k1 w' ?8 C1 p for(j=x1;j<x2;j++){
) v) t2 M! B% S+ G( Z! F2 j/ k: t goto_xy(j,t);2 X O n, k" ^: u( k5 {* ^& \
putchar(' ');" b n/ w- W. v2 D* C, {
goto_xy(j,s);# {% A- G G- ^! c, G- @
putchar(' ');; M: W A) @! Q2 J5 ^6 R# x2 _
delay(10);
& L6 G2 W; [9 I( y$ R) ^) x- o }
3 z: z5 U F* g }3 H; ` L% y6 v1 s1 g
/*****************close screen clear*****闭幕式清屏*******************/, g1 R& c# M( q4 a2 i6 G
% @8 ?% \7 V: N6 {6 r& D. z void bcls(int x1,int x2,int y1,int y2)' Q" q$ J0 E) i+ i7 n" l" j/ ^/ g
{
4 }5 e9 j8 V! n/ P% Y9 s5 l int t,s,j;
7 j( L+ u& A0 u; ^. D t=y1;1 `7 F2 c7 |2 ?0 W# C
s=y2;
3 P! g8 k7 Z: [8 l for(t=y1;t<(y1+y2)/2;t++,s--)9 Z1 o+ C. C$ ?; h- L
for(j=x1;j<x2;j++){
; |" Q+ s7 D7 Z& U& ] goto_xy(j,t);) A/ ^/ k/ j4 m X7 T9 @6 n
putchar(' ');
3 B+ Z+ [% n" J* u- P! O e, J/ W1 U goto_xy(j,s);- X$ r. Y5 ~6 R
putchar(' ');! |% p/ C7 F$ b0 N" I
delay(10);
( Q; v8 Y: |8 O! w o( `5 W }
, O% ?9 L6 w. G6 k. s }' P$ q/ c4 L8 K2 \: m7 C
/******************bottom screen clear(自下清屏)********************/
, T5 j N# H7 L5 ]/ n5 u& F' d& b; l
void dcls(int x1,int x2,int y1,int y2)
6 @8 r4 s7 t7 Q* H {
! t) `9 S4 T1 x) s( w int t,s,j,i;$ ]' F( R9 v2 n- ~& Y5 W
t=s=(y1+y2)/2;
3 j0 W5 ?5 a3 h( w& Z: S S for(j=x2;j>x1;j--)* U) a, P+ m. `& c9 O. q" F
for(i=y1;i<y2;i++){. \4 }2 ~4 i" H: \3 X0 ^& l
goto_xy(j,i);
5 a* \7 y7 ~/ }! |6 j putchar(' ');* j; |( t& t* i Z6 }5 U
delay(10);
( n6 _. n; b$ ?7 ?& m d" }9 H: y2 e }( y9 `4 m9 d% R$ O" c
}
+ u) H- N. W8 z /******************设置光标子函数******************/& F4 Q" s5 S' G& t; n) g. }! Y0 @
! T, M/ |8 {! `4 b; g+ ^4 ? void goto_xy(int x,int y)
! o. A! ?5 }& e6 N {; |0 U: h/ X. L# U3 ?. w2 l& k1 X
union REGS r;: h6 T1 S! b2 y# Z6 U
r.h.ah=2;
( E% v( l& ]9 Q: S6 l- F; L r.h.dl=y;
0 M! u- M3 N: V$ w5 A; @$ x; q r.h.dh=x;
2 D% P8 i) Y3 k% d6 y' j% r r.h.bh=0;
" H5 \" {/ ?* ?% L6 P4 M* K% M: D int86(0x10,&r,&r);
/ q3 S- k5 @2 Z# Q6 z- u- v$ Q }
$ Q& g9 |+ t- S3 |+ p2 Q0 l- j6 g, f
/**********************在屏幕上打出一连串的a字母用于演示程序******************/# a$ I/ P% g# ^2 F, P {
0 m6 M( b# Y2 a! Z void puta(void)' U8 G5 W; [; z$ h/ X- A% Q8 u
{
. w6 q5 Z' [" X6 e( f: ?( A2 _* t! K int i,j;
4 \, C2 S7 f' o3 i6 A for(i=0;i<24;i++){' g: b4 t: |& {) L- u
for(j=0;j<79;j++){
3 T- U) V% T( D$ t0 {/ Y8 Y" M goto_xy(i,j);
0 |" l1 D6 Q+ I7 G2 N8 | printf("a");
" I! ?5 H* K8 G( ], K: t }0 B0 S, [, g7 Z* H' G( m' L
}! @: Q- k. O2 v5 x4 P% k
} |
|