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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* V. \1 V1 R, l6 C' m& S/ A. r# ]- m' R
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里* m: ?" a9 v' l" z
1 v6 J0 ` \1 e" X3 x 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
6 K6 c: y, W- {7 F: E _ 子函数及演示程序:
$ @5 b" t" h6 Z
- G6 q' _2 y0 W #include<stdio.h>3 s. j) J# \& I, J. C7 P3 Z b
#include<dos.h>0 k8 D% ^, o( U; {! e t& H* z
#include<conio.h>
5 O2 c! @& A0 I/ A. d4 \
) j3 j9 s$ l- k: u7 `3 v void goto_xy(int x,int y);; C- c: s# d+ f0 I4 E
void dcls(int x1,int x2,int y1,int y2);" `- h' b- T6 s2 l: L$ r
void bcls(int x1,int x2,int y1,int y2);
, a7 s: n$ q; a1 G3 J: n void kcls(int x1,int x2,int y1,int y2);* _ _8 d; ~4 K
void recls(int x1,int x2,int y1,int y2);
0 D I( N0 |# M: M+ K/ }, w# G) s" N& y# M void zcls(int x1,int x2,int y1,int y2);
& h7 T! {& j3 G% ?4 a/ q" c1 t void puta(void);" \9 K1 G. M) O% f8 ]+ q
# P! P" v; C( `/ m! K+ D6 c- V. M+ j/ v. _
/*--------------演示程序---------------------*/. E' O7 f' L& Y* i, |. W
main()' q9 k1 V, _# x9 ?0 q( j; j
{
& F! l4 H* k3 Q* i& p m+ f puta();% a5 \. E4 J4 D q. V: @ a5 |
getch();
) R1 W* t- u$ B1 F# |; S. e+ H dcls(0,4,0,79);! S3 V' u4 y- Q
getch();
1 z' u" _& L& f7 ?: ^9 L puta();. O- j* U4 ?8 B
getch();
0 |! W5 o& f$ d: Q# n bcls(0,25,0,79);2 U3 k y: D( I( m6 X. {0 s9 M; e! ?
getch();
) o( A9 o7 C2 ~9 c" Y! t% O1 S puta();1 L, L* a' H$ S7 C8 M
getch(); f0 ~* [% t. W
zcls(0,25,0,79);
) @% e. ~8 M( Y+ B7 S3 ^ getch();
3 m$ t4 j. f+ O( S1 l }
1 `! @# Z6 J8 Z /*********center clear screen(中心清屏)***********/
7 |, @! K- V( K/ S ?) j void zcls(int x1,int x2,int y1,int y2)
: {1 Q; f: F- P2 {& x# l+ E# Z0 q {7 l3 @* z5 q& }, g, C$ n1 W9 m
int x00,y00,x0,y0,i,d;
" |8 t' Q- J5 l; ] if((y2-y1)>(x2-x1)){
! ]7 J. {0 A, z6 `( G d=(x2-x1)/2;6 j: s$ l+ s( ^2 m2 w5 z5 f
x0=(x1+x2)/2;- C, w* l: d0 [
y0=y1+d;
- i! {( ]. m4 X- r8 L {2 [ y00=y2-d;8 j% D/ Q( g$ g+ L# |- r2 v
for(i=0;i<(d+1);i++)0 P. Z0 Y( S* j+ q' g0 K4 n3 u
recls((x0-i),(x00+i),(y0-i),(y00+i));7 D+ s! w/ [3 b7 M7 h' e
delay(10);( Y, ?. D% V4 y. J a; ^
}
0 q* `6 R0 \5 E/ F* o2 a2 K else{: `7 X- B; b% ~8 v2 w: E' `( o
d=(y2-y1)/2;1 n3 H( J1 N, l1 ~
y0=(y1+y2)/2;/ C* k. L4 G% a
x0=x1+d;
# P& f5 x% ?! R. t0 K5 l) @ x00=x2-d;
, y2 Q& B- n0 H4 Z$ g$ \* w6 ]9 ?/ S for(i=0;i<d+1;i++)9 X9 M7 N, ~9 f& \$ e
recls(x0-i,x00+i,y0-i,y00+i);
; k! N" S: q* R l' @( K delay(10);- [3 \& x- B6 f& M2 B: ?
}
1 Y3 ^7 V! k3 q" d7 S1 B }
k: c+ \- N, h4 C2 s6 V7 H$ Y2 \. G* j# F [
/************* clear rectangle side(矩形边清屏)***********************/; Q7 e. n8 [& Z0 V
3 k, C: Z7 x$ [ void recls(int x1,int x2,int y1,int y2)
% V, O; `7 c* y5 e' x m {
. T9 W, x X: r: N' _/ E int i,j;
. H+ s, D) @6 F; `6 c# C for(i=y1;i<y2;i++){
$ G3 h; N- _; X( l8 r goto_xy(x1,i);
( P# s$ K& V0 L5 f$ b6 z2 i, O putchar(' ');% z/ t, c) I0 J7 E
goto_xy(x2,i);. N$ f' F& a e. P2 w- U& \/ j! I' a
putchar(' ');% C- f* r" G' I b- d$ P8 @
delay(10);
( K/ g+ T4 r' ?. i* q }
+ _3 U( A( O3 G$ Y' Y" e for(j=x1;j<x2;j++){
% a* v' R3 u: j. J: ^( r N goto_xy(i,y1);
- m) w( O* x+ H7 } putchar(' ');
3 D$ s4 R! u: l goto_xy(j,y2);
1 w* e9 V3 x( L; X2 s putchar(' ');
+ I" k: T* c7 O( x5 p delay(10);! {9 Y1 i' z6 K5 f1 v7 S
}
) u8 \' G7 u |$ B: j: l }- x/ t& F) d3 N
/******************open screen clear(开屏式清屏)*********************/
% E3 S/ ^& H$ n
/ N4 o6 \, W; Q! { void kcls(int x1,int x2,int y1,int y2)# @, W9 D3 L1 P& o/ z+ s, M
{* d) z. b1 v6 ~/ @5 U
int t,s,i,j;( e& @, r* X8 F7 S5 D
t=s=(y1+y2)/2;
* t/ T- L ?. c% S* a for(;t<=y2;t++,s--)
% ~" o" |+ o! P! D1 W9 I. l- ] for(j=x1;j<x2;j++){
0 Y1 a5 b* ]. d goto_xy(j,t);. h% b) T4 [6 h* q6 ]
putchar(' ');) v7 M1 F1 n5 D' }$ f9 j
goto_xy(j,s);
7 h3 t# C+ h! g; \2 H1 C putchar(' ');
3 x; \% ?) z \( { delay(10);
5 ~ q1 J& J6 t1 M/ C3 z, ] }
g+ K" G# [- m% C7 K: x }
/ d1 G- V4 k7 L4 ~ j( o! O /*****************close screen clear*****闭幕式清屏*******************/9 S3 x1 A+ e( A8 U; S( R) c! S! D
* k; `# r7 u9 {6 e' U4 @ void bcls(int x1,int x2,int y1,int y2)
' s% `$ ~0 |6 d4 {0 |7 X {
% n, c! |' g! c0 T3 \, D int t,s,j;2 W3 M, F% }6 |3 P0 [5 }
t=y1;! I; R# e4 r9 R& x: ?
s=y2;- k4 r5 O# w0 U
for(t=y1;t<(y1+y2)/2;t++,s--)
/ m/ q# g$ u0 a for(j=x1;j<x2;j++){
" U* k7 u5 ~+ }% V5 v3 f: ~ goto_xy(j,t);
, w- |5 t5 N( c) u, e! R putchar(' ');0 u+ u1 h. U ]; T! M1 O3 Q
goto_xy(j,s);! }; c% S* [7 M1 a$ f! F. p
putchar(' ');% E; w8 s, G* O. z5 g. K
delay(10);0 f: j9 \% [" x3 _6 p# T
}! i& ]! k4 W5 Y! b
}
) {% ]" ?" H6 K8 u* h: F /******************bottom screen clear(自下清屏)********************/
7 D! [( \" f! z* X. _; {1 u3 H2 Y' i
void dcls(int x1,int x2,int y1,int y2)0 K) F3 U) i8 A Y+ W" `/ D3 x
{# E, R" ~2 ~8 x$ h: p: K5 T
int t,s,j,i;$ x2 V% D$ X- {5 @
t=s=(y1+y2)/2;. q7 O8 @5 p4 a3 ]+ O
for(j=x2;j>x1;j--)) K* R( s0 L3 f- J: ]! o
for(i=y1;i<y2;i++){
" f- o+ w4 c! }) m& A& U- I goto_xy(j,i);
9 u1 w( F4 e8 w* s# Z7 S% F. H. h putchar(' ');( r& @$ _% F( t( l6 n) J
delay(10);
: w8 `% g6 l2 ]' v( N) e }
1 A$ x; o0 R a" g* A }) _- M2 H- w7 Y- Z/ V+ O1 R+ F ~( r
/******************设置光标子函数******************/
5 ?3 b2 h T. F: I# B8 \- {" e% V' h" A9 ?4 v/ d
void goto_xy(int x,int y); }/ ^2 y0 n. f/ K* w6 i
{' X! Z9 v' q) |: j, r
union REGS r;3 Y. m [3 }2 L1 j
r.h.ah=2;
9 K U; a4 l. k' M r.h.dl=y;
/ t- F$ o8 H0 V, Y* D# W r.h.dh=x;
6 Z0 O0 u. B* T8 M: r$ K' e r.h.bh=0;
& J7 I% x, C4 }1 L0 U int86(0x10,&r,&r);
1 g$ F# y1 o- m6 }& N- N2 ] }
W2 E! m/ i( \- ~) w/ K/ R3 Z9 W3 R8 H1 ~7 k0 Q0 M, \+ ?
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* e7 |7 \& G: P0 t8 o4 c3 r2 {$ ^; J9 C8 E8 I+ `& {, V
void puta(void)
6 v, U9 j3 h$ J$ j {
. d2 E7 E" d, ^# ^ O/ w' l7 B0 g int i,j;! ^, Z" g& r D( f8 h" p1 U6 U, F) G
for(i=0;i<24;i++){ J$ T8 c7 S8 _; M. S: ?
for(j=0;j<79;j++){. F0 ^3 P6 E' Q
goto_xy(i,j);: H- _3 x- v+ F" S. W# ]
printf("a");
% W& |- o" a0 N% l& R& f9 r }2 [- a3 p. K% l7 ^6 f
}
; V5 V( z# ]0 Y, T7 q } |
|