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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 Y# s7 l# T, c4 ?
1 \7 v& }! T$ J* ` 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里( z. a2 u# m( K5 L g# y# b* b
. O2 z4 T W! _. L' T. R
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 }* M! q8 y; u: M1 ~7 a 子函数及演示程序:# c( j7 g9 G! @, I9 B
# l5 R2 X: W% K1 k0 c #include<stdio.h>
3 D/ e* l0 @) `+ x #include<dos.h>' J) h4 h% r) F- O
#include<conio.h>" z5 O7 I: {+ B8 \1 v, X
' K, p1 _6 F3 Q8 o" ~; x7 v
void goto_xy(int x,int y);! R y/ A/ {- c Y% k3 M- D0 |
void dcls(int x1,int x2,int y1,int y2);
. u8 Z) g- m/ C$ s) E5 Z p e" Y void bcls(int x1,int x2,int y1,int y2);
7 ~9 o9 V9 G& f1 t. u) D void kcls(int x1,int x2,int y1,int y2);
p" e+ F# [9 z; k void recls(int x1,int x2,int y1,int y2);# R h$ V' A. _6 `& m/ l& G0 {0 u
void zcls(int x1,int x2,int y1,int y2);. J. [/ p* D$ l% z% i, ?! d- t
void puta(void);
6 Y3 J) f3 b* g# Q7 F8 c# A" z; R8 F! j( b. M3 Z
7 Z' f, g: K4 b ~6 _& b2 ^- \
/*--------------演示程序---------------------*/2 w, _( u" j( \8 T! ?! e
main()2 O9 u1 E) k5 w8 x3 C0 j
{4 I2 c$ o- q* P/ f9 r6 v, n
puta();, F- j7 H. P2 [2 ]9 a, v7 I" N& C' l2 u0 O
getch();
+ ?5 T& m5 |+ ?8 ~ dcls(0,4,0,79);
( `# u. }6 e) }' H# u# h: w9 ]3 W getch();
( O* H7 R% m: M6 u, s puta();
7 O5 k: P* e+ T5 P2 u4 r getch();! h9 a2 S, h2 z# `1 ?
bcls(0,25,0,79);
; H* p* R4 @" k0 w& ` getch();9 T6 j. Z; y( ~4 v
puta();
+ W" Z2 n$ Z) X1 R$ X2 q+ I* Y getch();& @( L6 u! [8 C& D) W& N/ d
zcls(0,25,0,79);
+ A/ e5 N+ d+ y. S2 ~6 | getch();* D1 C% X j# J# ]
}
6 E7 I' x/ o' \. K% Y- f /*********center clear screen(中心清屏)***********/
h, g8 A, \2 w @4 j3 k void zcls(int x1,int x2,int y1,int y2)3 j/ w# t6 @5 [/ ?! f( }+ B
{: J6 ^9 Z+ X: I9 e; y8 l' t
int x00,y00,x0,y0,i,d;2 J9 r) V: N# R8 O }& V/ w4 L
if((y2-y1)>(x2-x1)){. W I0 b+ c2 d" @6 p# D" G L
d=(x2-x1)/2;
9 c, `, b. R: ^, q) z8 O+ @ x0=(x1+x2)/2;
2 q! a8 S% ]2 q1 k) D$ h y0=y1+d;% r0 k" G c0 @; y: n( N* K
y00=y2-d;3 v; ~: m' y# v! X
for(i=0;i<(d+1);i++)
1 O0 E; [. f1 M l2 V recls((x0-i),(x00+i),(y0-i),(y00+i));& W8 c; Y$ B) m- O1 w
delay(10);
# {9 E& i* k T$ r% w }: y1 T8 P' l7 k( x1 S. x5 s
else{5 H0 C2 `6 W( s0 i7 c W
d=(y2-y1)/2;
$ M4 k0 M# i3 I6 X$ n% {: Q' o y0=(y1+y2)/2;+ Q, r9 c7 ]: x% O- t2 ]% {
x0=x1+d;" p' \& ?/ E6 }/ w5 @; F
x00=x2-d;: H! A0 }( ^" a, K. Q! j
for(i=0;i<d+1;i++)
# L9 A1 A! L5 y/ Q( I7 T recls(x0-i,x00+i,y0-i,y00+i);- {0 {* O1 |2 Z' F- V9 o. A* i
delay(10);3 \1 p+ X4 j; ]/ i3 T3 x
}
2 h$ s8 e/ n/ g- E }3 \: Q, u O: I$ J8 a0 r
' m7 {) S+ Z8 B% ?. z3 ~4 T
/************* clear rectangle side(矩形边清屏)***********************/
- t, U" g0 H+ O6 y. v3 I0 C2 G# H1 I6 S5 }4 `
void recls(int x1,int x2,int y1,int y2)
) T; S4 I8 b, Y( u7 T {
# S) w! k/ M* Q int i,j;/ i3 C( A3 E' ^/ T* K5 x
for(i=y1;i<y2;i++){
2 m5 s5 I9 Z7 X [- b& R8 E A goto_xy(x1,i);
: L2 _/ T* p" A, l, R' v7 D putchar(' ');
' b7 r+ F) X! A* m goto_xy(x2,i);
9 ^ N/ R4 l7 c( n* C' [ putchar(' ');: _9 j: _& {) ^) P% ]
delay(10);, a j: {0 J' R& h% }" o* Y
}! D2 O' D0 y0 ]! _ d3 i% r9 e1 u
for(j=x1;j<x2;j++){
u3 C' j2 }5 t. } goto_xy(i,y1);
5 n2 e8 k0 f2 k: y% Q putchar(' ');
6 O+ x( b! c. F/ _ goto_xy(j,y2);
9 U5 ^4 m) A, Q putchar(' ');& d) I( a5 I5 K/ d! G/ R" v% P/ j
delay(10);
$ f# W8 [* `- f }9 n$ h |# I. O$ r _9 `; k3 U
}
0 p0 F$ B# G7 d3 k: n /******************open screen clear(开屏式清屏)*********************/
) I. z4 s( A0 n: l2 x7 X' Y* E
void kcls(int x1,int x2,int y1,int y2)
5 [7 B7 P D: o1 m; ` {
9 t/ F8 s5 U b* q5 G int t,s,i,j;3 D# L4 L" q6 v# k2 p3 y) G
t=s=(y1+y2)/2;
) p; k! y4 ~7 ^1 B3 V) u- F2 O for(;t<=y2;t++,s--)6 M- @- ?; `0 n9 @1 v7 u+ I5 H0 Y
for(j=x1;j<x2;j++){! g! I% {, x. R
goto_xy(j,t);
* |: N- P. F1 a% A putchar(' ');; W9 R+ j/ D( `% S! a! m+ f
goto_xy(j,s);4 M/ r! ]$ J1 `
putchar(' ');
6 [- q+ _' a- I, t8 V% ]# s5 ^ delay(10);
" |) Y/ _$ Q' z8 W1 e4 T }
2 s8 r( @, q# ~8 |+ ~! i }" U K/ a" a) C( D8 p9 e. `
/*****************close screen clear*****闭幕式清屏*******************/
- f ? K4 p9 ]6 A- [. S
( v- X: Z3 i, n1 Z void bcls(int x1,int x2,int y1,int y2)
r" U( g8 l2 ^- t3 O8 u# h' W {( }1 J* o C- D! L1 Q; P
int t,s,j;. m. a5 {( T2 @3 F* w0 \; a
t=y1;
0 C0 v5 q+ [/ w S2 A) e s=y2;' y$ p& h4 v- |7 d- ^, [
for(t=y1;t<(y1+y2)/2;t++,s--)
* U0 ]4 a; b5 T, i for(j=x1;j<x2;j++){; M5 U; m' L' b d: D
goto_xy(j,t);. Z3 _5 J7 g/ d. V" N" e( v1 p
putchar(' ');; q3 n5 @6 e% ]: Q* q* j; X
goto_xy(j,s);' {# f, t1 J) q
putchar(' ');
# y. U5 S4 S6 \+ n- p+ f- | delay(10);+ Q3 v" i! C. P" @( A' K6 m
}( r# L- f4 W4 I; B
}
& H3 B: N. j6 o /******************bottom screen clear(自下清屏)********************/" o: L0 G E2 d+ i+ c
$ D4 |9 d4 ]$ L' F+ | void dcls(int x1,int x2,int y1,int y2)
, Z+ F& t3 S; r {0 M/ I: O- n1 C' i: ^- Z- v+ w
int t,s,j,i;
# a _$ Y. |9 v7 W t=s=(y1+y2)/2;
, j$ l# l+ l1 r; x9 z for(j=x2;j>x1;j--)8 @; s6 C3 G: w1 b- {! g( ?
for(i=y1;i<y2;i++){9 i9 X: f. \* [$ R3 P
goto_xy(j,i);+ |% T# U1 |) @5 m3 A) @0 U( u7 _: O
putchar(' ');
( e* F5 G9 f. c9 h; C( K9 J delay(10);
7 D2 }2 `, x/ X( G8 l }
% B! ~" p+ S# w" A }
: {+ Y; x$ H8 ]# n) |- Q /******************设置光标子函数******************/
& J$ {& M3 w( @6 g7 j- S. D
+ H2 r9 V1 [4 K1 @( _0 T. s k void goto_xy(int x,int y)
0 k0 d$ ?; Z' U' M/ i! M {
1 Q0 m1 L5 [4 t q union REGS r;
5 {6 U7 L4 ?$ ]& y5 K0 w/ ^3 O r.h.ah=2;) Q# ?3 a( S8 X; ]% G
r.h.dl=y;
/ E8 k+ E, ^0 H+ D9 k r.h.dh=x;
8 k+ M/ F3 o2 J4 L5 [8 C5 g( y r.h.bh=0;) P( u$ @, b9 G
int86(0x10,&r,&r);
, _/ ~4 {" t, X) }# F/ H }. H( H" A1 ?6 F) c7 Z0 _$ G" d
8 }8 j# Z f3 i8 Q, n
/**********************在屏幕上打出一连串的a字母用于演示程序******************/5 M* w/ x$ Z( R) }
" R/ ?& q, [* C# S void puta(void)6 `$ h6 W8 L H2 ^; R. ^
{
; M$ |+ \4 l; o; s0 O( C* m7 [7 r" C int i,j;
+ Q7 L& k) F3 b4 w) H w for(i=0;i<24;i++){! G, y4 a# U. t# }* r$ M
for(j=0;j<79;j++){% }2 Z% E% E: J" g3 \5 n* Z! h% B
goto_xy(i,j);
8 ~ U' q) A$ f, ^ printf("a");' N( v7 r4 @7 s5 a* V3 |% R
}, x' ^* K7 _4 p$ V3 S+ ]3 j" b; C
}9 C5 R+ s- G8 {8 \" `% L
} |
|