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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; E/ |- w7 ^: e; x# }9 e8 { r3 p0 m- r( k3 Y$ }5 ?
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. a1 o6 ^' P" ]+ x; X1 X% W" r/ u5 f/ X+ l* N# c
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 l0 A Z- B7 |' f, Z
子函数及演示程序:
! @$ C7 E$ }7 W Q& H' B& S# \. ~- |
' h& { Q5 t1 W$ C }* s/ m #include<stdio.h>
" o; l8 C% ?! o* h0 h #include<dos.h>5 t. F+ u' c; R
#include<conio.h>7 `9 Q/ W! g) [* j+ c
9 W0 z5 t. F- A4 H0 E% H3 O
void goto_xy(int x,int y);
9 \) C0 z7 S& |* a! R void dcls(int x1,int x2,int y1,int y2);, ~: F# n- \ A$ R) R) k% _' }
void bcls(int x1,int x2,int y1,int y2);
/ k, m9 I% g1 ?5 x" a' u2 ? void kcls(int x1,int x2,int y1,int y2);. M c& v9 h/ ^. ]- [. d% L
void recls(int x1,int x2,int y1,int y2);
: M# N8 }) n: f2 D* X0 A) \ void zcls(int x1,int x2,int y1,int y2);
: e6 n: e r2 h! H k! l$ d8 C void puta(void);* j1 N8 P$ F/ g3 T
) ]' i$ u9 ?" d! [( O" l* @8 H- Y y; y/ J6 u% W1 ?2 m4 a6 j' Z0 J
/*--------------演示程序---------------------*// [+ w" M* `( e2 X
main()1 O1 T' h: [6 ^6 `- ^3 T3 T1 `% u
{
5 ~- A$ i) `# `7 U/ N puta();
3 ]! A/ M& D) a! h! z$ G" | getch();7 H# [# J5 @4 |( l* r0 W1 m
dcls(0,4,0,79);! ?0 X7 X& Q M& j
getch();9 m8 z2 Y- G* W3 A# z. L
puta();9 S4 i/ X, R5 A- a' N
getch();* O o, @2 a! F# e0 U5 a
bcls(0,25,0,79);) E6 B( }8 N1 e0 u, A
getch();
: A0 p/ m- ?) K1 B6 t& L9 X/ h5 l puta();
$ v( m/ W' r. B J6 n' p& E getch();: q4 l8 D7 p- D& q
zcls(0,25,0,79);8 U9 h: y; B8 V# } |: m
getch();1 ^6 `- o. ^$ l& z' t0 z4 o
}2 o& l% v4 T: J3 T" A2 o c
/*********center clear screen(中心清屏)***********/" a, {: Y4 j' _2 N# S
void zcls(int x1,int x2,int y1,int y2)
+ {$ L, e/ @+ ^/ U1 C {
* I* M" o; d3 ~ int x00,y00,x0,y0,i,d;
* k# F% P. u/ e0 G5 _+ u. f R: Y if((y2-y1)>(x2-x1)){6 C5 i" |# ^) J6 J. z) y
d=(x2-x1)/2; P6 X' f- i, h# k1 H
x0=(x1+x2)/2;! I3 V% [* q1 D' w, C5 Q8 X' _" e, t
y0=y1+d;
5 _0 s; j- s9 T9 J y00=y2-d;7 F: d+ Q/ l% b. O
for(i=0;i<(d+1);i++)9 k7 e% ?5 |% D
recls((x0-i),(x00+i),(y0-i),(y00+i));
( L8 O3 N% v! ~3 }7 w delay(10);
2 e! A( B$ x# u0 ] }
3 _0 t1 t! U5 m0 i2 a0 {. D, b else{; m' j# M7 q/ g2 U, C) o
d=(y2-y1)/2;; ?! {$ V% @$ s8 w/ o7 \& A
y0=(y1+y2)/2;
7 Y+ G1 A4 A7 y! t x0=x1+d; {# a Y+ |. A9 T
x00=x2-d;4 w3 t: }9 t: l% J% E) a
for(i=0;i<d+1;i++)& @5 Q# U( @+ C* b6 t/ N/ ]. z
recls(x0-i,x00+i,y0-i,y00+i);
0 b2 O/ h5 ]1 M: [2 J0 ~$ d delay(10);
3 Z! O5 L) D4 `) E" K' ]- | }9 }) Q$ X& x( L' g. M
}
, L; S. a t, n. i# s! N1 V) s, L$ c! S
/************* clear rectangle side(矩形边清屏)***********************/; h" J3 O3 n1 v' a" x" I! P \
2 b& O9 m/ S8 e8 k/ j void recls(int x1,int x2,int y1,int y2)+ |+ s) X- A+ \; ]. `4 b Q1 A
{
3 d& d& Q8 E( ~, {1 E$ I; w int i,j;% f$ J0 k7 j I6 q6 x
for(i=y1;i<y2;i++){+ c. G" K- t6 P) F
goto_xy(x1,i);
9 e( D, l8 t/ ] putchar(' ');
7 \! Z) j1 y5 ~7 ` goto_xy(x2,i);2 n8 W, x5 c+ y3 K' Q) C2 N
putchar(' ');" f$ D s4 q) r+ I! J8 T
delay(10);
1 n. S* f7 |# F2 N) @ }+ E0 Q2 ~9 Z. T& `* e
for(j=x1;j<x2;j++){. W5 u7 ^% P8 Q
goto_xy(i,y1);
* c8 w* F2 u" q7 V putchar(' ');
1 H B& p# o8 Q goto_xy(j,y2);
: A2 n: y' [! q. o8 ~, P4 } putchar(' ');! R2 u* L3 x* v& W; _: P
delay(10);0 {2 T$ `) G# Y
}) a+ ^" g. _4 {
}: q# `& k9 Y1 L
/******************open screen clear(开屏式清屏)*********************/, D$ J# z* o7 X8 y6 N; U
* G6 b. `- _# b* Y
void kcls(int x1,int x2,int y1,int y2)
7 F* @1 M Z$ g" R; h/ ` {8 p# h8 _9 @9 f9 s' D" s5 W
int t,s,i,j;
# Z. ^" ]; E9 I. {& f$ ~$ g t=s=(y1+y2)/2;
7 @, |% k% e( y2 V# _ for(;t<=y2;t++,s--)9 Y& t6 p+ Y6 K& F. w H( o
for(j=x1;j<x2;j++){& B! R5 p: t) {0 x/ P
goto_xy(j,t);
8 Z+ B: R3 G- o" `* c( l2 ? putchar(' ');
4 M6 G2 G! n) t& o: a goto_xy(j,s); W4 V+ q. b. \9 y5 C$ o/ I' Z( J
putchar(' ');
$ ~3 t2 M; f8 l" j delay(10);
" O0 r3 e+ g! X' w. c9 w3 w }
8 h6 u5 V ?: _ }
# p9 w3 _# Z$ N4 L% b5 r /*****************close screen clear*****闭幕式清屏*******************/
, W. o$ m5 ~9 ?
* J6 ]+ ~/ g* A void bcls(int x1,int x2,int y1,int y2)
! B! I" h |2 ] {, q, q% J8 A% x8 u
int t,s,j;$ P3 q+ s4 d1 I! h
t=y1;
) I& I* G' e* {0 f s=y2;$ C) a1 u0 l- E. H
for(t=y1;t<(y1+y2)/2;t++,s--)
' E- U: P# t3 `% Y5 j9 s C for(j=x1;j<x2;j++){, D4 T6 G3 p% E% E: z" w7 T' w+ X9 \
goto_xy(j,t);# I1 D j# F7 `
putchar(' ');2 G% ~. x. ^9 p' w% f) W, i; M
goto_xy(j,s);
3 k2 [# ~9 u7 e putchar(' ');
1 ]4 S# A# E C2 L delay(10);
* f6 P* @- L5 Y9 c }
: ~5 r# ~$ y) e }
' R+ M0 y8 U: k* B) m+ T( U /******************bottom screen clear(自下清屏)********************/
: K5 I9 F, @* x* A; R! P% P$ c( |/ n" h8 W+ y; W1 g
void dcls(int x1,int x2,int y1,int y2)- E% }' R8 B# F! A
{$ s. |2 Q2 C- U4 P! m* s
int t,s,j,i;7 ~' ~* y8 v( Q0 V) A$ @$ L
t=s=(y1+y2)/2;' R8 x- V& R; J- i4 V1 `- X7 K
for(j=x2;j>x1;j--)
/ _' c( G) m" ?* Y v for(i=y1;i<y2;i++){8 k1 {, h/ t- z8 {# U) s1 V" _
goto_xy(j,i);+ i" @2 \/ B$ _; q: N8 L" ^$ s
putchar(' ');
' h8 e, t; @" X, H: b' @6 k0 ? delay(10);2 v, b% _* H7 i9 E. v
}! \5 F5 a. J# w: s! m. m+ G
}5 y: X5 _& T v) a8 j
/******************设置光标子函数******************/
5 m- t5 o$ k3 l, J0 r& `- w. A( w8 U. p
void goto_xy(int x,int y)
5 E# w2 I1 C2 n4 J {: ?* F+ r& G5 z* d' q o
union REGS r;
S% f& K5 f! d/ E r.h.ah=2;
, Z8 q, v( [& a1 ^/ W9 v/ g1 \ r.h.dl=y;
) \9 P, W6 S# A/ T, m; [ V r.h.dh=x;
" L4 R* y" x* A$ C9 t8 N r.h.bh=0;
# w) b9 Z0 _9 ?5 M$ V {+ s int86(0x10,&r,&r);% W4 c; P: {2 e; U
}
1 c$ R( Z+ t4 ]% _& A1 u, }4 b, z
: k6 r9 x9 v& W, c1 |& j1 G# C% c, I" C /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 ~0 o# Y: x6 F( M1 z: F$ {( }6 h+ X
void puta(void)
: ~+ h f4 A; f ~5 J {
. B1 |. p) V' L, X, ^* O0 `6 h7 l int i,j;
0 M& {& Y1 v' f for(i=0;i<24;i++){
# T" J# i. T) F5 U$ ]% P4 i1 e for(j=0;j<79;j++){
* ?; H, `, v( Z% V goto_xy(i,j);% t: r: r- {' X+ e5 z
printf("a");! D6 V% z: I* k1 J+ X5 B& \( E
}" V* w+ i' A! B
}# ?7 p7 q1 ^$ q: c X1 T6 B# Z
} |
|