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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ K \& ~) Y* r$ W! }* D f" R: U! @3 ~% f6 y! S* D# C9 \! }- o
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 G/ Q8 J/ e7 T5 w3 d( E$ ~2 J6 _
. R& m; i2 N! M5 L. Z 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ N- h) X/ F$ Z- t+ `% X+ O
子函数及演示程序:
7 ?5 Y3 A. U6 J2 ?% d
% N8 S) w; S3 ?6 Z- Z" E. U #include<stdio.h>$ }* v5 G% r9 G' a* T% y
#include<dos.h>
5 r9 m0 o' j! M1 o #include<conio.h>
, G( Z X. t0 d" C0 G
! k/ U- A9 e | }! L% r void goto_xy(int x,int y);) H B- g5 z4 B/ J9 t- A: R
void dcls(int x1,int x2,int y1,int y2);$ V3 X, B9 G1 ]6 S
void bcls(int x1,int x2,int y1,int y2);" ]% w: l3 A# @: n/ ?
void kcls(int x1,int x2,int y1,int y2);; _. h1 q" q! `: O2 k/ X
void recls(int x1,int x2,int y1,int y2);! ^! w6 R1 }6 J5 e( X
void zcls(int x1,int x2,int y1,int y2);
) z$ ^# T& [' L void puta(void);! c4 ?9 h& H# p8 F8 B/ b
0 L8 T7 ^8 a$ L8 K$ d& a
8 ?. k5 |4 V2 P+ B0 ~
/*--------------演示程序---------------------*/
$ ]6 T j2 K' T$ j! x main()6 n4 E& a F# @" q% Y4 L
{
! I$ ^; P0 n o8 W puta();2 n2 t% h$ b* h
getch();
D+ R, }9 r7 e dcls(0,4,0,79);
1 z9 f1 m' M- ]. _! @ getch();& f( s7 v7 O! \8 Y
puta();; n2 _3 v' s3 O2 _
getch();2 v& ^6 m v6 C
bcls(0,25,0,79);* v9 n3 |/ x& m7 f; _
getch();
. U. w+ U: Q0 R puta();
' ?/ ~7 N5 ]0 P- s getch();
; {2 q& ^# e! |6 Z. G$ @ zcls(0,25,0,79);
, ~, y2 S' O7 J getch();# [) }! t5 R0 x2 ?
}
4 Q* R" _* M4 z) q% Q& p /*********center clear screen(中心清屏)***********/$ b6 S2 _0 d# M S) w# ]& B
void zcls(int x1,int x2,int y1,int y2)
$ H4 { B/ f& ~% x# f7 C* g {; p1 m: c8 g5 `/ z: P1 v+ f- ?
int x00,y00,x0,y0,i,d;1 \3 C( \" W2 ~6 x8 k
if((y2-y1)>(x2-x1)){
$ H) b" a8 l; j7 n1 x- [' [8 X d=(x2-x1)/2;7 F9 O Y7 x" j. J0 ?+ p2 B
x0=(x1+x2)/2;% Z5 N& }9 F- ?$ v
y0=y1+d;
8 S8 w/ o. Y$ Z y00=y2-d;
1 I. p9 n3 y8 I1 s, C' C% R" T for(i=0;i<(d+1);i++)
, u, x; j+ M1 N X* L; A0 R5 l recls((x0-i),(x00+i),(y0-i),(y00+i));
1 b7 R+ F9 f1 k. d2 k: P( r delay(10);% {) D9 w* \( o J. C' P2 d
}" i8 `2 @: {2 Q9 A5 ~/ ^8 t$ T
else{
4 w. [8 S$ O6 S6 z" T7 Z d=(y2-y1)/2;- o5 g& T9 [4 i$ I, H) s
y0=(y1+y2)/2;
! O+ v! c; I: h- M& j x0=x1+d;% x. E, I G) } j; E1 T+ y; Z; B
x00=x2-d;
8 `3 B# ]+ v3 I( h% Y for(i=0;i<d+1;i++)
& I5 `: b c; v* I: c; \ recls(x0-i,x00+i,y0-i,y00+i);( j3 J6 d' ]: ]& z* }8 i2 @# q1 P
delay(10);2 @0 N5 \9 Q9 h, W z
}1 K( X. O' y3 w. {% p0 E! `8 E" V
}' V8 M7 O1 [ Q8 C/ A
" B- i! p& J( ]" B! [' J4 y9 v" U /************* clear rectangle side(矩形边清屏)***********************/
! h* L5 U# N9 t3 P3 x6 y2 w+ {: U
void recls(int x1,int x2,int y1,int y2)
2 d9 e1 ~2 m3 Z' c/ Y3 e7 O, k {& M. i* Z2 L% u5 O" ?
int i,j;" Q, T. i5 s1 Y, _
for(i=y1;i<y2;i++){5 S, ~/ E1 `- Q A! T* ]9 {9 f
goto_xy(x1,i);- p( x3 `+ }! j% N% D
putchar(' ');! x) j8 Y; M, d7 V' H/ G) T
goto_xy(x2,i);) _% s9 I: t1 v) y
putchar(' '); ?0 T" |3 N: F7 a$ R
delay(10);+ R) l5 Z8 c* }
}0 x" y; O( M- C# v# p
for(j=x1;j<x2;j++){8 x: A- a6 ]- K K4 k: E+ q( C& R+ F
goto_xy(i,y1);
8 f4 C+ t/ l6 T& A, s putchar(' ');
% ~6 ?0 G9 ?8 Q1 k8 M# ^ goto_xy(j,y2);5 _5 X& r/ @* \6 ]$ P
putchar(' ');7 c6 E6 |- ~" Q& a5 f: i
delay(10);4 U' q& Z' ?, S4 C/ Q
}
' a" e7 z; }' R" G- r" G8 i+ z d6 Z- ? }: @! z7 y6 Y- H, C( w: ~
/******************open screen clear(开屏式清屏)*********************/0 ~5 l4 ]/ e- s! m/ N ~
& F7 W& O0 |& n' ^( z+ p$ i3 q1 v4 e void kcls(int x1,int x2,int y1,int y2)' T: W3 `8 H. `8 ?" R9 q- f' G- K* y
{. \# O9 W, z6 N6 E& `* a$ Y) D! c
int t,s,i,j;) c2 N( E @4 ^9 p, I
t=s=(y1+y2)/2;5 o7 `+ ~1 ]5 x7 o
for(;t<=y2;t++,s--)
& {2 ]# C0 t3 H5 J' |) ] for(j=x1;j<x2;j++){
: @+ U' S; `5 Y. C% F0 O! w goto_xy(j,t);0 R. j* K+ U. P1 I+ G. \
putchar(' ');
4 l3 F8 J. ^% }6 J g goto_xy(j,s);
; K, O7 b8 Y, f, |! g4 M& u putchar(' ');: ~/ n7 d$ _3 L% D
delay(10);
- ~" K" _0 S! U& }4 A7 Z }
$ W) n; R+ v! {" X3 [ }: N, A/ G6 }4 F9 S
/*****************close screen clear*****闭幕式清屏*******************/
( A# \; n! [# T( R. f3 [0 L. g; C; d" g X# D& q
void bcls(int x1,int x2,int y1,int y2)
- d5 W% ]4 j$ P/ \ {, [/ p3 ?+ G0 k7 Z y
int t,s,j;
1 x& h( X w4 O t=y1;$ ]0 z) [: c8 l& s" M3 J
s=y2;
2 ^( S0 ` n7 i* _ for(t=y1;t<(y1+y2)/2;t++,s--)$ l H# C* D3 r [& ]
for(j=x1;j<x2;j++){
8 N) \- _4 K: Y* h1 n% }# E$ Z goto_xy(j,t);* r2 M, \9 ~$ x& D% p ?% u
putchar(' ');7 Y3 z4 c9 a2 e8 o5 C+ O
goto_xy(j,s);
6 A5 S# E% Y" u! v putchar(' ');
$ k) {3 Y5 I5 B: G$ |, I, v delay(10);1 S& p* s# g9 @6 |' e! [& m$ G
}1 i* t; w% ?- U! n5 ?$ c
}7 C) `* G0 ^" W5 M3 @, ^5 N7 [# b
/******************bottom screen clear(自下清屏)********************/
+ U* u5 F- u& E; X) n q1 Y5 o
& Z l; D8 G/ ~& I/ h: ^" g' k void dcls(int x1,int x2,int y1,int y2)
7 ^( H0 |& j+ l) }7 l5 C {
; O9 {/ S" p7 o( V$ O) G% m( i int t,s,j,i;" J) G# n. N8 v- \ N/ X
t=s=(y1+y2)/2;
; Z/ e S; r9 k6 M5 ~ for(j=x2;j>x1;j--)
7 `# V7 i1 q4 h- F& N for(i=y1;i<y2;i++){% h5 p" M9 H6 R1 g6 C
goto_xy(j,i);
4 y8 q/ b0 z* R4 r9 J/ M0 p" R2 I putchar(' ');
0 q" I$ U, [4 q4 b2 o- K delay(10);/ H1 r3 m* g! E3 L$ O
}# H4 M% t' U. D; L5 ^& W6 b' {: W
}
" E) R6 p+ f7 V$ v8 M( d /******************设置光标子函数******************/3 A8 O3 d% O' i* v. p
( n1 o1 g) G- R$ r void goto_xy(int x,int y). ~" q5 p" i; u
{
?8 b4 v/ M( v" a0 E union REGS r;
6 T6 r) g5 x' k: n9 J r.h.ah=2;* m' F, w; c7 F7 c8 e6 T7 B" {
r.h.dl=y;& L7 }3 @9 j/ O2 u% j+ k `5 b
r.h.dh=x;8 V# w; M3 f* k+ i9 @/ y; @
r.h.bh=0;
7 h( J9 P6 K" @1 h% J9 D" [/ p2 d8 X int86(0x10,&r,&r);( H5 p9 O; S9 q1 D4 ]. t5 P
}
7 i. o: e+ X8 ~. @+ v5 v7 j# L; v
7 ^& d. S, O# y1 `) {8 V /**********************在屏幕上打出一连串的a字母用于演示程序******************/( I$ D: p& h% f. K
, q4 t0 C4 G$ M3 c4 n9 x9 E void puta(void)
% |6 x6 J, D- R {
7 j' G9 D* M. F+ ] int i,j;: \, _! Z. W/ k
for(i=0;i<24;i++){ R! p% n, Y- _9 R' M. S, K
for(j=0;j<79;j++){
$ N: N- ?2 u$ q# o2 F: }3 Y goto_xy(i,j);9 Z; q5 k% `/ S# X1 X' Z2 s9 L
printf("a");
7 t$ T x$ x) b* I9 H9 v }+ w( b9 b! k4 k- w: w: d( v( y
}% [: w( J, @' \2 y) O
} |
|