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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. F) E( L/ u6 w) q0 {5 S0 v
5 e! n2 ?/ F4 I: E9 o/ J
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 k. r0 Z% _9 }5 x; B. ?; C% `& H9 `1 J# V& Y5 f
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ O' ~5 D% q% z
子函数及演示程序:
" J4 s8 C; G8 g, Z
0 q0 X7 b- j3 u* M/ O6 } #include<stdio.h>
& m, ]2 k+ _4 p4 G# X; G; \- E #include<dos.h>
$ p! X* L$ H2 Y. d% K #include<conio.h>; a4 L$ N; g* ?$ e1 ]
. K u# v0 M0 y3 d" G
void goto_xy(int x,int y);, @) `0 @- R; z1 ?' p
void dcls(int x1,int x2,int y1,int y2);
& [4 F" Q( @" n3 Y3 z l void bcls(int x1,int x2,int y1,int y2);4 j: l r+ W8 a+ n2 I
void kcls(int x1,int x2,int y1,int y2);
X$ z' ?, F5 m2 Z void recls(int x1,int x2,int y1,int y2);# l4 J- h& K ]! @% O2 B
void zcls(int x1,int x2,int y1,int y2);
( _* Y" w' d& l, N+ r- D) l v void puta(void);8 l( d6 b3 g) _; W: N
* s* n. r8 b @4 P8 a6 N8 U2 I0 F9 r) J& g# u( j( e$ _
/*--------------演示程序---------------------*/8 p, A4 G, A }5 T
main()' L8 P4 M5 a0 Q
{1 ]* V4 Z; p! a, g# M! S) O3 G
puta();
7 C2 l4 I/ P M2 [: j6 s getch();
4 Q2 v1 B4 E7 J dcls(0,4,0,79);" m2 c/ B1 \8 D8 J9 J. N
getch();
" _3 B* y M+ B: ] puta();& @" d- Z8 [5 h5 r) e- J, ]: v
getch();
$ L) C8 a+ O8 l bcls(0,25,0,79);+ ] D/ M. y1 f
getch();9 v# A2 J( B. T& e. w/ ]0 V) \3 A$ Q
puta();2 F+ x Z( m0 B) h' w, @
getch();
: B3 O, c3 D0 N3 ]+ ^ zcls(0,25,0,79);2 X. R$ ^' U8 r1 p* b
getch();
3 n0 N8 _9 w( }# O$ r) P1 O }
* v2 u; H7 y- m8 I! [ /*********center clear screen(中心清屏)***********/
. [* m& }9 S# P# a& X4 ]; ] void zcls(int x1,int x2,int y1,int y2)
3 _- X/ b/ X2 |- K7 o5 j Y {2 d3 c* Y2 u, C# k# l6 S9 H7 K
int x00,y00,x0,y0,i,d;+ F! q- Y/ M' g; l* N4 z
if((y2-y1)>(x2-x1)){
1 z4 i7 ^; x! q7 I d=(x2-x1)/2;' c8 ?; l# g Y2 A2 b, ~2 f& ?
x0=(x1+x2)/2;
6 J0 p6 O( l9 r7 W2 E4 A5 v y0=y1+d;6 `3 G2 N( O. U' h1 {; U$ v' F# I- Q
y00=y2-d;# B, J. Z% k* |9 M" H* E
for(i=0;i<(d+1);i++)
5 Z) p% g0 T2 o; J4 W3 C recls((x0-i),(x00+i),(y0-i),(y00+i));2 T2 t! z& N5 c% U
delay(10);$ H1 N% O9 @, F: Z
}; O1 ^% h3 u' d$ }1 O; F4 ^" d
else{
5 s! U+ r% {0 u d=(y2-y1)/2;
0 ]9 U$ N& [" q y0=(y1+y2)/2;; k, V7 Z8 V2 B# b Q) j9 N
x0=x1+d;! g* D/ h# t4 p1 ~6 E
x00=x2-d;* S- {0 q8 J& @( n
for(i=0;i<d+1;i++)) w* @1 f2 ^6 z
recls(x0-i,x00+i,y0-i,y00+i);# Y/ p; H4 p, F" B! H
delay(10); H3 ~# M& f( \- g
}7 ~5 Z* ~, h7 E0 S3 V
}
( V/ e/ J" Z# S4 E- G9 b* N4 J
5 F0 a; u6 q. O, w3 } /************* clear rectangle side(矩形边清屏)***********************/
H4 x( v; A5 e" H6 a0 s* m
$ e# e' F; n$ Z4 b5 H6 Q7 ~ void recls(int x1,int x2,int y1,int y2)
" N) K ]2 `* _7 L" J {9 S; m, m9 T B6 Z8 U, F6 k- S
int i,j;/ C+ l" g: j% r5 `( S
for(i=y1;i<y2;i++){+ q5 Z4 P; W/ h7 H( \
goto_xy(x1,i);, T S$ O* ?) }- c) B" L- `
putchar(' ');' n o+ [& J) i* D# C9 J
goto_xy(x2,i);% Z9 l2 E8 _5 @- k
putchar(' ');. {% {" \) b9 Y1 b( ]: j+ ~
delay(10);8 m/ _& O6 G. ?' f: k
}9 C4 u2 Q- S4 ], _; H A
for(j=x1;j<x2;j++){, F0 K& j Y1 l' {- T7 W
goto_xy(i,y1);
! r0 J# G/ u" M+ _4 D3 y8 z putchar(' ');( t+ W2 O: M4 a x
goto_xy(j,y2);1 N6 g$ R' }: w
putchar(' ');
( k' h. o$ }/ r0 L( j$ D delay(10);
! e0 O% R4 s3 |( `8 m; G }5 g6 g/ E6 ]" S% I) _; Z& q$ E
} g1 }/ z- Z) E+ J1 G. U6 f
/******************open screen clear(开屏式清屏)*********************/0 L" _! D( c3 Q6 t- t2 L5 u$ a
9 W( t4 H5 |6 ^& n( R void kcls(int x1,int x2,int y1,int y2)# v. ^8 I+ `0 u
{& k7 C; R5 c9 ]' g; B: d
int t,s,i,j;
o- s- J& ?$ T, B* _1 D t=s=(y1+y2)/2;/ _0 ~5 Z8 {: L; H( o" ]2 T3 ]7 l
for(;t<=y2;t++,s--)
7 e4 S% R8 q& j for(j=x1;j<x2;j++){
5 F* J1 x5 L" a* g6 |3 w goto_xy(j,t);
; h3 j o* x, }0 U& H4 }, a0 L* J putchar(' ');
) N$ _% P9 D" O+ X# u" p3 O! ]$ V goto_xy(j,s);) w/ w/ E$ ^3 L' A9 n$ @
putchar(' ');
3 F4 N7 z$ C9 _* m( c delay(10);
) \; A& j3 u' T8 |& N }1 S+ @9 o, Y4 O
}
) w4 D; v8 z% g) r /*****************close screen clear*****闭幕式清屏*******************/
+ o& D3 _4 ~1 S& U% c6 B+ s. r+ R% Z) V
void bcls(int x1,int x2,int y1,int y2): V U* V. x) j+ a) ?7 q. S) r- n
{. e& l! c# @* f, R$ b& D2 h8 \
int t,s,j;
- E6 U5 C) _, P! S$ _! x7 _; c t=y1;8 |- Z y, M0 O) z
s=y2;" ^) l9 ?% L6 u$ W
for(t=y1;t<(y1+y2)/2;t++,s--)
& z- n5 R2 t e. {( @ for(j=x1;j<x2;j++){
% \- n( E/ M# Z8 S) s# Y goto_xy(j,t);/ c. ^+ x5 P" [$ y: V
putchar(' ');
& h N: K) f/ M+ t! q! t goto_xy(j,s);
' c% f4 \, Z! q9 J putchar(' ');
' ] G3 ]2 t2 G G delay(10);
% K5 C& H4 {% k1 j R7 f e }
1 I, P6 ]4 z5 _' n1 j+ D/ }/ s }. i- f, F/ L- T9 ^8 C5 { N
/******************bottom screen clear(自下清屏)********************/7 l8 D1 {9 V5 T9 Z' b+ a
( `5 P& C8 T$ E' }1 d$ f void dcls(int x1,int x2,int y1,int y2)
, R f0 m% g9 `6 s* j/ { {3 S! s" v! D. ~3 G4 [5 a
int t,s,j,i;! F$ @5 T0 M# ]( N7 v
t=s=(y1+y2)/2;% q9 `0 G, f- K6 b1 O6 G
for(j=x2;j>x1;j--)
" |9 ]. C. J; m) m* q( | for(i=y1;i<y2;i++){1 o" y6 a% a2 d
goto_xy(j,i);
2 V6 y1 S8 i* @, m7 } putchar(' ');' b( f. T; v7 T/ q
delay(10);
/ ?$ e6 R& h! R7 q$ u7 Z: Y }
- Z) T6 E/ |: [0 u; z7 \) j/ p( ^# f# \ }
5 t# }& x6 @4 e /******************设置光标子函数******************/
" t: N" J& w. Z, e/ B7 p
8 ]& C5 i) {7 U% j, E void goto_xy(int x,int y)
1 \( b! d4 y% P6 [6 ? {
$ z" C. f. ~; Y8 K' e union REGS r;. E. B' j! s5 Q1 s$ g
r.h.ah=2;/ Y* y! K, m, Y9 W3 F T
r.h.dl=y;6 ~7 H: {) B8 S2 \! A# H# b
r.h.dh=x;
6 O% {8 S% e! ]9 d0 S7 j9 Y r.h.bh=0;: U. V7 F a& [" L9 M. X
int86(0x10,&r,&r);
& U+ I* ~% |5 `7 {- R# F% d3 S$ k' [ }
. {( |' f( o& H t. |; Y, N
# D/ u( o3 {1 _" U* v8 U* d /**********************在屏幕上打出一连串的a字母用于演示程序******************/. J! q4 q" \: {2 F- K8 a2 p
% K1 d( H8 X* m3 r$ r void puta(void)" z; W3 R" d* y% u/ K
{4 j8 L! c$ e4 P. M W
int i,j;
* ^* z7 F: T- D7 x, m7 y$ V for(i=0;i<24;i++){
* e; A. e4 U Z$ m6 O/ R/ B for(j=0;j<79;j++){. [8 m1 A4 o8 g$ C
goto_xy(i,j);+ c/ |! M8 Y u8 Z: A
printf("a");9 Y- @1 _, q' A
}
- |, {! i% ^6 L; V9 A }0 n, R% D W2 D/ m# N% p# M4 T
} |
|