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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 U. j/ q, h8 Y. f8 I( ^' k
z4 U3 a: L/ K% q 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* B5 e" o y) h F& r1 N4 W8 I1 L9 s" z5 J- n
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * e4 F& T# x& D F
子函数及演示程序:
5 s7 i& c/ P2 N; b7 c& w9 `* ]4 ^! H: I
#include<stdio.h>
9 O) w2 e8 }! K+ S8 Q0 S( n# \ #include<dos.h>% W' p: z: p5 D8 z0 E# O7 K4 @
#include<conio.h>% F5 m( V$ X1 b) C i6 w
+ z u+ [$ p. J void goto_xy(int x,int y);% m7 b3 C# l% ?7 O# b+ u
void dcls(int x1,int x2,int y1,int y2);* \( m+ W7 J9 B# U
void bcls(int x1,int x2,int y1,int y2);
4 D/ ?& H& i# v3 s void kcls(int x1,int x2,int y1,int y2);
9 b a& l7 ^& ~; j( v7 W void recls(int x1,int x2,int y1,int y2);8 _4 z+ P8 T s! d; s# K
void zcls(int x1,int x2,int y1,int y2);$ e. W I% u& ]; v1 n
void puta(void);8 v; ]8 A, ^# h- ?
) Q1 V4 r1 H: w" X$ t4 ~" [
( ~+ y( D' o6 i2 s' d /*--------------演示程序---------------------*/2 A8 q+ ^$ K& ~1 ^% m
main()
0 S! u* T' |7 Y8 c( D& I& n3 z {( e# X1 n# e& O( _! h, F9 [+ Y
puta();
- f- }$ x! Q& r: I getch();( e9 E2 r- q2 i; o# {% [" s
dcls(0,4,0,79);
1 _$ R1 T! }4 f G: A& s4 [ getch();
6 [4 R% S K6 X puta();
7 f8 e( ?9 `9 p getch();- F) Q1 q2 G8 a/ I
bcls(0,25,0,79);
2 s9 N- m: a" ~8 r: H9 y getch();6 [1 d. s2 ]; m n! F
puta();
/ F& i* @" s) ?8 l3 p8 E getch();
6 `" Q9 _. \% A zcls(0,25,0,79);/ y w0 [) i7 T: j. U, g3 P% B
getch();7 W4 G+ e2 z7 B+ v+ f
}% E) @" N2 J* s7 i+ R& v
/*********center clear screen(中心清屏)***********/) c) U" e) L0 ]0 b7 s7 o1 g
void zcls(int x1,int x2,int y1,int y2). \+ l* {3 w3 S
{4 v9 P/ z h/ a8 t: a! B3 ]
int x00,y00,x0,y0,i,d;1 z; Q& H" b' K: G D: ^
if((y2-y1)>(x2-x1)){& `, q9 L, D9 G% W3 Q: T
d=(x2-x1)/2;
/ c/ d3 m3 o/ T: p0 { x0=(x1+x2)/2;
5 Z; P7 ^% t+ ?, h s/ | y0=y1+d;
' {- z; ?# h/ y y00=y2-d;, w- F$ R# l9 H; L2 r
for(i=0;i<(d+1);i++)
$ `6 U6 L, s8 R/ T0 ^2 C recls((x0-i),(x00+i),(y0-i),(y00+i));
8 n- z, u7 x' f, f delay(10);" b( h( F- B7 N# x- b$ B
}+ I7 U/ B4 D8 @# ~% r
else{7 k4 Q1 E, d! h
d=(y2-y1)/2;
& Y( |* K# a3 F2 W y0=(y1+y2)/2;
) Y3 p9 [+ z8 Y( z% F x0=x1+d;
7 R1 W$ m. N& K4 a' f. } x00=x2-d;5 ?, _% c5 H2 y6 ~7 n- U+ l8 W
for(i=0;i<d+1;i++)( ~9 ]6 N8 A0 p& u% A% o5 G8 s
recls(x0-i,x00+i,y0-i,y00+i);" }/ m0 M. B# {
delay(10);
/ _8 y' Q( j3 l# J. S/ ? }
3 O0 ? I9 n) ?% v }
8 N$ D6 Y2 e0 t: M' F# g X6 ?$ ~$ n3 y) f$ J0 p# V u9 \5 F
/************* clear rectangle side(矩形边清屏)***********************/
0 y9 f5 W4 q' v ^' v; R
. q: X6 E" S7 Z3 b% k, ]0 ` void recls(int x1,int x2,int y1,int y2)
+ D. } ~7 ]: u {
- n0 ]! e3 L, X- Q4 ] int i,j;
' V! h& h; G% u0 p8 L- S for(i=y1;i<y2;i++){
* j: k/ a$ S2 E# ]2 ?3 p, d3 C5 L) F goto_xy(x1,i);* ^3 m X( Y: V: b n
putchar(' ');
; y2 x, L" }6 Q- w. h, B! C goto_xy(x2,i);
; q3 h% r3 M# S5 e putchar(' ');
" V( F3 D) _; l% }" _6 w delay(10);
% j1 Y# a5 ?8 m! o. X% W }* G- l. c( e9 M! q
for(j=x1;j<x2;j++){
) J6 k* W8 m- M V goto_xy(i,y1);
1 x! s# m x, ^ b putchar(' ');
F6 E9 u2 @5 ~- e- Z goto_xy(j,y2);
) g3 l, z$ k5 f& q putchar(' ');
& B% p7 h N& C0 o6 d delay(10); t$ E3 S9 B/ j& @& p+ y& q2 V. K
}
- [2 u# `1 q7 O' N# w! e }3 x( H0 i2 Y1 d
/******************open screen clear(开屏式清屏)*********************/
& c1 d# o- h! v9 }* s7 H! d" }6 P# ~; l# U" g
void kcls(int x1,int x2,int y1,int y2)
; {8 p: v6 H) L8 q# @ F {7 X- I3 H6 P: U1 G* _
int t,s,i,j;/ V {5 \+ u7 j' u$ e3 _6 m; O
t=s=(y1+y2)/2;+ w4 [0 l) O l- x/ H1 y+ x# j
for(;t<=y2;t++,s--)
; k& ]) \" }/ J for(j=x1;j<x2;j++){1 c6 i5 g( Z0 Z, a) D
goto_xy(j,t);* e! ^1 E! Q' f2 y+ D
putchar(' ');8 ]8 ^9 T# k& }2 d! z
goto_xy(j,s);0 _+ ]2 x& P+ v2 R! w9 y. @
putchar(' ');6 `8 D5 B4 [5 m& C# g; j
delay(10);5 h6 z( b2 B, _: Q* }3 q
}
( k: ]4 e' H2 Z' m }$ @7 {/ ?* N$ ~# o& L" J% `
/*****************close screen clear*****闭幕式清屏*******************/6 N" @* u. I/ A) k" H: S$ L2 B/ I3 g
" a- S4 D- L5 y+ M/ h$ M
void bcls(int x1,int x2,int y1,int y2)
, w: A4 l: h' m5 A0 ` {9 A1 [$ k' m6 W- _# c
int t,s,j;
+ R: Z% ?' \: M t=y1;
2 w8 P3 b; R9 Q$ v s=y2;
7 B; ]8 n/ b% o9 s1 ]; d" ]2 u for(t=y1;t<(y1+y2)/2;t++,s--)( d5 [1 c& y: Z
for(j=x1;j<x2;j++){' Q% J2 |3 T0 a4 w, U. v# M- t8 h: d
goto_xy(j,t);
u+ i7 S2 M1 v0 a g( ~& A+ ^" g* } putchar(' ');/ q+ e3 ?7 j3 ?. }
goto_xy(j,s);5 `: {1 @0 a7 _3 E# ^
putchar(' ');- d$ z" N# W! W5 |+ c, s! M
delay(10);) ^$ l2 c1 s- `# |* p: w5 U
}
$ ]/ H3 h% _' x: ^ }
4 p k( u1 V) I) ~2 J7 L; z0 O /******************bottom screen clear(自下清屏)********************/3 x/ @0 L% \1 f
- Z6 V4 h& a! N; v8 o; _& c
void dcls(int x1,int x2,int y1,int y2)- m7 z M+ W o* x! j+ N
{9 C# v. l; e7 Q1 r% K% p+ s2 Y
int t,s,j,i;4 T) `" ]& _, Q$ I. W0 ?
t=s=(y1+y2)/2;
: c$ f0 {% J6 }5 x for(j=x2;j>x1;j--)
) T' A: b& t5 @% v for(i=y1;i<y2;i++){
& k4 Y7 s; K' j/ l( {. K goto_xy(j,i);& X& L1 @' h' R6 R% D
putchar(' ');
9 d- n3 E6 f0 ?4 D delay(10);
- K. U3 w! H4 i }
3 F, `) L" ]% p$ ~5 b$ l/ |, k+ K }
0 t8 B) f. C8 Z5 M/ M /******************设置光标子函数******************/( b. I/ R) H& l' L- V
7 g& o6 _4 d3 u& T# @/ v* A: ~. _3 A- e1 h void goto_xy(int x,int y)9 l2 e8 U' A" N. h5 }8 ]( T! c
{: M2 y: }% R" K b! ~
union REGS r;0 r( M$ t6 h6 f2 d
r.h.ah=2;: C. E; V; I; W* R b8 N
r.h.dl=y;0 B" ~/ L0 T4 f! K' p9 B& S* G
r.h.dh=x;
9 C5 B4 l0 Z2 M, Y4 p r.h.bh=0;
2 m9 v9 d/ j+ O# t4 j& j) v int86(0x10,&r,&r);
5 }- _; y. m, |6 ?6 o }
L/ O" }& H" A
+ K3 K6 N; \+ P8 M) B7 G /**********************在屏幕上打出一连串的a字母用于演示程序******************/
: ~' l5 c! }+ [# Y! g" ]: U9 G+ s
void puta(void)" R7 m# u6 H, s$ J# p/ I
{8 C% s2 j* W2 _ H4 A2 T5 k
int i,j;
, [" f K! g8 t& ?7 M+ I4 ~3 j for(i=0;i<24;i++){4 v) {; y+ C' G$ g6 ?! c: ]
for(j=0;j<79;j++){
0 P( U# ? U R8 _6 s9 i goto_xy(i,j);
, P% M0 S! j8 g6 [ printf("a");
{& g# u, `% Q6 K* f }
: h# J; y# G% u }
1 d. n0 ]9 d' x2 a } |
|