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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 D. w, u# ?5 y4 F
% c' j% L" D0 ]4 M Z6 I
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 c4 x" d! Z7 |% O" S5 R6 C- q! Z# m* A- u; h9 X: G2 J
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 K! c; f; t5 L# N3 Q. v
子函数及演示程序:
) s. C: e2 A8 w) F x8 P' \2 R9 E/ j* @ K8 |; F, r, c7 [' G( z. m; v
#include<stdio.h>6 a( Q8 D- P( Y" M# ]
#include<dos.h>
r4 ?5 O6 \9 w9 B. A #include<conio.h>3 Y3 g2 s' Q7 p) [0 E/ K
- g. ~9 |4 X$ [4 B void goto_xy(int x,int y);9 n$ T" m# O4 p0 D
void dcls(int x1,int x2,int y1,int y2);9 E3 l& j5 E$ u% h: ^! h9 p2 F5 W
void bcls(int x1,int x2,int y1,int y2);; E7 l# b9 l/ [8 z0 O# q! s+ L
void kcls(int x1,int x2,int y1,int y2);
" g5 B& t0 ?3 Y, T9 a$ N: ^ void recls(int x1,int x2,int y1,int y2);
! D9 Q- E% u7 G6 R, L o void zcls(int x1,int x2,int y1,int y2);, h- u6 C' |; b' K
void puta(void);9 x1 P. e8 S, A, f" z
6 o+ v3 x D, t$ Q
O! F+ `0 h8 a /*--------------演示程序---------------------*/: ^$ R8 A* d _* O" _- ~
main()
7 w7 }- o0 `/ V, a# f2 j# g. X9 X {
# l' t( |, ]# X/ Z! ?" A& {2 E$ L puta();2 j2 K+ |# R+ ]2 Q
getch();
5 b) ~! F' R% Z" a1 O dcls(0,4,0,79);
& m. H- G7 ~" ?5 B9 I K getch();! E& ]+ n' b: j- \5 l1 B$ L
puta();
% j K% @4 [/ A" P8 [ getch();
5 Z. m$ j+ P" J bcls(0,25,0,79);
( K$ C) L8 p# M5 w- K getch();
! x3 z0 ~- G; K2 {1 R5 N6 u puta();
# X" Q( @4 J$ |3 _ getch();1 S# y6 t9 k$ B9 X
zcls(0,25,0,79);/ d% e- d4 j6 d5 J/ w
getch();
7 r; J* w6 P* P5 a* H E& r/ G }! F6 q9 E3 u) u5 n v2 B
/*********center clear screen(中心清屏)***********/
, V5 l& ?4 f" D% W6 r: i void zcls(int x1,int x2,int y1,int y2)
3 f G) ]- l0 K1 } {
, i) O; w& T& C" Q0 A int x00,y00,x0,y0,i,d;# H' _2 @. z5 y* l* w7 H
if((y2-y1)>(x2-x1)){
" O3 X! a+ g( K* V# \: A1 J d=(x2-x1)/2;
- D2 m4 t4 _2 h; [8 p m! c }& ` x0=(x1+x2)/2;
7 [7 A7 l* o8 j& L* u% j/ c y0=y1+d;
( i! |; Y" l/ \7 y+ n! _/ H3 f U y00=y2-d;
$ d' b$ Y6 r* a z for(i=0;i<(d+1);i++)% a4 U0 g4 {. V( U
recls((x0-i),(x00+i),(y0-i),(y00+i));
1 y& t# f( H2 G- ?5 ~' l9 E% { delay(10);
( h H8 V0 `5 O5 q }; \& r- a& w8 T" N
else{
( U1 d6 N6 _+ p. r; I/ [3 X" m d=(y2-y1)/2;
2 S! T( n6 k$ G4 l( v6 z; r% f y0=(y1+y2)/2;
0 }; N' I! K7 p6 F4 e$ W2 ` x0=x1+d;1 R7 Q: h, J" f& l% G2 W5 n
x00=x2-d;$ I9 v/ N3 p: m5 H7 M6 `* `
for(i=0;i<d+1;i++): V0 |; ^8 H7 Y6 Y
recls(x0-i,x00+i,y0-i,y00+i);1 ^! x4 {1 ?+ ?% \, W* o9 U& l
delay(10);# c, x- j4 `: h( K
} d7 n% D/ y9 b# s4 x8 F" X& K* H
}
* _: i R+ @. l& c% J9 b6 h8 m1 `# ]' D2 W4 t5 D& P& S
/************* clear rectangle side(矩形边清屏)***********************/5 L" Y- @: L" |1 F3 p4 G/ S
9 D* `+ x& Y$ K+ p
void recls(int x1,int x2,int y1,int y2)1 f* R0 `. {' g1 i
{
& D0 |9 _# x5 V" z) d2 `: E int i,j;
: d, }$ Z% O( Q2 d for(i=y1;i<y2;i++){
+ K, X0 |3 H* ~ [0 J goto_xy(x1,i);- N8 C3 F) L3 o$ p. _
putchar(' ');# `6 o) O/ {- q+ t" F) w
goto_xy(x2,i);
- r6 {; d& }$ _5 a) X* Q. s! D& c putchar(' ');
9 _7 X# ?& \! d) s8 H0 r delay(10);
( p! K8 |6 c% m6 p+ ?/ l }" t" E0 A, b' N3 _
for(j=x1;j<x2;j++){: T$ }1 U! f2 x7 s. F* ?
goto_xy(i,y1);
) G: i* g" X$ o putchar(' ');4 i2 C$ n5 t( }
goto_xy(j,y2);
2 W+ y5 h! p& f$ h% W putchar(' ');
. X, L' Q1 e5 ^3 m' x, N delay(10);; x1 b3 f* C! t! H q! p% H; k7 Z3 F' K
}5 L* { P) k) Q
}
. @; F2 t4 Z2 h, n) F& [. V /******************open screen clear(开屏式清屏)*********************/- y6 S+ g& l7 L( S" ^
7 ]( J) O* y/ T
void kcls(int x1,int x2,int y1,int y2)
7 W! s m; k- V { I. r; @' |$ K+ n3 q
int t,s,i,j;
' o1 x4 a% `0 L5 Q4 g/ S' \ t=s=(y1+y2)/2;
' B5 c/ L1 |7 s" x$ r: H4 t for(;t<=y2;t++,s--)
: u9 i7 q6 ]7 A3 D j4 E9 s- Y: J for(j=x1;j<x2;j++){
2 g) h6 g' K, t+ [ goto_xy(j,t);' s: I4 [2 j% a" o$ Q
putchar(' ');3 p, Q4 e: P3 R" l0 `! x
goto_xy(j,s);
* ^0 u& u% f+ w; t! v# W0 C+ {) _ putchar(' ');
/ ~2 f! |. p0 u! m* b Z, Z+ ~3 r delay(10);
/ t/ I* e/ B: t r1 {- L! L }. L2 ]0 }8 b5 Q, X! z
}
. m1 _ d/ A( e) A2 M4 S& M /*****************close screen clear*****闭幕式清屏*******************/# V6 G! Z: `& F& i. [
) [- ~' N0 W. ]0 t void bcls(int x1,int x2,int y1,int y2)
& c: I% u' U+ U) P) B {* H/ x* }4 R$ s7 s7 s
int t,s,j; b ~4 m) L& T' ]: d
t=y1;( ~" r' x% k' l: t0 i6 G
s=y2;
8 I. v- P1 M* e$ @6 n for(t=y1;t<(y1+y2)/2;t++,s--) Q. [# S, d6 G
for(j=x1;j<x2;j++){
2 G$ E4 y5 m8 ?" X+ M goto_xy(j,t);! m, o7 z4 U: V) h/ T5 d. U
putchar(' ');6 @* g. b) L0 C. M% w: @
goto_xy(j,s);
; u$ J( K& o7 S0 l, a putchar(' ');
; A+ k; c* z6 ` j% c delay(10);
) `9 \" t1 `/ J, P# O4 I" C }# O+ u8 \9 d: [' g- U4 s
}
O2 @! [0 t( v: W/ z3 @0 ? /******************bottom screen clear(自下清屏)********************/
4 H4 W9 y) O: ?0 c
9 h$ u# b6 X8 {: `- I void dcls(int x1,int x2,int y1,int y2)
6 v. N3 n; f( M, s' J5 Q+ N9 Q {7 x2 `6 y" j. B( d* }, @/ }7 F
int t,s,j,i;
# o" O$ _; ^- _9 Z5 R t=s=(y1+y2)/2;
( I B0 Y5 \ x6 ^ for(j=x2;j>x1;j--)4 H& H/ Y- R# o' g& I
for(i=y1;i<y2;i++){# \; L- w1 q5 L; j
goto_xy(j,i);
" M% `. _) H' ]& Y2 j putchar(' ');) V3 S# g; b- [# K$ F9 n" n
delay(10);2 f* Q& ^3 u5 r5 a% X
}
* d, M+ k. }6 S8 T4 {% v" _# C5 e }
! [ {" v( V G0 a0 ` /******************设置光标子函数******************/
' o5 k, v6 u0 v+ Q. A& W; z; _3 V+ t
+ H9 ^# ]/ `* E& H! r void goto_xy(int x,int y) T! P* y9 N1 [% s$ a
{
" ~* [' f1 @! l$ }" G$ u union REGS r;
4 K/ ]* C0 L7 ?* K r.h.ah=2;* k% ]( E. ?2 ]$ ^( X, t
r.h.dl=y;$ `* m" ~" S4 I- B) c% P, R- L
r.h.dh=x; [ e) V' w& G" e9 F) {
r.h.bh=0;
, [( k7 ~7 \* K8 Z; k/ v7 c int86(0x10,&r,&r);
" q5 ~7 d, C$ ~ ] }
, r% D2 `2 _' K5 {9 C* ]" |2 M$ p+ `0 U* F' P* N/ a/ t
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
& I; \* y0 e( b! c$ T
6 `6 w" K; E. }+ Q" G void puta(void)
$ _* V O+ y. ^ Q; j {
, C$ }- G8 f0 g5 B int i,j;
/ E: v$ }9 c' R& {" c- B, K; x for(i=0;i<24;i++){( A0 ]7 F! e, s: x& K' P
for(j=0;j<79;j++){
7 }2 l2 f8 `/ D* d) _ goto_xy(i,j); A/ g7 [5 I+ B0 ~& ? q
printf("a");4 p6 C' R3 a) \. J- b: I1 t
}0 V- \* n1 Y5 Q; T! ]3 Z
}2 t( m; W; W# ^+ ?' h: _& q
} |
|