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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& d$ b1 @7 }# q$ h, P) e! `% ~7 Q% Q
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 I0 p- p: s. f- c- r0 e
- N- s0 s* z1 {4 h# w# h6 H9 o 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 t5 ?& w4 Y1 Z( i% u9 Q& x- O 子函数及演示程序:
% f* F2 b' ~( i& U) t: t: G( A0 \4 h/ ^# c- X2 ~
#include<stdio.h>
P0 \4 ~" V. z #include<dos.h>1 H6 O i3 @& s8 I Z0 _3 w0 ^1 j
#include<conio.h>5 ?! N3 e4 q: [$ l
. N( {4 J y6 s" t+ m3 s$ |* e( R
void goto_xy(int x,int y);6 n" I7 m" D4 k, M) z. E1 `3 ?/ z
void dcls(int x1,int x2,int y1,int y2);/ R$ {( S+ I! M$ D( ]6 L. t% i
void bcls(int x1,int x2,int y1,int y2);) A/ S7 F* E' t
void kcls(int x1,int x2,int y1,int y2);
2 q/ ]9 y- p+ _& X* }) z: a5 z void recls(int x1,int x2,int y1,int y2);
; [* \; |8 v1 e! k8 R. J void zcls(int x1,int x2,int y1,int y2);, _: ^" u7 Y0 z- K% C
void puta(void);
2 z( d( {7 p R9 f7 N
9 f" g. w" t# n) U3 v( ]3 ^2 [) e1 w; W1 o- X9 [# i8 x
/*--------------演示程序---------------------*/
2 F2 O# L1 q6 T main(): }6 ]1 k, N5 X0 m" W7 m; _
{/ {# M/ b4 B# S1 ]
puta();9 U6 w! q7 y" c& f4 {; ]4 H. ?
getch();+ T# y) s2 ?/ \5 j
dcls(0,4,0,79);# J2 U; s+ w' ~# C) C @
getch();! R. q9 {1 h1 ?% _
puta();7 O7 e. @" v! V1 H% p# G5 E
getch();
/ e6 ?, E0 O8 u bcls(0,25,0,79);
% ]" ]( g( p- ^7 G7 a getch();0 {4 m/ E( _0 a3 s2 |
puta();
7 | A% x3 Z' c) ~3 ] v getch();3 k8 K J- i- n) U' h
zcls(0,25,0,79);: i( U9 `! {3 S
getch();0 j0 @+ I% }, k t M7 J
}$ A- m! @; G# n4 P4 [- E: ~) h+ N7 q0 i
/*********center clear screen(中心清屏)***********/0 k) B! `6 {# z9 ^7 v) B: Z; s
void zcls(int x1,int x2,int y1,int y2)
/ T9 X. O. M( k, K/ r6 R/ u, { {
+ y; _, I; x0 o b; U! q) V# n int x00,y00,x0,y0,i,d;9 y3 T+ \* P( e+ M4 m7 _; s
if((y2-y1)>(x2-x1)){/ \* U( R' m' h4 c! @3 T$ W; ~
d=(x2-x1)/2;& ]- m0 i" r$ h& F5 ~% P
x0=(x1+x2)/2;
% U+ n0 B" E o8 H0 b$ i$ p* { y0=y1+d;% C K/ S( P1 D0 j! E! |. Y7 D! s
y00=y2-d;. {, m. C. O4 Z2 k5 O0 l
for(i=0;i<(d+1);i++)
$ y: L5 T0 E) P recls((x0-i),(x00+i),(y0-i),(y00+i));, W: I* }4 x/ U5 m1 U- N$ Q
delay(10);" g, l7 J" \! n# r- E( G
}4 U2 O+ r; i! I# |' L( R/ g
else{
' ~4 {/ `" e% | d=(y2-y1)/2;
' |* [' S1 ^6 g! M( a y0=(y1+y2)/2;0 `9 V9 i! Q c
x0=x1+d;0 Y9 P0 P+ {% x3 j
x00=x2-d;( @; Y' M3 _' K S3 d
for(i=0;i<d+1;i++)
1 o' I, n- v8 S0 S" k recls(x0-i,x00+i,y0-i,y00+i);/ v' g" t# d7 Y \3 l) ?
delay(10);2 V7 A2 z; @' R" _9 c" V0 q
}
2 T' ^/ E' h$ k- m" s }, O ]6 ~5 T2 u/ W$ d
0 }+ { J7 c) y) [& s5 h /************* clear rectangle side(矩形边清屏)***********************/
# I( L! F' X6 ~# u
( v$ _( [/ l, _' ~1 G% O void recls(int x1,int x2,int y1,int y2)3 W; v/ G8 D" D3 J# ^
{; j7 ?( x) u' G# X f$ _
int i,j;. M+ Z) j7 U% `; }" r5 L) b: c" Q
for(i=y1;i<y2;i++){
, K u+ B# i4 L, c goto_xy(x1,i); L. [% z+ P/ n b7 X& O
putchar(' ');
6 y! w+ D* j8 x4 o/ o" V goto_xy(x2,i);5 |9 }# P, v9 q3 n
putchar(' ');+ X) H5 M* f ]/ d) z
delay(10);
7 X/ T1 i& O: @% g# k7 v4 x }
$ t" @* _1 D2 S7 L% e, C for(j=x1;j<x2;j++){% X! l- z7 M/ |! I& Q- [
goto_xy(i,y1);
: V' t/ v; g: b& N" N4 b* k# p, R putchar(' ');! e I& W ^! ?8 H$ w# Q0 @
goto_xy(j,y2);
5 [% W5 H% r1 |& ]' u' C putchar(' ');
4 g$ F/ m) [" u( Z* f& @! @ delay(10);
4 T1 l" K- D2 e }
1 b; v6 o8 o" Z _ }
$ @$ i* p6 @5 j3 } /******************open screen clear(开屏式清屏)*********************// c( M) S4 l" o5 R2 u7 c" f
$ }3 V$ k) x; H! f void kcls(int x1,int x2,int y1,int y2)+ i" ^" `2 b( {1 }
{
1 F7 A$ Z: i8 f* W. U int t,s,i,j;
; P9 ]+ k7 q8 Y8 l# ^5 Q7 z t=s=(y1+y2)/2; b7 \5 D( Q0 D/ `% r3 m2 z$ h3 G
for(;t<=y2;t++,s--)
1 R5 c+ |/ y9 f for(j=x1;j<x2;j++){8 W( l& b7 U/ [4 x, j O: P
goto_xy(j,t);" Q4 D3 Q) P- i" U
putchar(' ');
% T& A3 J5 m( }( v2 X& T goto_xy(j,s);( W# M4 {. ]1 ]& `8 u$ c. r! Q/ k
putchar(' ');
7 w0 r4 M: J% A3 y* s& }7 x, `) C delay(10);5 _* q3 E2 O/ j1 K" [- M6 C
}- i4 V( I7 ^' R& u. V* I) E
}# b8 K7 f5 i, Q
/*****************close screen clear*****闭幕式清屏*******************/4 r9 h8 a1 x. w5 _$ N7 g
{7 K, ~& P# K5 ?- h; |
void bcls(int x1,int x2,int y1,int y2)
) x9 d2 n# q; `9 L+ U {
: N" S0 ?0 R* g! X9 g int t,s,j;' B1 k1 ~' ]# B% D) K
t=y1;
. O" w* u7 f! ] s=y2;
9 ]" ]! R2 r; ^- I4 } for(t=y1;t<(y1+y2)/2;t++,s--). `. O8 Y1 ]! M" K& W/ d
for(j=x1;j<x2;j++){2 @# ^ K& i, o! H. e& j
goto_xy(j,t);+ x/ Q5 A5 ]* S; J* a+ q
putchar(' ');
: x- R0 h2 k& R' i$ S! d0 _ goto_xy(j,s);: |/ c; `6 \7 ^( [" G' m
putchar(' ');
% P3 r# o) o, v, R0 e. T$ [2 u# o t delay(10);0 y% [+ _! I" y) v5 Z' q. w# @
}. I, T: G& A0 p, G
}
, {. v) m7 S" p7 W: y /******************bottom screen clear(自下清屏)********************/
$ |* g' ~4 V; _" R" T
6 h& Y! U! S8 P void dcls(int x1,int x2,int y1,int y2)
* Q7 N9 m. v) V, u. W4 n {
; M) n4 J. Q! [* f9 w( q+ u8 N# Y int t,s,j,i;
1 ]% Z2 u8 o5 B k t=s=(y1+y2)/2;" }3 s |6 y7 i/ f% H
for(j=x2;j>x1;j--)/ Y. ]1 m/ ]3 M
for(i=y1;i<y2;i++){
9 Z, m) ^! c5 M goto_xy(j,i);0 q9 H6 K) f- t( F3 N! r3 s2 y7 n
putchar(' ');* c* ^$ D, t1 u7 J( I% D
delay(10);* c8 w: P6 N" `
}% r, j: d* T4 T# {
}9 u$ z# F; D: g4 g
/******************设置光标子函数******************/
- w: I: x) U" y9 }: U6 T% _5 J' F3 l9 }. i6 ~' E$ S6 n3 h' d
void goto_xy(int x,int y)5 `8 R( F. x: c& m- q* x
{
% g9 o: G/ V4 D5 N union REGS r;! \! t% K, B1 |6 `* v$ W
r.h.ah=2;# r! {. @. Z \6 ]3 O$ k5 {
r.h.dl=y;. {$ H4 X+ @" x/ B! Z, Q# ]
r.h.dh=x;
8 [: d& d1 r/ v r.h.bh=0;- w- G$ F9 m' f
int86(0x10,&r,&r);
+ n% W( N* S2 k- b$ l }
- v" d, ]; i* C: @/ y2 ^0 j: Z# l! w
& C6 ~5 L0 }# ?3 S" y* S /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% G) W% E6 a6 w
! a _6 e3 f% F" _0 M1 ] void puta(void)4 e. @) V- e& c; j" q
{( o- ?$ q9 M+ R: E3 O
int i,j;" r$ c" p5 A: U! I b) E; D; q2 Z
for(i=0;i<24;i++){
; B/ @4 x3 H, v( s for(j=0;j<79;j++){: W, U" w% f' j- g i' f ?
goto_xy(i,j);
2 {$ Z1 z" V) V' `) }5 q5 z printf("a");5 `. A6 i: B* c% ~
} S5 c$ ]. I" ^ H
}
% I* ?1 \2 Z- G: v2 d } |
|