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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏, M/ E3 K3 i% [. \ o* H
4 n1 ^6 u. p+ e; A 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 E1 `% ~5 {$ }5 s1 q# A; s% {, Z
8 b* F/ Z, C, T! n 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 G/ h$ s3 l: k2 d
子函数及演示程序:) S* ~6 @2 a% o2 Q
2 w' J4 B$ g: _& w9 [4 B; H
#include<stdio.h>
; \" q2 X" b1 Y. u0 P5 J: K8 L) v6 y #include<dos.h>, J" u* |4 C* G3 j. ?
#include<conio.h>
% B a4 _& ~' _4 {
0 X( b" |5 S7 V. `3 z void goto_xy(int x,int y);: b* [+ e2 N6 M% W& X2 D
void dcls(int x1,int x2,int y1,int y2);
* K& f9 R6 _2 d$ O' C void bcls(int x1,int x2,int y1,int y2);
7 Y8 V! Z3 x2 G4 b void kcls(int x1,int x2,int y1,int y2);) L- Y7 [ T3 i$ X4 x8 ` `* m
void recls(int x1,int x2,int y1,int y2);
# S( P7 Y+ _0 _3 \2 |" w# C9 v void zcls(int x1,int x2,int y1,int y2);
# L6 r# Z: P. B+ _+ u void puta(void);/ X9 \, ?, L- t* J; \4 `; M
+ H6 r3 ~5 r# R7 v; q- o/ K* G# w, i$ y: E3 o5 M" l r3 U9 ?1 G' v2 T) w
/*--------------演示程序---------------------*/
+ w5 V1 Z# {% x/ U main(), I2 H0 J( d* k
{# _' v2 H3 Q6 H2 d
puta();
3 \' _/ G' j- y6 u9 n5 ` getch();
1 R; D& n& \4 n/ X1 m dcls(0,4,0,79);
( V. o0 S/ |' z& j) P( \- @5 g getch();
! a( S/ |* }0 @, r4 z puta();! J! z1 |3 ?' Q( \
getch();8 E8 E3 V1 H {/ i/ i! c1 c4 W
bcls(0,25,0,79);, i$ @7 y1 N$ T& d
getch();" x. f( K! Z8 f& l# O( y% h1 O( l
puta();
9 r* _/ x+ y( T5 q q; J. r getch();
0 r3 A& B, V( n6 W! h+ X9 b zcls(0,25,0,79);% E6 k( R2 I4 O
getch();
/ z+ ?9 v% p3 C' e; R }
2 ~4 B' i1 \$ v /*********center clear screen(中心清屏)***********/, z' N) ?+ k J, {1 {
void zcls(int x1,int x2,int y1,int y2)
4 N: f4 ^) y, ?; }+ c7 T {$ |( T1 N% w- Q" T
int x00,y00,x0,y0,i,d;
# B' |3 \9 p; O7 F; x$ ^9 v/ B, \ if((y2-y1)>(x2-x1)){
& r" x U0 E" D1 S d=(x2-x1)/2;
) e5 _6 x$ w0 Z" X6 k3 h x0=(x1+x2)/2;9 v6 F+ y5 [8 L# X' W
y0=y1+d;
. W. y+ U1 `2 _, q! t1 ^ y00=y2-d;/ [, d ^1 I& {: O
for(i=0;i<(d+1);i++)
. ^3 T5 |* a& q recls((x0-i),(x00+i),(y0-i),(y00+i));
U U# } Z. T4 a1 T delay(10);1 p0 w) d+ N5 o0 H* l; r; p* b' }
}
2 \8 @3 b3 r0 Z) C F else{
$ O9 t. p' J$ y: f; X& p, c d=(y2-y1)/2;# \7 k, Q4 v+ S. P* Q
y0=(y1+y2)/2;
2 L0 T$ ]# A4 U+ A x0=x1+d;6 v0 } q8 H% p- @: X0 U, [
x00=x2-d;
5 g* P: J# c1 U for(i=0;i<d+1;i++)8 V' l5 C' M) ^8 n/ ^* }9 I% F- q
recls(x0-i,x00+i,y0-i,y00+i);; o1 g. b6 l* l, B! ]
delay(10);
" ]' s' E' Z0 R' M: k/ n }
& l0 Q7 M% l) R }( }! J: s' i0 R2 f. B2 q
* Q J+ N5 e! x$ k; c /************* clear rectangle side(矩形边清屏)***********************/
7 F. ]; M! {2 D
4 ? E: G! R& |- u; N" p void recls(int x1,int x2,int y1,int y2)$ K0 n. R v* K+ T( x
{
: D8 W, @% s( m/ R1 O$ `* [ int i,j;' S- k0 E( c8 Y
for(i=y1;i<y2;i++){: g& g: t& @7 p
goto_xy(x1,i);) W% L, U1 F* m9 p
putchar(' ');
' U( v2 p* q& q" V% @0 h/ m goto_xy(x2,i);1 m0 L. h1 [+ m; d% o
putchar(' ');
- i) B$ v( m/ o( l: H$ J Y" _. v0 P delay(10);8 @) I- j. }+ {0 j) V, h
}/ Q" ^6 d( h( q* X/ l- J0 D, `
for(j=x1;j<x2;j++){+ s9 D* P: X8 v+ B+ d2 G g4 P
goto_xy(i,y1);) X% e( g$ z! ]9 O
putchar(' ');3 _# t B. Z5 h7 R: g" `2 V
goto_xy(j,y2);* Y# a. ~+ o1 D. z) Z% S
putchar(' ');1 K; A+ ^; V2 |/ @9 A8 C
delay(10);
. z3 |* D" \- q# M6 L) I/ d }$ h6 a# d# j5 V# P
}
Y& Y( V7 P8 s7 g /******************open screen clear(开屏式清屏)*********************/$ i0 _; O) Z9 O# o3 I) ?* Z
2 |) b5 X. K- a8 T& d. d- h
void kcls(int x1,int x2,int y1,int y2)" F2 r* H' P2 v1 e8 n
{) W- h q) `# R. a
int t,s,i,j;; V. o7 @* m$ v2 s( ~! _
t=s=(y1+y2)/2;4 e F6 i. o$ A& v7 |6 |9 d
for(;t<=y2;t++,s--)
) [4 `# s& q5 R0 | for(j=x1;j<x2;j++){
( H3 g2 \$ J! E3 g goto_xy(j,t);4 H! g f1 P4 o' `
putchar(' ');' }, k E* h9 C2 r9 B
goto_xy(j,s);9 P: D# `; W. y% a8 O0 X; E
putchar(' ');
! N- U% | m0 Y3 ~4 \, U9 d delay(10);) ^; _% W5 U3 O a# Q
}' S' ]4 I7 g6 s3 n4 Y7 k
}( j& ]. l% ~5 A/ K% P+ G5 Q
/*****************close screen clear*****闭幕式清屏*******************/
* |& H: H4 g5 V" I1 Z5 q+ z/ e ^6 w6 P( b1 I& u7 _0 E
void bcls(int x1,int x2,int y1,int y2)4 G7 i; x v; t1 i: Z- k" D( ?
{
4 i- U3 m% A% C4 o5 n' p) Q% r int t,s,j;
+ F/ ^. P; Y- J& H4 X+ R4 b, L1 C t=y1;% E+ s( b% E4 g: |- @3 Q' H' ?
s=y2;
- b1 R& b$ ]. K$ \4 B for(t=y1;t<(y1+y2)/2;t++,s--)# h s3 s$ l7 I
for(j=x1;j<x2;j++){+ i* q) b, T: J4 u( T7 u: t
goto_xy(j,t);- x, v" i4 H v) O! \- Z. h
putchar(' ');5 _- x( t7 ~. V
goto_xy(j,s);2 k( O* t& h$ \& V
putchar(' ');
5 f: Q) B! d0 r( i- X1 {1 B0 K delay(10);2 f) ^+ Z( ]" `% M/ x) Y5 m) N
}
2 ^& F# j. k9 M8 M8 p: X( o }1 k9 q/ `3 T" i6 X* ?
/******************bottom screen clear(自下清屏)********************/
! G9 G3 I3 n- t! t& Z3 k, l, b, g2 n& o/ F: j3 |2 d
void dcls(int x1,int x2,int y1,int y2)9 G' Z1 d) W% U2 A& `$ ^
{( x5 D$ r- ?) R$ M; t4 E! A5 X
int t,s,j,i;5 [/ ` r- w) d- O4 ], u
t=s=(y1+y2)/2;" [# s4 D' V! M
for(j=x2;j>x1;j--)# x/ ]3 E1 u1 s4 D4 J" d2 H/ W
for(i=y1;i<y2;i++){
6 y" ^7 \3 r" Z0 G$ b2 A6 u! } goto_xy(j,i);
+ S7 B |/ D' f putchar(' ');
* U4 F0 c2 F" o- p5 N4 s# Q) @ delay(10);
3 Y! n% M$ J0 J! G5 L }+ P3 C* F. ]! J- g% P3 ^
}! e: z0 o/ O& f3 B+ M, H
/******************设置光标子函数******************/
6 x1 |$ ]; T( O, p8 e: H3 y5 G& h, U; u9 ~1 Z4 j- h1 m
void goto_xy(int x,int y)/ R% [( {3 K; ?# }& d; F
{9 k1 w8 v/ A# Y
union REGS r;
9 S, w, q& o8 Z r.h.ah=2;
$ q; o5 _( Q3 y9 z; h% Z r.h.dl=y;
# s/ O: ~$ ]: N0 [: A r.h.dh=x;/ n2 ^2 x7 J8 A w, I* m
r.h.bh=0;
2 Q P9 S2 g5 [6 D1 k, d/ o int86(0x10,&r,&r);$ Q! i% \" I9 u, I+ ?1 N) Q
}
# n! Z9 n) m4 q; G) e3 e& E+ {2 r" x
9 f9 m4 C1 U- v4 S& f; Z /**********************在屏幕上打出一连串的a字母用于演示程序******************/% f% t! o* Z5 x; E* X0 W
9 }5 b; ~5 a% y: Z- s: j
void puta(void)
: g; o% Y8 |/ ^) m" e {
5 r6 {3 C/ H8 t I int i,j;& s" r2 S5 M& _
for(i=0;i<24;i++){1 _0 ~) G3 |$ R2 @: D
for(j=0;j<79;j++){: i: M; q8 K5 [9 O! a$ t
goto_xy(i,j);
" r- `9 |7 A) J printf("a");* |. }, t; d3 G# f0 c
}& G7 b) X! `5 b# E$ j
}
( u% D; e2 M( m5 f! {! N- g% {+ O/ w7 I } |
|