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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
) M! G' `; R& n. q! D( S
' A4 ~& X0 R& ]% G/ \( d* \ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里7 u; q$ c: ?/ w. }0 m& m
) n G7 j, U/ }$ f* |$ X 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : e+ l7 r0 ?3 ]# c; o u
子函数及演示程序:/ \8 g0 |" e& i9 z) p) H: R8 c5 X! s
! t- X3 o2 _1 W2 H" T #include<stdio.h>" \- K/ r ^6 Y' V
#include<dos.h>
; V/ e' V. @* w' s3 p #include<conio.h>
4 c/ v# {) [! N* o; z/ ?& F x
4 [- S9 ?) _8 D$ V void goto_xy(int x,int y);& g5 g% n- {6 ]* T; T
void dcls(int x1,int x2,int y1,int y2);0 S- Z/ J d0 Y6 g0 {4 P) k
void bcls(int x1,int x2,int y1,int y2); j, {! d8 d8 c" `
void kcls(int x1,int x2,int y1,int y2);
) w" @. l! `4 p+ b- z) C' q, H void recls(int x1,int x2,int y1,int y2);
$ p+ P+ Y- L$ g5 A, U0 a void zcls(int x1,int x2,int y1,int y2);$ D8 P. |. m, b
void puta(void);
9 F0 V) u# U, E9 k2 l3 q1 f- {1 l+ u7 r! m' _/ q* p
& l3 R; |3 E2 a8 E- N /*--------------演示程序---------------------*/
9 G( |1 S3 _9 o' E" z/ j- s main()
5 t+ h! H" W% V0 `& z {+ }. V2 |; k% |
puta();" Z& n9 I: Q2 |6 k
getch();
4 q9 {# H7 \( B! H" Z6 E dcls(0,4,0,79);& @4 b k- B$ \! c& x1 v! Y
getch();
# |: p: n/ A6 W/ H/ j puta();! ~8 E: k$ {" y; n- v7 _* _4 E
getch();# Q4 V6 z3 C/ r. }! r5 O
bcls(0,25,0,79);! f4 v H6 w( G! E
getch();
3 g y9 q D: F puta();% G( a# a* b% I( @! Y
getch();
: f8 i+ Q; p5 u( {* A8 T zcls(0,25,0,79);
% y/ q( g' N* S8 I getch();
. A S- R/ N3 x4 a4 r% Q }' l3 x& u; |( y# r8 K
/*********center clear screen(中心清屏)***********/
3 i1 M3 R! \8 J void zcls(int x1,int x2,int y1,int y2)
5 D8 X O: x6 A {1 Q5 S! M) ?. U# Y
int x00,y00,x0,y0,i,d;/ ?- l& G; \" M9 {. m
if((y2-y1)>(x2-x1)){
2 Z( z e7 J4 w/ g; Z d=(x2-x1)/2;
; o) M: ]- S! c3 L8 y- B c x0=(x1+x2)/2;. \- C) B* K5 x/ b, c8 z: U0 p
y0=y1+d;- T' L# J, L4 |
y00=y2-d;# W; v9 `6 G, X7 ^; I+ ~' M: }
for(i=0;i<(d+1);i++)
3 Q$ l, H w5 {5 S5 |3 J& S recls((x0-i),(x00+i),(y0-i),(y00+i));: h* {3 D2 _8 r" w8 a2 s
delay(10);% m! W" k" ~# O4 _) X/ u& L# P
}6 g7 y; u/ [4 [; @0 U
else{, z1 n, H9 m3 `. Z9 j
d=(y2-y1)/2;
/ h) l" ^4 R5 t9 g$ ]: A$ I: } y0=(y1+y2)/2;
* E( O% o" h$ b' {' @2 ]( W x0=x1+d;" y) Y2 W @& ~6 k( I
x00=x2-d;4 T0 c0 q |/ _+ t& t) D
for(i=0;i<d+1;i++)
8 ^! x4 n$ H( j/ `3 X recls(x0-i,x00+i,y0-i,y00+i);% H+ e5 i B0 j7 k; ]' x A3 c% \6 X
delay(10);0 h- N# y. V+ c( X4 u& _
}
& p4 {5 w; m; K! w6 U, p3 Z }
9 X/ `! L2 K" F: I V* v1 x+ {( {2 q! F/ X
/************* clear rectangle side(矩形边清屏)***********************/
* q# X# h5 q, C0 l: D/ I. j! O9 N: ^0 V! u9 u$ y& Q# F
void recls(int x1,int x2,int y1,int y2)6 j# O) K0 j( R% k8 |
{9 Z3 K8 t) s4 I6 \
int i,j;
- `( t* j1 [; V5 F* ]. l3 G for(i=y1;i<y2;i++){
( `% _( O3 \ Z0 E: r9 r3 Q) v goto_xy(x1,i);# d C6 z# ^) D2 I' x3 a
putchar(' ');0 n$ A: j) @3 X' J7 b" |* g, w
goto_xy(x2,i);7 P: _8 m7 W( R X) i
putchar(' ');
# k3 T% L8 r( r delay(10);
+ a f; R* x/ j& G$ V }, o4 o* p1 L; y% U
for(j=x1;j<x2;j++){% F6 k: Q: i8 U4 c: }/ j* U. b
goto_xy(i,y1);2 A7 Z, }9 \$ K- t6 S( ?
putchar(' ');4 q& h9 D1 F) X* X/ X
goto_xy(j,y2);
: s) p: z, m" f; h3 \9 | putchar(' ');- n& ^1 ?: U: m+ a3 @
delay(10);
$ {. C/ ]* Y& ]( e0 C) {, T) a }
4 J# `6 r, C" F6 F# N }
K* Z# w3 @9 R8 X. I /******************open screen clear(开屏式清屏)*********************/
' }; t7 j0 `: g) v4 c4 y5 B7 n$ g( P. D" W% Z# _
void kcls(int x1,int x2,int y1,int y2)
9 T5 @6 ?; j( i8 H& i$ S( z {
5 K: l g; D2 l4 U! `+ ^9 u* [: P int t,s,i,j;
, P) d# }: i& A, p/ j: n' y# v t=s=(y1+y2)/2;' ?9 f' O- Q' f4 P% ^
for(;t<=y2;t++,s--)
! E& D% r) l4 u) x: D1 ] for(j=x1;j<x2;j++){
3 R; c; a3 b/ E0 ?. V goto_xy(j,t);
- n( S' E0 q1 P2 s1 \ putchar(' '); ^) R; T8 l! @% S
goto_xy(j,s);( @& X4 D, H7 w9 X5 k- q
putchar(' ');; g1 R4 C* F" v; N8 M) l/ V
delay(10);
- ?! {) I/ m5 M0 S" v5 r }
. q8 M6 f. d* b1 `) [' z) k }6 B: ^( o7 w5 Q0 ~" w0 R; o0 R$ N
/*****************close screen clear*****闭幕式清屏*******************// x! `6 `3 ^* W# z# B: H; ~" D- U
0 C& W, x; I# W0 q# G2 l- w1 O void bcls(int x1,int x2,int y1,int y2)2 V" x* | C' R; U+ E( d
{
: m) E0 C4 L; { L1 p int t,s,j;0 \/ r! H6 T9 j$ ^: q8 i. h5 E9 w! D
t=y1;+ Q) }+ {- J' ~' ~
s=y2;- s: g* v: D5 z7 L9 k. d
for(t=y1;t<(y1+y2)/2;t++,s--)2 f: K9 w5 P5 p1 J* M7 O
for(j=x1;j<x2;j++){9 g ]1 H8 y& a. Q8 Z
goto_xy(j,t);
% K0 I$ e& L1 n: _( u. h2 P( ` putchar(' ');* C( Q, X! n5 I. m8 ^9 N
goto_xy(j,s);) W- e4 g- t) |8 q
putchar(' ');& K. J, D. [3 \: b ~# H" a
delay(10);1 Q- H1 \; s$ d& B$ z& S
}
" {+ o+ O, Q4 |8 u8 T }/ [, w: O) u7 m5 f* p
/******************bottom screen clear(自下清屏)********************/- J5 H8 l Q9 |3 }2 V3 W8 n/ B! a1 z; a
. C8 y- w7 j7 V n
void dcls(int x1,int x2,int y1,int y2)
; ^: J7 W7 z: { L- h, i- c {2 K k7 K0 N8 y
int t,s,j,i;
$ `7 a7 s8 C' [, e- H* O: I R t=s=(y1+y2)/2;& D. E' g, D8 g2 Q0 Y
for(j=x2;j>x1;j--)
+ a9 o6 w1 o. F9 Q1 i; j: }; C for(i=y1;i<y2;i++){
# U8 {' X# R; Z% b goto_xy(j,i);
2 Q+ v" D/ J) ^! o5 J$ r2 V4 | putchar(' ');
{9 m1 q. Q8 [2 k6 Q delay(10);
" b& Y) k5 n! |5 ]- p- s }& S' k I0 ]2 _# i$ T
}
* \6 i s; ^3 y2 `* Y; x /******************设置光标子函数******************/" D; B p" H3 k/ o5 A8 q3 Z
' w/ E, c. E0 N- @# A$ \' ?# @2 Y+ X, m1 c void goto_xy(int x,int y)' `6 f& b) ?0 y/ j2 ]
{
6 n! {' \. h3 R% ]1 O union REGS r;
7 B6 n2 @' m4 h0 } r.h.ah=2;! K0 A% ]! f4 o: G2 I% A
r.h.dl=y;" q' y& v- b' J M) C5 W
r.h.dh=x;3 K/ v2 E. o$ f, w6 D- w0 d
r.h.bh=0;+ k1 b+ n- e& u# u8 O& Q1 r) y
int86(0x10,&r,&r);; N6 I$ V" h# u m/ |% A* N
}# `. a/ J; I( A* L6 y1 }
/ L2 z( H) c {4 K& n( H, n
/**********************在屏幕上打出一连串的a字母用于演示程序******************/: D. v2 M/ ^ H4 r; ?, w9 D2 x
3 e2 L0 V- f1 H void puta(void)/ ~& O$ m+ v# ?! ]
{
7 t# `' S& `3 Z" f M4 w/ G int i,j;% w: X' k& @* J7 Y
for(i=0;i<24;i++){4 A) w1 L/ D( G$ t1 ^2 w) z4 P
for(j=0;j<79;j++){ t# M: L) U" w5 r) @; ?
goto_xy(i,j);3 m5 x* ?& }4 B
printf("a");
6 U; ~" M& d& D Z, B }
7 d" K, C2 N! x6 u7 M& E! O }
7 i4 B3 i" N* l$ K$ T } |
|