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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. I! W. \& |( v( M
- F; C; G) ?2 z) c 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& E6 Q8 k7 a6 c/ i6 N/ s
6 L. r# s" y% z3 n3 q, r C
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 |& H) Z: Z. ]! }4 Z
子函数及演示程序:6 u1 v) _/ H( k4 x! Q3 R- A$ C. K
+ u% p) l1 w- }! Q #include<stdio.h>" n, _0 G; ]) c
#include<dos.h>7 o' F. |( s# a2 J$ y2 y& }; c7 a8 k
#include<conio.h>& n( U" A# Z1 ]/ Z! q/ c- q |
( T! U$ N7 J( {0 H% N
void goto_xy(int x,int y);
/ ]3 h/ K9 L1 h4 ^+ O- F9 V void dcls(int x1,int x2,int y1,int y2);9 x, D1 Q3 q+ Y d2 V
void bcls(int x1,int x2,int y1,int y2);' W% y% f: @$ v1 N! ?2 N l: H
void kcls(int x1,int x2,int y1,int y2);5 j3 U1 [3 v- ]" y7 u
void recls(int x1,int x2,int y1,int y2);
( i2 a7 W# F' Z4 I8 X void zcls(int x1,int x2,int y1,int y2);2 r/ a! s+ R0 ~, f8 ~
void puta(void);! ~# P# ~" x- s. L- Q
r2 K0 u/ p. {5 |$ c! p
- [: g+ E8 ` i8 ~ /*--------------演示程序---------------------*/& }$ P: z! q9 Z$ @* W
main()
5 q7 i) x) A5 U! r {
2 H: j# f. D) s puta();6 ~- G6 e/ o* n* h \, n$ k8 }
getch();
4 ?1 n R5 S3 }8 {& d* t# @ dcls(0,4,0,79);( h/ U8 Z9 V6 Y8 Z8 `
getch();
/ p Q& Z# E7 w8 S& O1 K puta();& d5 Z0 ~* V1 Y$ k* i, M
getch();6 d6 _+ n9 e* h" S* K m; O0 ^
bcls(0,25,0,79);
5 W: m* J2 i3 |8 t* x* K& R( c getch();0 P/ X& w" \; _; s4 Y1 i
puta();
# {1 o- r! b& V8 y getch();
7 @' l7 ^% Z2 V5 T zcls(0,25,0,79);( g$ k) S" O. r* ]- R
getch();0 E# Z- @& B" ^/ s# o& I9 ~4 {
}
) R% P% M) ?/ d7 a" n /*********center clear screen(中心清屏)***********/
6 `7 w* U) i5 a' z8 d8 @ void zcls(int x1,int x2,int y1,int y2)
9 B3 w ~6 L* Q1 q/ }) w% u" P {9 @( F# W- t6 c# X& G, R
int x00,y00,x0,y0,i,d;
. t. J. ]' S0 J if((y2-y1)>(x2-x1)){& p1 \, o- y& J% {
d=(x2-x1)/2;
1 ]8 Q7 D$ ]8 v' s/ |% M! H x0=(x1+x2)/2;
0 \" j! C y- Y y0=y1+d;
, W; K C' T# N0 b* Q y00=y2-d;( i e( t# \) c& i5 A
for(i=0;i<(d+1);i++)$ Q9 y# E- g0 Q2 } a( d" [# c6 M
recls((x0-i),(x00+i),(y0-i),(y00+i));
, c& f# W; ]# r6 M8 Y: b delay(10);% m5 D- ?8 L4 `5 u+ j$ O) D
}9 [; e/ d# C4 ^/ X
else{
* e) X- D1 B! H0 \- l d=(y2-y1)/2;
6 p( U+ @2 O, d- a1 z. Q5 W& z6 M y0=(y1+y2)/2;$ B0 i7 f$ Y0 {) }
x0=x1+d;1 s0 B% F) `6 q( ^; M
x00=x2-d;
; O6 V V G4 Q for(i=0;i<d+1;i++)
/ b. J" O' c5 x' \9 [' y- Z- I1 o recls(x0-i,x00+i,y0-i,y00+i);' L0 ?0 |" `& C4 C" Z# }5 `
delay(10);* p& N4 s4 m+ ]) h
}
3 k; x3 E7 g) A/ f* z f! L* l }6 j0 c1 d5 @& |
6 H/ `8 t0 B0 S0 A, H0 D0 i /************* clear rectangle side(矩形边清屏)***********************/7 H; E( Q! T0 Q1 E* E( y5 S, q
0 Q; f- f0 V. L" S" q& [/ y/ P
void recls(int x1,int x2,int y1,int y2)8 Y0 f; {; Z8 V4 |
{
( T7 r5 G* ]! S# W# _ int i,j;
E1 I2 V1 ]; P+ ~) u/ \ for(i=y1;i<y2;i++){
0 h$ T k# ~' i# {9 y" H% t goto_xy(x1,i);
% T1 L* [% U& Y2 u5 |8 T putchar(' ');9 l1 p# J0 O4 ?. p' @, W# q8 ^
goto_xy(x2,i);
N/ k0 e. F u' f8 w- M putchar(' '); d: n0 O" E$ `9 D8 J& n1 ]
delay(10);8 N5 Z( {+ C* U" `1 ~
} K$ ]7 A8 a( k, [; ?! y5 u# A
for(j=x1;j<x2;j++){* l6 J- i$ d2 _7 |
goto_xy(i,y1);+ m, L1 _) [* G
putchar(' ');
2 T. S( x; I) m! b" q1 H goto_xy(j,y2);" c5 t# n! I+ |$ z0 ~- L
putchar(' ');0 b# R: }# z- P/ m5 i6 E3 k
delay(10);
6 U: |" Q: ?% H1 n( P R0 M }
% O' Q/ a2 \4 c" ?$ C- t }$ z% i" S7 x$ V4 h& T0 P$ _5 o
/******************open screen clear(开屏式清屏)*********************/
5 B$ o U2 [/ v+ T, n& y+ n! p4 c* L8 B' F) K
void kcls(int x1,int x2,int y1,int y2)& @+ i/ q9 m7 h8 @3 e! f
{
+ ?7 r/ p+ @# z2 I, O% n- o M a int t,s,i,j;
7 k6 V7 s1 [1 ]3 P t=s=(y1+y2)/2;' c9 a$ A4 g8 W: u5 `7 J& u
for(;t<=y2;t++,s--)/ w J+ t0 [/ n( ?7 w! M' r5 Y
for(j=x1;j<x2;j++){- i' n" Q: A! j7 o) S
goto_xy(j,t);
) W) C& z9 l9 k$ \' W putchar(' ');+ v$ D% Y2 L5 A! r) g' N, g) w
goto_xy(j,s);( l0 }# K/ U: E" w
putchar(' ');
* d$ x) H |; u9 t delay(10);. C+ _6 L- L2 F n
}
: `/ X# y$ b4 i; E& T X }: [+ B3 _. k' ]
/*****************close screen clear*****闭幕式清屏*******************/5 D! B A+ H; P# t/ @# A4 i9 g7 f) A
) d) v* `* N2 m void bcls(int x1,int x2,int y1,int y2)7 N& E: u+ d/ m2 O1 r
{$ p" g) ~3 b; C( J9 z6 c
int t,s,j;, v* L- ^1 {' e1 J. _
t=y1;% N3 ^& b2 ?7 N! t& {
s=y2;# q' y& m: _' l: u9 k; z9 T
for(t=y1;t<(y1+y2)/2;t++,s--)1 D* P( r& H. \! v) t M
for(j=x1;j<x2;j++){8 D& x" g' O9 K. Z3 J5 Y' k5 s
goto_xy(j,t);5 Y7 Y- ?7 m9 A, m
putchar(' ');
% s- P: v9 C& L goto_xy(j,s);* Z q- @8 U$ U8 ~' K( `
putchar(' ');
* ?5 n& ~! c+ v delay(10);
" R2 g) H' V( s1 D; x }
) H& B: @1 l$ n1 K+ f }
) P# \7 V1 ^) G* H7 u: i$ r /******************bottom screen clear(自下清屏)********************/
% N; E2 ]3 D( u1 s s2 G
) c- y9 P5 s- b* e$ k& `/ r: S void dcls(int x1,int x2,int y1,int y2), U8 S, _1 Z% l
{
7 b/ A5 ? l) m5 i0 } int t,s,j,i;, A |1 c+ p- k9 z
t=s=(y1+y2)/2;5 F1 i6 n% |2 z0 m1 s
for(j=x2;j>x1;j--)6 h- l1 C0 W5 Z! K" B; l/ I
for(i=y1;i<y2;i++){
2 o! f) W8 Q9 Y3 J' Z goto_xy(j,i);
! L$ s2 d; L$ Y6 B8 W1 P putchar(' ');
& M. D3 i9 {3 P6 p' S% b+ Z0 M! E- H2 w delay(10);9 X0 D2 U0 B. l: }
}
: g$ O( }0 J% H7 w2 ~5 l }
- j# W2 R7 _& n/ @1 l; P6 o /******************设置光标子函数******************/
( E: D) G1 U ^: x
% E# W0 Q) Q/ a0 q' C! s, g. b void goto_xy(int x,int y)
7 l* Y$ ^( u4 z* o0 o( _ {- t3 ]# u- @ e; h, c& R0 V% H
union REGS r;
& o. X4 r! z' M- M r.h.ah=2;+ D# @. M/ V) k8 ^
r.h.dl=y;( E) {' J. C% F
r.h.dh=x;4 \3 M5 L2 I" q5 U: U& f& D
r.h.bh=0;
6 d0 g* ~ A+ Z' ^+ i int86(0x10,&r,&r);9 \$ c0 b% k1 O& T# T5 o
}7 L/ C3 k# z& m: K
6 m5 J( W* l; l1 I3 T. |
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* d6 M3 Z% r" M. c H8 D r1 i7 z- }, W2 o/ a: e& p
void puta(void)
{$ \$ K. M5 s: v( N* p {
0 Q& _& [# H4 ]9 \5 P* H$ J2 t int i,j;
6 X& S9 W" I! c5 B( w% Y for(i=0;i<24;i++){7 T+ r+ Q a, ]" i3 }
for(j=0;j<79;j++){) F6 P& h4 J) Q6 ]
goto_xy(i,j);
6 {( y: J* F* a, | }2 W printf("a");2 m% u/ B M0 r
}
: q( l( {8 E2 K# _ }
0 N! ?6 n4 a1 n9 v7 a6 Q0 d } |
|