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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
. @, M2 h$ s s. F
: Q/ r' w/ X2 v; m 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里2 E/ f% E: i9 k Y' ^2 Q% N- g& K. }
- Z, o! _* o- T3 U n) S
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 i4 B# J% B3 L
子函数及演示程序:! G' L' g5 O- _9 Z, U- a5 E& a
" a1 t1 ?9 i1 y* J) G0 _/ s, x+ H& b
#include<stdio.h>% ~3 n, t, K7 W/ \4 o0 K0 H
#include<dos.h>
+ T! p4 y1 d: |0 _! h #include<conio.h> v0 f2 ?( Y; i9 E! O6 o
% Y @& q# O6 L3 S2 M; | void goto_xy(int x,int y);
) o9 P6 n/ k4 b3 q$ ^. u void dcls(int x1,int x2,int y1,int y2);
+ ]5 w' O' Y4 y2 b/ k void bcls(int x1,int x2,int y1,int y2);
, n/ U. r# j) `. T- d- [ void kcls(int x1,int x2,int y1,int y2);# I9 C1 k" `9 v2 P! j* Y- W: I, S
void recls(int x1,int x2,int y1,int y2);% i. o% I0 t; F! `
void zcls(int x1,int x2,int y1,int y2);$ ]) T x! N" i0 X0 \+ O2 \" k
void puta(void);
! w- ]: H6 U! M5 Q' U) t4 G+ W* f: d1 O l$ ^0 O
2 B3 s) L3 {5 p2 R" O# E! C {
/*--------------演示程序---------------------*/- h4 R' o5 D' u6 A9 E* f( e
main()
) g6 h$ ^6 Q: s# C0 y/ m {5 u k* ?+ u7 _9 d3 W' A1 q Y9 e
puta();
+ h) U4 S* x" M getch();
) `6 ~# i6 f8 z6 e7 j/ e- d v4 c( t dcls(0,4,0,79);* g( ?% L$ I1 Q* ~
getch();6 N4 K1 C b6 _8 x# b1 f% S9 I
puta();; P F: m: ?% ~7 ?
getch();; P& r4 s. p, d0 }* m
bcls(0,25,0,79);
+ }/ }3 f4 T3 G \3 x9 y4 D' y getch();
9 k" S& j; E( D. w puta();5 H, L a5 R( _5 y0 q! Z- |
getch();
, Y, I& {. s: t8 X& y. ^3 P zcls(0,25,0,79);& U d) w& t/ M1 } w
getch();
( ?5 t% o! t/ n& m2 H }
8 C6 u& a$ M, j1 v; x /*********center clear screen(中心清屏)***********/
$ Q2 p$ m4 ]# i5 x6 Z- I0 } void zcls(int x1,int x2,int y1,int y2)
7 I( T, d. J# F# Q {
B8 y8 u/ s+ D7 Z; Y0 j* t int x00,y00,x0,y0,i,d;0 _5 U' ^+ ]: V) a
if((y2-y1)>(x2-x1)){3 t# |# d) t" [ \6 @9 v
d=(x2-x1)/2;' S' e1 w) u% u* x9 g, a
x0=(x1+x2)/2;
* h7 H9 N% }! L# w1 g2 c2 R y0=y1+d;* l3 e" H# z( i! r
y00=y2-d;$ P4 P$ u: E. I; l5 g0 g. E
for(i=0;i<(d+1);i++)5 W4 p2 n, a9 M
recls((x0-i),(x00+i),(y0-i),(y00+i)); Y' P( s, o# p( Z/ @+ K2 |
delay(10);
2 n- u- |# Z" d- P }
8 \/ I+ W& V( M else{9 L# p9 W* U* K
d=(y2-y1)/2;/ c& m5 v" j$ E0 B
y0=(y1+y2)/2;
/ E5 J F. z! C! {) ~ x0=x1+d;
2 [/ k/ A* _( e3 j P! v x00=x2-d;$ R; H) B* J2 g; I, j3 W, r
for(i=0;i<d+1;i++)$ G4 S5 l1 i$ S* X! `$ [* ]
recls(x0-i,x00+i,y0-i,y00+i);0 L1 o7 e7 u# f4 I1 n# \# t! G, z1 C/ ?
delay(10);1 d2 F/ \; g. t1 O; \/ N/ ^
}# o$ ?- v" H2 m+ n8 W0 b" w% p! k3 f
}
/ L ~ o- H7 x0 v: O% @( @
6 Z# d$ V" ]5 k& Z3 g/ F /************* clear rectangle side(矩形边清屏)***********************/4 `1 H; m4 w, W( ^
, C) U' `; f6 M void recls(int x1,int x2,int y1,int y2)# ?, w+ [% U1 c7 E6 }2 {4 A* j! P4 X
{8 M8 j' D) R6 l ~0 {: a
int i,j;& v. F6 B" j& O
for(i=y1;i<y2;i++){
0 C6 G8 P0 h5 L, T" `- H goto_xy(x1,i);
# `8 a) B" W. T9 z8 _$ j putchar(' ');
7 m; g7 z, l& j* C goto_xy(x2,i);( C' @! K- s1 F, g
putchar(' ');1 @: a M* z0 g' l
delay(10);
4 Z G- u5 J; X$ F0 y- C }
* V5 x6 B4 P' R. \. E" U for(j=x1;j<x2;j++){
* V B) S5 [9 U/ E6 L- u j: C goto_xy(i,y1);: g+ U1 q) D: B, C, [4 u6 a) ?
putchar(' ');
) b9 H( ?) M c) F goto_xy(j,y2);8 @% j! ^1 a0 d6 b; }+ [8 G
putchar(' ');% A. d- Z$ Y h6 c( t5 ? `$ N
delay(10);
5 ]& N3 m* K5 ~8 \0 @' c9 ~8 y U }
* ?& N6 R& f- r% E6 z/ T9 P }4 p4 I. g0 E7 |9 ~+ ?/ m7 V
/******************open screen clear(开屏式清屏)*********************/
) x4 ?/ [5 ?' A3 j) \9 a4 h/ U, i% _; {/ B( I! \. j) L" Z+ B4 A# K
void kcls(int x1,int x2,int y1,int y2)
3 O& c o* l" k) g* g# e {( L p. V0 X5 S% b7 P, b# ] }; y1 K0 T6 P
int t,s,i,j;
2 K3 }8 F. h, y, l t=s=(y1+y2)/2;+ l t6 y; s! [9 K: _3 ^6 C
for(;t<=y2;t++,s--)
7 I; I2 @3 p! e, M" [. R for(j=x1;j<x2;j++){7 E# B$ m- j0 Q' o: a
goto_xy(j,t);7 o0 O8 K1 w& `6 \: S/ [
putchar(' ');9 i' G* J1 k: I' D) G& ~
goto_xy(j,s);
) i' e0 L% D6 G5 | putchar(' ');6 A. j) z+ d) T* ^
delay(10);4 v3 u t$ U7 V" v3 d# Y3 j
}
! o9 j# J& a) `1 G! b f0 [3 s+ G }" ^" s7 i: R+ W0 H
/*****************close screen clear*****闭幕式清屏*******************/6 _# O, p4 o/ s3 m% P; U' a
' o' b9 A0 u' b+ t" i* @
void bcls(int x1,int x2,int y1,int y2)
6 r3 [" ^( b6 t J3 ? {; K; O$ m/ ^3 `7 Y/ x
int t,s,j;
( k; c& A' n! V/ l5 _+ y1 Z- e t=y1;" _! A0 o4 F K/ c6 m
s=y2;, d' y G8 w. H: x: i( T9 G+ M
for(t=y1;t<(y1+y2)/2;t++,s--)
) I; O: }' a& h. O+ d for(j=x1;j<x2;j++){
; V3 H2 y; W o! t; k goto_xy(j,t);7 R6 m2 m$ m2 z+ w# A, _
putchar(' ');
4 r; B: z9 y' D( p( i goto_xy(j,s);) }! W) y! Q J% _. s" C6 J) Y* J. v
putchar(' ');, L/ k! N- P; `9 ?; U6 ]$ r
delay(10);
5 @* O4 i% T' j& R0 V }$ y* x$ Q1 O: b
}8 Y3 S, G" i. Z/ I/ z
/******************bottom screen clear(自下清屏)********************/) Y1 g3 z) f' W$ J+ r
/ Q' ^& f# j: z% u* H; i
void dcls(int x1,int x2,int y1,int y2)
# |% L. l- ?( ]5 l/ } {9 U0 {; }2 s5 w4 K$ j. s4 ]+ E
int t,s,j,i;, n/ |; Z$ X2 l4 y
t=s=(y1+y2)/2;; {& x* h: r2 d3 T& a
for(j=x2;j>x1;j--)- [ m* x7 P5 g% j. X
for(i=y1;i<y2;i++){* ^' R# r! T9 S3 ?! W) z
goto_xy(j,i);# H% A7 m# m' M+ s& E/ [0 G
putchar(' ');4 l. O. t6 u& K$ b: B
delay(10);2 K4 h! ?4 U' c6 w
}3 d" z& }; {) {, r
}. v+ \1 @& c& I5 [& N
/******************设置光标子函数******************/
. x: o# \* b0 R# \9 w t, T1 M( R' ?0 z" W. ]
void goto_xy(int x,int y)
5 Q- h* I) M; Z( o {! N; c# Y0 O; _# L
union REGS r;
2 w7 P1 X; D0 v) y f; { r.h.ah=2;; x0 z* i) Q" ~3 P4 F
r.h.dl=y;) {7 F* o7 V$ S3 s
r.h.dh=x;9 y/ F& z; a, i+ Y% n& V6 R
r.h.bh=0;
9 f7 v2 r% i1 ~ int86(0x10,&r,&r);5 n. S8 m/ t; J7 Z
}
' Q5 k$ y2 b7 I# |$ w
/ Y% f( {! V, X6 M /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 T: J$ `6 X- x( S
' u+ z8 Q" |) T0 ?3 ~: A! }. V. Q void puta(void)" _) [. C! C3 B. Y3 q6 B
{
1 w% x% `! o/ H4 u int i,j;/ k/ \9 V3 E. r2 G$ v
for(i=0;i<24;i++){- d) E: O, A0 z1 {
for(j=0;j<79;j++){# S! T+ U+ f& I( y) ?5 z
goto_xy(i,j);
4 T# v+ J$ A( }) L1 J& B+ d1 o printf("a");
& b* w0 M. A0 P2 g" h }
) q' I$ f2 L; H3 I# ~( H1 A }5 [+ k& J/ c" \1 ^( ?2 P
} |
|