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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 A6 @) n- Q7 g1 w! [# ~9 B
4 U, v' B& x! T) v$ Q. p 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& a3 _+ S/ a: @5 I
* ]; E3 L7 K; T2 {! j! s
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ Y3 y2 u% ^/ R3 M 子函数及演示程序:
5 P0 R% f% G; G! }/ K9 d8 U# P( y
#include<stdio.h>
/ l6 |1 N2 t1 S: j! C# K #include<dos.h>& G6 u) O5 a' o
#include<conio.h>1 @# u6 P( O, W! g% \4 S
; \% _1 `+ U% F* V3 l" z void goto_xy(int x,int y);
! ~. t2 G; k8 y+ m7 a void dcls(int x1,int x2,int y1,int y2);) w) @0 |6 l& E& R, V M
void bcls(int x1,int x2,int y1,int y2);9 Z8 E0 _; b k2 S1 j( |3 j) ]
void kcls(int x1,int x2,int y1,int y2);# F0 p b: a b9 T2 B6 S4 x, s- D0 i
void recls(int x1,int x2,int y1,int y2);+ O% x% y* s3 h8 Z; S& j( M
void zcls(int x1,int x2,int y1,int y2);6 `, S2 J* J [1 Z! \) o
void puta(void);( p$ O. U$ K9 s/ N' V6 @, {
3 n9 D; q+ L# ^$ z1 ]2 Z$ s- I
* I$ Q y& v: n' G /*--------------演示程序---------------------*/
3 B0 B: } O: E/ e+ F main() N: N. _& D1 v9 a0 J# o4 Y
{; ~, X' V2 O+ b; q
puta();
6 C" n. k9 C8 O9 o* Y getch();
5 I) k: H" {- ?, k& Z dcls(0,4,0,79);# o V4 ~" q8 v& O1 ?: M
getch();
' z( e7 e0 o( T+ X1 O puta();
$ p- y; i) Q1 ]* V getch();! f/ n/ x( i- h: d* j
bcls(0,25,0,79);6 [& ?& G2 y) m3 y- B
getch();: m$ N4 ~% ^4 c
puta();& n& ?! p2 m u; T$ ]$ A
getch();- a2 N2 ?6 ^. I3 \: Y
zcls(0,25,0,79);
/ A; x7 r# Y$ R2 K/ G getch();
5 i& V, X% t# C5 m6 [! ~9 C' q }0 I/ B8 S+ K1 i- E0 Q# q
/*********center clear screen(中心清屏)***********/ ?1 J" K2 B$ @- }3 F# Y( h. E Y
void zcls(int x1,int x2,int y1,int y2)
' h7 F4 Z6 N: x* L' X+ b {
, L" u5 |& y# {5 Z2 [% k int x00,y00,x0,y0,i,d;
: v$ `# B- X0 b* K' g9 h0 Y if((y2-y1)>(x2-x1)){4 k7 Y/ O: A, c# I3 C: ?* V7 q
d=(x2-x1)/2;
$ v2 k1 `) Z8 c) h' x" |2 U* ~ x0=(x1+x2)/2;3 [: E/ e* ?" v% W0 t5 A
y0=y1+d;+ T. t8 D B8 j9 p b( g9 O
y00=y2-d;
; v" ~6 H& J1 Y! H* m for(i=0;i<(d+1);i++)7 k( W! }: o/ p, B, j
recls((x0-i),(x00+i),(y0-i),(y00+i));
+ k4 ?& N/ U& c# ~1 Y delay(10);
& f: _. Z G; B }: a3 i* E3 ]% i% ^. D5 i0 b `
else{" ~" }% X ~" X
d=(y2-y1)/2;
& }1 z' V, L( U( o9 E% J/ n y0=(y1+y2)/2;
2 O5 F" ?1 Y1 b7 o& J x0=x1+d;
2 g9 z* u8 C9 \" |( z+ Y& l x00=x2-d;4 _1 P% F- m0 Q. F' `% \; P
for(i=0;i<d+1;i++)
N/ `: Z1 h& q recls(x0-i,x00+i,y0-i,y00+i);
$ g7 f% V5 V& H* p, K, f6 p; q delay(10);
1 U0 V- q$ u( H+ \+ L: i }
; P! C7 D. v) k7 N) l/ S9 Q }
' X. R, B* R* E$ n5 L$ X7 ~) G
2 E6 a8 ?) ^1 I5 q8 R/ r2 \ /************* clear rectangle side(矩形边清屏)***********************/
- j8 i$ d1 v+ [, b! S
: _6 f; q1 F* R void recls(int x1,int x2,int y1,int y2)
2 X. ~+ N$ m* L* a A4 ^ {
1 w* R+ c; W" v8 L6 U" c int i,j;
$ ?4 |, ?( D7 J# a for(i=y1;i<y2;i++){
9 P# k! R+ E2 J9 F8 _ goto_xy(x1,i);7 r [9 P) r, E0 {! e \
putchar(' ');; P, z; n' a3 I2 [% b
goto_xy(x2,i);
/ k" c D7 c& m3 A" J# [ putchar(' ');( |7 U- ^3 k4 ]6 U
delay(10);
) }: r) c; q+ k! r$ K }# b0 i: e* \* x8 q# z9 U
for(j=x1;j<x2;j++){
4 H$ b$ A/ G8 E+ G5 G. A+ Y j goto_xy(i,y1); l5 r$ U% R. k' E7 u
putchar(' ');
& E9 T. w, [+ | X6 X# R4 t' H goto_xy(j,y2);4 J$ z9 U9 u4 r7 d. \
putchar(' ');6 Z9 R9 D3 ~8 X7 W& p |
delay(10);; a/ S/ w, [6 Y% q/ y
}2 R. l7 c5 a9 m
}
$ D: H( f* ]! b /******************open screen clear(开屏式清屏)*********************/
- _+ a3 l8 J2 K
/ w8 C. `1 c0 _: D void kcls(int x1,int x2,int y1,int y2)/ O; N, ?: p& H
{5 l# s# k2 y( }) P! S
int t,s,i,j;' O+ ^6 c0 q" q5 }+ i$ l
t=s=(y1+y2)/2;
3 [! U1 J- s4 `( f; B for(;t<=y2;t++,s--)
* j& i0 E& z' H* X for(j=x1;j<x2;j++){2 J0 K# G' L# e) u. _ E" r5 e& d' N' B
goto_xy(j,t);6 C" a, P( q0 d4 _: n! U
putchar(' ');' n6 N* J+ b( r; A: o s- o0 g
goto_xy(j,s);( } y6 ~/ R- N: k- h2 b! Q
putchar(' ');
1 L p, a9 n& n9 x3 x delay(10);
7 { d1 Y8 ^6 [% v) n }, {7 F' e* ?! y: P& M: y
}+ E& v2 q9 ^/ z7 e# B8 L% D4 ^+ b
/*****************close screen clear*****闭幕式清屏*******************/
2 I8 L/ ?$ f |% a& b7 y# A0 F* T; v& ^5 {$ c$ q8 u
void bcls(int x1,int x2,int y1,int y2)+ n0 J) u P, }9 n8 `: u9 i, @+ Z
{
1 M* v; \4 C& W% W( G3 _ int t,s,j;: r2 [) q. c* t$ ]2 b
t=y1;
9 @4 d: ~) U% n3 F5 N0 C s=y2;
0 r! l$ X2 M& d+ z9 H for(t=y1;t<(y1+y2)/2;t++,s--)5 B; z+ t! C2 f' y& s
for(j=x1;j<x2;j++){ S7 B% v% i$ j
goto_xy(j,t);& |! E/ J2 s( d
putchar(' ');
y( J% v+ N, K3 J* A) G) P goto_xy(j,s);) p2 c4 e. O8 r0 a
putchar(' ');
+ l C' H* T" s* L delay(10); S# A$ j' R, G Y" m- G
}
+ F J1 H8 |2 V/ p1 l* `0 g( `% B$ Q }
, K! M& T. ]/ Y; X/ B/ ]' X /******************bottom screen clear(自下清屏)********************/; d; o7 f, j* y6 w G; N
6 p1 r c( h7 f, d2 Y5 m- B) B void dcls(int x1,int x2,int y1,int y2)
3 x0 X/ o/ l4 e- g# A/ t- _- ^ {; }- \: G7 w$ M
int t,s,j,i;, |9 R! `; p, C/ U/ |
t=s=(y1+y2)/2;6 r) h I1 h6 |2 n* J+ d
for(j=x2;j>x1;j--), S; ~$ e& K9 [4 X( h
for(i=y1;i<y2;i++){
7 N6 [* F* B1 |* [ goto_xy(j,i);
' h6 a3 H- f8 E# i4 {+ ] putchar(' ');- L3 U( t/ X' d. O' m4 i
delay(10);
6 y {. O' T* S7 { }" J3 Z% t; e9 f$ E- i F2 L
}, K, n* E9 T9 P1 x, U
/******************设置光标子函数******************/
1 z/ E" Y/ ^+ K
1 P, }; i* g) c6 R! p& ] void goto_xy(int x,int y)
0 ?! T$ L, ^: b" M# R" ]: h {& r2 Y9 z7 M. e9 Z1 w, T+ S
union REGS r;
2 [% T- V7 E+ z7 k, ~( t/ O: A r.h.ah=2;
8 Z8 {4 i& f5 T1 o& K r.h.dl=y;% {8 b$ s1 R' C2 x
r.h.dh=x;
: O, C3 \6 i, f% n6 q r.h.bh=0;
! ^* K2 X1 q% ?6 Z ^ int86(0x10,&r,&r);, p, n8 P* x! k: |4 N8 G
}& y7 f! L+ v0 @& b! l1 v/ i9 {; {
! }0 b# C2 t8 g4 |2 a. _ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 J+ m- b/ i( W, F# E( T$ O5 u% x! b: U4 z
void puta(void)
1 [! U8 ] y* J8 V* G5 e: T# I {
3 T3 U+ A/ ]+ o! s) f int i,j;% ^6 F" Z) @+ ~/ O6 z% X
for(i=0;i<24;i++){
, k2 @6 D: m( U8 `, E6 } for(j=0;j<79;j++){ L# V0 Z1 h5 E d9 E* N
goto_xy(i,j);
, S2 k7 ?; I8 {7 y/ L printf("a");
/ V5 ^7 d; b( K }
0 S4 c: h# ~0 Y1 E6 k: o }
/ E. I! s# i3 J) G } |
|