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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" E, j6 }: `) ?$ ^& a' G! j9 x
( d* ]5 S' }& S1 e 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 P5 n5 j" r! g3 N* \$ e( n T0 ^2 W( S5 n& ]
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" J! S: I) n D$ T/ T 子函数及演示程序:6 z, I* F, `$ N% A. {5 \* o0 q1 x5 H
( |+ \+ \& K- @
#include<stdio.h>
% F% d2 q I3 {2 g #include<dos.h>' W, @5 f$ T# M# |! y1 Q
#include<conio.h>
, S- n8 m* c, X1 s0 s6 g; W( j9 Q1 y5 G" }/ Q
void goto_xy(int x,int y);; h3 E |' _' G
void dcls(int x1,int x2,int y1,int y2);6 a$ `+ U) u2 N ^+ l0 }
void bcls(int x1,int x2,int y1,int y2);: D* k/ j# v7 }8 z) G. ]4 l. W
void kcls(int x1,int x2,int y1,int y2);2 q/ x9 @, ?7 ~* q$ D! t: x
void recls(int x1,int x2,int y1,int y2);, b7 m6 i' {0 C d3 P% F- q
void zcls(int x1,int x2,int y1,int y2);
- Z3 X5 {& c3 ^ void puta(void);
) H* v( @7 j4 e$ B( @3 |
* m: B# l+ @- X7 P. t9 O# \7 M! N8 \) R$ G" D' A/ L
/*--------------演示程序---------------------*/
* K! T8 o4 D9 x, U- D+ T7 `2 _ main()
0 w* i5 \8 ~3 _. H) ~. B {* l- Z& O) X! P. j/ b+ \- o
puta();
7 D0 J4 z# ~6 s4 U! _ getch();
* ?0 S6 `7 X9 x* T5 C4 J3 g1 J: C' M dcls(0,4,0,79); Q- Q9 l9 B9 t. N K
getch();5 d: o6 p! [/ _3 U
puta();
4 r: _) H( \/ l+ ]3 O0 w getch();
7 U; M1 D" E$ R2 C" l bcls(0,25,0,79);
. N3 p, @2 G* z7 L) [+ D+ _: E getch();
. }; Y) O% @0 `6 q0 \ puta();
& ]: b# |$ C* v getch();
$ @8 U) k' ^( @& E0 H zcls(0,25,0,79);& l$ N$ y# k- Q* o0 d9 l+ z
getch();' z( O$ s; Y! Y' t0 o" w. @+ U3 G
}$ ]1 P! P, ~% t) n2 G0 a" h8 F3 |
/*********center clear screen(中心清屏)***********/! N. V; q5 o3 v4 X3 I5 M) H; Q) X
void zcls(int x1,int x2,int y1,int y2)
/ U" ~0 c& M9 O& J4 y {
# {; I% h9 d8 k- Y+ J int x00,y00,x0,y0,i,d;4 t; [6 {, ?0 A5 J+ ?
if((y2-y1)>(x2-x1)){5 D' O. E+ ?/ a7 q
d=(x2-x1)/2;, z. t. Q' O1 e( V9 G+ y( E
x0=(x1+x2)/2;
/ n% R# f. M) v% i y0=y1+d;, q- r1 G' {, a# d7 _" Q
y00=y2-d;0 Y+ _. k: N9 f7 S
for(i=0;i<(d+1);i++)
% e5 ~* x, |" \9 I) t3 F! x recls((x0-i),(x00+i),(y0-i),(y00+i));$ m* Y; I, r1 L9 d
delay(10);
+ k0 G' Z4 H% b% @/ M3 |, r }
9 E u- S8 H$ {! w% ~, ~4 j3 `5 T else{
x: _3 F0 @# o1 m d=(y2-y1)/2;, I t* H- B& `5 t: L
y0=(y1+y2)/2;9 [; H/ m( I1 A6 p# t
x0=x1+d;
$ ]9 J, q" K- M1 c) s8 j+ p x00=x2-d;
- z6 Y* G* E5 `- X8 [ for(i=0;i<d+1;i++)( p r& [- s( k% O; Z! j' k# B* B* b' i
recls(x0-i,x00+i,y0-i,y00+i);% ^4 M9 P6 q; ^
delay(10);+ M; h" Y/ A6 n3 j
}
8 N1 c2 g) w0 e8 z3 q }% y9 N' a. B6 ?+ R9 e2 t6 E: b. V
$ [4 Q9 l5 d1 T& ?& d5 c2 j/ o5 M
/************* clear rectangle side(矩形边清屏)***********************/
; h% E+ T/ ~8 W! w( \+ O% J" q& A5 x7 [/ j* \3 w
void recls(int x1,int x2,int y1,int y2)
8 v3 K$ V# Z1 C) \' {, y1 _ {5 {. L" ?; p/ R! J Y/ e. D
int i,j;( v4 Y. x( X n" G0 H) N9 E7 l
for(i=y1;i<y2;i++){
# K# V( s3 o8 ^ } w goto_xy(x1,i);' E( U" C6 X9 Y% h: Q
putchar(' ');
! h6 l- K" ?& }0 o goto_xy(x2,i);' b0 j) Y8 u* g7 S- l
putchar(' ');! U0 i' y& C8 K+ p2 L
delay(10);
% r. Y6 w/ f& d8 w2 E }
/ n: @3 D/ b- |$ X B for(j=x1;j<x2;j++){
, U/ t" f: q/ `4 u; e6 Y; b7 D! l goto_xy(i,y1);
) ?6 ]! Y3 Y& S$ ] putchar(' ');
( L! R: U) }* x8 C' Y goto_xy(j,y2);* p7 L6 x" p& ]4 ^2 E! u. o6 Z q
putchar(' ');
: R2 d7 Q+ f- t4 L. } delay(10);
& B8 n1 f2 s" n4 g }5 ~5 ]0 q9 m) b
}
- v! r! T- V( R% f /******************open screen clear(开屏式清屏)*********************/
2 S* v- K& X6 M& E2 {
8 {: a( Z8 Y( x3 h9 l5 X q8 B/ Y void kcls(int x1,int x2,int y1,int y2)% |' Y% d4 N6 \! a+ V" s% j* Q
{9 Z4 @% x7 Z; c# U! r& l3 Z
int t,s,i,j;# d$ L: U2 x! g+ T- ^; ^$ M% r) z
t=s=(y1+y2)/2;$ D: E5 j' I8 ` ?
for(;t<=y2;t++,s--)
( E6 u. M \+ _- M1 k for(j=x1;j<x2;j++){5 d' a1 A& K0 f3 } }5 u
goto_xy(j,t);1 U* j7 M: n- x/ J' S" Z! p1 |
putchar(' ');: N- b, a" o* x+ ~" Z1 B3 _
goto_xy(j,s);
' r ?4 |; k! K$ {# q0 G# w+ p putchar(' ');
' W) d4 b% {( b3 q# v8 G delay(10);( U- e% B0 ~" |% M
}6 ^7 k9 q7 F$ Y& B3 e
}
6 \7 T" G7 L! [" G /*****************close screen clear*****闭幕式清屏*******************/1 H" J8 M) j/ i, n- W: f
' n; W5 P$ f- X6 ~( S0 [ void bcls(int x1,int x2,int y1,int y2)3 @+ N* p# B2 O% c; y2 ]' U, F, _3 A
{
/ }' u& t9 ~- W+ K4 I7 ~' U( {' T) [ int t,s,j;
3 s& V( N. P: j/ ~+ F& j t=y1;5 v; D$ r8 J3 I6 n/ q6 c
s=y2;+ d( o2 N0 q* E% q3 }
for(t=y1;t<(y1+y2)/2;t++,s--) i% ]" X* G- H* N2 _! _* v
for(j=x1;j<x2;j++){
# L g- l& S2 \8 D goto_xy(j,t);
$ M8 Z- E; R, u/ Z& z# K( p0 s+ F3 | X putchar(' ');: [0 R2 n. P8 r
goto_xy(j,s);
0 |' i5 r0 Q% P- ? putchar(' ');
+ S: \ l( z* Y delay(10);
9 A/ W! I# U# i }7 N" Z, R; M: J0 n
}
: `5 q& Q' N7 O /******************bottom screen clear(自下清屏)********************/, V8 s8 J1 u" @% @6 l$ K
! W% y4 G# j2 v# f, ? void dcls(int x1,int x2,int y1,int y2)
/ d, i/ R9 O; J3 M {
- [4 j9 @; Q' E5 c int t,s,j,i;
$ S+ \ M& F3 ]4 }, O3 y t=s=(y1+y2)/2;
' c2 I8 w2 K" r3 d# m; t" l for(j=x2;j>x1;j--)
2 t3 l* t0 y( d) q1 O! R% n3 U$ } for(i=y1;i<y2;i++){
& d$ C0 l# ~, h+ B/ J goto_xy(j,i);! n2 S3 j& X+ j- [1 Z9 c6 l$ n
putchar(' ');2 w0 x$ [& p# m; [' X( u7 Q
delay(10);
' }1 l% v5 ~& E2 h* r }; r* E7 A+ x) Y# _6 V+ y
}$ i2 N8 s; t c5 r: J
/******************设置光标子函数******************/, ~; d+ s8 V# b5 c2 P; e4 N
' \' S7 Z! k# B% z void goto_xy(int x,int y)+ f" _# a4 q, a- w8 x, G, n; z
{
9 q8 [. y! H6 E& Y* C9 ` union REGS r;
8 c! Q4 V' E9 r0 q1 K r.h.ah=2;" t9 o, A+ F4 d) u+ Q* C
r.h.dl=y;
% Z V) ]& y& Y7 P) X9 g% M9 {6 L5 H r.h.dh=x;( ^6 P! P" t1 a6 c
r.h.bh=0;
" O: n0 H; g: q9 ]5 u J0 {5 ~ int86(0x10,&r,&r);' y3 c* Q+ i+ N" e, m
}
8 W8 }6 }7 L+ y9 x, P# m- s, h
9 z6 q' I: N7 v9 }6 H5 a9 {8 @ /**********************在屏幕上打出一连串的a字母用于演示程序******************/# W" A9 ]: d. ~4 g
8 S8 S& h& i! Z% ~. _: a4 c! h
void puta(void)' z8 O: V& U8 n
{8 j6 k" o: p/ {( v
int i,j;& u1 R7 H t7 i. L* a) n7 V! S! F$ [
for(i=0;i<24;i++){
( b5 u; d+ A, ^! |6 \/ @7 a; m/ A for(j=0;j<79;j++){
/ W- U( F8 {- b6 z goto_xy(i,j);* ]8 h. _3 G& N6 y" F
printf("a");2 p' J' b1 g' j& X1 T
}6 t5 z& O' j1 g- N& k' s0 P/ g% v
}
* O" d1 |' U, v! D0 ^6 r* Z( z; [ } |
|