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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 r4 z# a- Y# p3 j% f& \: t
! p0 A" H! j4 ^# p# j, c6 y2 ~. q: O
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里. T! _ \5 c. ^7 D9 {: b- @% p8 E$ p
- T5 E( W& t8 N: h. t$ O 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) y; T: j) h. ~+ o% B$ M6 d' | 子函数及演示程序:
2 o9 I- f# ]8 _9 T/ a& m U) c7 x
/ Y/ v6 u! @8 F5 e #include<stdio.h>
* z9 p$ o4 _% r7 @" c) K #include<dos.h>
* {0 S2 d7 {2 X; v #include<conio.h>( d! h/ H2 o; } a% @
0 q; ? v! y! v4 W. {: Z void goto_xy(int x,int y);
% g: d! S7 j: N0 m5 x% m: ] void dcls(int x1,int x2,int y1,int y2);
/ t) u, [. w2 s' g( m) M; l- I void bcls(int x1,int x2,int y1,int y2);5 s, y0 ^( T0 L1 X" e
void kcls(int x1,int x2,int y1,int y2);9 ?5 K+ u1 Q% F( Z7 z
void recls(int x1,int x2,int y1,int y2);- d+ W1 z4 C6 F w# e |7 e/ a
void zcls(int x1,int x2,int y1,int y2);1 u( A5 c: D: V& }
void puta(void);2 R' q+ o9 }3 T; n+ K4 y
0 x! D; t. D. }& {( w
6 Z& e& ]' a4 R$ E+ d /*--------------演示程序---------------------*// h, ]9 a8 z/ J+ A3 C
main()
- l1 R! k6 m6 a+ E1 J. m- p {* g' |. Q4 Y& v1 w4 i% L( r) w4 a
puta();
/ t; G, |9 W4 ]( O, I% h getch();
; X$ T" }% b0 _0 i7 E- y2 \ Q dcls(0,4,0,79);9 _5 l8 [/ d8 g0 x7 q7 n
getch();- a( R% h! N% P3 m
puta();
T' v; M4 h2 w+ f* j) w getch();
O2 j" P r& t. N, Q9 J- k( u bcls(0,25,0,79);4 G1 R* _0 a; g4 `( W7 b9 e- {
getch();
% M; y5 c/ r) b: K0 I8 C. X puta();
: g: U3 C2 K0 h* P; z } getch();9 I0 l( {; g$ a5 A! X7 [
zcls(0,25,0,79);2 O$ G8 `! ` V1 s7 N
getch();' _6 z& x* Z1 H7 N* f
}
$ [1 K" l/ \) w /*********center clear screen(中心清屏)***********/+ ^- R& T/ ?& Z* Y' n
void zcls(int x1,int x2,int y1,int y2)7 m& {' F& N. o
{
4 g5 e6 q6 _. @6 u8 F/ B6 O; y# @ int x00,y00,x0,y0,i,d;; p: [( Q' X0 m% ] l# ` [. q
if((y2-y1)>(x2-x1)){
/ O4 x" B8 }( N) R. Q d=(x2-x1)/2;
5 y- V& h% V: E+ R$ l x0=(x1+x2)/2;, ]" `! n9 P) G1 D3 K
y0=y1+d;: B2 r1 {. A; t) Y' p6 ?
y00=y2-d;
7 @ Z. I& A' S4 E g) @ for(i=0;i<(d+1);i++)
) o+ U% d) M4 s1 L recls((x0-i),(x00+i),(y0-i),(y00+i));2 Q" t; A: F7 ^; W4 t
delay(10);/ ^- v0 j8 j& [, _
}
% r- h% M: g' k9 \ else{* G+ i! h5 D1 T4 x. u3 _
d=(y2-y1)/2;
( G8 f2 @- Y2 P' G* n+ f y0=(y1+y2)/2;
9 O6 a m+ r. @ |( | H x0=x1+d;. v1 N2 X% Y' S: o. Q# I/ \
x00=x2-d;$ ] A' o8 E' R( u$ i$ v# `
for(i=0;i<d+1;i++)8 J/ b8 V }4 k, |
recls(x0-i,x00+i,y0-i,y00+i);2 G) c8 L. h2 l( w2 w2 R: i$ h
delay(10);
( u' N9 Q- ]9 s% o) ?/ C9 x: G }' M1 N. T$ k# t# @
}
8 b/ Y% s J# i9 v' v; Y
1 t/ K' X( v& [( r$ @9 M) Q* p /************* clear rectangle side(矩形边清屏)***********************/
8 D9 v: H, G5 V: `7 O% e9 d" O+ _4 {' L; U; A3 j! ^$ {
void recls(int x1,int x2,int y1,int y2)6 M/ G8 d1 e# U o* u% o: a
{8 U+ }5 g& \3 k* g/ \ {/ t0 @
int i,j;
6 W9 }7 S: u- |( e P+ ` for(i=y1;i<y2;i++){
8 q8 x) [0 \+ E: D goto_xy(x1,i);+ \) u2 x. \# l; a" F* m
putchar(' ');
" P! ]3 J! f3 G: S$ t; K2 E goto_xy(x2,i);7 c; E- e! N% I/ H
putchar(' ');
* V8 B0 X/ m4 k7 y delay(10);
, T$ X& ]+ v$ Q! I3 N; Y& t }1 t+ n' c4 w1 C; b9 g
for(j=x1;j<x2;j++){
4 G- ?& f( E6 O. z2 Y0 G goto_xy(i,y1);$ J# p% q' b/ o; c0 J' g
putchar(' ');) \: ]! d6 z$ r0 `. u! y6 X4 h
goto_xy(j,y2);
+ q& p$ `3 R) w- V$ ]& x& n" N8 R/ W putchar(' ');
( l4 z0 F# R/ J/ A7 N* k0 o/ N delay(10);
$ ]) v; x' G: ^ }
& H) z. J" X9 S" G7 u$ T }# Y A h! K, x+ k o
/******************open screen clear(开屏式清屏)*********************/8 x/ v3 h6 L8 f9 Y; C. a4 d
: b# A# p P s void kcls(int x1,int x2,int y1,int y2)
$ r' p' }" Q5 k7 B {$ P. M7 D$ r& z7 A# X) R' y& T
int t,s,i,j;7 N: ]. L0 Y3 Y
t=s=(y1+y2)/2;
0 a+ G6 c+ a- L. _# w4 w for(;t<=y2;t++,s--)
9 e7 F% P3 e7 ^+ x for(j=x1;j<x2;j++){9 h' T/ p1 P0 e( o
goto_xy(j,t);8 O9 O1 @, n4 S4 u; o3 U
putchar(' ');) `& L( f ~* x; F l5 B. j
goto_xy(j,s);
5 L8 O9 Z6 w p; i: W putchar(' ');# {! ?! s, _: e0 v3 k
delay(10);
( q( P# u9 R- r- ?+ F }! _% m5 s j8 W; M
}2 v8 I( E0 j5 e8 u
/*****************close screen clear*****闭幕式清屏*******************/
" _8 X. n: m3 b
' _7 x2 U9 v6 t) G8 n, ]1 ~, r void bcls(int x1,int x2,int y1,int y2)- Y0 z. D0 t' V+ t
{
3 _7 d- s1 Y1 y8 `1 ^* A* t) x int t,s,j;
6 `" b& g- [1 H- b4 a& E6 F t=y1;
( }, @: X& U- t% E s=y2;, T; }+ {* {/ q
for(t=y1;t<(y1+y2)/2;t++,s--)
w- T1 Y7 u6 e0 w0 k* w for(j=x1;j<x2;j++){& N/ M9 ]. L6 R2 @7 o+ n) S
goto_xy(j,t);
# y% M5 e. J4 Y' J putchar(' ');* `: Z. @& n( P/ ^" L3 \6 c$ z
goto_xy(j,s);
0 e" g; }7 h2 x+ G2 _: u7 \ putchar(' ');
3 x2 c/ h9 ?) O( Y; g5 J* a delay(10);- @5 l$ G: Q# A+ c. O
}
, Y/ W7 Z$ g8 j/ e; R }' H0 n- G6 Q* W! D
/******************bottom screen clear(自下清屏)********************/$ t+ n# S5 X$ P3 b% X" o( v& I
4 X( P1 x$ L. ^" d. _5 d void dcls(int x1,int x2,int y1,int y2)2 i- Z! k, Y7 n3 w" L3 w. v
{
9 g' Q4 t2 Z3 P int t,s,j,i;" \' O! M; V- S9 C( Y
t=s=(y1+y2)/2;
5 y) w9 x3 F [# x for(j=x2;j>x1;j--)
3 y( X1 w6 C) F$ M for(i=y1;i<y2;i++){
u! T. x/ T, G8 A9 X. O goto_xy(j,i);# O) T0 L8 W! C) o+ l
putchar(' ');
( I- A( y- K) C! b delay(10);: i7 Q% r" Y2 g( \/ g' [! ]
}& b5 A. m$ N0 T% t
} x ~' K' q+ u
/******************设置光标子函数******************/' p- f9 u) ]2 C
6 Y: c `. x- x9 P& L; \& G
void goto_xy(int x,int y)
) o2 V1 f4 L' Z9 E. x( e z! @# c# l {1 V! ~& o. Q5 R& _
union REGS r;
* q3 z% E0 E ~! C2 H5 D. J5 G5 R r.h.ah=2;
9 j: [9 C1 f! Q' g! z r.h.dl=y;
% h' F7 w/ Z2 F1 v5 p r.h.dh=x;$ y5 \- u4 \; {, ^/ W$ b
r.h.bh=0;1 B6 D4 F3 M. S( L6 i# Y/ x3 z
int86(0x10,&r,&r);) z( v+ i' ?2 D8 T: k6 Q
}
9 l6 c$ j4 U: O% m; z% r, W. f8 C: _/ D; B! i9 z, u" @3 T' B
/**********************在屏幕上打出一连串的a字母用于演示程序******************/3 O2 n' [& U3 @9 }* C, H t
0 r( _/ f+ v" J( X* q
void puta(void)
9 `$ M" \+ H' c7 i$ o" `( J {. w; w) z" n' X; b# l
int i,j;
: v* S: t0 I4 a) M4 h/ I for(i=0;i<24;i++){
0 @1 d( u# _( |* f. N5 z: O5 v for(j=0;j<79;j++){5 |% m! X! k" l- c# j! R, C5 W
goto_xy(i,j);
; j4 N* j9 G5 @( G& e4 E printf("a");6 z: E; L+ T/ t* C2 c
}3 t K" N9 `( j5 J8 p. p, o+ i
}# h8 t3 c/ Q' e. F' @& Z9 n9 Q" y
} |
|