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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
. K. i# \' N# b; T& j. ]1 C9 D0 Q3 D
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
! O6 }! N8 r0 v( }2 G+ D4 H* e; T& A+ ~' l: ~% A
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
8 Q" u- n N+ E 子函数及演示程序:
9 }# `. b: v# d/ s1 b- M5 I( F& e+ m& e: j
#include<stdio.h>8 W$ r3 ]8 i" Q, y' \' i
#include<dos.h>
+ A7 L% d( c- L5 d2 O #include<conio.h>9 [, x9 A# r+ M; G$ ^5 \# K: i
& f% C: q5 a+ [+ Y+ q6 B void goto_xy(int x,int y);
4 u o z1 b% X) D: h3 L' F" D void dcls(int x1,int x2,int y1,int y2);
9 y6 U8 v5 r5 W# H5 M void bcls(int x1,int x2,int y1,int y2);4 v8 K6 f( r5 L1 G
void kcls(int x1,int x2,int y1,int y2);
. k. j2 c& V( ]2 X9 [6 } void recls(int x1,int x2,int y1,int y2);& T0 x8 F1 K7 v! ?! U5 L @+ F
void zcls(int x1,int x2,int y1,int y2);% P( w" W& Z( M8 U) {
void puta(void);3 u$ D( x+ _5 Q. l& }
2 V6 p1 H |& v9 ~& Q0 W
. `+ X& |6 K9 l2 t+ q8 \) s
/*--------------演示程序---------------------*/, b6 e0 B2 Q8 e) ]+ Y
main()
# W: H& [0 R/ d. [- f {
( A) R; L) W# x; b puta(); `: x2 x$ }# n9 f: j
getch();
, C- C. C4 ^9 G! P: W dcls(0,4,0,79);* L3 q% X6 f) }
getch();3 N6 _; W5 C z3 B- H) Q* X2 B
puta();& b( l! o: N% T
getch();
2 ?- k9 D/ Q3 l7 F8 M0 ] bcls(0,25,0,79);) ?4 u+ y# a: H( x2 u0 e! L
getch();% k! @6 a9 Z: i9 d- U
puta();7 L9 o- H0 J( Z; l, {# n
getch();
' @0 L0 `, j( p. B- \. a5 A. A zcls(0,25,0,79);
% `% z6 ~ s. e6 ^3 `& ]+ D$ w getch();9 C% l) ~1 q! A
}; N3 l2 @) t0 A4 J$ K0 \0 k
/*********center clear screen(中心清屏)***********/6 J5 W' M& D* U0 y1 i" K. J6 l
void zcls(int x1,int x2,int y1,int y2)
- V$ T- g1 ~* J1 p, L% y {
r- i* \: c4 `- _8 N' o3 g int x00,y00,x0,y0,i,d;: ^# v$ y: I" C i
if((y2-y1)>(x2-x1)){
3 B' o" w$ g8 R; H7 i d=(x2-x1)/2;
b/ r: n6 @0 f0 d x0=(x1+x2)/2;& E0 D" O3 l* E/ E" B7 N* d
y0=y1+d;' Y" f' Q' E2 K# @( d, {* z9 Z
y00=y2-d;
3 {2 s5 O% s G. y. ]7 ?7 G* K# ~' D for(i=0;i<(d+1);i++)
# A& e7 a. A* S8 @9 H; w recls((x0-i),(x00+i),(y0-i),(y00+i));& f7 S8 M0 t$ O; B( r9 p1 I( l t
delay(10);5 w0 i7 ~/ k$ g; e/ \& R ]; u
}
2 X- L- X2 j! h else{
5 i$ t) P5 B+ n$ u: A" O d=(y2-y1)/2;6 s/ k9 B/ s! _; M% K. m
y0=(y1+y2)/2;
1 {7 k, D( p& X9 D( b x0=x1+d;: U( S) }" {; D8 n9 w: ~) d. D
x00=x2-d;
; X. L4 f& ]% B1 v6 Q6 e1 D for(i=0;i<d+1;i++): G/ u F- d$ b0 U9 e9 ^ [: t# g
recls(x0-i,x00+i,y0-i,y00+i);
E& K& k6 D$ `3 K delay(10);
. v3 F3 t( D& v+ B" {0 Q5 U }
+ Z: W0 c x4 G | } R6 i* J' ~ W7 e7 |3 G
5 J, T6 \8 [5 o! O z /************* clear rectangle side(矩形边清屏)***********************/
- p- U% p9 o# s5 Z/ C
! X+ g. }. d/ a8 I" d: e$ u% q void recls(int x1,int x2,int y1,int y2)" c+ ^1 a# L1 d3 b c! J
{
8 O4 _3 d8 |2 i0 e8 x. L& o% l int i,j;- g# ~8 I( e! T; g3 Q ~1 L
for(i=y1;i<y2;i++){$ Y# [6 V: e S
goto_xy(x1,i);& x5 `0 r* r0 R& J
putchar(' ');& |. m0 t) W% N: [# y( b5 U) ?
goto_xy(x2,i);
7 Q/ V; Y% m2 }4 |2 K) k0 T* N9 ?& j putchar(' ');' ^. U+ {! O2 A/ j% ^/ m
delay(10);
2 Q, ^7 F+ V: m+ Y# Z: ~ }! A4 I* S* U& H, m$ R# _( I
for(j=x1;j<x2;j++){" V% t8 c3 u9 C% j
goto_xy(i,y1);
! L: Z7 t; R @) F, g' q putchar(' ');7 U" C' D" P& P7 h" X, T
goto_xy(j,y2);0 s: g, z" H6 R& _/ m
putchar(' ');$ H, I- g, K* z$ P# Y( Z5 q# L; A
delay(10);
: ^' j- o" I7 t4 f: | }: }9 O! w3 Q. {) `
}
6 `. l9 z+ Y9 F9 n- z/ d /******************open screen clear(开屏式清屏)*********************// n/ ^6 U, ~: k6 I) q
* D( I; `+ h6 `5 _+ U" e1 f8 ~; I
void kcls(int x1,int x2,int y1,int y2)3 }* `- L4 e8 c* A
{
. }3 @) n) d- ]. H9 D8 [$ I( u int t,s,i,j;, D; C8 v7 B4 ]# a% }$ i5 F) Z- C
t=s=(y1+y2)/2;
6 J, C5 W: r7 a1 F" X5 G9 |* E for(;t<=y2;t++,s--)
& Y2 Q) p5 z2 E1 }5 m/ o- B for(j=x1;j<x2;j++){0 f( w( i7 a- a* z$ K
goto_xy(j,t);
" P0 l% T- o" E7 E) i* r- X putchar(' ');4 u. O l* ^) ~
goto_xy(j,s);
4 f0 }6 {. G5 F$ D/ k/ m putchar(' ');. q# c2 M* q' |6 ]6 x4 H
delay(10);
" {8 R- T2 d* c) x: [; ], ?, k }' ^4 L' D7 P" u3 o
}6 K# W; T+ [, v% |$ R) B9 w. q6 S
/*****************close screen clear*****闭幕式清屏*******************/8 j. Q; b, Y, ?, M! k. t% C" J
5 Q3 }6 g; C" A; q# [ d) A void bcls(int x1,int x2,int y1,int y2)* ~2 [6 E1 A/ o' N9 y6 |: K
{
g; l4 _4 o) ` int t,s,j;
1 d1 f8 O7 z1 G( |6 g t=y1;
# {+ e" V$ n5 l' N s=y2;
9 I$ {, I$ }! g# Q for(t=y1;t<(y1+y2)/2;t++,s--)
3 @4 @7 N& M5 \) x" Q1 ? for(j=x1;j<x2;j++){1 V) Q1 ]- `% S' c2 U( l
goto_xy(j,t);
2 X! N8 K# ^) q# F! H putchar(' ');3 d$ F' g0 n! t) g
goto_xy(j,s);3 ?+ K5 B( i' f7 U
putchar(' ');
% X0 w" ~9 `3 ?; R) P delay(10);! r0 O/ K/ O/ l! ]
}6 n+ H& Q U9 J* s; o$ O" V
}
2 @5 S* Y1 q4 f, F2 @( f /******************bottom screen clear(自下清屏)********************/3 ~4 `: C, L, a; M
% |4 h0 [; s8 J; M- s$ G8 u
void dcls(int x1,int x2,int y1,int y2) O- O0 p; s3 y* p u6 k3 s( }
{
0 G: z9 S& q! B) V t0 [* z, @3 x int t,s,j,i;& z m. ^8 f" M0 L1 I
t=s=(y1+y2)/2;
( |6 @" \) v1 { for(j=x2;j>x1;j--)
& T5 t: F1 Z1 G- J, _8 r/ h T6 ~6 ` for(i=y1;i<y2;i++){" I6 m& L4 P3 X' i% ?! I& \
goto_xy(j,i);
8 j9 I; S. _; d$ _ putchar(' ');
2 R' c$ j1 u4 G' V+ a delay(10);8 ?4 [7 h6 ~, |& j! M
}
0 i; U8 X# K0 J) n% @8 O) [$ }/ \ }% S7 q0 `/ s8 [
/******************设置光标子函数******************/( J; R* u& M6 r) T! Y$ {, A. d
& U" _7 Z, M; D5 I) c void goto_xy(int x,int y)
7 w; B/ l% H: D/ Q6 O1 k3 T. I' g {& W- N4 b% q: F$ y" N- e8 u( s# w1 e
union REGS r;
/ j: V# {0 w8 h# I8 I# k Q& @) h r.h.ah=2;
+ E) w: Z# E' B l7 ?( A" m r.h.dl=y;, _. ?5 ^- u& [4 y; u4 Q8 |* G3 C
r.h.dh=x;- G& m8 Q8 w( j
r.h.bh=0;7 M9 [5 i* }6 I8 j+ L
int86(0x10,&r,&r);
' M0 l7 m. H" M, C3 Z1 Z }; [* q& I5 r8 \
% G0 p8 }/ f/ } G /**********************在屏幕上打出一连串的a字母用于演示程序******************/2 L- O3 @5 L- E- o- V- M/ d
0 T% p) @$ {8 S1 l# W. @2 S- Z void puta(void)
o' y) W" P: g' o T" h0 Z {, M+ y* U5 [3 ^# Y6 ]( M+ r
int i,j;1 U+ d$ ]* w4 I% e" I6 }0 H
for(i=0;i<24;i++){! J3 D0 Z/ q& C' c0 N. ?! `+ I: K
for(j=0;j<79;j++){7 k' B- `, Z! d
goto_xy(i,j);
9 [/ y# ~, c: i printf("a");2 {4 U3 U" J F: p
}
/ c# E f0 ?, P) K; |) X }
* @! F7 }/ k3 a2 C1 F } |
|