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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 C$ c: y. O/ R- s0 `: J3 J- O5 ~3 c* h0 q
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 N9 i) W$ ?; Y$ u5 T* K: G1 w( t# y! `, i& E
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
( W3 h' O% ]( n' b+ p! R 子函数及演示程序:
+ S. d& k& P7 o
& F" O. w8 I4 e+ U, D+ t9 G" e& W #include<stdio.h>
; A" o" `4 U# ^ W4 L X #include<dos.h>2 h! b3 @( q; u0 `0 M- n3 p3 u5 S. [
#include<conio.h>
& ^: x8 |8 {2 S
8 v$ Y9 p/ R U- o void goto_xy(int x,int y);2 G# q) C% L) q
void dcls(int x1,int x2,int y1,int y2);& U8 |/ l" e; K1 ]: [" k
void bcls(int x1,int x2,int y1,int y2);
, f3 }% t4 k% j6 i- n7 ]& S void kcls(int x1,int x2,int y1,int y2);
. T k2 o1 C9 ]- u' G3 V% t7 E void recls(int x1,int x2,int y1,int y2);
6 E1 y) v! D0 H( M& v void zcls(int x1,int x2,int y1,int y2);! o7 K3 ~2 E9 G$ X
void puta(void);! R9 N, F, d% J c" L ]6 S* I
, Z+ E+ u" Q3 d! \+ f5 |' u" {
# Y/ {5 ~% ~, u) K* N% R
/*--------------演示程序---------------------*/
% c! K) ]4 c8 o k" o/ w# o9 Z main()
3 C$ Q# p$ z8 h& b: _ {
) D" H- |7 M/ O. z P; S. c6 f puta();
; l Z( G. W8 j getch();
7 N* r3 o& V2 t2 k8 m* O4 W5 J" n dcls(0,4,0,79);
7 |; H0 a. `( v; ]/ V) l# { getch();
& Y4 q- X) N4 \2 U- ~ puta();
9 R$ k' Q9 Q+ P- |+ [ getch();4 ?( ~7 A1 K4 N; v! v; d4 `
bcls(0,25,0,79);
& i+ v2 P2 O6 E2 Y getch();
* j6 k( i- [. ]: r0 Z puta();5 e; s& f A j; o. W
getch();
4 x' }9 K* j3 e* x" U: n7 l zcls(0,25,0,79);3 K! l% g3 K/ v8 ?; p* M1 x$ X7 o0 Q) l
getch();- z: l2 O8 I' H
}
- q2 }( f" V& B4 I E0 |- I /*********center clear screen(中心清屏)***********/
5 [9 i, z& N& e# { void zcls(int x1,int x2,int y1,int y2)
_7 o# H: g$ m# [9 A/ @( s: p {
6 d$ U% b8 j* G+ B# T- k% Y) s/ D int x00,y00,x0,y0,i,d;8 f. T) C4 K* F3 g/ O1 B. d% z/ G
if((y2-y1)>(x2-x1)){9 ~- g V/ ?+ o8 v8 N9 f
d=(x2-x1)/2;8 d H, o! W; y6 N/ U. w
x0=(x1+x2)/2;
: A/ Z K" W* O' T" p. [ y0=y1+d;. w8 t( j/ @8 ~# c) w6 M2 a# h6 x
y00=y2-d;
8 ^1 E; e8 ^6 N- Y/ u1 c for(i=0;i<(d+1);i++)
" o: g$ l# e# t% f& n- d& N6 ~ recls((x0-i),(x00+i),(y0-i),(y00+i));
- k! h& f: y }( Z) _0 ]7 K. B( o1 | delay(10);8 v8 ^& O& w8 V. f* d
}
# F- N% H5 j' P# j7 u else{6 {/ ]0 c1 k5 y( Z( x) {
d=(y2-y1)/2;
- |$ E- T1 @$ d2 L9 M2 X9 w& } y0=(y1+y2)/2;2 p2 g5 p. y( u+ \
x0=x1+d;
- x1 B* Z0 ?7 O$ P2 X' l0 a x00=x2-d;% g a' c5 }: F0 a8 d1 e) S2 {
for(i=0;i<d+1;i++)
0 d% P2 u7 A$ @- c6 ~- [ O/ _2 t recls(x0-i,x00+i,y0-i,y00+i);" N2 L$ c8 u: g( S( C6 k
delay(10);% \& R& I. l3 }. P1 ?
}
4 w( X+ ^0 x, E _% _ }8 w1 e; [8 S2 k2 q$ g* m. c5 K
; h- R% M7 I6 _0 ]) X- {2 ~ /************* clear rectangle side(矩形边清屏)***********************/
. i+ M. V4 T6 f2 ?, [, I# G
- ^ f; D9 o, ~; ^7 n6 d4 y+ y+ P void recls(int x1,int x2,int y1,int y2)/ Q0 k- h! U* D. {# j
{
3 a% N( T8 B8 }+ L* U7 A int i,j;
$ N8 l0 t3 C6 }6 U0 U0 ~, H for(i=y1;i<y2;i++){ H9 t4 n/ M0 w2 S- }- \; |! P
goto_xy(x1,i);
5 N) h4 ~* C4 ?& R+ a putchar(' ');& Q" k- J& r7 w: P2 A: N7 O' |
goto_xy(x2,i);
+ P: q7 J7 [0 ] X4 _" a" C* t putchar(' ');
; G" f0 I- _/ B+ v" U delay(10);" I" P, ~7 Z+ j" i3 W6 t% o2 T
}
5 K& g! O' L" U5 y0 D for(j=x1;j<x2;j++){
6 i5 _) ^/ `. X" }9 e! G" |+ } goto_xy(i,y1);! q8 ]2 Z" V N/ J$ E2 n
putchar(' ');
' g7 c% F# x; f( A5 _ goto_xy(j,y2);
5 t C5 X' j" @5 M0 \, e putchar(' ');$ y/ Z8 h5 d+ z% K* ~+ q$ T
delay(10);" z. ` I; K' j9 w: o
}
5 `3 ~4 ?! }/ g$ p9 y, s; o }
# n/ M* H0 e, y% C /******************open screen clear(开屏式清屏)*********************/. H8 N3 F2 a0 D1 O. S
4 k: a* v& i$ V3 d void kcls(int x1,int x2,int y1,int y2)
) n8 M- V7 O6 O l: U1 M {
& Z2 A! l7 ?) O9 s- Z int t,s,i,j;3 Q0 R: _ l2 q6 ] ~3 |
t=s=(y1+y2)/2;
/ ? f0 F& ^4 F @: I, x8 r* ? for(;t<=y2;t++,s--)2 @* I0 L# Q5 K( D, y
for(j=x1;j<x2;j++){
( o$ g; i& p- T+ m goto_xy(j,t);
# B J$ ^ k. U putchar(' ');7 g; U" k( U% c
goto_xy(j,s);& B2 E6 y# _+ u* b; c
putchar(' ');
. l' _, c+ y3 N- N" x9 K; { delay(10);
/ S4 m4 Q1 A+ ]' \# P2 ~3 H }
+ }+ x! W, r* q6 Z }
+ p- @3 Y* O, q1 G /*****************close screen clear*****闭幕式清屏*******************/
, n- N* J( i6 i2 g" M8 E, I8 S7 ]/ X+ L. A, O
void bcls(int x1,int x2,int y1,int y2)1 r* W) |2 Q' Q9 p% Y9 ~* ?
{0 w. P8 S5 E! s9 w+ ~# ^
int t,s,j;% R% W4 {, B' m: t; l0 M& |: u: S8 [
t=y1;
: Y( X2 k- U" [" |0 r ^; f s=y2;
+ l( @# Z7 E2 x1 y. @ for(t=y1;t<(y1+y2)/2;t++,s--)' Z# u3 N4 U; T( n c
for(j=x1;j<x2;j++){) p$ W; c( O4 `/ J% v1 f# @" R# t8 l
goto_xy(j,t);5 m9 ^' p- E) I9 a
putchar(' ');
1 G# C7 t5 X0 G5 f0 @ goto_xy(j,s);
* ^) \( V' l* l0 C putchar(' ');0 K: P+ a( w, \' U' b4 t
delay(10);
& f2 y* V9 J, [. b. E }
+ T' `+ g5 B, f1 T- t- g! p }# c* _, H9 {' G# R0 i6 s
/******************bottom screen clear(自下清屏)********************/
1 M* T+ m" F1 d2 h* t; ~
; M4 v7 a$ i4 b void dcls(int x1,int x2,int y1,int y2)/ e. i& f( L1 M! r7 ] b9 R
{) V. a( e" O; ]4 D5 A/ ^2 w9 M3 `- p
int t,s,j,i;
: N% o2 k0 O; k1 p t=s=(y1+y2)/2;3 T$ g Q% k6 t2 @
for(j=x2;j>x1;j--)
4 i; ~9 ?& V0 I for(i=y1;i<y2;i++){
# j' o7 V' s k- C goto_xy(j,i);
[5 c# R; Z& V* c2 ? putchar(' ');
7 J3 L- p$ f' y4 W+ u" P1 s# R; x delay(10);
8 D( L3 ^$ V# N8 `3 X& k6 [ }
1 P7 B' w% I$ m% a6 N" f0 i$ s9 c }
- }6 G4 l+ m0 U /******************设置光标子函数******************/
$ G2 y7 t. y+ s! I$ z2 W" v7 w1 N% ]$ ]. X3 b8 f9 g- C( l
void goto_xy(int x,int y)- Q+ N4 V7 c$ j8 B' H6 t# K) H
{
6 J% @6 `" f$ ~& `/ Y' G/ P" K union REGS r;
- r' f& p: s! x% V2 F r.h.ah=2;+ Z2 P2 t( f/ _8 s
r.h.dl=y;. a- J! N* F2 q( l* k7 P, i( Z
r.h.dh=x;# ]9 r5 A' a$ ]. L5 c% j5 `+ N( K
r.h.bh=0;/ ?/ z0 j4 s/ ] D
int86(0x10,&r,&r);' Y4 F1 X# h" N `$ Y8 D7 y( X l
}
9 A5 J9 M. d7 A: P7 U; D# X5 }% T- Q
/**********************在屏幕上打出一连串的a字母用于演示程序******************/3 a9 `0 b/ ^' t$ H7 N
8 {: V$ {5 y* @ void puta(void)! I9 O4 c2 ^$ {3 f) O3 r: W. a
{/ C- ^+ v1 D% `8 K, O
int i,j;
, K; B: L; R" v, P5 ?% ` for(i=0;i<24;i++){* ]1 A/ a7 B9 \2 i$ p! ?3 _8 P
for(j=0;j<79;j++){
! D3 \1 _! |3 {! \3 R% v8 S goto_xy(i,j);' Q+ d" b; n6 f A. n+ S' V: }' L
printf("a");
7 L5 ?% i7 A5 }* l2 P& Q+ f }
1 S2 h7 F" L+ U/ [ }' L9 v1 \) `/ O6 t
} |
|