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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,3 L+ C, |6 z" v
* F* `& \6 ^& e9 P$ j' \. w/ t3 x 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ Q1 [; \5 h i; |7 {8 I5 p8 f9 K6 K1 w' g
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / ^7 u+ [ d. b* f
子函数及演示程序:
0 u( \3 L4 x- y# v1 c6 k
7 n. I8 j4 H; R3 W+ l' A* Z. e #include<stdio.h>4 a$ g# u# D- l: f0 s' H, l4 z/ J
#include<dos.h>" R$ O( d* d8 a" u2 u7 O- T
#include<conio.h># e) {1 t: `1 `7 n
) G. z0 @+ K: V4 Y1 K
void goto_xy(int x,int y);' ^4 t2 t0 b! E. n5 Y
void dcls(int x1,int x2,int y1,int y2);; x/ @% S* R2 g. d- C: ]' ?
void bcls(int x1,int x2,int y1,int y2);7 y8 P# z. g$ v B) n/ b1 w
void kcls(int x1,int x2,int y1,int y2);
4 m5 Y4 x, _% j+ G7 l void recls(int x1,int x2,int y1,int y2);
* [, x) w0 k% }$ I. @/ }6 d7 f void zcls(int x1,int x2,int y1,int y2);
4 |: A" Z" X8 O. d4 G void puta(void);
0 F# ~ y9 y6 Y( l% p( B% z/ ]9 v/ h% Y
$ m, l% Q2 Z: _8 ]5 f /*--------------演示程序---------------------*/
/ Y/ u2 K, r8 E( V: M" K main()
3 p# |7 _1 [8 l' F; O {
0 M7 b) Y' y/ _6 l( n" Q puta();
, K& {- O8 \! _- ]' M8 F getch();
% ?( c2 I- ], s# R/ p/ z3 y dcls(0,4,0,79);
6 b5 B; t% U9 p/ R! }6 b G getch();- l( L3 A" Q; a' ~- Y. }& J
puta();# A$ L. x: }$ R
getch();
) b) P# H4 e! W) z bcls(0,25,0,79);3 i, b* }4 R6 n/ v- Q/ m
getch();0 `; B4 o- K L a4 o( ~
puta();
3 v% ^6 r/ I: g& R getch();
3 N, g, ^3 z( s! z+ P zcls(0,25,0,79);
5 j) P/ f/ y" r) ^) h% D) K$ H& H getch();# I; T3 v* `6 h5 o
}
- _/ O/ G: P/ I: T8 O7 T% i ? /*********center clear screen(中心清屏)***********/
{* I, J) N4 f2 Z- z void zcls(int x1,int x2,int y1,int y2)5 J1 ^& M+ [, f: l
{& b6 c3 P! }9 H9 ^
int x00,y00,x0,y0,i,d;
- b( v' O; H% U& L if((y2-y1)>(x2-x1)){
& w- {& p0 o& M! W, ` d=(x2-x1)/2;* t/ `0 q- c" B+ K
x0=(x1+x2)/2;1 ]# e6 W, O4 o. c- E+ F
y0=y1+d;+ h: Z: f7 l# y |0 I8 |8 N: a! S
y00=y2-d;5 o0 K: }2 |0 i9 b% X2 j9 S# `
for(i=0;i<(d+1);i++)1 D: F& c: b4 T0 t7 w1 V& i
recls((x0-i),(x00+i),(y0-i),(y00+i)); G7 n; M) w' O1 L/ ^6 s, J3 D' s
delay(10);! d( F& V P# k3 Q
}% a6 d+ Y# B* O1 g
else{; V8 O4 u( w* o
d=(y2-y1)/2;
+ p/ }( ?! E) e { } y0=(y1+y2)/2;% f3 T& k/ ~2 O/ B* l
x0=x1+d;0 w8 a) V. M2 I9 O) Z, y+ y2 }
x00=x2-d;
3 ]! R" [- U. _3 {, f for(i=0;i<d+1;i++)
! A. M+ @) G2 K4 }6 t1 {7 h, W recls(x0-i,x00+i,y0-i,y00+i);) H. G( L O$ O0 ]; a) r3 [
delay(10);0 S2 w+ d r1 f! w2 z f3 ^
}5 N2 Z& ], q# R' Q
}6 H8 |3 p( F& x! s0 v
; Z- V& x9 k5 t% y /************* clear rectangle side(矩形边清屏)***********************/
% i+ e2 O- }1 i5 J6 W! G( a( d1 a' g) ]
void recls(int x1,int x2,int y1,int y2)$ e: ~5 K# _) B" W
{9 ?; Y. I; i; H2 r3 Y
int i,j;
" w; r4 }0 m* i. D; K* }' Z for(i=y1;i<y2;i++){
+ H. k0 e* ]3 c, v) o$ L1 S goto_xy(x1,i);! Q {/ Z9 a6 q n
putchar(' ');+ P5 a$ w0 n1 @/ P$ D) t$ W- O4 r1 U
goto_xy(x2,i);! I8 a6 F4 }, y/ I
putchar(' ');
. p! V4 z% n% u delay(10);% a* S5 ?4 Q' C5 U
}
' Z) i z3 Z; |. M for(j=x1;j<x2;j++){
0 S6 f6 n% W6 _$ v goto_xy(i,y1);) R( m( |& z C
putchar(' ');5 K. I$ L* l" J8 v* m4 u* ]7 X
goto_xy(j,y2);! H/ J. O6 |9 d, L' _
putchar(' ');
% w- \2 J# a: `2 Z2 B delay(10);
z3 G( @4 Z; w, T0 X }9 I! @4 i' Z$ S0 d
}. e. v* U& p5 V7 l: M' d( j
/******************open screen clear(开屏式清屏)*********************/( R k* G( y* i
2 c8 Y2 K- G$ ^% I: z void kcls(int x1,int x2,int y1,int y2)
; [3 X' e. g. W& @) `/ Z {) C* ~9 l# k" G8 B; v& G. ^
int t,s,i,j;
2 S0 J8 m; y/ m6 D t=s=(y1+y2)/2;
6 Q5 [1 L4 S/ y1 s0 Z! T for(;t<=y2;t++,s--)5 v: w v$ [# y/ O
for(j=x1;j<x2;j++){) V* }: F9 t: N; p$ e4 R. t
goto_xy(j,t);
# R/ a, c3 Q& Q0 ] putchar(' ');' S; o' ^& n8 x& P$ a; |! V) N. u
goto_xy(j,s);
0 V8 d1 A$ S# _2 f( J/ M$ Y putchar(' ');8 f( h# v* i/ w7 J/ X0 A
delay(10);# @. C/ Q% B1 @6 n/ e! }
}7 l! c, v, O' N+ _4 k. h
}, ]& F. z, ~1 Y! x( Q+ Z8 z4 H
/*****************close screen clear*****闭幕式清屏*******************/
! |3 d5 X& z) }2 x( E8 R' U, |8 \3 j! N- s/ e" |% R# o7 i
void bcls(int x1,int x2,int y1,int y2)+ v) M, O$ \" j- J G
{! \/ \ x: n1 T3 P5 R
int t,s,j;5 d! p' [6 z! G) \+ R. |% w
t=y1;; S; N9 i5 a: z U) R* h: }* \* W
s=y2;3 ?' ]. l* v4 q3 k: O
for(t=y1;t<(y1+y2)/2;t++,s--); y9 u0 s! ^% H+ `/ s( i) R
for(j=x1;j<x2;j++){
1 ?" Y6 \- ^3 l o, P- { goto_xy(j,t);! `0 |3 Q. N" g2 c+ E$ ^7 u
putchar(' ');
4 f0 o1 z3 ]* `# d" n4 O- Q goto_xy(j,s);
1 p4 a3 F3 S! ^5 z. |$ c# _/ k- w putchar(' ');& Y' c3 |8 n" n- P: ^. `. t" D8 M
delay(10);" H+ v" `; x ]$ z! H
}
' i" Z* f8 W2 Y! f+ [ }
f, C% p; H; i q1 a /******************bottom screen clear(自下清屏)********************/0 S* c- b: f( Q# N! V
6 A8 a; B D0 B- z4 X6 E' G
void dcls(int x1,int x2,int y1,int y2)
, N; `+ ~7 O$ v5 ^ {* ^) R l! W! m. @/ V; m
int t,s,j,i;
, i+ q4 P/ k8 \ t=s=(y1+y2)/2;
j4 `, X$ v8 A7 a for(j=x2;j>x1;j--) D) Y7 N3 p" q X4 M: Q
for(i=y1;i<y2;i++){
8 H, Q. Z3 {8 } goto_xy(j,i);+ E% [+ T! Z- Z* @& O7 k) K
putchar(' ');
, Z# U1 A9 \9 z: Y. J delay(10);2 P1 v1 ]5 n; {/ D. _) P$ R
}$ [ q7 Q ~+ R; d
}3 n2 T" X6 C, \7 J' T" y9 x' `0 {8 {
/******************设置光标子函数******************/
/ Y4 o( N+ _. m" N% Z% m
1 L6 G7 ^5 e- y H void goto_xy(int x,int y)) U9 s! A$ B6 {2 R3 N) B) `/ D
{1 r3 h6 p# e% g" N) C o% J n ?, H
union REGS r;- h5 q7 Z- f& k4 ?
r.h.ah=2;
& u1 ~3 B- V- D: J& [4 F% e r.h.dl=y;. ~/ f z2 e9 S. ?2 Y% u
r.h.dh=x;6 o' y" R, V: v- s* U
r.h.bh=0;* y/ n' M0 S% X- z
int86(0x10,&r,&r);4 s$ X/ D, o: |5 Q$ e2 A
}0 w. }: M$ V5 I5 k- E
+ V( J- ?' a( e/ M! [3 {' g- }. Q
/**********************在屏幕上打出一连串的a字母用于演示程序******************/" l% s% m, \- v1 q$ n
/ D/ P3 m4 Z% ~$ t: ]3 k# ^ void puta(void)2 D. b3 c# G5 d% K+ w) ^
{
; R6 A4 m& P8 k1 D! d# u int i,j;
" }; L" d6 d5 h( i& x for(i=0;i<24;i++){* a" N$ B- X# c. o$ ?5 l
for(j=0;j<79;j++){0 z( `. j0 h, l5 s. F
goto_xy(i,j);
. i% F0 g& J! j( \ printf("a");1 s2 w. z6 ^1 i, D# Z! ~& y
}
' `2 U6 n: A* `. V! u }# d" f @7 C" L2 _& n3 i! k/ ?1 p
} |
|