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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,( `7 T' r4 F5 F3 }: o
, g3 e' n" _( @( H) ?
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 E$ O" i! _8 C8 R- I2 Y
8 G* q6 {* f7 m 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
$ q: i; o% e; J z 子函数及演示程序:' y2 N5 j, k; t$ O: ]8 E! z* c
4 x' ]0 F" |/ @
#include<stdio.h>
' v1 Y; U# m& [4 C( {# ~+ v #include<dos.h> H. O( G9 x' e& s1 ^
#include<conio.h>% A0 q/ F7 L1 v. d) H& }& l# W
6 ~ d: K+ c. I
void goto_xy(int x,int y);) X2 m2 R* r4 h6 c" ]
void dcls(int x1,int x2,int y1,int y2);9 e1 X% Y- a4 q/ D/ c, h5 t/ }1 I
void bcls(int x1,int x2,int y1,int y2);+ P7 E$ `* G+ N0 p' s! D) w E n, S
void kcls(int x1,int x2,int y1,int y2);
; G5 q7 ?7 ^( p o, u" Z0 L* n void recls(int x1,int x2,int y1,int y2); K, I: q9 E& |2 |8 G. k
void zcls(int x1,int x2,int y1,int y2);( c& M8 ?* [/ F; D. D8 f) D' o" Q$ [
void puta(void);
, d1 w: P0 G; Y$ Y, t# s8 C4 l5 \6 D- \+ ]; R2 f
0 n7 |! M8 ?$ ?) E! O! I5 ~0 K /*--------------演示程序---------------------*/
) M# x$ Y+ P7 h' j& M main()8 q4 Y. _0 g6 k( P" N$ p/ |
{
% L1 W% E# r; A2 i puta();6 c5 S2 L- y S' o* [# |) P
getch();
; h/ ]- e- u& T$ i1 \ dcls(0,4,0,79);+ q6 g, @ F. `: [2 o" S) W
getch();
9 B5 _8 O( U9 y puta();- [7 [% }0 X9 w; C- s0 [) j
getch();/ A: l' @6 S9 ]7 K( Y
bcls(0,25,0,79);; f7 u5 b. D! j, k; a
getch();
, Z" E0 L) U( D) N puta();
3 k$ w0 v) U1 B0 p5 U( w getch();) O% w- o/ I8 X) G$ ^/ I' F; z4 B) r
zcls(0,25,0,79);3 K9 n/ N4 |( T
getch();
4 J) h- C3 [9 X/ } ~* f! V6 P) A }
( u& g; N& r+ d$ i. a2 a6 M /*********center clear screen(中心清屏)***********/
( y3 X$ u: J* X1 K8 ^ void zcls(int x1,int x2,int y1,int y2), i- j1 L5 y$ E$ I$ a* n9 J2 i
{2 w& Y' K, T' t5 g* k
int x00,y00,x0,y0,i,d;
: I; |3 N4 t9 y. w* G$ g2 L5 z if((y2-y1)>(x2-x1)){
+ O6 ~2 }$ k* F4 C7 `% v( j# h) z d=(x2-x1)/2;- W: A. t" L3 B8 p& Y+ D
x0=(x1+x2)/2;) A2 f: V% @; h
y0=y1+d;
5 G& S( r6 T6 h. D" a9 d3 @ y00=y2-d;0 N' L1 `" @$ s6 u
for(i=0;i<(d+1);i++)
; p2 Q5 O9 ?+ ]" z& Y/ a; x* L recls((x0-i),(x00+i),(y0-i),(y00+i));
2 K# y R1 A: l" h7 S! u8 T) A' z delay(10);
3 b8 x$ F( c% L w2 q9 n6 ? }
3 k# b8 k" n* }: i else{
' N" K7 a1 \6 P$ W- E( l2 \9 v4 P. Y) _* f d=(y2-y1)/2;
% P" c8 _3 X) D- D( ~2 J y0=(y1+y2)/2;
" f. y5 L! R6 s( g" F- c$ ^ x0=x1+d;
( s+ M# [/ S/ h B, N x00=x2-d;
3 E6 F# M2 @7 A* u. D' `4 h for(i=0;i<d+1;i++) D5 P" n& d/ Z. h
recls(x0-i,x00+i,y0-i,y00+i);
# j1 R, @1 X$ b. J- c0 H delay(10);
6 i( d! x2 z1 _% K2 B/ M$ a }4 |3 w" M3 D" ^. a) a5 G
}& e- v3 D7 G( f
+ I5 N, I5 [- L /************* clear rectangle side(矩形边清屏)***********************/
5 W. v$ M! Z* J# }1 J8 G% R6 i( U& Y6 r' p. N
void recls(int x1,int x2,int y1,int y2) U, e! ?* U, [" O& R% N
{3 ?9 `4 Y& N/ X$ b, n3 n+ x
int i,j;
! p. I& l" R2 n+ Z for(i=y1;i<y2;i++){+ V7 P2 y% `9 `5 C
goto_xy(x1,i);) z+ X) H6 q- z. ~
putchar(' ');
+ H. l" ^- k! B goto_xy(x2,i);# Z6 v/ J: a E, X L' ~
putchar(' ');
' D8 [* Z3 n! l delay(10);* ~# D# s, l5 o6 Y; Y* @- K& v* X
}
; E' s2 @5 l4 t$ D for(j=x1;j<x2;j++){0 C4 |: n3 g8 g9 }
goto_xy(i,y1);
# m* I. l1 {! \' c0 [$ q) \( g$ H putchar(' '); o5 b% z9 E! H9 Z2 k- P
goto_xy(j,y2);
0 u) b# E/ K& g( C" X$ m putchar(' ');3 b+ Q* o2 f7 q" Z
delay(10);
' V% u$ `. f1 H" q }$ b9 ]7 [; \* h
}8 X0 d! Q2 p! H Y# w6 C
/******************open screen clear(开屏式清屏)*********************/
$ Z( D2 q! W9 N$ ^$ X
+ }( k# @4 v1 p' J- ?6 S7 ^ void kcls(int x1,int x2,int y1,int y2)
( o; n0 o4 L1 j4 M( b, F {9 |5 t8 S+ G& [3 ]0 m5 r
int t,s,i,j;$ G& `2 K+ T. p8 X: u9 i
t=s=(y1+y2)/2;
( g: b* Y8 u" V& p- o# c: q for(;t<=y2;t++,s--)
& F/ Z1 R9 S t! C for(j=x1;j<x2;j++){& `) m/ y5 S0 D; q% c
goto_xy(j,t);6 t5 W( z7 [5 C$ y7 |
putchar(' ');3 ^5 ~% T; c# F2 K8 k1 ]
goto_xy(j,s); V) ?7 i T: r' M
putchar(' ');0 t( }* G& a: z7 {$ C/ f" t: L
delay(10);: i8 v0 w) m' W. V
}) ?4 V0 E: ?0 M& m! `0 p
}
% U' n3 i e6 w! B2 ^ /*****************close screen clear*****闭幕式清屏*******************/
' K9 O# l6 E" q6 M+ W$ ?% Z. r2 k& L" G
void bcls(int x1,int x2,int y1,int y2)
" W u( H( O% } {4 P9 y9 I a' h3 G; L$ s% d* O" Z. g
int t,s,j;
9 L5 u, C5 |% ^6 X8 D t=y1;! M: E' `' Q, h' u9 b, Y
s=y2;) w; m2 K O5 D3 Y* I
for(t=y1;t<(y1+y2)/2;t++,s--)
) D$ K1 `( K7 T' c' l5 O; n for(j=x1;j<x2;j++){
+ M7 E! v7 L8 ^' u7 R8 s, L goto_xy(j,t);
& | u& u0 }# g2 M* Q* r6 U+ _ putchar(' ');( Q: i; J% n! `( G' q" L; {0 B- r# N4 L* y
goto_xy(j,s);
3 |$ l- \; {( A. N, t7 C* R) ` putchar(' ');
* g$ Y& h4 l6 v& g( ~; h delay(10);% U' a2 h8 H9 x( a+ w/ X$ g
}
/ f' z4 O( l; ?/ p }+ a6 B& n$ ~( W! k
/******************bottom screen clear(自下清屏)********************/
/ ~/ ^0 l0 n5 C7 i
5 g6 ^2 E, A3 C6 [4 b5 U$ E, b void dcls(int x1,int x2,int y1,int y2)
. I3 I* v* X6 D' R& U" s! N' V7 g" V {/ ^! ^8 K8 j5 H) p0 G+ \
int t,s,j,i;/ o/ }- u4 g: d% ]% ~
t=s=(y1+y2)/2;6 y3 G& @& j& G* q8 x. u
for(j=x2;j>x1;j--)
O: m& h7 U3 \ for(i=y1;i<y2;i++){$ E I4 V& A X! E2 q; R" Z
goto_xy(j,i);' f4 }. ]3 X1 I5 x2 J- ]
putchar(' ');
; n$ i/ s- k- @! D$ r* @" X delay(10);
5 h, T( w0 c3 Y0 Z. S) q6 O }4 F" ~# n5 R, e9 Q7 V/ b
}) d6 b( g% s" J- J
/******************设置光标子函数******************/
: c* h! ]9 h: ]; v/ |/ g9 {* N: e0 Z6 w- n/ u i
void goto_xy(int x,int y)1 C7 t) i7 j) L/ b" n
{! C2 Z" K' L% [ ~2 _) R
union REGS r;3 I; D) v* |* R( d9 j3 z0 {7 P
r.h.ah=2;& M r& l7 C, r
r.h.dl=y;: V$ z7 d, Z" w4 u9 ], |
r.h.dh=x;" N, c, R! ?( i; \# J8 ]4 y& M
r.h.bh=0;
* i3 x* I3 N+ [& l; F! |% r# a% X int86(0x10,&r,&r);0 c) ] z1 `0 H5 v* g. O9 h
}8 L |/ m( _' V# j/ u
4 P% W* m* R* H4 H$ b0 I) D
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 J3 ?. _/ G' I# m' V
7 \" a- d6 y! c4 h2 D# ]4 U' h4 s void puta(void)
+ m8 j- D6 [5 S {
* l& d% L3 P. F int i,j;2 Z! `4 G, d) L) |2 T
for(i=0;i<24;i++){9 c. X! k5 J" _5 n, V
for(j=0;j<79;j++){
1 J" E- A) ]0 {+ @' q1 g goto_xy(i,j);* N. _% d9 u' G& L5 s! P" a+ @5 e
printf("a");1 \0 G0 a, c1 Q0 M& ] D
}4 ^' n; n# q. a3 e5 |
}
% }7 y# z, C# e } |
|