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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! Z1 I; a. }0 Y1 Y5 T$ b. ?3 ]7 |. F
* ~! E0 _" n( O) f: E 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. h* K5 @* Y2 W& ?$ T% n& P( ~" \6 S' E7 L8 R" Z
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 ~# p+ C4 X0 S3 r' R( P$ f
子函数及演示程序:5 U% L1 x. ]& S, G9 Y8 p( M1 w
# K3 c+ o! q1 y( O Y/ z1 r I8 W' i #include<stdio.h>2 d$ ?3 c( Z5 R K: N/ i( o1 I
#include<dos.h>
* I2 y& y+ b3 q" Z" K( G( C #include<conio.h>
: ~4 A+ ?9 p% y/ j# b
- D( d) I5 ]; H7 X void goto_xy(int x,int y);1 Y5 ~4 {! \+ W" e- D- U
void dcls(int x1,int x2,int y1,int y2);7 U& t2 |$ f+ K
void bcls(int x1,int x2,int y1,int y2);
0 n8 Y" E5 E3 E6 [9 T void kcls(int x1,int x2,int y1,int y2);4 d( i% d( ?" w1 e v
void recls(int x1,int x2,int y1,int y2);- M4 T' Z4 t( \/ Q: Y
void zcls(int x1,int x2,int y1,int y2);
6 t; p; Q8 ^8 _ c+ I" d void puta(void);, v: w8 J. t q% j% a
3 q6 S* t, Z( `7 p" e1 E5 y4 k& S- s% Y, h. M1 k, [
/*--------------演示程序---------------------*/' `1 K3 r% [1 u1 q
main()1 {; w5 q5 `8 x) Z) x
{
_) \9 V" x' k @9 z, f( P6 Z puta();
+ ]$ q/ q8 q8 S+ Q getch();
5 F7 {. x% o6 k3 A# u dcls(0,4,0,79); U% o2 [7 h5 D O4 p
getch();+ `$ r" l' a+ |) B
puta();/ z$ y$ H- b1 B
getch();, { c- O$ ~: T
bcls(0,25,0,79);4 g, U) a% ~( l+ `
getch();
' }" g7 D5 \1 E puta();6 k: a0 \3 {1 g& C0 g0 K
getch();
2 @! ]- ^) c% T5 |8 w1 k zcls(0,25,0,79);
$ a" I+ \1 _" X% v0 F3 B: A3 J. S getch();8 e$ a5 p8 P! P. R; N$ o/ F
}4 o+ _( m3 C% k+ ~ E2 _
/*********center clear screen(中心清屏)***********/! f: M, @2 _1 K: l) I- j
void zcls(int x1,int x2,int y1,int y2)( d# I& }0 V3 V
{% P5 \6 A& m9 N, F# N5 O
int x00,y00,x0,y0,i,d;
3 q: Z# b, C! D4 } if((y2-y1)>(x2-x1)){
5 d. _% a% O- X) J d=(x2-x1)/2;$ a# N( ~% @7 Q+ a( T% ~' T4 _; O
x0=(x1+x2)/2;
7 {7 Z: y1 N: J. ?6 Z- H8 W y0=y1+d;# f1 ^1 H7 @; Z" k
y00=y2-d;
/ P8 e) v. b, r for(i=0;i<(d+1);i++)
- W1 ?; P" X8 W1 |- k% R recls((x0-i),(x00+i),(y0-i),(y00+i));5 Y% M0 U. l6 d+ W- \- J* X
delay(10);+ O$ e8 `4 |0 l& P
}% C& A- c# }5 u5 T# e
else{
4 ]& o2 D" G/ R d=(y2-y1)/2;: M9 Q& ?& P5 l$ F* F: m1 C
y0=(y1+y2)/2;
2 c/ ^- Z4 O$ | x0=x1+d;
3 A" u1 k; Q F& ? x00=x2-d;
1 ^$ _4 M1 X& a( |3 \# d. W* @% c7 B for(i=0;i<d+1;i++)2 Q+ P( A' z6 s4 S) z* t, {5 `- ?
recls(x0-i,x00+i,y0-i,y00+i);. i; c: ]/ {3 F1 Q% r/ B2 i% @0 d9 ^
delay(10);4 ~) H3 o6 F# z
}4 V7 b. t& B+ `( \7 @# r; q- E: U
}
N! }: L F% X4 o7 v7 \2 b5 z, q% t1 W2 K o: o" [% d
/************* clear rectangle side(矩形边清屏)***********************/4 X, P0 I- Q6 N
4 `- x: i! O9 {- t2 l void recls(int x1,int x2,int y1,int y2)# e: P: p+ r( ]5 {8 F+ ~
{5 c; [& E- Y3 \0 |$ [
int i,j;
' B( i9 |% w5 L' @ for(i=y1;i<y2;i++){1 y( V- Q8 ^; [4 t
goto_xy(x1,i);
8 j. q# b. E, _) ~ putchar(' ');5 y' l, O, e/ V( ]# S0 B3 \, `! w# v
goto_xy(x2,i);
' t' O4 X% |3 O5 n putchar(' ');
# a" _; H1 ~0 v. ?' `$ {4 P delay(10);
8 X3 E' A* S4 R- D" M i1 Z' z }$ N7 [( o+ ^/ n A& @, N5 s
for(j=x1;j<x2;j++){
7 ?$ o5 G5 v7 u( F goto_xy(i,y1);+ g- K5 a. m: K
putchar(' ');( H3 s3 Z" ~; h. d
goto_xy(j,y2);, g- n" l$ y$ k7 O' ^8 `
putchar(' ');" e' x! ?$ r2 }- j, z3 q
delay(10);/ e K+ Q) g* [
}
9 N- ~" w) c# z+ @8 a }
' t. d6 c" V6 `' J( @ /******************open screen clear(开屏式清屏)*********************/5 y( H6 o/ o4 p+ P
- g/ ~: @2 w0 { void kcls(int x1,int x2,int y1,int y2)1 G5 o1 `& W( J6 T1 q9 Q
{
# n3 c: [. O. `7 n+ K% T* [ int t,s,i,j;7 k E& t2 U# d$ c `# \
t=s=(y1+y2)/2;
3 b8 P1 w( ~7 V- u for(;t<=y2;t++,s--)
4 F* F- `5 o, D for(j=x1;j<x2;j++){
3 y+ j( U/ k" r% I, U- o9 ?7 k goto_xy(j,t);
! f5 T' I3 l O putchar(' ');
2 h* u# }1 i' w4 v6 I! O( h! o goto_xy(j,s);) f& N& H, |3 n; X
putchar(' ');9 U' t! I% s2 S" e9 G7 S
delay(10);
6 k+ N. R: D, |; l9 ^ }
1 ^" Y7 W- F, }" L" s# K }
4 y6 x* [$ \& A% n: `9 K /*****************close screen clear*****闭幕式清屏*******************/
) o2 h4 L9 X) m8 U* Z d% I* D
) }- O, u4 M. Y void bcls(int x1,int x2,int y1,int y2)9 k9 U5 w5 ^6 {# g/ _8 [! V) V6 Q4 h
{
% b1 t' w% \6 C int t,s,j;
' h7 [" A! f. n6 R9 @ t=y1;
) s$ I0 e) H9 c2 o- i. w s=y2;
) z7 A e2 u7 U Q, ^! Z+ A for(t=y1;t<(y1+y2)/2;t++,s--)
8 d7 A, ~! o) C# V% O* g, `( v& U for(j=x1;j<x2;j++){4 S4 \- f3 r. d1 p8 l W8 S
goto_xy(j,t);
4 X9 p' {- c( o6 x5 K putchar(' ');, B Z" n2 |0 C6 M: T# U
goto_xy(j,s); _$ n5 X4 f) x: X ~+ w. m# z3 @
putchar(' ');
7 \& n1 i7 J6 g& I delay(10);# q/ S, ]8 U% k) e7 o; Z: j
}; P8 ^* s: r) `- F% L) B/ H9 h; q1 E. e
}
1 s# n7 r p/ D, V /******************bottom screen clear(自下清屏)********************/
% \, a8 y- J/ ~0 ?* ^+ V
* Q4 A% H l+ Z% S' C void dcls(int x1,int x2,int y1,int y2)
+ {: t# J2 w J+ C0 |) B5 d0 [8 F {
9 s6 C6 i$ y( h# v- Y' |8 b int t,s,j,i;+ A& _8 T0 p# p
t=s=(y1+y2)/2;
# s7 R& F- z- L- S( H* S1 M for(j=x2;j>x1;j--)7 s6 V! Q; H) ]' f! S
for(i=y1;i<y2;i++){& ^. ]- e* \( m
goto_xy(j,i);
( S0 m: u6 U3 q; G putchar(' ');3 @1 ?# C* e( M# M. a
delay(10);
. v- I0 h. L: u' O: b" R' } }
% r2 G1 o! ~7 y0 v& o, X8 W }
' r/ u: a, e0 _0 s! X5 b /******************设置光标子函数******************/$ V. _* m+ W0 C0 Y3 x% S! R
, A" a8 ^. ^( a+ Q
void goto_xy(int x,int y)
1 ?& @, t w* X: N. F8 S+ } {
- ]% b$ v& v, T" y8 m) v union REGS r;
4 z8 e! S' q: g r.h.ah=2;* V+ Q/ W( G& N# J4 o. R
r.h.dl=y;, t+ }- j$ A+ t; I' B, {8 ^
r.h.dh=x;( o1 u( v* \& q8 w" O
r.h.bh=0;( J: ?$ z& E8 ?$ S& n. U( y! e N* ?1 {
int86(0x10,&r,&r);
# T$ {. ?! P8 `! \ }
" P u, s; m6 P4 |' A3 ~4 |# I' i q* d$ a
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
9 `: ^% C) j& g- m, i
+ s/ \3 G$ J3 a void puta(void)' p. b: x' ]2 U9 _
{: x" s* f! |+ Y- l& A9 m+ ]- j7 O
int i,j;
! i5 Z0 \8 d$ g) W$ ] for(i=0;i<24;i++){
$ R. Z) E9 h5 h6 U/ U for(j=0;j<79;j++){* P6 q. M, C- p. O* ]
goto_xy(i,j);4 _. I! b: E3 A
printf("a");9 v- {2 \% U4 P' o
}9 N9 L- c8 P, r9 r
}
/ {2 O- A! X: R# r } |
|