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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,8 \4 S6 O% O i6 @
' f! @0 v4 J% I+ T$ B
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# X _5 U/ p* G4 C* e! h8 d: s: t$ _* I, E9 \
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 D! c" L$ i* S0 H& A; ? y: g 子函数及演示程序:
+ ^. R- v0 ]+ Q4 ]/ B- ^, ? [$ [- ~: R' d- [: n8 I1 w/ k; A( x
#include<stdio.h>: ~+ j9 q; r, @9 C: E
#include<dos.h>
7 U7 d( Z$ w! @ #include<conio.h>
& c0 Y5 @- W$ j
2 ]; v+ a: ?( v, t& \+ v void goto_xy(int x,int y);: G) o) \* e! Y
void dcls(int x1,int x2,int y1,int y2);
4 a6 Y& L. k! _, M E6 ?" d2 i void bcls(int x1,int x2,int y1,int y2);. z: I1 F" r3 k, t( G
void kcls(int x1,int x2,int y1,int y2);( ^ e0 S/ @( j
void recls(int x1,int x2,int y1,int y2);
5 s' g/ V6 N; k" S0 ?. g. x& _6 r, Y void zcls(int x1,int x2,int y1,int y2);
3 Q0 V- {! B6 D$ M& N* v9 c' J: y void puta(void);6 X( H1 `8 a/ s, S9 c
* P, o9 }: v& ~ Q2 S7 S6 l* x
$ ]0 ?3 t7 l! e) [+ J* A8 m$ @ /*--------------演示程序---------------------*/- O3 H& `+ I! y
main()7 z" v, o: g5 i; D! m. [
{7 O$ Q7 D B3 F' O1 {/ f0 u
puta();/ O5 M. |# ^* B" m/ `( _
getch();
5 y, H! y$ \+ b4 ?# I/ w dcls(0,4,0,79);$ k3 _5 ?/ R& M$ s$ z
getch();, b4 L; U3 v: R6 }: [% }1 C
puta();
' X4 c# c j6 ~' t getch();
1 e( p4 K3 d) I5 {8 O bcls(0,25,0,79);' y* F% F3 f1 u. v. J7 ?) Q
getch();
8 @2 a* R' t) c puta();5 Q% U/ P* k% r
getch();
. a1 P) n5 {& c) a: z: y( ` zcls(0,25,0,79);
* D1 \" O$ M8 G getch();4 L! }) M a" e6 i% ?) C) F) v
}
3 q3 G# b7 Q3 J; J' q /*********center clear screen(中心清屏)***********/
8 N6 V- V: i' L, w! y void zcls(int x1,int x2,int y1,int y2)
4 X& u( v+ R' p4 C1 R {
( z, r" F+ {" n int x00,y00,x0,y0,i,d;0 _, X5 L* \7 J4 P
if((y2-y1)>(x2-x1)){7 x* X/ I; o/ H) s! ^
d=(x2-x1)/2;; e5 U. y" K2 G
x0=(x1+x2)/2;
/ L7 b' D& E8 x0 x K3 b, c$ Y. A" @ y0=y1+d;) Y' C3 p' ~ [
y00=y2-d;/ A4 L2 L" ^8 d# _' v: [/ K% n& }
for(i=0;i<(d+1);i++)( Z; K) W) A$ J
recls((x0-i),(x00+i),(y0-i),(y00+i));
& |1 u5 ] w# a; {, j delay(10);) F. J; }7 j1 m+ S" d
}0 F1 |. f, [9 s: s" j
else{
% ~3 M/ v" ~( W5 f! t4 u: h+ M* Q d=(y2-y1)/2;
0 L; L8 X4 g9 j5 ^ y0=(y1+y2)/2;
( l3 C4 Z$ A% o x0=x1+d;% u9 y1 C0 ?( @. ]$ a8 m
x00=x2-d;
; O1 a% Y7 D7 E1 x) k$ U9 d for(i=0;i<d+1;i++)# z E% M. I5 y2 Q% q4 D
recls(x0-i,x00+i,y0-i,y00+i);, r2 B) Z! c. j5 d9 t. A6 t
delay(10);
* d" f1 l% S2 _; G' D- s9 }4 N }3 I6 b5 Y( {! W1 }! b9 V
}
4 e& ^% c7 V2 w) j \$ c8 G5 ]# L ?
/************* clear rectangle side(矩形边清屏)***********************/
! @4 a* {" i W+ ~: B! ~% q9 ~$ L, S9 N$ a* M; ~) j8 ~
void recls(int x1,int x2,int y1,int y2)( p* [+ S: C {7 x% f( [; n$ q+ s' {
{
! f1 f" X& M/ y2 o- u Z2 o- \1 @ int i,j;1 T# m8 D/ i5 K# z3 @' E
for(i=y1;i<y2;i++){
& W3 y( q( `1 O) r" ~& P- { goto_xy(x1,i);
. \; v: G9 u7 A( U4 U4 [; s putchar(' ');7 M: I/ N- o& z7 l' e
goto_xy(x2,i);) T* o' B! X9 N2 ^& K
putchar(' ');4 s6 h' \1 `4 `: j, c
delay(10);
. f& O( K% t4 z( y }3 d$ b9 M! k3 }; |. {
for(j=x1;j<x2;j++){3 f) A" i0 J2 ]0 z9 V% F; ]
goto_xy(i,y1);; j3 T# [: |7 h! ?4 g. d. m
putchar(' ');( B* t; U8 b+ O6 R; L$ D
goto_xy(j,y2);8 A; T$ t. p+ q/ y( P4 n9 ~; T3 J
putchar(' ');
) T# Z. \& n( C, u0 L5 I2 `7 U delay(10);
0 ~+ A7 R6 M' A2 p; P, c2 r }
$ S! ]: N# d) w$ m; p2 M }
/ w o, L! ?' z+ z3 Q7 } /******************open screen clear(开屏式清屏)*********************/; L& @" \2 E: V+ o; Y2 D' G6 V
- h {9 o& w( f$ Y3 F! ^% ~ void kcls(int x1,int x2,int y1,int y2)7 Z7 t9 F6 b/ P" a
{2 Y. _8 ^0 C2 o9 [9 `7 v, L+ J
int t,s,i,j;' x, s0 w* w5 X4 j9 e- Z! E
t=s=(y1+y2)/2;5 k8 L& E) P6 M9 I0 W
for(;t<=y2;t++,s--)
$ f" f7 q/ T8 d' s1 V) P4 K _$ ?0 H for(j=x1;j<x2;j++){. R6 p7 h3 C8 N$ R! @: _2 m
goto_xy(j,t);4 k, G% m7 S1 `( ^, b+ X, I# y( l
putchar(' ');
. @! p: {9 m2 O7 x1 ]4 V goto_xy(j,s);5 e0 G3 r7 L+ |
putchar(' ');
2 A+ }$ @1 _, K' O$ s delay(10);
7 p& K! Z" Z- a5 k' T1 J9 R. e }/ y. ~- |7 v. v, Q
}5 i: P3 c: x) R6 W- s
/*****************close screen clear*****闭幕式清屏*******************/
! T# ?- k# P: ]9 ]% P y5 c7 j$ ^4 J5 r" b4 _$ [9 N; O! Z3 Q
void bcls(int x1,int x2,int y1,int y2)
Z# h; q8 L$ x/ k1 a, ^ {# O8 r% V0 W" J7 c# y
int t,s,j;) J: C5 k5 ?3 I6 u9 e, p9 |
t=y1;; u$ b( h; h* o8 T9 ~# C' i" D
s=y2;$ A5 o* G+ x: ?3 @* _
for(t=y1;t<(y1+y2)/2;t++,s--); u' t+ c$ ?0 w. {/ z) o9 N
for(j=x1;j<x2;j++){) D3 G; ~% \( e4 Z8 L4 ]- P; R
goto_xy(j,t);; i7 P, z' l: c5 t. A3 q6 e: } w
putchar(' ');
/ A0 a4 P5 R# n8 n- K goto_xy(j,s);
4 y: s9 j* X3 q$ B/ C putchar(' ');' e _8 k8 P# m. Y1 d5 w$ Q
delay(10);
0 ?& \4 B; A4 L- E }
+ E. T3 }) r- r" c! Q1 m }
7 m& B, b; g8 j6 {& i /******************bottom screen clear(自下清屏)********************/$ G: ^. d2 _" [& O& a7 y. o
; Y, Y9 q2 @' `7 p, h
void dcls(int x1,int x2,int y1,int y2)
+ z; j( l" N$ T; ~7 Y$ h8 n, q {
: N0 W7 o0 u7 c: J int t,s,j,i;1 g: y& ~9 X7 q* u8 x# \4 D
t=s=(y1+y2)/2;) o5 c+ v, u3 K& u! }8 w3 s$ \0 Z( ~
for(j=x2;j>x1;j--): `4 S- E+ z; g/ H1 ~
for(i=y1;i<y2;i++){
1 ]) O( H9 ` k& k. d$ J8 K/ [ goto_xy(j,i);
; p* B9 h' }# ]" u putchar(' ');% R0 I5 e) u1 Z6 r; Y5 a& i
delay(10);
4 A9 a2 p w% U }7 s) S0 n0 b. x
}+ w; I2 a/ K6 K2 g
/******************设置光标子函数******************/7 u3 R) t) H5 W# l- v6 i7 K
5 Y8 q0 @, d1 C. ]9 y. B
void goto_xy(int x,int y)
* `' _7 b2 P2 m3 I0 v4 R/ L$ c {
8 y/ L: @/ a+ J, r# [8 Q- b union REGS r;
; O6 s. T% m* C9 g! g6 b* Z# e5 X3 ? r.h.ah=2;6 b" m) h" {0 n5 Q6 m: q# U2 K
r.h.dl=y;4 _9 ?3 B# p) `! b C
r.h.dh=x;
: \1 r0 h$ h1 l% B# ^! w r.h.bh=0;3 h, q) Q- J9 j, e
int86(0x10,&r,&r);
! h! t) n* a8 e1 J$ Q* ] }
+ X, s; ]& i% j' D Q* o) `# Z$ C4 h
) t" O% {0 Y g0 @" Y$ b /**********************在屏幕上打出一连串的a字母用于演示程序******************/- F* E5 Q q N! I% Y
3 @: y8 N) `; b3 O1 t3 r( }( ` void puta(void): F+ u! M( ~7 |7 P
{3 M" v) ~$ x- E4 P' ~: z5 q6 n
int i,j;" o+ `) D! I3 L; U+ G1 a
for(i=0;i<24;i++){: r x9 b6 K. _' D
for(j=0;j<79;j++){
% Q) y k: ?. p$ { goto_xy(i,j);
* K, s0 ]( Q! l6 Q* G, K printf("a");* ^) j3 g7 O9 \7 f+ v7 Y
}
9 N2 k; C! c* k* ^- G: }7 P! |9 B }/ T" a! e( n' H- c( G; Z
} |
|