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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," F3 J# b# H+ j* [
1 i+ B. V9 m; ?4 R) B
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ m, n: g6 n& ^0 N* B9 o9 H# K& \" x9 _
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 [# x, _* R9 j8 O 子函数及演示程序:
: y& v; v7 B5 l& v4 D7 u
0 W+ A: d8 |$ }+ j2 y #include<stdio.h>
" q, A* E5 E4 ^! v' B" ^, \) s1 a& M! ^% s #include<dos.h>
8 M7 c' K9 j+ A #include<conio.h>3 |9 x$ @+ b' ?0 G( y7 j( @
3 B* x# _0 B# J6 E( M) R% p s
void goto_xy(int x,int y);
4 R6 Z |. v; l% B! [1 g% [) X void dcls(int x1,int x2,int y1,int y2);
. C3 t* X0 u( w0 i0 S void bcls(int x1,int x2,int y1,int y2);+ t" d; z% Q* g* `% R3 x
void kcls(int x1,int x2,int y1,int y2);9 X1 h! @" y, K; }3 x% j9 j- K6 k6 b
void recls(int x1,int x2,int y1,int y2);/ X' V: P7 D- R- B; n6 c
void zcls(int x1,int x2,int y1,int y2);
, k$ `7 }2 ^6 f$ d e, T void puta(void);
2 c; Z6 S: Y( o4 m- l# j) g/ H4 u) ~
) w! X+ @" v0 R3 E% H/ ?* |, M4 H0 s0 a: h- L) F, C. l
/*--------------演示程序---------------------*/9 J& p; P0 P- o$ b$ H
main()& X7 t0 m5 Z' Q/ D
{
# a& _8 @" a0 ?/ U( T0 b puta();+ ?" L; K! @' v% X; k2 h8 Z$ y
getch();
7 ^% E! i! w+ q) @$ X e" ?: M( ] dcls(0,4,0,79);
' B2 z* T& p3 x) y a# v1 O1 t getch();% D! k" ^2 }4 U1 M
puta();
7 r- Y( I Z2 b0 h getch();
- v3 N5 N! d3 q: F7 [2 v bcls(0,25,0,79);
6 u, B1 Y4 X" Q6 U* v% x( p getch();
! b1 c! H5 j$ ` puta();& J* E: l& D2 C4 O/ u
getch();
3 g Y: W3 O# p" K c$ L/ I zcls(0,25,0,79);
: H+ }9 b' J+ `; `+ o1 q$ G+ ? getch();9 q0 H' a, n U2 D. M
}
, f# u- X( ^! ^6 y /*********center clear screen(中心清屏)***********/, k3 b+ {- z7 Z) j- U' Q2 w4 u
void zcls(int x1,int x2,int y1,int y2)( D3 i+ p" Y5 c/ d, q
{! J9 \9 u6 M4 X/ ~. q4 q
int x00,y00,x0,y0,i,d;
+ R1 I! c1 ^4 z1 H if((y2-y1)>(x2-x1)){
$ p( C$ W9 n% w+ s5 I& s1 V; J d=(x2-x1)/2;
) X! o4 |* u5 F% v x0=(x1+x2)/2;
5 ^- r/ X4 t/ Z9 k7 n1 T- R9 Y# f y0=y1+d;
- k- A- S; j5 i3 h3 [0 M+ }- Q8 N! N y00=y2-d;
2 C8 u- s) a; R; }1 v7 o2 Q for(i=0;i<(d+1);i++)/ L1 O# `' w7 A: s) |
recls((x0-i),(x00+i),(y0-i),(y00+i));+ y5 y1 d/ r* ]% V% f O
delay(10);" U1 _. A. A: M6 b { [8 D
}5 ]0 X6 H; _2 N1 c( e
else{1 F+ n! L, A- p& K( O
d=(y2-y1)/2;
# {$ _- |0 _ J y0=(y1+y2)/2;( m4 Q, @* }8 k1 a4 \2 j. |
x0=x1+d;7 S* Q, A' R/ R2 `7 l
x00=x2-d;
! Q2 ^2 X o& y for(i=0;i<d+1;i++)
2 |; _2 x' m3 v) K$ e9 b. s recls(x0-i,x00+i,y0-i,y00+i);
$ S" X6 I/ T& H$ S/ b delay(10);
% R, B1 W) U( l& T }! Q/ _. Q2 J2 u! K; r
}3 e( y2 d' Y; Q1 D5 Y' @2 J& I9 M
) X% `; g9 x& \- U; @, P3 ^& | /************* clear rectangle side(矩形边清屏)***********************/
% s* \. f. k6 A4 A) l) I( v) t6 v$ }! C; j
void recls(int x1,int x2,int y1,int y2)
) z% J' Q: T3 @6 g: l% {2 h! A; M {
- s- ^1 J. Q3 [ int i,j;
5 d6 {+ _7 V1 w. T2 T* \% ? for(i=y1;i<y2;i++){
6 L" P, N2 q6 |1 A# z6 }& c# G goto_xy(x1,i);
0 g! l7 ]8 V2 G4 _3 B6 m. g putchar(' ');
" z6 i- s2 V3 n goto_xy(x2,i);# _) o8 E9 q. s* Q S
putchar(' ');
9 P* T. z6 z4 n# V L6 I) v delay(10);+ _) m3 P- N2 y4 D4 q
}
0 J4 Z5 H K# j1 K5 `% ] for(j=x1;j<x2;j++){
2 y7 a9 n' s* a" d9 a8 o* f+ Q goto_xy(i,y1);
& M2 \9 S4 u9 I) u% [ putchar(' ');, e' [' u! |! t2 d
goto_xy(j,y2);% @8 P; k/ j. o2 M- W' p
putchar(' ');$ |! W% ~, n* c2 ]
delay(10);
) |$ ^$ t% J( X j7 T/ ^( C }
) Y q! U! w- I! r3 d# U* _ }2 x6 L9 o( ?* a
/******************open screen clear(开屏式清屏)*********************/
% s: N& V# g) m+ Q% ~- S2 n( o
~! o0 C9 \+ a3 x+ J; e void kcls(int x1,int x2,int y1,int y2)
C4 J% e. o( f; ^ {
3 u! R, G! q A! I int t,s,i,j;% b2 M) {! ^# k( W. |8 ]
t=s=(y1+y2)/2;
$ G( _/ `' E: [% [* t for(;t<=y2;t++,s--)
7 A2 Q% h' a6 E( s for(j=x1;j<x2;j++){$ v1 U6 T4 z+ J+ I+ p
goto_xy(j,t);2 I1 `2 x$ I0 k: U1 v
putchar(' ');
. }! @5 g: p4 q, C goto_xy(j,s);! D0 w! R+ l% `% x, R- n. `, w
putchar(' ');
/ [- L c- ]- J4 E delay(10);2 m% r) d/ ~! j) i3 a
}8 D/ f3 a' c- ^ b* o: N/ Z) H
}
; O3 X9 H. e u: `9 |* i7 e /*****************close screen clear*****闭幕式清屏*******************/
; K4 e& o& R3 X k/ t; c, l9 A
?1 Z( B$ v, o. k4 d; ]( j void bcls(int x1,int x2,int y1,int y2)' E9 r' a& h$ M/ s* m) p
{ D. }+ Q" l6 C( _6 v8 u3 E
int t,s,j;' R& G2 ^1 j2 J7 p2 ~0 y7 f* n" _
t=y1;5 Y, P/ U* a6 k% D6 o
s=y2;
& ]7 W/ {( ?7 z. @3 j7 | for(t=y1;t<(y1+y2)/2;t++,s--)0 m8 j$ t* W" U8 H
for(j=x1;j<x2;j++){
! _. k1 }3 K- C+ ? goto_xy(j,t);! s* c- Y* {( e' }+ W, O* w
putchar(' ');
2 Y! X6 y: v; K' O3 i goto_xy(j,s);7 [1 b8 c! j# n i' @5 R9 e
putchar(' ');
: ?; u3 `6 P b2 A* F delay(10);9 ~! c3 i) @% V9 H& X& N, X) J* B
}
! _: N6 o! G6 g& u, s }
9 ?# F' }1 \. Q8 o1 G /******************bottom screen clear(自下清屏)********************/, O/ b' w2 z$ w) x
# n' C% V" i) B* H z void dcls(int x1,int x2,int y1,int y2)
' s( s: m; n7 [. M3 O {
; \! ?) g# i I& h int t,s,j,i;3 ~; {' I! b$ `7 e1 o9 u
t=s=(y1+y2)/2;
3 q/ w- G5 P0 P2 V for(j=x2;j>x1;j--)2 Z) ]2 c V+ o/ i ~! G a9 I
for(i=y1;i<y2;i++){2 j$ S* u9 i) ~& I. _. H
goto_xy(j,i);
# e0 l! x" p M% u& c putchar(' ');
' ]' f7 H3 P' h; G% ? delay(10);: o% J: h w% ~' F* l
}' O& _; N# {' ^9 `
}
. U7 l) U5 `8 B /******************设置光标子函数******************/4 A& S6 P+ D4 J" [
8 k6 y! y# n! H9 j void goto_xy(int x,int y)
* b3 f3 c; w3 o. C {1 v* _/ `" \& B1 |& y3 Z
union REGS r;( z( L) p9 x% G8 {4 o Y. n4 X
r.h.ah=2;
- V1 g# K) e/ u0 B. w r.h.dl=y;" U6 o" w1 k4 U) ~5 u( K
r.h.dh=x;7 C3 q4 C9 F- k+ {! {& ^
r.h.bh=0;) i$ |0 ]7 h: X8 y n
int86(0x10,&r,&r);! R5 F. s( b1 Q% @
}& M- c& Y* F7 O4 x
1 q3 J' G3 o* I
/**********************在屏幕上打出一连串的a字母用于演示程序******************/0 t/ B7 W* [, w* P' a0 R
M3 P" p+ C* T
void puta(void)) b5 W* Z" p7 B
{1 C; `: f5 ]1 N6 E
int i,j;
3 ]% {) q1 N4 A2 f! e( ^% W; A for(i=0;i<24;i++){
% g. c. m( `# T0 Y, {# I+ b for(j=0;j<79;j++){
( x$ P: q! m7 ^9 `( x) E+ Z goto_xy(i,j);9 y* Q) t6 U6 K) [8 E5 v
printf("a");
% M/ z3 O8 u) G: t7 A. d }
: J' Y4 L' w9 W+ w2 K( B }" n5 t( Z6 D7 B0 e
} |
|