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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 D' {2 c. x1 \) W, J( Q0 A/ | s4 ?! |. j/ O2 W M5 B5 F
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 e* D# d5 S) ?
) n0 w* J4 x. \
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 b7 _. F& A5 X8 {, q& X
子函数及演示程序:2 N |( ]. w8 _1 T8 I% i' U4 s4 J
& ^8 U0 l: T% g' w, n. |4 H& H) L3 s
#include<stdio.h>5 @2 P' g5 q0 C2 O, q
#include<dos.h>
/ b" U% ~7 t; u- E: g8 ` #include<conio.h># @: w3 E! @( E+ u. V3 ~
, p9 L5 ?3 n: M8 L void goto_xy(int x,int y);
, }: o7 V4 A8 R void dcls(int x1,int x2,int y1,int y2);0 t8 P/ l |4 V+ U
void bcls(int x1,int x2,int y1,int y2);5 u( U8 V1 c9 |7 T$ m3 Y8 q u
void kcls(int x1,int x2,int y1,int y2);
5 h; ~ {" W* {: a. o5 t; x void recls(int x1,int x2,int y1,int y2);: a& D9 V+ ^' {' K
void zcls(int x1,int x2,int y1,int y2);& ^ m \* J9 G+ n
void puta(void);( S- r. g3 z% a
0 u: k! s1 h+ U# O. J& V# d
+ I! u1 J! N9 I1 _
/*--------------演示程序---------------------*/
/ {% m' u4 l; g4 } I: ~7 x main()$ l! E8 M- T. n: n/ d$ |( l* k
{
+ E0 \: a0 g( g1 ` puta();, y- q$ J3 ^6 |# S7 k0 C% E
getch();8 y+ m, D! K0 o' a
dcls(0,4,0,79);
0 c8 T0 [& o' m$ D9 L& Q2 s getch();
, q: @3 j* \/ Q0 I+ r+ [6 L3 _2 R puta();
& m/ L. H, j, W y3 T$ A* W getch();
6 e( @3 f. w- R. R2 n' p' h bcls(0,25,0,79);2 k7 d d9 D; N
getch();) R, C- R3 r: ^
puta();
% b' Q0 v5 z7 E getch();% z8 x. x9 T+ }# ~3 ^2 N
zcls(0,25,0,79);
7 H. P$ g, N! q7 R7 r) B+ I) H getch();
* R9 a, O" D( ?. a7 n/ z( c } ~! d$ h3 ]% w
/*********center clear screen(中心清屏)***********/
% x4 _2 E( i9 I3 i6 C+ n s/ z i6 ]9 I void zcls(int x1,int x2,int y1,int y2)9 H: s6 S" v, i+ q$ t, g3 m1 ^
{
& F/ U, O+ J1 O0 ?, P int x00,y00,x0,y0,i,d;
& @) c% Z8 S. ? if((y2-y1)>(x2-x1)){
) A W! m1 N' Q. P7 n d=(x2-x1)/2;
. W, L8 f# n ~& q& ^2 | x0=(x1+x2)/2;
3 F% r1 p7 u" g' ` y0=y1+d;
- a6 R. O% X3 V) y; M5 i y00=y2-d;
7 }8 D( W6 D4 }7 f# V for(i=0;i<(d+1);i++)5 Y6 d+ z w. o7 X8 l
recls((x0-i),(x00+i),(y0-i),(y00+i));
9 _$ K$ s& u7 f! c: ?' d) x delay(10);8 |4 d0 ?. m9 s$ C2 q- Q
}9 ^) E7 e/ q) E# J6 }- T. O) V
else{1 s# I6 e: g- y$ { _! Z3 q
d=(y2-y1)/2;2 [4 ~8 u2 f) A* P g- m
y0=(y1+y2)/2;
" R0 p ]% M$ x% v- N x0=x1+d;9 Y" D4 X) e# }# O8 Z w' \8 c
x00=x2-d;
6 r. f$ M$ W, ^7 R2 b for(i=0;i<d+1;i++)4 y' w1 b, ^: H
recls(x0-i,x00+i,y0-i,y00+i);8 ?9 A$ |* ^0 E% \3 @
delay(10);
/ b) n9 x8 f$ r$ f& K9 K% S. B# C2 m }
- O, g1 Y( U4 r% L# q) ? }5 @2 l6 x2 C6 U' |) U
' z% v/ f! j& g: b; K /************* clear rectangle side(矩形边清屏)***********************/
3 Y) |- c% p8 I' R L3 G' x6 C
3 I' y- v/ m8 V h( |" B void recls(int x1,int x2,int y1,int y2)5 g; O. Z2 C2 t" A$ R
{/ J0 A, U$ Q. P( y( w
int i,j;
9 y, `$ V0 c' `2 g* x$ @6 ^4 C for(i=y1;i<y2;i++){. Y8 @4 [, _& A8 Z N
goto_xy(x1,i);
9 f w8 r% f1 o* A- v putchar(' ');
4 x0 W! n, f7 P9 m0 D+ T: L8 ] goto_xy(x2,i);" `; V2 G9 ^' W( Y$ Z
putchar(' ');% Q) L9 v6 m2 G5 S9 }3 i) g
delay(10);. y& Y: n8 m) N4 k
}
5 Y, u2 [9 w0 T8 K for(j=x1;j<x2;j++){& Y, u% Y! z. e
goto_xy(i,y1);
& p6 P$ o' b: ~$ X7 s# ?% M+ e putchar(' '); ?* B3 ?% ] L L Z0 B! H
goto_xy(j,y2);
6 B" N% ^( v3 s' S9 V putchar(' ');
+ U: ~' d8 G9 p delay(10);2 O4 I/ [0 @0 A
}
' Z- j, r, H7 G4 m* o1 p }; p! h y1 w' d* y! a1 w. w( P
/******************open screen clear(开屏式清屏)*********************/5 [2 N) {9 Y8 a( p' L. [$ s+ m
/ M! _+ s& [* ?3 X: ~" R3 {
void kcls(int x1,int x2,int y1,int y2)
! B- |( }' V1 y9 L {
2 z5 r% C/ H3 R9 `& l b int t,s,i,j;. O/ V/ K+ x9 Y% G! L* W
t=s=(y1+y2)/2;
* N: e1 z4 L M+ z7 _* @1 T4 v for(;t<=y2;t++,s--)' \& n0 o- S* Y, Y
for(j=x1;j<x2;j++){' L* y& ~1 _. \3 x- [! T" q" j, S
goto_xy(j,t);
0 U. c) L: M( O( j; y putchar(' ');
4 z" k0 G# v) l" Y& [9 m4 D% Y: I goto_xy(j,s);1 d% \7 B$ I: z e
putchar(' ');
- l' H( G6 b/ X7 A+ I% K: T delay(10);) \! ~$ B9 B( V; Q
}& w2 ~( F3 J* n! Z4 e, N0 v
}
0 H$ K. q0 t8 H2 y /*****************close screen clear*****闭幕式清屏*******************/
1 H" ^0 A- q3 K1 [+ w' k
( ?# l9 O. F' z0 X' B void bcls(int x1,int x2,int y1,int y2)
$ ?" V% S$ O; _ {
2 ?3 \% m7 |9 |! R int t,s,j;: s; V+ P( c* E
t=y1;6 T2 e1 O" n) o3 V1 _$ e
s=y2;* [0 u- e0 |) S3 g' e
for(t=y1;t<(y1+y2)/2;t++,s--)
# C7 r7 G: _& k% x& J8 W3 @6 [ for(j=x1;j<x2;j++){# Y! o' n% {5 B/ V4 e. k
goto_xy(j,t);, U; j1 p! ?3 P% t" i e2 V# t* U7 y
putchar(' ');* V1 Q# ^8 D& G& Y" ~/ |) o
goto_xy(j,s);
7 n7 n# F5 Y* d" m( W putchar(' ');5 `, k4 n& _- a( d
delay(10);0 K) E) x7 K( J o- ^0 ? G
}( @3 ?* P0 y6 t2 @) `3 C- w( [1 U
}9 F" q g2 D+ R6 ^& e( W
/******************bottom screen clear(自下清屏)********************/
! J7 S# u0 [3 Y4 X, I: G+ z" v+ ?$ }, y6 V# S
void dcls(int x1,int x2,int y1,int y2)9 u! P0 o% J7 s! f# o8 [" M
{) q/ e, I B, ~- ~6 I
int t,s,j,i;$ c: t# ]8 X3 Z
t=s=(y1+y2)/2;
! j2 c" ^2 c( T( U. \ for(j=x2;j>x1;j--)8 t8 G3 H* ]' L9 l2 U# }* ~( e
for(i=y1;i<y2;i++){
+ [7 N% L* F8 D goto_xy(j,i);8 `2 e& }# a2 Z" }$ F" J
putchar(' ');
2 c7 U5 ^( w0 I: |! C delay(10);
( C1 X3 D7 b: b3 d- Q+ a' S1 r }
5 n; Z0 H2 O/ d3 Z }
. @6 v4 U* r: c6 K /******************设置光标子函数******************/0 `# A1 Q9 d3 x0 Y0 F* R/ W
- k6 K- |' z; [- K
void goto_xy(int x,int y)
. _! G: b2 I/ s, f0 U* i {0 Q( b, c( S% |3 ?! [% ^
union REGS r;
& _: K( d# K) k5 l: ~) m r.h.ah=2;
+ Z1 R/ r9 r! F( ? r.h.dl=y; P+ y8 r& K) I1 Q
r.h.dh=x;
5 k8 F; c2 ?, ?4 X6 c6 u8 D; O9 H r.h.bh=0;
0 a. u* p* r7 h int86(0x10,&r,&r);
; T4 Q h7 d9 {* V% g8 u u9 @ }% Y- M# Y; J& v8 Z) ^# p% H7 r
4 ?1 o! e, U$ Z% H6 @ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
! H9 o6 _. q) A* k7 w: f8 g- P0 t. {6 r4 X; ~' P" T" v
void puta(void)
6 W" U9 i* d @+ g' P. _5 u/ w" ` {
. S5 ^0 i: x( O, Q5 y int i,j;
Z* ?" y5 B0 z/ O for(i=0;i<24;i++){
4 _- t' H' @$ C$ d0 b; E1 t4 N for(j=0;j<79;j++){
3 q l3 G9 P6 B- d" `2 k6 T) s9 V goto_xy(i,j);
/ Q6 q9 q9 n, `4 b. S& n printf("a");( {" a; l3 l* L
}4 `+ B) `& I) C2 a2 }
}/ ?3 V8 E+ x. s) V4 {9 ?
} |
|