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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 b; t; n5 ^) E) Y: A i9 Q, ?% {7 X) }0 k: v. h
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 G3 t7 j0 F/ q. g- A+ K
" ^: f' O5 v) Q! m" U8 X
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
, O3 p$ @! I9 P9 N4 j 子函数及演示程序:2 J3 [: v8 \& h& n/ |* j D
' q: I6 W1 r" T4 T7 B) X! W #include<stdio.h>
$ |/ n, L* V) ? #include<dos.h>
2 H6 q5 O) D6 B( x9 r$ d #include<conio.h>
& S& g Z7 x% k' z. ]0 C1 Y% q! j& ~. x5 U( W
void goto_xy(int x,int y);. ~0 G) l2 y( h) q- z$ T. l
void dcls(int x1,int x2,int y1,int y2);
. D% R8 s# L2 g, t void bcls(int x1,int x2,int y1,int y2);( ?5 v( G6 n% r7 {4 q
void kcls(int x1,int x2,int y1,int y2);
- [1 h" H' ]; j9 K1 k void recls(int x1,int x2,int y1,int y2);( u; L; l. z1 H! i( w
void zcls(int x1,int x2,int y1,int y2);
( p; s; M9 n6 k; W void puta(void);
5 e, @ h) R7 G+ n5 s: c E9 z$ U! d3 `6 L3 Z
$ P' N* I! R2 h# v* ? /*--------------演示程序---------------------*/
* {' ~; D: `+ [! y: o% W main()
7 v: J: N }* X n) C% }3 l {
9 P# E# f0 A& ^0 J4 l1 s puta();
# I! T5 w2 [9 c$ l9 G, O getch();: g+ Y% N. |) i+ m$ W; N9 p
dcls(0,4,0,79);. V- T# c9 M0 B$ R0 `2 L/ }8 b
getch();3 k1 Z* @. H8 p( h+ H* Z
puta();
S$ P: N- A1 g2 D getch();
! o$ f; M" W7 V bcls(0,25,0,79);/ A% m7 z/ V/ c4 L6 J1 l
getch();
; C' w5 z% \! x puta();
3 m# h8 h2 z+ S. C getch();8 h n c1 O% |3 I
zcls(0,25,0,79);5 Z! r! F2 H& {( D
getch();" t# B1 y9 y' m( L: w3 Q! N
}& J5 ]* R/ z \8 m: b
/*********center clear screen(中心清屏)***********/
% `# a& ~( ?* x/ M void zcls(int x1,int x2,int y1,int y2)
2 v, x$ M* `' c {0 M5 _+ m* H: B7 r4 f! j" j" O
int x00,y00,x0,y0,i,d;+ |) A( I e! w3 p$ J0 ]
if((y2-y1)>(x2-x1)){( o: C' @1 L9 k, I
d=(x2-x1)/2;% V8 E" E7 E! q" e Z: m- \
x0=(x1+x2)/2;
3 J5 H; \! W7 |" J( v* h( C) V y0=y1+d;, v9 a. V, L' j; n7 U0 F3 [
y00=y2-d;0 {# {& k; \3 ]
for(i=0;i<(d+1);i++)
. \2 a2 E! ]* a/ t recls((x0-i),(x00+i),(y0-i),(y00+i));0 }# V. r" E \! j) w
delay(10);% E1 u. o$ P7 r
}) x1 Y; [5 k! w/ [2 \5 o
else{
5 d! Q1 O/ \% u d=(y2-y1)/2;. ?, H0 D: M/ G d) e" m0 u# S
y0=(y1+y2)/2;
9 y. a) B6 h0 L8 ? x0=x1+d;
2 m. p" k) l# Q! b, c x00=x2-d;, M( S+ ^3 ~! T% R" ^) X) `
for(i=0;i<d+1;i++)
* D0 M! E/ `3 o# t( s* m. Z( O recls(x0-i,x00+i,y0-i,y00+i);
) V, ?: |, g8 u' M* ]* F8 F$ v delay(10);
& b- p5 D' Q+ b7 ~7 P! j9 B }5 u5 f- O9 \# X1 w% Y4 K
}$ y+ {- ~! E7 z8 E- u
) W. o: `! z! ^$ a1 Y$ k /************* clear rectangle side(矩形边清屏)***********************/' x/ e( w% {, ~) F# d7 z
2 @% h/ y& {& R+ D' q
void recls(int x1,int x2,int y1,int y2)
9 M$ Q6 P8 N, D7 W1 y* w2 w {! _5 a* G( l! s5 ^! R9 l
int i,j;
! R5 w3 k+ `# c o) d! A! A for(i=y1;i<y2;i++){
& O* P* a+ E# h: T# i3 l) ` goto_xy(x1,i);
$ J/ p$ i4 l$ @" f2 t; S putchar(' ');5 z+ A3 f& q3 G0 B! H
goto_xy(x2,i);
' t1 ]; t K4 \8 g putchar(' ');" h1 Z! T9 {5 X7 _
delay(10);0 E8 j) w3 v7 ~
}9 V% W( p- k4 j( ?" r- b
for(j=x1;j<x2;j++){" [- _; |& H ?6 A" T
goto_xy(i,y1);
" F- w' z+ Z9 t: f/ [8 H/ G putchar(' ');
8 [8 R0 n9 }( J- h3 u( I goto_xy(j,y2);
; u1 }( p' v# ~) Z- Y1 c putchar(' ');7 P& X/ X0 X& v0 G1 _- ? S* d
delay(10);5 ?& z( }2 E# \- j6 }! l$ M* ~( G
}
# ]* O9 S( z0 {) I0 E }
; i( A9 i* H2 [: L# a0 q0 Q /******************open screen clear(开屏式清屏)*********************/
' |% H0 _+ f5 Y0 C* {0 m2 L+ N, |$ U! G
void kcls(int x1,int x2,int y1,int y2)" s+ t4 k. h& j0 ]/ c
{
4 q3 B6 D" H; B+ R4 f7 z int t,s,i,j;- L/ |$ _1 e$ t( |% U. i
t=s=(y1+y2)/2; b# I5 B }; y- b: d, B2 v. a' A
for(;t<=y2;t++,s--)
) L2 E4 Q3 v! o) ` for(j=x1;j<x2;j++){
* \7 L0 q3 n' }9 G `0 H goto_xy(j,t);( D! U( V& t0 p ~0 }# Q6 P% I
putchar(' ');
9 K! |2 H1 Y* f! e2 w( Z# L7 k# P! w goto_xy(j,s);9 B% p; q8 {2 |5 G7 Q
putchar(' ');5 Q \( l2 h* H# \% }% z
delay(10);
3 a- C' ~' w, W* r4 B6 J& d+ U4 E8 O }$ \. g3 R# g+ `9 S; _
}, c8 V, m, t& x" ]# f c
/*****************close screen clear*****闭幕式清屏*******************/
" ~( M4 r8 {; f1 Y. {! @$ ^9 w. y
g1 ^) I" a/ Y; X, c3 L void bcls(int x1,int x2,int y1,int y2)0 P/ c/ w- N% `7 l
{/ n& t5 Y6 h, j& K: A a; R/ r
int t,s,j;; F) l* g7 a! {5 N* @2 t2 K2 G5 X
t=y1;
, D+ K) L D9 g: f5 R s=y2;
6 h/ E% i9 Z2 O) Y b. X for(t=y1;t<(y1+y2)/2;t++,s--)( D9 ~( [: P! [
for(j=x1;j<x2;j++){
$ D- X6 w. k5 l* v& r" R6 r" |* l goto_xy(j,t);
6 R( P/ J- L% F6 O- @. X# | putchar(' ');
& t# s4 h' N* i6 B4 P+ t goto_xy(j,s);
, `9 H* ]7 L: z' l" k1 D putchar(' ');" h P& Y; o$ a3 R8 p h0 M
delay(10);
9 A7 [+ c3 L0 U( L) M8 B7 _4 o }
0 f R9 c6 _* |0 K2 l% m/ k5 f, ? }
% U/ q+ i# e/ `' }& F /******************bottom screen clear(自下清屏)********************/
! Y& o5 O7 c6 G8 B* ?" O" [5 P& Q0 {3 ?" u+ K+ |2 d9 v+ D2 c
void dcls(int x1,int x2,int y1,int y2)0 I1 t3 ~8 ]. A# D* m0 N# O; |
{
' V% J& y& |. C2 ]) ~* h int t,s,j,i;, H# i8 Y3 p0 `$ M& R- b
t=s=(y1+y2)/2;$ E: I5 Y) m( O P, e
for(j=x2;j>x1;j--)
: ^( a) A" G+ s; o/ O" Z, ` for(i=y1;i<y2;i++){! |- I# S7 M8 Q; ]8 w+ U
goto_xy(j,i);6 o9 N# C, n& }- g3 e
putchar(' ');
/ p7 d; Y' i: _$ u delay(10);1 D" E& n# G) x* L; W5 x
}& R& ~" w! ^: R4 w
}
; R3 x8 v7 Z! C& Z$ p/ N1 E+ f /******************设置光标子函数******************/
4 W6 W. V3 A# {6 d5 [, z( u% c7 q5 u' G9 x
void goto_xy(int x,int y)$ R/ i0 h8 c! }6 i* {& J. R5 e" f! F
{
8 H: `# ]+ f! h2 L, F" b union REGS r;5 U: Q; J, i2 c3 I$ n# s
r.h.ah=2;
, U/ J( K/ y! E. U2 p. k r.h.dl=y;
- y7 H( P" W% n: Y r.h.dh=x;9 M; k! r9 J5 Q4 C' m) N$ O4 O
r.h.bh=0;
9 L3 b3 _- I0 T- Q: A: V* I' `0 O# M int86(0x10,&r,&r);
' l% q6 ^/ g1 t& J* w3 c }
, d# {. z( y$ P7 M. b% C* W1 a2 K3 Q6 H) ]/ y
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ Z6 O p9 ?. O8 l4 V" k3 F' {. y C8 `' i8 ?* Z; Q5 D; L
void puta(void)
% X7 R6 I: c# L {/ k# E. I. L) D- a: `* |* U
int i,j; Y# r# @+ S: K+ F5 {1 T1 k& J
for(i=0;i<24;i++){. L( Q) v/ \4 B/ `- r0 J5 H5 }
for(j=0;j<79;j++){
$ Q( L2 M- h9 d1 V0 S1 X: o; u goto_xy(i,j);
" W* l8 l0 t% G h+ [ printf("a");, H8 R4 f& P! e& k6 j- ~1 `. ~
} ?+ Y$ i5 g6 I: `9 z, h& d
}0 N9 g9 Q4 Z. z' S6 Z8 o- |; L$ C
} |
|