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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ E7 ^0 b. M0 V, B
8 M+ G/ P5 n& E% G8 ~; g 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里 q% D( k3 A" a, ^/ F6 C+ U8 M
5 ^1 ?" V$ V4 V( _! D 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 l$ X) ], x+ J: z4 ]; E7 T( ?
子函数及演示程序:
4 c e6 ~& Q+ R2 S( q
1 j v% L- z/ Z( [, H! N0 M #include<stdio.h>
; L- H+ D% X7 l" \% a) m #include<dos.h>
, ^2 z- F5 }& Z3 L# H #include<conio.h>
% N% l4 K* Z/ N- U' i: f" v
: Z8 c5 x* y, \/ ^, c: U1 Q void goto_xy(int x,int y);
" V c+ _: G& R! b3 d void dcls(int x1,int x2,int y1,int y2);
. G5 i2 Y. M% H void bcls(int x1,int x2,int y1,int y2);/ K$ t: [; T2 C* y" F! @ a
void kcls(int x1,int x2,int y1,int y2);
/ j5 K+ k' o2 |! L/ _ void recls(int x1,int x2,int y1,int y2);% ]! X- i: o$ X" P! U% z- _
void zcls(int x1,int x2,int y1,int y2);0 N, n" ~( x# v
void puta(void);
' O' u) `: ~" n K* M& D* ^( Y
3 b, N7 s; i; r1 V: u2 x! @4 H h! L6 x3 L2 s" r' Q$ d
/*--------------演示程序---------------------*/
) v# b$ h$ Z7 @' m1 E% B main()
( v' J" B6 K7 i: e8 f' I8 U- P& M {5 z/ s: B& K$ G7 F5 c
puta();
" o. K1 Q0 z7 L" X+ f' a$ O4 x* a getch();3 Q6 c* F: x4 O. t
dcls(0,4,0,79);1 v, [) M; I0 s5 H/ L( |
getch();6 U, t9 b$ S, ?& r7 Q8 a/ @
puta();
- {' @5 T& C+ a- a0 t# B1 f$ D getch();: ?/ i1 |4 O9 H( g! A& U
bcls(0,25,0,79);
/ U( G7 {1 _& g( f, [) M getch();
5 x) u% d2 d; {5 _ a" J7 E3 \ puta();
( o; q7 ]& y# f \. d6 L getch();; e" P8 F ^8 Z3 N2 i7 s; g
zcls(0,25,0,79);
- k0 D- K0 ~! e: b7 u getch();' W! S9 j) |) q% g1 v$ ]( J" P% n: p
}
8 |8 _7 [6 E: e+ A /*********center clear screen(中心清屏)***********/
. F9 Y; p+ ~: a _: L' B& [# b x void zcls(int x1,int x2,int y1,int y2)
' j9 u3 K/ {" U$ q9 [8 c( J {3 ^( M' U5 b5 L! E' s" k( `
int x00,y00,x0,y0,i,d;7 D G: W% W$ B4 d3 e" [& j: _
if((y2-y1)>(x2-x1)){
- A6 C2 k1 Z& ^) i7 p7 M d=(x2-x1)/2;
: @' ^# e1 x* Y x0=(x1+x2)/2;4 C3 w9 g& M r# }0 l$ x/ P
y0=y1+d;) _* h" x+ O) @- w; D( T% g
y00=y2-d;
9 H1 _" A7 K' b6 C) I for(i=0;i<(d+1);i++)
% B4 w3 ?; ^1 G3 | recls((x0-i),(x00+i),(y0-i),(y00+i));0 a* G6 X# A _5 t, M
delay(10); O* X* r) d$ f' G9 z: u
}/ H' ^# Y1 S& X) v, i5 d* c& ?
else{
1 p' ^" v1 A/ U! T7 Y d=(y2-y1)/2;
( S1 |- v) w" T y0=(y1+y2)/2;
, s1 z" G4 K! y, g; ~" | ^ x0=x1+d;
4 D, r/ s% P; B9 H x00=x2-d;
# p' _7 }1 H) V& n# x8 P for(i=0;i<d+1;i++)
4 v1 L: r5 K( i4 V9 {& _ recls(x0-i,x00+i,y0-i,y00+i);* a5 B4 k' Q2 S5 M% b% O V; f
delay(10);
$ v, I8 D0 W/ _, _4 f }; _- f3 V/ _. a! d0 X! Z/ M; i
}
" {/ l* {$ f8 Z, c: n1 N( _; ?& C9 W. @) ~- a' i
/************* clear rectangle side(矩形边清屏)***********************/
: y- T B; |- T- M$ k. T5 r0 \ c. n0 B" L4 w3 u* d
void recls(int x1,int x2,int y1,int y2)
" r5 v# Y0 ]& Z: V2 W {) B4 ]7 J+ G: n# e1 O, m) t
int i,j;
; t' r& v6 f, F( ^ for(i=y1;i<y2;i++){. Y; W' S7 ^4 o3 d) Q
goto_xy(x1,i);" m, O+ e" W7 {% Q. C; l
putchar(' ');( `) e7 z( w" f* e& E4 U! K) e
goto_xy(x2,i);
8 F. a1 _' u- P, a putchar(' ');
7 J `5 h3 O, } delay(10);, G r2 F: i7 Y6 g+ T1 v. R
}) {8 @ b* h! j1 ]8 E
for(j=x1;j<x2;j++){
9 w; R: I3 n, ~. i goto_xy(i,y1);2 ?* d8 P3 w1 ^% g
putchar(' ');2 A3 V( @4 H# W# i/ n2 f
goto_xy(j,y2);+ b# ^9 J4 b4 o2 T }% [) {
putchar(' ');
" g6 c/ T6 n1 h& D1 J1 T delay(10);
* D! P6 U9 l. k: C }- ~; z' S5 C0 u4 x7 [' }' @6 n
}
& k' P) f" s' p5 E' i# i: r6 m- Y4 t /******************open screen clear(开屏式清屏)*********************/
! ]# Q& w% {6 ?6 v6 N8 w/ X5 j
6 h6 O9 L4 ~9 |3 m3 j, N$ }- F$ O void kcls(int x1,int x2,int y1,int y2)
& V) `! m* H9 d; {0 t" l! M {/ Y" b7 x# I: G$ X" z
int t,s,i,j;6 |; U4 \$ ]4 ]/ @# A# V
t=s=(y1+y2)/2;! w r: o4 r6 t$ Z- I- G
for(;t<=y2;t++,s--)
( t% K$ Y1 q u, l$ `+ ^ for(j=x1;j<x2;j++){
7 k ]; v7 Z% d- e ~/ G goto_xy(j,t);
4 Z! ]7 k" M. r8 k& p2 y& s9 e8 P putchar(' ');2 P! W: K# }1 h r; E+ Y9 P8 |
goto_xy(j,s);/ \4 q# G7 Z7 e7 g
putchar(' ');
" C9 W* ]/ O6 G/ e G delay(10);
- h+ ]4 M. i2 W1 V) z9 Z1 l }
( N. F4 E* ^5 { s3 N6 U }, q& n) ?# ~4 B* N9 H1 {
/*****************close screen clear*****闭幕式清屏*******************/; s% r/ w$ y6 r3 B/ {+ [% p* { f
7 |4 s1 z4 l% Y
void bcls(int x1,int x2,int y1,int y2)( e$ O5 Z8 d2 D3 F( y
{
: j7 o9 O7 @% e% f int t,s,j;3 H0 K& h% ?. B8 P
t=y1;
1 J E/ @( p" |# N& a s=y2;
U( f5 m" ^/ P for(t=y1;t<(y1+y2)/2;t++,s--)/ q; d1 F- C4 F3 p
for(j=x1;j<x2;j++){+ f3 j8 c; L T# p3 B ?
goto_xy(j,t);
5 \6 m' f1 S% x4 {) ?1 Q% M putchar(' '); @' [ Z& C# k; ?6 [' W( w
goto_xy(j,s);
6 t+ u1 q6 U* k" q# J putchar(' ');1 O H6 i p' s, P2 f
delay(10);
5 m; H k# _3 M0 W- b7 L' g }+ p8 Z' E2 W; c" @
}8 Q- I1 i5 F# h+ C l3 \! `( [: w
/******************bottom screen clear(自下清屏)********************/$ q% L4 ~* t @, D
. L2 w8 F: r) m+ A- ]! N* D
void dcls(int x1,int x2,int y1,int y2)
3 f1 }- |1 b% X* D6 r6 x, l. j; f {
( {* x( ^0 _+ B3 |; C6 c1 S int t,s,j,i;
1 E# B. b, ^# Z; o- t5 Z9 _" `% M t=s=(y1+y2)/2;) i9 b; x# b4 [9 R
for(j=x2;j>x1;j--)
/ ~7 y2 R% Y6 I0 ^1 Z for(i=y1;i<y2;i++){
3 a4 t, R! R& `6 \& d' Q+ C goto_xy(j,i);( y# @) ~, Y) n) i: F, W0 f0 P# g
putchar(' ');3 W0 r9 L1 S8 T% d& T* ` U
delay(10);
, r5 J) ]# X- P* O }
' A; r' {% [5 P% R+ ^ }
1 H9 v% F1 y7 c: v X2 V/ X1 p /******************设置光标子函数******************/
( s$ p: d0 n0 L) _5 H. C# T0 ^: A& \$ d" c
void goto_xy(int x,int y): v; ?) O7 s, W- z0 |; K' R
{
$ Q2 w& A8 b7 A+ g+ y$ ] union REGS r;+ k, t- Y! D @
r.h.ah=2;
6 {! x' E4 j) n- m/ r6 Y r.h.dl=y;2 Y3 \9 ]4 u2 B/ H0 s# R% f
r.h.dh=x;# h) M1 R# J+ \
r.h.bh=0;- L; O0 Z2 M- b# T
int86(0x10,&r,&r);
# W' A- b$ W* r }! A" l) w* y8 `6 {9 U
: U. }, v ~9 T
/**********************在屏幕上打出一连串的a字母用于演示程序******************/# m- D% r3 _2 C7 v6 ?: ^; F! M
: s U- ~( u1 _8 v8 Z0 a
void puta(void)
- q4 Q- @" X4 ]8 q1 b, W% E/ C2 } {
/ M+ Q( t% o/ K' m, C& w- k1 d. o int i,j;
% i1 g6 K, J# _# |5 V for(i=0;i<24;i++){
4 U: g/ i- S7 Z* z for(j=0;j<79;j++){
# u) M3 ]5 ^! T6 u goto_xy(i,j);
; B8 z! q& r, k) u& c5 e# B0 d! w printf("a");
! _/ l" F4 J' Q# K) u# h) P } _( i0 X7 j2 Z6 O3 z
}0 t4 C. ]: W! f1 d- Y6 `
} |
|