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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, h5 A9 o( u( b
, I3 u7 D/ H3 p) ` 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里2 t. x* h, _$ P+ s/ g0 }
7 \$ {2 b- Y" ]' T9 T. k% v" K
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 O+ `- f7 P$ [- Q" n# E
子函数及演示程序:( o8 s3 }0 j5 ~, C: }
) G0 z P; g5 O+ k+ C: l
#include<stdio.h>
8 a) W4 u, q1 F w, W8 R #include<dos.h>
0 e4 Q& ~! X/ `9 w5 q+ E #include<conio.h>7 J! `3 b9 |- U1 j0 N8 Z$ ]
' M }2 X( N! K; Z7 \
void goto_xy(int x,int y);
3 a- }# ]4 L/ I* _1 V void dcls(int x1,int x2,int y1,int y2);6 I+ {. ?! ?- b' o9 W; Z
void bcls(int x1,int x2,int y1,int y2);
6 k8 a# ~+ p: `! ~* F' W: F void kcls(int x1,int x2,int y1,int y2);
- E% F m7 P) O$ K- t void recls(int x1,int x2,int y1,int y2);5 x( m* F, p: Z: s) N: R6 Q
void zcls(int x1,int x2,int y1,int y2);
+ U. V" k; L+ ]1 d1 n void puta(void);
( j: g! d; w! Y7 Z" \6 ]0 x e4 \ r! L: J' E, ~8 X% W! W
+ ?* T7 @9 c+ A1 h5 d# A( `# |4 a
/*--------------演示程序---------------------*/" B2 K% W2 X3 e
main()
, J8 o. r/ Q$ ]) s# R- N0 A {
4 C7 R' E& L# z6 ]' I- M puta();
' v3 [7 H) Z6 d* V* b getch();
% V- r O) R) c. B dcls(0,4,0,79);
' Q. W0 i0 c( N getch();
4 ?* F, k L" j* M puta();
5 w6 S$ v3 v3 M6 o) a8 L9 L* l; t getch();
! g8 R# ]/ e( C) b0 r bcls(0,25,0,79);
0 W i3 j) ^. n; S getch();
" \8 z: K2 a2 `1 o puta();& C" S* c5 k' d: c9 x8 z
getch();/ M t( K3 X( Z) y
zcls(0,25,0,79);0 Y* b& Y% v4 s/ G4 J; S
getch();
0 v0 a! y' v. w6 z! W7 i5 X }+ @" F, Q: l z; X7 B
/*********center clear screen(中心清屏)***********/8 x2 \* U5 r/ V! Y! N
void zcls(int x1,int x2,int y1,int y2)
* W9 \. n- _: s+ p) u! E2 j: h; l; }/ X {9 `' h7 |; v# Y) d
int x00,y00,x0,y0,i,d;6 B# J% {0 V B
if((y2-y1)>(x2-x1)){8 t$ i' z9 v; n; P# K0 u( T4 z
d=(x2-x1)/2;; b- d/ P8 I9 ?: [5 D3 m* f/ Q
x0=(x1+x2)/2;
0 m+ n2 K- |& M1 u" r( }3 f7 @ y0=y1+d;
d/ p3 t O5 U+ w) F6 a3 ]5 b9 `) p y00=y2-d;+ d9 C/ ^5 g* j9 X9 A6 E- n
for(i=0;i<(d+1);i++)
; G7 P* O& U3 \ recls((x0-i),(x00+i),(y0-i),(y00+i));
^3 c2 o2 a% p1 z3 {! j delay(10);8 h5 u3 P! z: r( g
}
G; h* ~ C" K* F8 |) h else{, H2 w% c4 ~8 |. D) }/ p9 `
d=(y2-y1)/2;+ s% _9 P. L2 I- R
y0=(y1+y2)/2;
: ~" O3 f m9 X2 D) h& G x0=x1+d;
4 M$ t% S! J! w x00=x2-d;% A! K( {, j i) Q3 c7 G
for(i=0;i<d+1;i++)5 o; b9 ]0 x5 Q% S" z
recls(x0-i,x00+i,y0-i,y00+i);
- F4 H: c2 a! Y3 p delay(10);! {% n! h! w5 [3 d W
}
! s2 T% M' H2 s) E* w0 {# q9 p }$ d: |" }9 a6 P
" M0 t; d5 w# t+ ~
/************* clear rectangle side(矩形边清屏)***********************/2 P. a( \+ U, \) S: V9 o4 K
! V+ p" Y7 q. Q0 H7 K: o- L
void recls(int x1,int x2,int y1,int y2)
5 z- a$ n" K2 G B# ?& I2 v {2 m _- N$ h6 S9 U# Q
int i,j;
5 v& [* M7 L! ~7 l+ ~ for(i=y1;i<y2;i++){
4 ~7 r0 s8 }% _& c9 J2 S4 s6 N goto_xy(x1,i);
; L0 K1 [" m, ~$ W3 h putchar(' ');( @0 @- w, O' d: N% B
goto_xy(x2,i);' [, O. G+ J5 S
putchar(' ');
( e9 g4 g9 X4 A. S; L7 C! E9 x delay(10);
7 i; U! F5 e2 r8 S5 l }
" a9 O; J4 q5 ?, E% K9 t9 ? for(j=x1;j<x2;j++){5 {0 c) H1 I' G- [
goto_xy(i,y1);
! @# c- a& u( c8 p9 @2 M3 t putchar(' ');8 {( Q, \, T3 v8 i
goto_xy(j,y2);9 T" B) L& X% c7 r: }* g
putchar(' ');
$ S; y$ m# n7 m delay(10);# S7 I- }( t8 q% t
}
( \1 F; S5 v. a& p% K! a- X }$ ~% D, r7 C8 Z" R- B( w
/******************open screen clear(开屏式清屏)*********************/
{& V# a* W M: B
# g2 t0 r0 H5 V% T' B7 W* ` void kcls(int x1,int x2,int y1,int y2)- l0 j! b1 z$ f
{
0 i$ ~1 I& ^6 w; t- K7 P1 E int t,s,i,j;
$ I* S6 n7 ~' W& q5 O t=s=(y1+y2)/2;( ^5 O4 X$ @2 z ^2 e3 E2 w' _
for(;t<=y2;t++,s--)
" u4 w: P; [# V/ {9 u* Y, g for(j=x1;j<x2;j++){
$ P8 o; ~2 E! l' [1 n goto_xy(j,t);
) i# `8 U8 }& I: c3 _8 o! ] putchar(' ');
" g: R: v. H' N. f goto_xy(j,s);
5 B# a* R1 k' ]/ U' i8 M0 y putchar(' '); B9 O/ ~5 ]! W: L2 v# Y0 i
delay(10);6 G9 X. ^ R2 ]) Q1 B
}9 c) ^6 P$ T4 O6 I# T5 B
}
) O+ }5 D E: M$ F /*****************close screen clear*****闭幕式清屏*******************/. [$ D9 j% q1 V+ t. G
4 E+ n8 {- a+ Q. V void bcls(int x1,int x2,int y1,int y2)/ r7 i! c( q7 Q/ {, }/ c
{
4 f" |8 M% P7 s! |/ J& l+ h2 m int t,s,j;& i4 W0 k+ D0 }5 Z, T; b1 D( P
t=y1;
7 _7 j4 {7 L' i; t, W5 ` s=y2;
8 q+ }0 X* k: m for(t=y1;t<(y1+y2)/2;t++,s--) x/ D( `2 w6 V! e6 A
for(j=x1;j<x2;j++){; h9 |* i5 T8 N5 x+ n
goto_xy(j,t);/ G) z. `9 i1 C2 h4 e! N
putchar(' ');8 Y e4 @' U+ S9 L" e% Q3 T, U
goto_xy(j,s);
! q! j4 `$ y: K putchar(' ');/ \ u* I, d7 A* E! v& P
delay(10);3 K# i: u8 C. B6 O: A% w
}- P, ^0 V+ W/ N+ X; [: z
}# a5 L/ l7 M( w/ L$ t
/******************bottom screen clear(自下清屏)********************/, ^( M; ^$ m0 l3 \! F+ _8 X
8 t% [9 n9 Y, ~$ j
void dcls(int x1,int x2,int y1,int y2)
K& j8 w8 ^9 |" R {
. a/ b- ?* A3 b/ n- D/ w int t,s,j,i;
! h; c/ o7 T; e6 B( T! f t=s=(y1+y2)/2;
$ O* n) n: u2 F4 M1 r) F) I) _ for(j=x2;j>x1;j--)
+ Z# l0 `2 Z6 C( {" m6 ~' k% y for(i=y1;i<y2;i++){
0 M" K; T, f" _* m; N goto_xy(j,i);
1 @- D" l6 H* s$ r' H putchar(' ');) n! r+ t1 I) w1 z9 ]) ]" `
delay(10);; ~8 w E8 d. s2 x$ ?
}
+ d: O* ?4 z0 d3 C( O- x7 c }) z: A* T% t- X: [' z
/******************设置光标子函数******************/. ?; y- c9 e! C7 G! H/ x, g( Y. t
/ Z2 O; Z' a" I
void goto_xy(int x,int y)
( V5 K4 j) W- c9 x- U" U, H {/ {) P4 @) b7 O2 h0 d
union REGS r; G; Y" ~8 J% i4 E% U: W
r.h.ah=2;
: r/ A! z9 y/ ^9 B4 y r.h.dl=y;
5 e d6 Y$ l. P0 |+ k r.h.dh=x;$ p9 L% m' p- X7 T9 w5 X, v7 r! B' l7 B
r.h.bh=0;, ^: T8 f5 r# H8 S( c! N
int86(0x10,&r,&r);
) r" o, x& i- _! p h! [ }' j5 e8 S2 n" c3 x, p* U& D! x& o" T
6 j$ _0 U: }& I% ]$ M1 y6 g; F /**********************在屏幕上打出一连串的a字母用于演示程序******************/( l! w$ f. |" p
3 J2 a1 L0 f/ P1 ]3 k. x; D# U void puta(void)1 s" _9 j+ ]( s! O
{
% V) h' v% { Q2 x8 ^ o int i,j;# v$ i. L& M1 P/ B! A w* w5 c+ ^3 @
for(i=0;i<24;i++){6 C& k* h1 Z. G" H3 r, v. i
for(j=0;j<79;j++){
- V5 `( \. D7 I, u$ G goto_xy(i,j);
- A! \/ ]! G0 m' H3 P printf("a");/ J) _: Z9 j1 s/ L% u: |4 w
}
4 \2 ^" K- f7 w( E }
4 Y: d* D8 a/ v } |
|