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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,: U2 m3 J0 h+ z$ w
7 s4 l9 g6 A& [5 k
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. T& G0 A F! [- a; i! F
( g k* K8 |! J" ?/ G5 ?5 i, w 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : W& y6 }" x4 L/ Y3 U M# e7 t
子函数及演示程序:
$ a: n- d6 C% @8 d5 W) _2 l8 c7 S, v) h
#include<stdio.h>
' k0 c9 l# o! Z/ Z' i #include<dos.h>1 Q/ @+ ~# w/ U8 D% P
#include<conio.h>
* _/ k, b7 R5 {/ R/ A+ j% V
6 }5 i" v4 Z" v$ K$ W" ` void goto_xy(int x,int y);. U9 X$ ^, m8 `# S
void dcls(int x1,int x2,int y1,int y2);, T/ H$ i! x% S- U" c
void bcls(int x1,int x2,int y1,int y2);
j1 H5 C N ] A& f& w6 d1 D/ Y void kcls(int x1,int x2,int y1,int y2);
. ^5 ~3 q! E4 j' m- @ void recls(int x1,int x2,int y1,int y2);
" K5 x' F- T6 i0 i2 B, G! O void zcls(int x1,int x2,int y1,int y2);
5 e2 \4 `$ C1 o1 f" h5 F/ r void puta(void);
* I! \7 V$ s8 o2 b% r" Q) k
" R) ?3 x4 G4 h9 L
1 t5 K' t& x+ R: [5 } /*--------------演示程序---------------------*/
( f ]. o5 E0 {. L% F3 x. H main(); D. J) J( W/ c. K
{/ n1 O# T& B2 |5 }8 e
puta();1 A* i8 k7 K, [9 e0 T7 n
getch();
- H, I3 N% X [: Q dcls(0,4,0,79);6 G `, u8 Q- q& S' w
getch();/ ^8 q6 s w# I. T( }* u* l% \
puta();0 @4 g$ W3 a2 G/ y3 o
getch();
' G; d, o! K3 ^8 D+ j; ^$ K. K bcls(0,25,0,79);. I' r8 j1 s, T" V
getch();
( c' p8 t' T: y M) P puta();
, y; a; Z2 ?" G. v! L8 u( e* I getch();
, |9 f$ {, \; K zcls(0,25,0,79);
$ u' q3 V' t( f' D) C; O, G getch();
, Y- ?# T0 N/ k' v }1 u) D! Z/ Z) w K
/*********center clear screen(中心清屏)***********/
. ^0 }% v) n1 `( i: W6 s; B void zcls(int x1,int x2,int y1,int y2)
0 \' C) ]8 z2 v* a {
' h; h! U4 \% G: z5 l+ C4 H int x00,y00,x0,y0,i,d;
; o5 J3 T9 C# X } if((y2-y1)>(x2-x1)){# @& w8 W& P( z5 _- k
d=(x2-x1)/2;1 w# u7 c9 {) ]$ [8 y2 F& n
x0=(x1+x2)/2;0 h; |1 U' S1 ^: t P
y0=y1+d;
; ~/ u0 y/ _) J; r7 x% G4 q y00=y2-d;
. `: a4 g. V& M9 v for(i=0;i<(d+1);i++)1 }$ z+ f8 P% U P1 V" h8 g
recls((x0-i),(x00+i),(y0-i),(y00+i));* y. a! N8 h: Y& N
delay(10);
! i- S5 W# ?- ~0 n }
% C# _. f) k+ k else{$ S3 C, K$ b9 E/ }1 d/ D
d=(y2-y1)/2;
- f7 q0 |! f) G( D( d y0=(y1+y2)/2;
" H& x1 _" O& G+ b6 n x0=x1+d;
6 ~( s$ `% B+ p' E6 R x00=x2-d;9 _# _+ Z5 b: Q/ M5 F; P
for(i=0;i<d+1;i++)
7 a, o* b9 K3 _ recls(x0-i,x00+i,y0-i,y00+i);
: C% l" A1 I9 i4 k2 Z: l6 w delay(10);
$ J; {5 Z% q8 u3 | }
- l$ ~8 o! n( O5 r }* e$ F h" f4 I' E a
' U6 M* U, J' o3 b z' T /************* clear rectangle side(矩形边清屏)***********************/
4 @3 {' g- w8 |+ J+ j: ?
/ Q$ M2 Y w# @ void recls(int x1,int x2,int y1,int y2) f3 [% K& n! x: S, [- ^
{' K6 P8 O" l! H, z
int i,j;
7 U8 o9 ?; M* j2 g6 c7 D, U# @ for(i=y1;i<y2;i++){8 o5 p: C' Q! Y- }( A& S! B
goto_xy(x1,i);
( T4 I m; n1 a' E putchar(' ');. L+ _6 K8 x7 N4 B1 M
goto_xy(x2,i);
3 D# P1 P* ^& F; W putchar(' ');
7 ^9 f) v! q+ x7 E6 o$ L$ s delay(10);5 L; |" u' {7 V3 j- f* ]- r
}
' ?& }! J: P& N4 H! D( ^ for(j=x1;j<x2;j++){3 j+ a$ h$ X9 `" {
goto_xy(i,y1);
1 P8 d1 y* e; N# Q( \- d: ~; y putchar(' ');* r, I, l b7 ]' c. W6 H
goto_xy(j,y2);
* J: W! Z: S' ?& w& C putchar(' ');# n' ]$ G, W: ]6 Y
delay(10);
' D- K. S2 \5 n a- ?8 o4 x }
4 r9 s) G% L& K+ _2 G7 ~3 l }
; H# y3 |3 l0 @3 l' F /******************open screen clear(开屏式清屏)*********************/% d8 J D; |0 ?
) V% c# }; C4 G$ y8 p- E5 o! d
void kcls(int x1,int x2,int y1,int y2)
7 U+ L# z* W" R3 T: F {
1 H$ G+ s: n; o# V, d u, J: j int t,s,i,j;
+ G& Y) x8 I: B8 u0 O0 h) l t=s=(y1+y2)/2;
- X0 T$ O- T, e# k; d. a, w for(;t<=y2;t++,s--)
. l z4 O7 c. j* l8 n for(j=x1;j<x2;j++){; L# z) Y, p, Z) |2 E
goto_xy(j,t);
" f* A- V. \% E6 s putchar(' ');
1 p7 v3 F" P; K goto_xy(j,s);
" `$ q A; ]' C1 k S5 h# k2 P putchar(' ');1 o+ b0 W0 x$ ^$ q: V- {& g
delay(10);
7 k5 }$ C% C6 J }; h4 Q* k- l9 @+ `# z* E$ p
}5 E; F1 r# z8 V2 }9 {
/*****************close screen clear*****闭幕式清屏*******************/* [) J5 G# F9 P; ]4 [
, _/ O2 A5 p- G% Z" p
void bcls(int x1,int x2,int y1,int y2); v$ d* b& Q* I& k5 X) a" u
{
. {* ]( ?, S" V- r int t,s,j;
9 S9 V1 A4 R# x& [* U# r- y' }' f. @- U4 r t=y1;
# j* v8 s2 b% q' |, C; r s=y2;2 r' A) I m9 X
for(t=y1;t<(y1+y2)/2;t++,s--)$ W% F* j( K9 g2 j
for(j=x1;j<x2;j++){
9 G; c4 ?2 ~0 G% T4 K& ` goto_xy(j,t);
6 ]0 q$ i- A1 X putchar(' ');
' n0 h3 r/ ]$ S1 @# l2 t" k: ~ goto_xy(j,s);
& R; v+ F5 j# V3 D( ^4 m putchar(' ');$ z* o, s9 H5 h6 g! V
delay(10);
8 k0 z; _8 w4 a4 _! f% s8 H }4 ~8 c0 O& [3 n8 C3 O! V
}8 d8 C2 n* g7 @ R/ g
/******************bottom screen clear(自下清屏)********************/
) T1 ^; J# e; g! }2 J: W) g$ m, [, c7 ?# y P1 @
void dcls(int x1,int x2,int y1,int y2)
7 H. ?* _: J9 w7 a( j/ q {
J$ s( s4 ]1 S0 ]' O5 ~5 G- I int t,s,j,i;
5 G6 u( m- K9 \ t=s=(y1+y2)/2;$ R6 y* z+ M& R8 t8 S( j
for(j=x2;j>x1;j--)
. k9 P1 O4 K2 U for(i=y1;i<y2;i++){$ p0 q: g# i# L8 A5 m
goto_xy(j,i);3 Z& a- Z( K; }
putchar(' ');# c8 J# w8 e6 }( i P
delay(10);6 G% a* x1 Q) l6 z3 w
}
1 l1 d) }. q3 H: P ? }
. I3 [: B- W% @* H) @# Y Y /******************设置光标子函数******************/* n9 M" \. g6 b: w0 U
: i# @+ b% v1 |4 c& m% v$ G void goto_xy(int x,int y)3 S. @! Z% t( X3 o2 M9 O
{. m, x! f2 C8 ~! F
union REGS r;/ l7 L" T; @# C0 Z+ w; l
r.h.ah=2;8 f9 b, E# Q/ k$ s4 y g
r.h.dl=y;
) o4 D1 W/ ^& N; R4 f r.h.dh=x;9 [1 V! P: a0 ~; c
r.h.bh=0;
! [3 y0 u$ u [9 l! U( L, A int86(0x10,&r,&r);& U2 H r" y% n+ |1 |" _( V3 [& G9 `
}. E2 K4 d0 H" g6 C! X9 W3 P
/ {( y- s/ M. c5 e: x& f. ~3 Q. G
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 j& _: ?4 H$ Q% e4 k( Z0 Q; Y( V# z% L1 s
void puta(void)- w+ T' n$ o1 ? ~# c2 Y$ Y
{' I$ D2 c( j, U
int i,j;
2 b# ?. z5 a1 [' f* S {7 m for(i=0;i<24;i++){
W m. u8 h# W, E$ D! c for(j=0;j<79;j++){
& y+ ^% R+ @4 ?) h8 ^ goto_xy(i,j);) M# [- C/ h+ a( M( L, M4 U" h- s/ ~- [
printf("a");
! G4 b4 W% E: b( `) |, q }9 |! o8 B- N% N& L
}) X) K, b4 v7 J
} |
|