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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,8 K* o( |. U; x3 K
2 I; Y- O8 P7 F, g
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里; Y, Y& U, N5 Z4 a
' u# x4 C, `7 h* Q% V
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
, @8 e4 F( ]- s* r 子函数及演示程序:
1 c$ W3 t1 q' ]/ x* W! D
, ?- Y0 M M C+ i #include<stdio.h>
( }& I$ N2 ^3 @0 r5 s1 s6 H #include<dos.h>
3 V/ G& [1 i! k6 G) ]! ] #include<conio.h>1 C" L7 {9 Y; z+ @8 G. \/ ]1 h' J
5 u' U6 ^ E$ E+ @, k( m. K
void goto_xy(int x,int y);
( S7 S/ F+ |- g void dcls(int x1,int x2,int y1,int y2);. P4 e5 A9 @, \; w% \+ e
void bcls(int x1,int x2,int y1,int y2);# w0 y, g0 K' Z+ P% w
void kcls(int x1,int x2,int y1,int y2);& J) i8 L- V: T' ?" V# i1 B* w
void recls(int x1,int x2,int y1,int y2);
+ ^) q8 ^! H/ Z- }; d' I6 y2 i void zcls(int x1,int x2,int y1,int y2);
6 `% m: `( |6 E. G, _ void puta(void);0 e. S) W1 s7 _2 n: s- Z
5 ]$ @' N" z+ u7 E [$ H( F" f" W8 M- a6 I
/*--------------演示程序---------------------*/7 v7 } v9 O8 L* { _, @. ]4 X
main()
! r/ k% C% J% v {9 z Q2 r+ s& g
puta();) E7 [, c* E4 {5 @* r; }- |
getch();/ q. |3 s2 L2 q2 x* S
dcls(0,4,0,79);/ q: e: t7 V8 C4 h7 t; s; t. }
getch();
4 F/ C7 W5 F2 d# P! g8 ?6 T puta();
" ~; Z* U2 R% |7 m" Y( u0 B& ~ getch();
9 l5 b ]1 ~3 Y) {' c* d* \$ j bcls(0,25,0,79);) }' j- Y9 P! d( @
getch();+ L( P. F, ~# e- Q2 K9 ?; J
puta();
D# l8 K7 B) S4 m7 a getch();: T+ R! v6 O4 y( V8 q" W
zcls(0,25,0,79);
, j! j" d; n/ a3 I8 ~" h getch();* Q4 K: S8 ^, f" B% t4 a
}+ k1 ?* I! `: ~$ \! m
/*********center clear screen(中心清屏)***********/
' X1 B3 I% B" `7 N E void zcls(int x1,int x2,int y1,int y2)
- T0 A4 f) e1 _! f+ r! v {
- l; C1 o/ a6 |* |$ U8 v% k3 Z int x00,y00,x0,y0,i,d;
* ?! y# }+ A0 _ if((y2-y1)>(x2-x1)){) j/ H% @. q- b3 Y7 @" f! @
d=(x2-x1)/2;
5 p" p6 s4 E* g& b x0=(x1+x2)/2;
- e" c0 v) z1 Y/ `$ n' H5 \5 G y0=y1+d;! y9 |5 _! _. B* m& O
y00=y2-d;% P4 ~+ j% I/ o- G/ e
for(i=0;i<(d+1);i++)
8 g, n5 i+ g5 m) @2 f4 @ recls((x0-i),(x00+i),(y0-i),(y00+i));
5 L+ L+ Q% Y: ?0 W0 D2 ~6 U delay(10);
1 G x8 N. t6 n5 o2 T }
0 }/ w) _- m3 x1 d2 a else{
* V' a$ ^* L, v9 C; w# K5 ^& B d=(y2-y1)/2;0 A. b! \) V7 G; u; w
y0=(y1+y2)/2;
3 `! B- g( R9 m! I0 q- O x0=x1+d;7 c; B& \2 p$ u' v6 f8 P/ k
x00=x2-d;: I1 [* o4 Q3 p
for(i=0;i<d+1;i++)
( r3 O8 X- Q: J. t+ D! d% b* B recls(x0-i,x00+i,y0-i,y00+i);5 ?1 C& h$ w/ C/ ]7 Z
delay(10);9 S$ ]7 J1 L- _& m9 s
}
" C% P' i* z! v/ o/ b. l }
5 j# ~9 }+ h" k+ s& O- y. f5 M! F& V6 z7 ^" {
/************* clear rectangle side(矩形边清屏)***********************/
2 S' ]- T' Q; W, S% y0 j% R h, [% }0 o5 z! p8 h5 P2 B3 i
void recls(int x1,int x2,int y1,int y2)
3 |( ?( I/ k5 s, l {
- a1 o5 j4 f6 g9 z/ g8 S3 \ int i,j;
$ e4 J* r% p3 ]% V- f for(i=y1;i<y2;i++){1 i8 b9 a: e1 a" _' K
goto_xy(x1,i);
7 l; k& R; E" P, b* N putchar(' ');
' A6 T- I7 U7 |# ]9 H7 s goto_xy(x2,i);
# m& C6 a$ U& W* h putchar(' ');
* @& D( x6 }: D) L, m delay(10);' a+ G# Y& T, F" r( e, U! L
}- @+ _$ [& k3 A
for(j=x1;j<x2;j++){# g0 c8 o$ p3 V! w) h6 l
goto_xy(i,y1);- Z. L, i5 {8 ]
putchar(' ');
& \9 P9 B% u! _7 l# G' `& v$ e7 } goto_xy(j,y2);0 E. N, K; }. N
putchar(' ');
1 ~6 v$ g* a* T6 T$ n" I+ m delay(10);% \, |/ q4 w3 P
}! x, Y3 w/ o! w* b6 [
}$ g* Z1 q: O! ]# |
/******************open screen clear(开屏式清屏)*********************/2 J3 e4 Y1 P* |. l
/ x; z. K& d) c$ }! \8 g+ B
void kcls(int x1,int x2,int y1,int y2)
& ~3 g. c9 L% c# o% C {
6 [+ G h2 E+ o$ H9 o int t,s,i,j;1 q3 P4 R% C5 W$ I/ ^2 I
t=s=(y1+y2)/2;7 w: K: H% Z- E$ }' i
for(;t<=y2;t++,s--)! V% Y* n, q1 h, i I$ j- }
for(j=x1;j<x2;j++){; H: c" n1 l% P) d; E6 p4 {
goto_xy(j,t);# S% S+ n" l/ B# K9 E; A1 H- v
putchar(' ');8 f4 s9 R' ^3 E6 u" e9 Q5 G: D
goto_xy(j,s);9 s# {6 q1 C: ?, t* N
putchar(' ');7 u3 ?9 f0 {8 L d* e' z; }# s
delay(10);; { a& [7 K! d% [
}/ a! w* A% q5 _0 b0 R/ I6 S
}0 l) k1 G# w. B
/*****************close screen clear*****闭幕式清屏*******************/
- G3 E' F5 o8 t3 I& ^" _! a x( w P$ F3 P7 T. L
void bcls(int x1,int x2,int y1,int y2)! z9 _' c) n% z/ k$ L
{
4 L+ T# ?: ~5 K; h( R, ?" _ int t,s,j; G' O5 Z4 I" j+ m6 j( z* I) o
t=y1;: Q4 i0 w. Q9 O! H
s=y2;* L/ m1 C4 H' F, a' ]1 G, R
for(t=y1;t<(y1+y2)/2;t++,s--)
: l- S' L; F4 X, n5 v/ S$ c s for(j=x1;j<x2;j++){
* H) x/ z2 u. S! M goto_xy(j,t);# z3 d# c- u. V Y
putchar(' ');
6 J- g! Z) X$ L7 c5 p' ^ goto_xy(j,s);# ]7 y0 A# w$ H; l) g* b* A* E
putchar(' ');! {6 U" p9 C" Q
delay(10);
, Z. q& e% f* _% ^ }
6 [ L6 }5 a) P0 i; Y& Y6 z [, t! V }1 Q5 t/ O7 S! f' P+ F
/******************bottom screen clear(自下清屏)********************/' @2 x) l+ l- u& H$ b7 z6 G0 ~9 l/ m" j$ R
' I, h$ `! f9 C$ @2 ~ void dcls(int x1,int x2,int y1,int y2)# ]8 L0 h, v: E
{5 \5 I4 H3 B$ G# U- f0 T
int t,s,j,i;2 q) U6 g' u1 }; k
t=s=(y1+y2)/2;& l9 _; m0 B$ j9 W; B" ?7 H0 B; A7 H# A( J
for(j=x2;j>x1;j--)( R4 E; R, y3 C
for(i=y1;i<y2;i++){+ s. }. X# ~7 K( P+ Y! |
goto_xy(j,i);
1 ~$ z# X4 F# v putchar(' ');
' v) _& r0 G7 X/ A) Q delay(10);# y- c8 u5 y: x0 _- e7 d
}
+ Z! v5 L9 `% ]1 B }
" L- r$ B3 j1 f" V3 C3 b: E! J, y /******************设置光标子函数******************/ I9 U4 N0 u$ z% q8 f# P7 W
4 S+ e2 i8 a% w* `2 l4 w
void goto_xy(int x,int y)) e' k5 I5 z6 t# q6 }5 U2 ]' C
{
0 d" C V) T+ h$ y" l union REGS r;
; a @. f6 T4 j) f6 b r.h.ah=2;7 ?$ @& q2 [! k0 I
r.h.dl=y;
* I" C; v8 L; I1 y) h r.h.dh=x;7 U& E9 T5 r. @# s
r.h.bh=0;5 i' @" | _# q( T
int86(0x10,&r,&r);
# P) l0 v* y! _ } b* J! T1 [; q" y0 U. l
* N- u- j) W4 U /**********************在屏幕上打出一连串的a字母用于演示程序******************/2 j G0 D/ G# x3 {+ U* w# j! N
( _5 C# M; t' N void puta(void)& j" d( H% |: x3 y x% R
{
B8 \" O7 v( i# s) ~9 E int i,j;- K' [3 f1 r3 e: c+ A+ j6 M+ G
for(i=0;i<24;i++){
6 j2 x) W" N( P- |, [ for(j=0;j<79;j++){
6 x/ u2 f6 u D0 p, h3 u7 z goto_xy(i,j);
, a/ d$ |) [3 r* K7 d7 S printf("a");
( n7 ^) j# P( ~6 ? }
; r7 m6 S( P1 f; K/ N& G$ x/ A0 | }
( T0 z1 C0 y. Y& Y" |3 c } |
|