标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
- a- D- z6 x6 V* [4 W* v9 V
, y5 J' h; Z6 X, v; b
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 c2 t% R- E* _4 I; u8 Q# Z7 H3 p4 G
6 ~1 P, q& a( d. S: z% b* `" U% ^
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
6 l5 p$ W0 Q: _) F. a
子函数及演示程序:
& q& \) M# B! ?; X2 ]& N! P. @
( K3 k7 q4 P( i/ s2 x! ^" x
#include<stdio.h>
# h8 \# X1 B7 o! D; M. q
#include<dos.h>
1 J1 ~$ _: I/ ]
#include<conio.h>
/ c6 b! f7 A6 n/ d" Y: d C+ H
) I& ]& |" E. _0 A e
void goto_xy(int x,int y);
8 C8 j3 Q* h7 q' P. l/ K
void dcls(int x1,int x2,int y1,int y2);
" S. [2 _, F& z/ N" L7 [2 ?
void bcls(int x1,int x2,int y1,int y2);
4 O6 ?$ K) P! @3 `# p3 a
void kcls(int x1,int x2,int y1,int y2);
. M; z/ M& }. W) F
void recls(int x1,int x2,int y1,int y2);
! g* Q, [4 q' g/ E) I
void zcls(int x1,int x2,int y1,int y2);
* W) v, B( }" o" I; r, C
void puta(void);
3 R8 Q8 C5 m! O( I$ j- N
: B _, u) a4 V" i. `, q
' [* k: N# l$ W+ l t) ^) D
/*--------------演示程序---------------------*/
$ [ G: U. _1 j1 s
main()
6 \9 v; B/ |; L
{
, |8 L/ m8 S( |+ w
puta();
X0 a: r2 @2 Z/ m0 ?+ z; x6 b% Y
getch();
3 q" D7 Q: l6 u$ Z
dcls(0,4,0,79);
- e) K2 h! u2 Z( k, p2 v
getch();
. v( C) |+ |9 c _) \3 o5 z9 U* @
puta();
0 U1 q" W* u. {/ |9 M) a
getch();
: t* w, v" X5 D3 z y
bcls(0,25,0,79);
" x. X9 U6 M7 U3 N) |0 y
getch();
# u. k& N) J; D. Q9 M3 b8 h9 e4 l
puta();
3 F, s' l' z* e4 g& E
getch();
) y2 G5 ~2 y! i# Z
zcls(0,25,0,79);
q9 ~6 H5 O4 ]$ y4 R: \0 x& X
getch();
( m. f4 }1 Q: S* X
}
- J l5 |7 P& N
/*********center clear screen(中心清屏)***********/
: W7 x8 _" [5 a
void zcls(int x1,int x2,int y1,int y2)
, @- W. F2 n4 m7 Y
{
' j: ]2 f1 L! M; u' l
int x00,y00,x0,y0,i,d;
* F0 U9 e" [( a5 l
if((y2-y1)>(x2-x1)){
9 M7 G9 }& ?& b) D4 A
d=(x2-x1)/2;
* N7 P! C+ Z- v* D/ t: X
x0=(x1+x2)/2;
/ E, o/ ~9 Z: F8 Q6 u; T7 W
y0=y1+d;
+ ^9 e2 U+ u) D: M: {
y00=y2-d;
5 F6 g0 h4 Q- G; i* ^. y7 v
for(i=0;i<(d+1);i++)
8 S3 i1 y) l4 o/ X: `
recls((x0-i),(x00+i),(y0-i),(y00+i));
" e6 i$ K, r+ G0 y1 m
delay(10);
4 ?6 E& M# L6 T2 C% Y+ \# |
}
# s: }4 l) \& J* M5 y
else{
3 k7 P% M& ?& w7 \4 R0 s2 T8 }. A
d=(y2-y1)/2;
( @) [# p+ G% |( W! g
y0=(y1+y2)/2;
& f! W& P1 r$ W7 r2 p
x0=x1+d;
4 s7 l$ M/ P9 e) ?8 k* I2 z
x00=x2-d;
, s5 v/ U. A2 ?, w
for(i=0;i<d+1;i++)
6 [& L( I6 y( C5 ^! J
recls(x0-i,x00+i,y0-i,y00+i);
1 t% Q. `2 P8 @8 w, y# Y% r
delay(10);
$ y5 y m3 ?# S* i
}
' h) X& O. p' x
}
/ B0 ?( |, l: @! Q
( \, T/ G! W, M' O0 F: x
/************* clear rectangle side(矩形边清屏)***********************/
( c9 Y' i# [, Y/ i. b
9 t. ~$ g/ _9 S, y: y+ ]/ p
void recls(int x1,int x2,int y1,int y2)
; d I2 c* S( s6 E' H3 M
{
" B9 }$ [* y! M/ V+ p% v2 N
int i,j;
' e: J- { F7 @ G6 h' ~5 I8 ^& R
for(i=y1;i<y2;i++){
( D$ y. m* I+ S" R2 M- }3 \1 [! w a
goto_xy(x1,i);
7 J8 r4 O4 {) ]: E' N) s+ \+ y
putchar(' ');
; f, k7 \1 O4 S% z! @
goto_xy(x2,i);
9 @6 [" S# s& f3 b1 T
putchar(' ');
( R' ^' }+ P! K% p9 s0 I
delay(10);
6 S7 \: S1 A. N9 h
}
5 U5 x& W1 g8 {" Q$ M, p* M
for(j=x1;j<x2;j++){
( c: i1 b9 ? P' y9 H
goto_xy(i,y1);
' X% G" p. J* M1 |1 B
putchar(' ');
0 J$ v5 F( ]7 Q8 K7 \0 G1 ]! _0 j
goto_xy(j,y2);
. f2 g1 J. J6 B+ B: H7 b
putchar(' ');
: s4 V4 w7 [2 \9 U. e$ y8 k
delay(10);
2 R% h2 O7 Z' K3 {% {: d$ [
}
* \. A; B$ ]% I8 M' } b: k( `
}
; d1 \6 p5 ]+ E b5 R, ^
/******************open screen clear(开屏式清屏)*********************/
$ l$ q A+ z9 w# b# }$ t% N( J
! H% d: g# Z, W0 d
void kcls(int x1,int x2,int y1,int y2)
- Y/ T0 y; s- @+ I' G. `, E6 m I
{
8 u* @( f$ P, Y: e4 _% U8 g4 L
int t,s,i,j;
& _5 y+ N+ J; G" y& \- m
t=s=(y1+y2)/2;
+ v6 G/ L/ P# }& w
for(;t<=y2;t++,s--)
3 ^# I3 O! D" {& K8 X
for(j=x1;j<x2;j++){
: k/ o+ h" e6 n1 N, Z* {
goto_xy(j,t);
, H$ i9 e" \+ G! D
putchar(' ');
$ G7 k6 p+ M1 h1 X* _# n" Y
goto_xy(j,s);
! S, Q$ ]$ t& D. z" n* p) I
putchar(' ');
1 M4 p/ h/ \. t% a
delay(10);
( t2 B: P9 n& u, k. _1 A
}
9 W7 x" G. M9 |
}
. t& r* E1 J/ y: H5 X$ c( g; W
/*****************close screen clear*****闭幕式清屏*******************/
" M$ H: g# o+ i0 \5 c
6 }& @: d" A0 [: ~
void bcls(int x1,int x2,int y1,int y2)
/ r/ L( o9 b- Q6 C/ K! f
{
/ T5 k0 h; O% }# _( r t
int t,s,j;
& v ?9 e* _6 y H" _
t=y1;
( A' p( i# w4 p ?) I4 d/ T' n
s=y2;
* N+ H9 ^5 V! D% F7 H2 G" W2 t6 f
for(t=y1;t<(y1+y2)/2;t++,s--)
\7 O# n& @/ \1 ^
for(j=x1;j<x2;j++){
9 v/ ~5 W0 R) t1 e
goto_xy(j,t);
6 m: y* t" [- _+ v! C: n) _- ~
putchar(' ');
0 D' w7 A' i9 S5 c9 Q: T) ]6 n
goto_xy(j,s);
- u; F. I C O$ C
putchar(' ');
* ]7 ^5 m8 t" n0 ^4 q/ n% O$ V2 C. h% j
delay(10);
4 k6 h+ F! f* v2 J' c. J
}
) F, A, E' ^& K
}
" Z7 t. Q8 g9 d! p# F' j, G' \
/******************bottom screen clear(自下清屏)********************/
! o# M. [" R* U& }! r$ a7 i7 `8 g
7 U+ t$ |% ?. n1 b" a' n1 x
void dcls(int x1,int x2,int y1,int y2)
+ j# Y8 z& u* i" v
{
" G. t; p" Z7 i0 s$ `8 Z; ~
int t,s,j,i;
{) E: d# x; s6 l
t=s=(y1+y2)/2;
/ F$ F2 C h8 _, C. e1 C& E
for(j=x2;j>x1;j--)
( k, |( ?* H1 \* z
for(i=y1;i<y2;i++){
" t$ S7 G7 T/ F3 N4 v# z
goto_xy(j,i);
) _. l' [8 d7 R$ p
putchar(' ');
( t5 \: H4 z+ O, U4 r/ j* `. z1 D
delay(10);
. O _' H" O# u/ K" A+ k
}
9 r; i3 D n( O
}
7 M' S5 a" U; S0 v) i. e, }
/******************设置光标子函数******************/
; J7 d$ y9 x. @
8 Y) U6 H6 G- x C
void goto_xy(int x,int y)
3 y6 R. G$ j0 L, e/ K H- b) ^& F- d
{
9 P3 h% H0 N6 o
union REGS r;
( i" X% Z9 }- h, G6 s( O
r.h.ah=2;
7 h5 N; R6 @$ A# N7 X) k) i
r.h.dl=y;
( [& x# |' }+ j) g8 ]
r.h.dh=x;
& o! m6 R, E% Q0 y6 o* ^) S$ K1 J
r.h.bh=0;
# c1 \" n0 u0 @, w& d# `
int86(0x10,&r,&r);
8 ^, E8 T R) T
}
, b& e+ j$ N% D
' v3 o* p! n0 A! C1 U0 U
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 n% f2 Q" [+ l
$ D& i# b4 K# A9 Q
void puta(void)
; u- u; Q9 B0 U$ I) n' M
{
2 P: E3 @( g2 [7 q6 e# }) E
int i,j;
2 Z+ u; P: m9 k
for(i=0;i<24;i++){
6 r( ?. Z- y4 ?! P5 j* L) E/ ]
for(j=0;j<79;j++){
- v1 Q$ f" e3 z6 d$ S
goto_xy(i,j);
: g+ i; S, V/ w- l) l
printf("a");
( Y5 `7 b5 S v
}
) @9 L3 Z+ m, W C0 S+ v, Q
}
4 o C/ y2 m. x/ ~+ j, ]
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2