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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
/ K$ L5 V, L( _# D+ ?8 u, v
) J$ F& }) n5 _% Q5 G 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里$ U0 h; Z4 l' J* Y% [* y0 B& |& T+ J
3 X5 Y/ L# f. F3 w* j 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- k1 L; a6 p! i 子函数及演示程序:, U0 g2 Y' R+ ]9 q( r8 d
5 x1 U( y+ W, d7 B8 H% Z
#include<stdio.h>
2 `# ^! H7 o5 c( Q- D' V, M( R* R #include<dos.h>
0 X. j9 f2 e- M& j #include<conio.h>
0 J* m6 e/ u; S5 G; x- D8 A ~) T2 S6 } z4 Z1 m: N, L" I
void goto_xy(int x,int y);6 T9 d6 c" |0 X3 X' J
void dcls(int x1,int x2,int y1,int y2);7 R9 g% e4 y3 i( y) H' h" h& M
void bcls(int x1,int x2,int y1,int y2);# u% h' ^3 w4 d) B3 K
void kcls(int x1,int x2,int y1,int y2);
2 G. Q4 T3 S' v void recls(int x1,int x2,int y1,int y2);
8 C8 t; ~5 f. D void zcls(int x1,int x2,int y1,int y2);- J' p+ q6 B, ^
void puta(void);
( M0 H7 Y* w, W1 F8 {
9 S: i/ |6 V' @1 F" c2 }
! J G) ]; q# a! ~, N /*--------------演示程序---------------------*/
: W5 [ S; ^! A8 J' F, Z, D" Y main()
% p" ]* W' A) _* v3 N {/ Y( P/ [3 |- x1 M9 U
puta();4 j6 @* u. n1 Q, o1 q3 A* B
getch();, Z/ |8 @" {3 e N6 }6 u) }
dcls(0,4,0,79);+ |6 L. }! U% ]% }7 M
getch();0 L. H6 u' M: v
puta();9 f7 _! C9 _6 u0 m
getch();
# U9 Z) J8 t- P% ] bcls(0,25,0,79);+ A% `" q0 k, N/ S9 N0 \
getch();
' B$ ?$ m( r |2 f puta();: `1 r$ A v: a1 i; r& |
getch();
' ?7 D, D) m# k. ~ zcls(0,25,0,79);
1 _4 J' `' N6 N getch();, G; b9 Q! q# w! y6 O: I0 _4 E) K1 i
}7 O/ g' U; [ a
/*********center clear screen(中心清屏)***********/: n; L8 ]! |9 O5 b
void zcls(int x1,int x2,int y1,int y2)! H% q- G1 I6 W. s7 G* a" b
{9 J/ j* `& u/ h3 D" a) [
int x00,y00,x0,y0,i,d;
! w" i0 l3 l; @& O- d if((y2-y1)>(x2-x1)){
; d. c6 _) g- E0 B9 ? d=(x2-x1)/2;
& f( h5 c( k& H; o x0=(x1+x2)/2;# v* A3 i6 P1 Q9 m- l
y0=y1+d;
& f; ?1 C7 {+ I4 H- H5 \3 `, P! G y00=y2-d;
$ Q3 t8 i& s& t+ e" B6 D for(i=0;i<(d+1);i++)
0 U; ]' P1 W; A* x3 v+ N recls((x0-i),(x00+i),(y0-i),(y00+i));
; }5 Q& A1 D3 b& V5 X delay(10);
4 h1 T2 }+ q) r/ u2 u }
* P- P r1 s3 \, k+ m( I$ A, A else{, W5 }" S _+ d& z! }' {- c
d=(y2-y1)/2;
$ M$ T; j( A5 ~& A/ F9 e# a* V y0=(y1+y2)/2;9 A9 c; K: D# y, V2 U
x0=x1+d;
/ C0 J, Q8 x3 j$ C x00=x2-d;$ i$ ~+ p* K5 o% _+ I5 P: i
for(i=0;i<d+1;i++)
" [7 L# X* Z7 x% A' C recls(x0-i,x00+i,y0-i,y00+i);- x! N9 ^, ^! \! Z- j' h. s
delay(10);$ T7 n" ~( s7 N/ m _6 N
}
5 _ G* n/ c! x! S- r; j& x }
$ U6 X+ B: b& l0 p
# K( H! R8 g4 o% X /************* clear rectangle side(矩形边清屏)***********************/) o$ X) L% y7 |" x
0 U1 z$ z! k# C
void recls(int x1,int x2,int y1,int y2)1 \+ D% l! L" |* N
{
6 I4 u1 K3 U% i1 I3 ?2 ] int i,j;& U! t; i3 ^. ~4 ^) P1 O& [
for(i=y1;i<y2;i++){
/ A6 k- l$ | r8 F, X: d goto_xy(x1,i);/ c& W9 U% w" f1 u) L% h2 k
putchar(' ');
. I- S+ _9 f# t# p goto_xy(x2,i);2 }" `. {/ Y" J. v$ E/ A, D+ e
putchar(' ');5 H6 x* m/ A% {' O0 z
delay(10);
) t8 e w) a7 y' _ }
8 ^+ p! e4 F( G0 N* p( V for(j=x1;j<x2;j++){& T q2 P, G# x: L; X. O
goto_xy(i,y1);. X, W ^% Q( w- P& C5 ^2 C
putchar(' ');( N+ T% t. N6 G5 q
goto_xy(j,y2);
$ d( r) F2 ]6 w7 B' ]$ Z putchar(' ');
9 n) z/ r; J' g1 B0 T delay(10);
: {4 I2 n- z) P6 n& T+ K7 O, d$ B) I }6 l8 P( t$ t& B2 d
}7 c* W! w+ X1 i% {! x! x4 Z2 v
/******************open screen clear(开屏式清屏)*********************/
8 }3 s! M8 j# o' _; q( g# x' d) p! T, k
void kcls(int x1,int x2,int y1,int y2)
! D) m0 U3 {9 V% |2 _ {
7 ]' ]8 |' ]4 @& _ int t,s,i,j;
% a6 C: V( O3 e7 D$ H t=s=(y1+y2)/2;1 {6 c4 G/ A0 H' J1 A1 D& @
for(;t<=y2;t++,s--)! g& U7 b, q) g; P- o
for(j=x1;j<x2;j++){
. w7 `3 b& q( M, _6 r( g2 [! e2 o goto_xy(j,t);
6 J! {3 J% n/ g7 j! Z putchar(' ');
% y7 r& |5 e8 @& e1 A' u: A- z goto_xy(j,s);
+ ?# X3 x) X3 l7 q4 [+ X. Z9 l; U putchar(' ');: Q v4 ]+ G7 ?4 U3 T: R2 m. p. m9 m
delay(10);
1 Z/ C. L; b6 n. Y. C+ Q4 X i }
- T ^: k3 [9 p, v3 D- _ }' _' i7 H8 d0 K0 T% }
/*****************close screen clear*****闭幕式清屏*******************/' s, o+ t% X6 s; N o+ Q- Z
1 R N, Y8 b) b5 x- t0 d void bcls(int x1,int x2,int y1,int y2)
3 _ N6 K- u3 l4 @3 Z {$ M9 b! V( L. I- t0 g4 d
int t,s,j;
9 \/ {+ g) {8 @ T( ^: C t=y1;, t0 w: B$ o! ]4 @, o& c) s
s=y2;
2 Z9 I# [ u$ { B& d for(t=y1;t<(y1+y2)/2;t++,s--)$ h$ B% f3 P2 a" F5 ]7 m' b
for(j=x1;j<x2;j++){3 s( M8 Z- i( j- I: X
goto_xy(j,t);& q0 n+ ^6 u, D" u4 e3 V
putchar(' ');9 _' o& W! }4 K! y. c' P
goto_xy(j,s);- U4 \9 ]6 C) K# `
putchar(' ');8 m8 E, z2 a7 B1 t: ?
delay(10);
8 T3 ?2 s+ g/ `% A% x9 n }
: p% V, b+ O6 k& l }
, ], M7 k# p, B4 N' _( V /******************bottom screen clear(自下清屏)********************// T" B$ Q9 P7 m6 J. W3 g
9 e/ p6 x2 ]5 k+ Y' U+ O void dcls(int x1,int x2,int y1,int y2)) L6 X# d: q$ D' B% t6 c2 ]' E
{$ m" e5 v4 M$ F U4 v
int t,s,j,i;$ V& k0 R% d1 y+ L/ }$ k$ h& i
t=s=(y1+y2)/2;
# D& V3 M% H. W* A for(j=x2;j>x1;j--)
V/ i/ T6 T- [ i8 i' {# p for(i=y1;i<y2;i++){
7 l0 s- F2 P/ ]; X9 m. i goto_xy(j,i);5 X6 v* ~- A1 S
putchar(' ');
& O5 ~8 {2 a I delay(10);
. c# Q0 G/ C# f. K# ` }
, L8 c' H: k1 M1 R1 S }
/ W0 a; T) Q: b+ v7 k% Z /******************设置光标子函数******************/# K J+ c% T& O( h3 T9 o$ v
& J& U* I/ k8 `2 ~! f* z
void goto_xy(int x,int y)( o4 H9 s, g2 ]
{
9 J# |* v4 U7 z& X# z* ~ union REGS r;% t- p2 l- w6 `1 C) I
r.h.ah=2;
: Z$ a' ~5 [2 J: ~. }. y$ c r.h.dl=y;
" C% w' M' o' w8 j: E' s r.h.dh=x;
! q" k# v0 t" d9 n9 B. y r.h.bh=0;
: T4 T7 i+ ~; B int86(0x10,&r,&r);1 ~- t( n+ x, X3 K& P
}8 F" z) i0 a* `
3 O5 k- [8 Z; M* w) R0 }
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
; m$ V! W! T& T m
% y, A$ T; ^3 A% ^4 x void puta(void)
Y0 D& `. \) |- I3 h {
2 h5 \. Y, S8 c' | L int i,j;
3 z8 x3 U7 M9 y8 s9 Z for(i=0;i<24;i++){" i. [4 R% E* M" d
for(j=0;j<79;j++){* O( N/ w$ X9 k0 _3 A# P
goto_xy(i,j);
3 ?9 R& W3 v; g$ D printf("a");
2 M# f$ j) n. C5 m6 } }
% ?" m6 a) K5 j: d* j1 Z7 _7 G }6 y& Q9 x+ E0 [
} |
|