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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! v) E6 X& T! l5 ]# B$ R+ P
: ?% |/ ], T8 v+ y9 R8 {$ l 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 y9 A' u$ ]* E1 I1 l! |# ~5 ^+ g, z! t/ Z; { D
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
3 K0 U$ O% b) K7 Q4 L5 d 子函数及演示程序:
# j$ {/ T/ {1 b5 b2 a# l4 M7 p" q- e# @+ S2 e
#include<stdio.h>9 I( v* z# P. z4 ~3 {2 w
#include<dos.h>$ }8 Y' q$ A3 v' v' A# b Y
#include<conio.h>
7 E. }( a& `5 A4 `
/ H0 v5 y* [8 O void goto_xy(int x,int y);; I1 o- @! ` s* v9 p
void dcls(int x1,int x2,int y1,int y2);
1 s* p/ H! C' z+ Z void bcls(int x1,int x2,int y1,int y2);0 S c; z' K! t9 M! H \
void kcls(int x1,int x2,int y1,int y2);
: p/ ^- l, @# X# D void recls(int x1,int x2,int y1,int y2);; Y* ~; h" y* W' n
void zcls(int x1,int x2,int y1,int y2);( B' i5 y& N) O2 i
void puta(void);8 q; N+ f; K' _) |& o6 t6 u
& ^1 }1 c7 U+ I! ]: Q
4 m; W- Q1 m1 O8 e, H /*--------------演示程序---------------------*/
7 V/ r/ r' v D, d- d main()9 R6 Z2 z+ q- j3 z
{4 _0 R& x0 P- |5 x/ ?
puta();
1 w- A, c4 ^8 e getch();3 d6 b7 p- d7 e v! O
dcls(0,4,0,79); W4 e( \5 s8 @+ U# F: Y1 N" e
getch();0 c$ U& L/ S6 q
puta();
. Q3 }7 C8 q& D: v6 \ getch();
0 d [8 Q* Z, K/ y; w. L' D. M S bcls(0,25,0,79);4 j$ i" d# y1 R. `
getch(); i. ~; x* X9 X( [
puta();+ k4 j$ W6 f% P
getch();" A4 H4 w% B# G7 z% n
zcls(0,25,0,79);
: G' J7 ?+ L- ^1 ~5 m getch();, K/ \ Q' C2 i# H; @
}% k8 q7 l' b- Y/ L2 c
/*********center clear screen(中心清屏)***********/
0 Y- {; z0 u: M" X a: R5 a void zcls(int x1,int x2,int y1,int y2) I9 r0 s2 Z K- S# x0 u( x8 h
{1 p; @# F) c5 _" i. _
int x00,y00,x0,y0,i,d;
! @9 a2 ~& d$ \ if((y2-y1)>(x2-x1)){3 |+ V, A, i. ~* C, N8 Y: w R2 ?
d=(x2-x1)/2;8 M, A8 e& Y P8 v* b7 T
x0=(x1+x2)/2;4 t+ L% P& M: d3 ~" J" S
y0=y1+d;
- U% K# d# l) \ I+ A F y00=y2-d;1 A6 C% k( b# q/ q- f- d
for(i=0;i<(d+1);i++), H; D+ r e8 n0 n
recls((x0-i),(x00+i),(y0-i),(y00+i));
5 Q7 w7 W" C8 g7 n% c6 a# j delay(10);
' b7 H/ W3 c) z- `+ T }. M/ \: @3 r; q* }2 E% G& J7 s# e
else{6 I- w& J( ?% I6 E
d=(y2-y1)/2;
9 z9 i/ p7 ^; f y0=(y1+y2)/2;: B! {" ^8 }5 Z
x0=x1+d;
: E6 g7 m7 w2 D4 a% A& _ x00=x2-d;/ k( H V0 }( e: ?2 D3 R$ y G
for(i=0;i<d+1;i++)6 G/ N% ]3 W6 ~8 n" t# ?
recls(x0-i,x00+i,y0-i,y00+i);
5 d9 x/ Y5 w$ ?: t delay(10);
; }, |; a5 E/ i0 B4 ~ }! Y/ j( ?' h/ V/ z- ?
}- x4 k6 i ^+ l7 M* Y$ c8 Y2 F$ z
" `: B, K6 A6 i* [" Z
/************* clear rectangle side(矩形边清屏)***********************/
4 ]# z4 |+ W9 N: X% g' z; ~: }; F0 J Q( ^- ?
void recls(int x1,int x2,int y1,int y2)( z; l, ?( D: U: q
{5 O \; V" @1 L
int i,j;
/ v. i& m& r+ N# { for(i=y1;i<y2;i++){
2 W6 _3 B* p; t goto_xy(x1,i);
- E' k/ I6 E" a. ^1 _+ R) z% g putchar(' ');
+ j+ @# a2 b# U P+ [; r" z goto_xy(x2,i);
- V5 ^. C) ?1 B9 |2 f putchar(' ');
/ n8 @" s0 F* q6 a- S' G delay(10);
+ A6 `& M4 |/ f2 b' H }
% c8 N/ y7 l& z7 A- M* o4 | for(j=x1;j<x2;j++){
) Y3 G' B# O7 o2 f$ N goto_xy(i,y1); i6 _5 a* Q4 M1 |, Y' i
putchar(' ');. C( y# |2 b" I
goto_xy(j,y2);
! S; Q: R# U- m& o putchar(' ');4 f+ y' ^; {2 D1 o! G. Y
delay(10);& i% R0 n9 {9 m- A8 c! ]3 {$ D
}/ B0 j( \( ], v# y6 U1 K
}2 X5 m W0 o" l: `( a1 X0 {. D
/******************open screen clear(开屏式清屏)*********************/" G$ x( N! m7 F
7 w; C6 Z6 E3 {! X6 l a7 O5 T/ | void kcls(int x1,int x2,int y1,int y2)6 I% y8 `: j+ N3 Z6 E6 i: H7 Q
{
8 F7 |! k3 |: C+ E0 I int t,s,i,j;
+ |) @% A) E4 |# ], c$ V3 b. D t=s=(y1+y2)/2;
+ T* I9 e0 q* _8 d8 G! k/ ]1 S for(;t<=y2;t++,s--)2 a1 P" w3 w8 v3 a* q
for(j=x1;j<x2;j++){
' a. O" s: ?. J: _" J: D1 } goto_xy(j,t);6 |* A, z3 o; `
putchar(' ');* y, r: b5 F6 y. B2 F s
goto_xy(j,s);
: d" e1 k# ^1 b- Y, [: c i putchar(' ');
6 |! o5 r w' f* t7 m8 T% ^; s0 { delay(10);7 Y- ^& \' Y5 v1 r
}; G1 `! l+ E" m- w' E- o' U& d7 q" ?
}
$ S' K) z' q# d0 z6 @* l$ v x/ ^ /*****************close screen clear*****闭幕式清屏*******************/
' \8 N3 M# x# p* ?+ ~& Y/ G
0 F/ v6 b ~* b( ? void bcls(int x1,int x2,int y1,int y2)2 b9 u E3 M' c: m9 z: q
{
# `" d3 [# i. t- X int t,s,j;+ n3 c$ c& i. l1 ]& t# b8 d; G" Q
t=y1;4 p3 a0 m; k% ~3 z) T
s=y2;
' M/ z _% R2 p& a for(t=y1;t<(y1+y2)/2;t++,s--)
: E2 L8 ?5 r4 q0 |2 m8 ], b for(j=x1;j<x2;j++){
7 K+ y# |, P) \0 t goto_xy(j,t);
0 d8 H0 c2 h1 x% i" A& M' b0 B) J putchar(' ');1 |& |" a7 F8 Z' ]
goto_xy(j,s);
% ?/ v% a3 H4 J X! ^ putchar(' ');; r# x( I) S! I& A4 m; ~( z
delay(10);
* {. |# O1 M, z# v S% B }" ~) h1 ]/ P1 X" I
}7 O4 \! P0 i( N
/******************bottom screen clear(自下清屏)********************/
% n7 i. \' ]; y; n; O; e, h
9 s" f+ B/ L: r2 K* K void dcls(int x1,int x2,int y1,int y2)& e6 I( a3 d6 [: I7 W
{
. N7 R7 _/ ?6 }6 L* d+ [! s: O- S8 [ int t,s,j,i;( Z" s) h$ c' @
t=s=(y1+y2)/2;
1 ?; r% U) \8 R4 ^( P; ~7 S for(j=x2;j>x1;j--)9 c# b A5 K" i: B, N! ^
for(i=y1;i<y2;i++){
/ L, N2 S" z$ W6 | goto_xy(j,i);% m1 C# a& B1 U' |
putchar(' ');
$ r2 Q; I" V& X* ^5 s5 g% c% o delay(10);
0 K( E/ r1 n0 \& I0 _9 k }
5 \5 ?! s2 i9 Y }
G7 h4 Y. v1 c4 y) d /******************设置光标子函数******************/
0 r/ E, T& H% \
- t, [ B& H2 \/ v void goto_xy(int x,int y)
( k$ a. y- M7 h6 X- J/ H0 B {
8 w7 h' x g" X$ ~ union REGS r;$ D; E- Q; X9 Q
r.h.ah=2;
O! f8 d* `1 \& N3 ]; k0 P5 Y r.h.dl=y;
7 r. c; S/ m, ]; x. F7 X r.h.dh=x; H5 @' M; x( V% ~8 W7 S2 n
r.h.bh=0; z! Y; A, e( H! `
int86(0x10,&r,&r);
6 p C' `# s J }
1 w, m8 T2 |8 p& n r- @& Y8 m/ s3 O7 z7 z& ]& p8 [6 C" P
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
8 z7 ^% \2 y3 I, f8 J) N2 W) s
9 |' h) i: F2 h) B5 [ void puta(void)+ z9 D1 b3 _5 w3 P0 t
{
7 j, _( u! P1 |7 L5 V int i,j;
! A# {* T' t }; E5 G0 m* ` for(i=0;i<24;i++){
! B/ @+ }0 p8 G% m for(j=0;j<79;j++){
# q4 A' D# k, m9 O; K goto_xy(i,j);
6 ^+ f3 d$ n9 X4 J' f D( U! O printf("a");
. S' E0 M1 e- }1 l6 o$ I }
/ ~8 \2 L- v& k! c' R }
, j3 Z5 H/ D7 E( f u; }! B } |
|