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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, x3 P& j6 r9 P2 j( e B+ v' x+ o
$ i- L2 \' q# M. z* t 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' y# n' X* w& v3 g: E6 r+ n2 T
6 M' j$ J4 I* y5 v1 Z7 f
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 V- k: D C6 ` 子函数及演示程序:3 f1 F" }+ K& {- f' \
$ J& |0 z% t6 z' o$ ?
#include<stdio.h>2 ^3 d# {4 L1 h$ I& H! r3 s# {2 ^
#include<dos.h>
7 T/ {( F) t* A- u #include<conio.h>
: ]) X5 e9 w) Q% q% i! P6 e3 p7 p( P" \5 e# S2 R/ U b: T
void goto_xy(int x,int y);
5 _, H5 N0 a* M! U1 Z void dcls(int x1,int x2,int y1,int y2);# x: Z; n9 v* b$ r2 b. F5 a9 V3 ?
void bcls(int x1,int x2,int y1,int y2);
% |. }0 o- j, u void kcls(int x1,int x2,int y1,int y2);
1 \! I1 j+ c9 e8 P' | void recls(int x1,int x2,int y1,int y2);
. w, F U9 V* o1 p; J1 ]4 G void zcls(int x1,int x2,int y1,int y2);9 s& }" g; P/ T) q6 X! @- s
void puta(void);
t4 `, |+ K3 F* ?* U+ G7 N8 f& L; g* N) g/ @3 t
% e8 X T, U# t; a$ a7 ?: ~ /*--------------演示程序---------------------*/ F# f& s3 [2 x: u" e
main()
' f; d% J- z+ @5 u3 w! S' X {' _8 z( V* v- Q# A/ p0 h1 k
puta();
# [6 e% ~. B# F3 w9 { getch();
: W2 n% u% r C- c4 y dcls(0,4,0,79);
5 `7 R& \3 A1 D4 p. ^ getch();
8 |; o- t6 G' x# z puta();# Z8 }, {) X& o0 v2 I; b9 ^7 o d* c
getch();) {1 d) f% g, M5 s. v% P6 O
bcls(0,25,0,79);
+ G y) z' o* c' I getch();
1 R3 N X3 C- b( u" [4 l7 z% W4 B puta();. Z: S$ n. Y* f9 c: Y. j
getch();
3 e; M, z1 g2 d3 B5 y* W zcls(0,25,0,79);0 e8 q( H- y: V9 ?4 L
getch();
9 C6 c/ h2 ^- }2 f }+ D) X9 ? Y: t. Z1 ~
/*********center clear screen(中心清屏)***********/
9 s, B+ ?/ g5 I0 ~ void zcls(int x1,int x2,int y1,int y2)
2 M* [# V& q& ?! G; y$ {2 j' g+ V {
# ]7 y/ K2 O( o) b2 ~5 k int x00,y00,x0,y0,i,d;
$ f, ]1 y5 ?7 Q1 T% ] if((y2-y1)>(x2-x1)){1 b9 F7 ?# x# m- `* e5 Y
d=(x2-x1)/2;
: a7 x# r9 L# h3 T& Q x0=(x1+x2)/2;
" ]: Z. Q# E; S- C5 y4 v6 ^. ? y0=y1+d;
9 S% \) K9 W- Z4 z% d, T' Z" c y00=y2-d;
2 u2 J& Z5 l* k D for(i=0;i<(d+1);i++)! R" F# q* Y2 T! P
recls((x0-i),(x00+i),(y0-i),(y00+i));* \: j& h. Z8 j' b1 o( M% c
delay(10);- j% ?3 |2 U: \# }% T
}5 X7 o' G- D' p+ j2 h3 Y& V5 A
else{
! s' w5 ^* m' M: E* r: @* E0 @5 N d=(y2-y1)/2;" s: [ S# ]. V* k
y0=(y1+y2)/2;
5 q3 m! Q$ }. \7 U6 j x0=x1+d;
4 I, Z+ ]6 x$ m0 X x00=x2-d;
3 S& x: L0 V6 y9 \8 i for(i=0;i<d+1;i++)
W+ ?0 |8 e' m4 s8 j recls(x0-i,x00+i,y0-i,y00+i);
4 G# l- Y2 H% n o% S( I delay(10);$ m: n# [$ q" s: j: R
}
$ q. _" j9 @8 U& e2 `2 K }
1 v% u# {$ J9 O3 x
. ^! i2 E% g+ y /************* clear rectangle side(矩形边清屏)***********************/0 h( _# G1 b. R5 Z) E; o1 z4 C
$ h: l; S! f: t$ {3 O" l4 N$ u8 O
void recls(int x1,int x2,int y1,int y2)
' e9 K g# f2 q# f+ s2 q {7 _3 l- Z& V# Q2 M4 V+ V, a
int i,j;
( L# @0 A2 @* ^$ U4 l8 U! h for(i=y1;i<y2;i++){
2 }0 j/ z2 X2 Q3 Y5 q( n- | goto_xy(x1,i);
J% }. D, k/ }. e0 w putchar(' ');
3 u( [! c, b7 ~! T% T% E goto_xy(x2,i);
- N5 M: o9 h' x4 n putchar(' ');
' k2 X7 {4 p8 j/ F4 R delay(10);
) }! b- I7 K7 `5 D: v }- Z1 k2 F% d: b" T. ], H7 i3 s
for(j=x1;j<x2;j++){3 h0 R7 o4 k' Y9 F
goto_xy(i,y1);
4 f; ^4 f$ e* }0 d% \ putchar(' ');/ t0 b% R8 h* E6 \7 [5 A
goto_xy(j,y2);
' S. j7 F; \( O% f+ Y9 w! ?" o0 `! `0 S putchar(' ');
. h4 n+ V; V1 E1 [1 S- e delay(10);
$ m8 @3 g) U1 w# _' }8 Y }
. d& I4 K/ T* \, }8 f8 ~; U% W! R0 V }8 j8 V ~" S& u& t
/******************open screen clear(开屏式清屏)*********************/; G3 y% P4 c/ @( I8 G
2 X' E: _8 {' R1 c& e' G1 V
void kcls(int x1,int x2,int y1,int y2)! i) J) u( R4 S3 i2 I' t5 J- b/ k
{
/ f& o+ w4 _" k" w$ K int t,s,i,j;
; V {# C9 L U. N; K0 ] t=s=(y1+y2)/2;* x) s8 { [% \5 t' N3 w7 V. m/ T8 ~
for(;t<=y2;t++,s--)
" P8 \0 ]- E+ r, R1 ` for(j=x1;j<x2;j++){
9 r$ @9 `4 e: }4 r# Q. g5 Y goto_xy(j,t);
& b; `2 u! t3 l" }5 s putchar(' ');
7 O# t8 |% ~7 Y, S- x5 ^) p goto_xy(j,s);1 f6 q& |6 Q; ?
putchar(' ');
# B, l0 ~8 }8 \3 V- j! F: F7 J delay(10);
! D2 S: f1 G% _0 W7 C }
- H9 Z. X% M# b9 m; l+ @; f' S# ? } n A" K6 Y4 n9 B& w
/*****************close screen clear*****闭幕式清屏*******************/' L0 B6 D6 N# c' j, S# J
0 @6 b0 h6 u/ K3 b- N/ y6 x) M void bcls(int x1,int x2,int y1,int y2)
. K$ T' x$ S6 ` {' ?9 O, Z9 w% S1 ~9 i% s
int t,s,j;
+ y( W% h7 C2 q/ V9 g% u t=y1;
* s) G" A, P8 W* Y s=y2;* J$ v" N# J# `: A) m/ z+ H' w
for(t=y1;t<(y1+y2)/2;t++,s--): g$ H) ^1 o9 X2 |
for(j=x1;j<x2;j++){
/ v; ]9 h1 T( p* O } goto_xy(j,t);
8 Y" d% S" ^) n% a2 |. i putchar(' ');+ O! H0 U8 x3 Q1 U
goto_xy(j,s);8 Q7 j) I9 L+ k8 H% B Y
putchar(' ');- c# V; ]% M$ j! [, `
delay(10);% Q; U; f! r# g& V+ Z7 h
}% r3 k8 k$ O) S3 l9 |6 u
}9 I5 T( S* f2 D6 Q7 U1 Y
/******************bottom screen clear(自下清屏)********************/
! Q2 G- B* u7 }7 o M4 F! I7 ?4 }0 j$ p! X& T% G
void dcls(int x1,int x2,int y1,int y2)3 z& M$ S4 V( d3 J: X' C2 N) B
{
: D+ W$ n( d9 M; [* ] d, y int t,s,j,i;, X6 E% Q* j* ~- r3 s+ V
t=s=(y1+y2)/2;' Y M6 W, g3 ?( V- D; o4 L
for(j=x2;j>x1;j--)
" K3 p a' O4 B4 H" r9 b for(i=y1;i<y2;i++){9 r m) ?; ~0 P; Y* T1 }; |
goto_xy(j,i);
1 T2 e- D! J! h: o; ~* s2 V2 | putchar(' ');
" q, K7 ^6 ?. }+ H6 l delay(10);; R/ g$ N7 [( J8 m
}: r: J' o5 q. f y* w2 _- \0 D7 c
}
3 f; D+ Y$ f+ i# I0 @# v/ P /******************设置光标子函数******************/
' B3 i+ m$ ~4 ~; B B9 I* w4 S- k# m3 j
void goto_xy(int x,int y)0 R# g. e' v/ u
{( U9 w* |5 J z/ g+ J9 b
union REGS r;
3 p* B1 V, u# B r.h.ah=2;
+ D" i! k- A; U) p9 [ r.h.dl=y;1 E, s N8 M, A- D$ {
r.h.dh=x;
( D5 x A/ H, s r.h.bh=0;
/ f- d+ l# V K int86(0x10,&r,&r);# ]. O" r; C* A% ?
}
1 s4 x: G0 D) j7 c+ Z% B7 L$ n$ e- }5 w* a' {+ p9 u0 U
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 e1 J4 p5 I$ k
4 q0 {$ i3 y8 X2 u1 b void puta(void). g T5 F5 b" R! m3 w8 o
{, I- q/ F# A3 i: R. j* w
int i,j;3 k7 }) r+ b; I0 l P
for(i=0;i<24;i++){0 ?/ y, @# h3 L! d* E5 s
for(j=0;j<79;j++){$ u! A4 { q9 a1 U8 @# Z$ r
goto_xy(i,j);! ^" y% B4 h+ ?8 E; V7 T! A
printf("a");
/ L1 I* z% {% r7 @, G% N; [ }$ c8 b4 Y6 G3 s& f& X3 q
}3 U6 L/ b& f, e7 O3 d
} |
|