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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! \; V9 f. p) H g5 z( {9 J) D! J1 L* `) S v
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里% t% J; X" `1 a6 o2 g
6 [* o; W/ l$ C' l b8 v5 ]; ? 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ; D& F) E4 Y$ V _5 j5 s
子函数及演示程序:1 q! w# J$ A6 _( j* R6 X6 a9 x
4 x2 T# E# v: g' I# j
#include<stdio.h>
* Z2 @: v0 t4 G, S5 @7 [ #include<dos.h>6 a; j$ q P; L/ ^ j
#include<conio.h>6 w( u% v1 o" ^+ {' D3 a
) Z1 V3 r$ a1 M1 Q* ^ ]
void goto_xy(int x,int y);. K" e+ L/ T. r- W' m
void dcls(int x1,int x2,int y1,int y2);
( x5 F# u: s( T" n% h5 e0 Y3 w void bcls(int x1,int x2,int y1,int y2);
5 V: t5 S) T+ k2 p3 w1 u void kcls(int x1,int x2,int y1,int y2);
! h9 r. K/ T# L" y void recls(int x1,int x2,int y1,int y2);
5 h) B8 U; f+ y: V) P& Q void zcls(int x1,int x2,int y1,int y2);
w2 x+ V% O0 Q7 q" |7 C void puta(void);
r7 E) m$ ?8 m& G2 u3 s6 K8 N4 ^: f. b
! a1 g: `; J. f8 l- E, P( r1 L
/*--------------演示程序---------------------*/
! L+ K8 i# [, P main()0 b) G9 U7 M/ Y# p6 p
{8 ? V+ o) Y( _) N1 W3 ~
puta();
$ G* A3 O8 z) E getch();
4 Z8 A" V0 I1 N J7 u& M0 g8 v dcls(0,4,0,79); S3 ]& M d# ?* C; p
getch();
- _, ?3 W6 w& I- C1 i puta();6 G2 i2 E9 t, s2 t3 c
getch();
8 \3 B) @8 [7 J, R7 c' j bcls(0,25,0,79);
! m1 c" g$ r8 f0 u& r7 x* W getch();6 h6 d. j; {9 X/ V( H) e& T
puta(); F# p6 K( ?8 J( L3 r4 v
getch();
$ N7 I. Y2 R6 G$ I zcls(0,25,0,79);% }6 {+ m8 F7 O7 n4 t
getch();; `8 S: ]) m. T& B, F5 D
}
0 H! }, h9 \( M" A' m6 S: N; ^ /*********center clear screen(中心清屏)***********/2 \* u4 ^( n6 `! v' z
void zcls(int x1,int x2,int y1,int y2): [6 p0 \2 P' m( f5 `: `% X
{' @; m* l& @# r
int x00,y00,x0,y0,i,d; [ A7 o* @$ V
if((y2-y1)>(x2-x1)){
7 {2 ?' ?7 ~; o5 z! l d=(x2-x1)/2;; O! Z" k5 n" m9 P% \2 [2 }
x0=(x1+x2)/2;
7 }( j9 M* C" v0 u# L y0=y1+d;
( S( u) q8 w5 `4 s8 h y00=y2-d;3 \' A& g2 s* U- k: x7 |
for(i=0;i<(d+1);i++)
* a8 t8 `. O5 @, r recls((x0-i),(x00+i),(y0-i),(y00+i));+ r: m+ T& _/ u7 a7 M/ d
delay(10);
' a& q6 L$ _9 H8 l9 k }" h; z4 c }! H$ ] {# j+ G) ]
else{
/ V2 |; H. z) T8 O; U3 u9 V d=(y2-y1)/2;2 W- m6 g* p" \: O2 ]
y0=(y1+y2)/2;: X9 H+ o8 z' o
x0=x1+d;+ ^. @9 |3 b8 u
x00=x2-d;# v O, g2 r- I, A5 u
for(i=0;i<d+1;i++)
) P+ @. K+ y. W9 r+ M5 H recls(x0-i,x00+i,y0-i,y00+i);
2 [% C: B* L* P7 | delay(10);( U* V/ O# i7 X _7 R: Y( x8 z4 }
}: g0 A* e3 H4 f1 X
}1 I: u1 r& {1 j# ^* z
( O# X$ K% n$ X! Z* }7 ^) q+ E9 K
/************* clear rectangle side(矩形边清屏)***********************/
1 U/ ^4 L. @$ p4 U
- i8 c2 _* N& P I! F- I4 e- v' k void recls(int x1,int x2,int y1,int y2)
6 }9 g+ ~& Z; }4 ^ {) Y- }) Q/ A4 R6 ]9 f2 s
int i,j;
/ F/ Z0 Z8 s' T1 }" a# u; |$ D! o8 v for(i=y1;i<y2;i++){/ |+ a! m2 ^' e2 A
goto_xy(x1,i);
3 h6 w( n4 b: L; W putchar(' ');5 v9 ]& x2 V) _" A# Q( [
goto_xy(x2,i);" H, j/ [* x1 t+ c
putchar(' ');
) m3 G1 Y6 Q3 z* O$ V* R5 v delay(10);: u: }5 ^' G u6 B( C% j7 D
}
/ E5 Z. [% z! W- c for(j=x1;j<x2;j++){
5 j, p+ l+ S1 {# A goto_xy(i,y1);2 A5 Y+ Z2 n, F
putchar(' ');
/ [; Q3 f, e, N* N2 a goto_xy(j,y2);
2 c& Y/ q$ \+ k putchar(' ');
& j8 F7 b ^5 g- S delay(10);
2 s8 r6 ^% c3 X- A9 S }" q8 C4 r7 ~! R2 A' T
}
. |/ B' a; F6 A5 l; d, V+ _# K /******************open screen clear(开屏式清屏)*********************/
: c1 Z* r$ U! j. R0 h. ~* u. o
" l9 O' E) E8 l. M) n void kcls(int x1,int x2,int y1,int y2)
7 K+ G2 e: Y2 x; B3 f {) w, }6 `# l/ e" e4 p) e
int t,s,i,j;, y: O6 g( l" s& a1 z7 c5 W
t=s=(y1+y2)/2;
5 M& S9 d, Q8 w4 x4 A% `+ i% V for(;t<=y2;t++,s--)
0 B/ S$ O- |0 {8 D' }$ v8 g4 B C for(j=x1;j<x2;j++){
5 p! X: R5 X4 K7 S- N goto_xy(j,t);
$ ^; W0 l4 q2 M2 q" B' W putchar(' ');7 M& c0 n! i) [: W! _- h
goto_xy(j,s);
5 U- k6 m6 u: \ putchar(' ');
: T# U" U- I( W6 A I delay(10);
6 a# e* d# g0 F& `" L+ a& V: } }, D* P* O7 ?& k8 O% S# j5 E8 n S
}8 G9 K- g1 H1 V1 G/ H
/*****************close screen clear*****闭幕式清屏*******************/9 x6 r) T) ^ ]' t) W
5 [3 s* I; k y. O- Z y2 G void bcls(int x1,int x2,int y1,int y2)
# K0 i* k7 v/ ]4 K# I {
$ e2 {, E; g& M) M int t,s,j;6 P2 y9 [1 f5 A0 N! e9 ^
t=y1;6 } t6 ?" ]) Q( p0 v) h+ _' k: i
s=y2;& [' m5 H& g. P Y
for(t=y1;t<(y1+y2)/2;t++,s--)
! J6 ?9 j# {8 [# M3 v# T! Q2 ~ for(j=x1;j<x2;j++){/ v2 w7 f8 x6 y, w. e- \
goto_xy(j,t);
4 U& N% ~# T& v5 B7 A putchar(' ');( |. ^3 K9 ]2 E
goto_xy(j,s);& N3 Q+ u: j4 t; f# w2 q
putchar(' ');
, A; N b7 X; u delay(10);. l! L/ J% z# X) [5 Y8 U8 f
}
0 M% a* ~: `& A% _5 O' k }
% i- \* \! a/ X7 M9 b) S /******************bottom screen clear(自下清屏)********************/
' B! T9 S. s3 @8 _8 {: `' l1 X/ e) v s4 q
void dcls(int x1,int x2,int y1,int y2)
5 d2 V% v+ b+ M& T6 w% s! m, m9 U {4 u1 S0 o# R+ I) k
int t,s,j,i;
7 ~4 F2 z# M' T& C t=s=(y1+y2)/2;5 T3 [9 {% N/ _4 A& x; y
for(j=x2;j>x1;j--)
, X& T4 l" e3 _7 {" u4 t for(i=y1;i<y2;i++){
3 ~( X. }) f5 D9 Y5 C goto_xy(j,i);
) ~7 n: I1 ?, B( k, o putchar(' ');
* |6 n5 ?1 D3 k% H l& x0 o4 p delay(10);
j- O9 I- {' P: t/ X* P }
/ ]# E E* S8 ~7 E: k0 d, ^ }! u9 [& ?$ @; @- j, m
/******************设置光标子函数******************/9 c/ r% D7 r4 B
0 V1 A8 T2 T- }% ?% C& @' O
void goto_xy(int x,int y)
0 Y X x( w2 p& y: I3 y# Z {
6 v# d& H2 @# ~; T. v6 f" W& T8 V union REGS r;' G% t' f, d, P1 l. Q# U, y% F
r.h.ah=2;$ |6 E* }7 y' }
r.h.dl=y;5 z- ?" q- ]+ {1 F9 n) d
r.h.dh=x;* A' a$ |2 \5 p' c( i
r.h.bh=0;
0 l c# Z$ _ M+ D5 a int86(0x10,&r,&r);
l# i( R8 z3 J1 C3 C7 p }
~7 i' V: j) c% U( U5 V7 J7 I9 q0 i: O* I; J
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* H5 x+ F, Y2 o( R! q1 t6 t n6 }3 o m5 F8 h
void puta(void)3 t8 I2 _9 m" {& L! P- M! z+ o; F
{; J: H7 V* P! q
int i,j;) e7 L! b H* p5 A( c/ \& u
for(i=0;i<24;i++){
* @ W/ M- @! p& O( X% B$ c for(j=0;j<79;j++){
* z( r8 R6 }" P goto_xy(i,j);+ Z6 M% H+ W2 c- u
printf("a");
6 x }/ X2 k$ s7 P1 A! G }
& r! n3 \" H, n7 n" C }8 V' V( }4 E, E& b$ ~
} |
|