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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* j' V& m, q8 S7 `9 s: d( T
' O; M: r: ~4 j% E 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
8 i6 `: H9 m, U# u. X6 [8 G& f6 f: c# |/ w9 V
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ( ^. K: H/ V: S( I1 j% I1 [2 @
子函数及演示程序:' _1 {4 \. }2 M* e
7 c7 l9 \9 z5 X
#include<stdio.h>4 y. y6 c+ j! {( }# u$ h$ D7 X
#include<dos.h>
& u! z3 a8 ?# t3 Z2 [# q #include<conio.h>
" A7 S+ T2 G7 N7 R* j
% h! n3 Y& H2 ^! |0 u3 x( \ void goto_xy(int x,int y);6 T9 ]5 G* w8 m4 b% E) P
void dcls(int x1,int x2,int y1,int y2);
9 C- E; z7 {9 x void bcls(int x1,int x2,int y1,int y2);
6 X& b* L% |' t( z) F; T- s" V void kcls(int x1,int x2,int y1,int y2);
- c# a9 b5 i$ k4 }5 Z. Y6 u% c( L void recls(int x1,int x2,int y1,int y2);3 k1 o1 z) P1 H, @
void zcls(int x1,int x2,int y1,int y2);1 \0 V# { ]6 J- {3 g; C, c
void puta(void);
0 i8 c6 V3 a+ h" {' a h
7 ~; S9 U5 N0 A N* e
5 @: M( F D! \+ S3 e! X /*--------------演示程序---------------------*/+ x/ b! }: p. Q A+ l* U3 r
main()
- p. w N% D" R& Z+ Y {+ r& @6 T$ P6 [7 y5 F. T' S
puta();
- X% U3 ~* w$ c* J getch();$ K0 U6 P' t9 q9 Q
dcls(0,4,0,79);4 ^2 s, h7 L- a; F/ ?
getch();5 d& r9 u3 w& m# _( \5 f1 e
puta();1 b M- P- H: b2 W- _
getch();: G4 m) G: l# Q! K, x
bcls(0,25,0,79);
8 z' I- `6 j6 V5 [+ S2 D+ y getch();4 N2 u6 S* s/ P8 ^
puta();' Z# M' Z: J0 z4 q- [0 I
getch();9 G0 T5 g, W: C* K, P. ?( J
zcls(0,25,0,79);
# O! M; K1 C( c8 C# y; {$ x( B getch();: Y, ?6 t# H; x8 C
}
4 U- F7 C6 ^7 j1 L: s8 ~5 I /*********center clear screen(中心清屏)***********/% u* ?3 M" d1 j9 l4 g& }6 L" S
void zcls(int x1,int x2,int y1,int y2)
8 \* C# {- ^; r; d {/ x4 B7 \5 r K4 G5 ^! w
int x00,y00,x0,y0,i,d;
; b l& L& l# w# Z$ R if((y2-y1)>(x2-x1)){
7 U/ t! o0 k, @5 t( s2 B; u+ k- u1 Z d=(x2-x1)/2;* s) m" X J! J, b5 P1 v: e
x0=(x1+x2)/2;" r! m2 p7 m9 T, c/ g# }/ ~
y0=y1+d;; V) e: N7 B3 n) v+ ?
y00=y2-d;" V9 G) m, V- F \( F U
for(i=0;i<(d+1);i++)
# F' M* Y5 Y0 O1 |* p- j! P recls((x0-i),(x00+i),(y0-i),(y00+i));
% _/ w( n& m: q4 z; b- W+ s delay(10);
/ F+ F( D& U4 A6 _' L: L }, j2 N6 w) J; Z7 c& M: `, X
else{0 L3 j9 F2 E% [) }
d=(y2-y1)/2;
7 y) F Z7 l$ ]5 D; _# p# _ y0=(y1+y2)/2;5 s' {* D2 U! m% G) x4 S
x0=x1+d;
" m# Q$ s9 ^$ y x00=x2-d;/ J8 M& y+ X3 d1 m, b' x. j
for(i=0;i<d+1;i++)
A) g) B; n; \6 O( p; q- i recls(x0-i,x00+i,y0-i,y00+i);
& T4 `. F9 c1 |$ b7 t' Z2 x delay(10);% K2 B0 \ m+ z {3 j2 M2 B" I
}4 C( o* R0 g/ Z! G( ?) Y
}
! _6 o) I) p$ K* H1 \
7 q& Q* ?7 j0 Q+ Q; } /************* clear rectangle side(矩形边清屏)***********************/
. P5 B3 u* T" E; v& z+ W; c7 s) ?6 T7 L* i7 ~$ t5 z, x
void recls(int x1,int x2,int y1,int y2)
/ s J% }. j: t/ Y {: k& ?* s3 z( W! ~
int i,j;
+ g$ M) u+ Y: R for(i=y1;i<y2;i++){
, H/ _" V; L! h8 H3 u" ~: g goto_xy(x1,i);
4 }7 f+ L4 u6 @/ F9 g6 \9 ^' @ putchar(' ');
& ]& Z3 R' x- T/ G goto_xy(x2,i);
. s: X3 Q; `6 l0 q! q/ j, D; R! k putchar(' ');5 P, J6 V& ^: `( g0 N( _- K
delay(10);
5 I) R1 @5 u9 W, U- u }
1 H4 n4 G: J) V1 a" k+ ?+ | for(j=x1;j<x2;j++){8 C, \% Z3 A2 K9 I+ e( g/ O+ m, |
goto_xy(i,y1);
5 |4 T! V1 w/ _( _5 E- T" b putchar(' ');
6 S: x5 x) Q `' |& B( N goto_xy(j,y2);( r* k7 D: Q3 y/ ^* f% n
putchar(' ');4 r5 \5 k, P; O# w" I+ T: y1 X
delay(10);% R) D( |4 D5 ?) r
}
& {( C9 Z, C1 d: c2 ]5 G1 r- ^ }
+ \5 t9 W3 y/ v- ^3 o /******************open screen clear(开屏式清屏)*********************// Q; e& M; e/ m( [
: S' S$ H) J) X
void kcls(int x1,int x2,int y1,int y2)! F* J# B; T+ c2 ^5 X
{7 L8 c r! T% H0 p. [
int t,s,i,j;
" S- I2 w- e3 K9 j* f( j t=s=(y1+y2)/2;( Q, N5 W2 ^+ i
for(;t<=y2;t++,s--)9 L) g( o% _. ?1 M3 a8 I# r
for(j=x1;j<x2;j++){
, y* U7 j; _& _9 [: f# C: } goto_xy(j,t);
. z! P) k) r5 x7 {6 O( T/ m putchar(' ');+ Y" j1 b$ K4 F& |
goto_xy(j,s);
. w, I# }4 t8 G6 a: ? putchar(' ');
, Q6 `' W# N6 A delay(10);
" F( L5 ~* ?) S }
: {6 d: @/ w8 A$ o. ~ }, m. A# N6 |' v% t
/*****************close screen clear*****闭幕式清屏*******************/
+ W# o! X3 _& M7 a Z9 e
+ h3 ]- n$ ^5 l- K+ D void bcls(int x1,int x2,int y1,int y2)- p) i7 r* G4 B. \# l8 N
{
8 x" M; _' ]: C; A2 V int t,s,j;& f) g9 R% E# \3 Y: ~
t=y1;
' R' C3 d' ]/ d) t v7 i5 z s=y2;
8 d8 M* O7 u1 `2 ~, n1 T for(t=y1;t<(y1+y2)/2;t++,s--)9 t( k# k% |% h; [0 o% z
for(j=x1;j<x2;j++){
# E5 h C m4 Y/ b0 D! n goto_xy(j,t);. R, |# N$ |1 e
putchar(' ');
1 A* G% s. ~1 v5 S goto_xy(j,s);
. H* p9 O' K; \! T! @ putchar(' ');
' l; b5 {& z3 |# X) D delay(10);: [) i0 `( U) U' g% J
}
' M' ]$ n7 }, U) {- f" o }( n$ L" D" N" [7 X' m1 T
/******************bottom screen clear(自下清屏)********************/
: U; i5 C! M$ u9 K0 [/ ~3 {# @# q- F, o$ f( V! f
void dcls(int x1,int x2,int y1,int y2)
7 R1 H; {1 s3 a0 Z5 o4 A {/ O b& F: c7 } o& r0 o
int t,s,j,i;0 Y4 G& |5 w1 y) `
t=s=(y1+y2)/2;
+ P' H7 A' w9 ~3 N( } for(j=x2;j>x1;j--)
- O( M& k3 m8 b; e/ {1 j* k for(i=y1;i<y2;i++){) p5 \! i. I3 B5 O" Y
goto_xy(j,i);8 t) |5 E& _# [. f
putchar(' ');# B4 n- g/ P3 S0 y
delay(10);4 @3 x* r; V* [% m$ ?( K" x8 l8 I
}
4 `; t0 n+ \ A$ g6 ^6 E& |6 [ }9 `# [( \- \- s- v( O* Z$ ?
/******************设置光标子函数******************/
6 X* L7 M. |: p4 x% [8 O0 P
' C& U! D. F% e* M5 k6 U" J$ ` void goto_xy(int x,int y)& i: n% j* y6 Q1 Y: @
{8 K. Q1 Y4 u# M4 | M
union REGS r;
0 B# r- g O/ n7 }. S4 C. l% e% i( U r.h.ah=2;
& ?' I d3 `/ ~ r.h.dl=y;
' z' C, ]6 Q; O) U/ F6 Z5 D: A5 S( q r.h.dh=x;
& A% b0 h/ {, k' M) R, Y. h r.h.bh=0;
8 H- H0 X- R8 h. v2 H int86(0x10,&r,&r);
! x* }6 A3 H( G5 h, d* W+ u8 R. I }& R) t/ s& I- x
, q. T0 e9 C3 |( P( [) q /**********************在屏幕上打出一连串的a字母用于演示程序******************/9 _; |# ]. l B) t
* k; b! G* e* S3 }4 d' @ d! z void puta(void)2 Y' m) g: r0 f# o. E0 P# j
{3 r( I" i( b4 y" l! E
int i,j;
+ v4 H. j; Z/ o4 z" s for(i=0;i<24;i++){* @/ `$ w6 p# Z% r( ?* I
for(j=0;j<79;j++){
% c( C$ [$ P# x4 F+ b goto_xy(i,j);, A) U4 v' V+ s7 A: J
printf("a");
1 h0 s1 r2 z( B! y5 P6 P }
/ Q z6 Y1 T2 T8 E) I }
. C1 E7 \; R2 \6 f' S } |
|