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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; x8 x: w, p+ h* w6 ?- r5 |' g
2 s) s. U9 t. F6 P7 { 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* o- ]# o4 f2 F
- L: M0 U+ a" m8 u# E# G' l 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- F0 Z, l; w8 C, O! a7 ]/ a' q 子函数及演示程序:
) l3 t7 u+ h# }. V5 O- i& W! o8 V
" _+ n/ ^4 I* f) u* K #include<stdio.h>
) r5 S& \+ y2 Q( p' l #include<dos.h>
+ v: [8 ?' R( G #include<conio.h>
& w. V3 k9 I- g( D
( y! w1 H+ |$ _: ~1 i9 f/ p void goto_xy(int x,int y);
' z$ Q$ Y/ E( L, |; C void dcls(int x1,int x2,int y1,int y2);; B$ z* }6 m1 _( ]
void bcls(int x1,int x2,int y1,int y2);: t9 Q1 ?' S' o9 w) l1 Y5 }, p$ l
void kcls(int x1,int x2,int y1,int y2);
7 N: O* I0 F( G- M; ` void recls(int x1,int x2,int y1,int y2);0 ?; l0 [% d9 D: b% F) ]
void zcls(int x1,int x2,int y1,int y2);
* r% @/ J4 V' l8 r) T! P V) I void puta(void);
; }+ H- E" C) | d+ m0 k5 l) `$ z
+ ]( J5 H0 H' i( h
3 K! E3 H, Z+ L/ ?+ @0 {$ Z9 H" G /*--------------演示程序---------------------*/
+ W( b/ t5 a& L3 A% x, n main()4 P, F: e4 O' [1 P# l% M2 y
{) `1 i% _! Q! Z7 e: [: ~8 E# `1 x
puta();
! E% M5 U5 \4 p! y5 @ getch();; m7 {; }0 P* W' L4 w3 g# V
dcls(0,4,0,79);6 W ?! Y: w, ^: P
getch();9 L4 ~" T# V- M1 n y/ M3 d$ v" b
puta();
) w* G5 i5 A! z# z getch();' N" W* Q1 s: `6 s- m
bcls(0,25,0,79);% o) X, ]0 J/ T# A3 I- D- d: H
getch();
6 I* w' x4 C+ {+ W' t8 [- g) K# b puta();( z+ k$ e' F! Y+ L" V: m
getch();1 g0 k) \6 ^4 j, A6 g6 ?
zcls(0,25,0,79);
0 N. @" z) ^/ q, A6 V$ J getch();
|% b) F* T9 y/ W }
: D( s% b; |, d7 T5 W7 h /*********center clear screen(中心清屏)***********/' t4 h$ V, Z$ l& ^# \( b! [
void zcls(int x1,int x2,int y1,int y2)
9 E$ h' s& T2 X/ s {
. t" {$ `& u0 u) s6 a: w( X int x00,y00,x0,y0,i,d;' G+ F, O- r U. p
if((y2-y1)>(x2-x1)){
) M; {* D z" u, j0 C* G+ Y4 ] d=(x2-x1)/2;
! A- \& e" U* w7 {/ s8 r x0=(x1+x2)/2;+ x, B, A; C- B3 G5 m. F
y0=y1+d;
& g/ O" M( | l7 ~* | y00=y2-d;7 x9 O- ^( A) H! f4 V/ P
for(i=0;i<(d+1);i++)( a: K: U" O; a: \& y, \& w P. i f
recls((x0-i),(x00+i),(y0-i),(y00+i));
! y! H+ z* H! g delay(10);9 ~+ b; p- l }* p4 \2 O2 o
}, Q- A- V4 `$ O" Q0 ^% j+ }/ v
else{+ |% Y; r i8 R
d=(y2-y1)/2;
' w: r5 E, L: U5 \, `" ]3 P8 O; F y0=(y1+y2)/2;
, h6 @: a% ^0 M' }4 b4 {; s x0=x1+d;
v2 K% P3 @" u% P5 I( r) q) g" }6 | x00=x2-d;4 d3 S7 m8 ~7 `
for(i=0;i<d+1;i++)# E/ I: Z" {2 g: A" v7 b* C" Z
recls(x0-i,x00+i,y0-i,y00+i);
6 J) b* X# t8 D delay(10);
V( {- R3 p1 g0 o3 \% g% f0 c { }& [9 N9 x5 a" P5 R7 v* W# h3 ]+ v
}8 N4 ]7 b' R3 ~! h4 N( X. b
1 b6 k! W7 a" _* k" _3 G
/************* clear rectangle side(矩形边清屏)***********************/. A( C& G% A2 r
6 e6 Z# s$ a' b5 a
void recls(int x1,int x2,int y1,int y2)
$ p0 H; W& c A( K {
9 k- ~6 w) I4 p- ^ int i,j;' B* x) [$ ~- q2 {2 g
for(i=y1;i<y2;i++){
* F5 L3 L, W% a% Y: `# Q goto_xy(x1,i);0 Y( e8 |3 w2 d. n4 \- W
putchar(' ');$ W; R, y$ i8 A
goto_xy(x2,i);
5 z- I( Q) T4 S$ X+ A putchar(' '); ~" u. x8 ^' h5 n6 W8 `
delay(10);
4 `4 X6 |! p V0 O }
! z" ?: Q! @- u for(j=x1;j<x2;j++){0 ^) x% J& Q1 _% A' G" z
goto_xy(i,y1);( h! S0 n( q* I- `3 [- |; [
putchar(' ');: Q; ` B0 k+ v* y" ]( z" `
goto_xy(j,y2);
% G" _* Q% u5 M% Z putchar(' ');
# c9 E& q; [# m, @ delay(10);
3 @& @$ V3 N- S; w2 L }
8 {! `1 A+ r Z' i, A8 t7 o: b }
% g5 y& |7 h5 E3 N /******************open screen clear(开屏式清屏)*********************/0 l2 ^. ]9 b3 s
. i3 i( s% N4 s, M& Y
void kcls(int x1,int x2,int y1,int y2)
9 G9 M5 X$ p9 | {
2 a# @- v% z9 ~. b int t,s,i,j;) x2 }* M4 B9 M' F; y6 o
t=s=(y1+y2)/2;
. {6 E# }+ \# ^ { for(;t<=y2;t++,s--). I) _. |) ~% T$ h- m
for(j=x1;j<x2;j++){
: Q. h3 _( _) `! p goto_xy(j,t);* q8 B5 Q( [, g$ `5 {' o9 F
putchar(' ');% P: }0 D K# b4 r- A' m
goto_xy(j,s);
: i" _4 X5 L6 {9 F putchar(' ');1 i% A) {, p0 D& N$ e0 J
delay(10);
. w4 {, g+ r* C! r6 J }. n" `4 V8 |* z( X0 }
}
6 Z4 [' [6 x7 ~2 M /*****************close screen clear*****闭幕式清屏*******************/
0 {( j9 v4 b1 }% g' R4 r
2 [; C& z! n4 ` t4 ^& T' b5 j) ?/ B& u void bcls(int x1,int x2,int y1,int y2)( k8 F! i* f4 b. k4 \2 `- }( J
{
4 Z5 k$ k# |9 f! g* D5 R int t,s,j;* m1 |9 {+ I6 U. Y1 ^/ @
t=y1;
' |3 i2 u: a0 w) b. d) V s=y2;
' J& W2 l4 P: x, e for(t=y1;t<(y1+y2)/2;t++,s--)7 i, _7 ~ [% w6 i* |% A, w
for(j=x1;j<x2;j++){
( k, [, q$ v: x8 t; r9 f4 o4 u goto_xy(j,t);+ X' ]+ b3 v' _
putchar(' ');; O) \0 l$ s( E$ f; ]6 r
goto_xy(j,s);
. {$ ]/ U3 n" p, n. Y( v$ x, V putchar(' ');# J/ A" S. i* I
delay(10);/ W1 C* \' S+ f' N, Y) \; [( A
}1 [6 T/ ^, {8 ?
}
4 G. D% a4 ~1 N /******************bottom screen clear(自下清屏)********************/
, |+ L! f& e# y3 F" B! F) r9 D
/ ]8 u( x4 ^4 j5 S void dcls(int x1,int x2,int y1,int y2)
$ h. x1 K7 {# i9 m( A {
7 [- I0 E, R! `% e# F2 F int t,s,j,i; F& x5 i1 Y" z: t
t=s=(y1+y2)/2;, o# k, W* Q& \5 Y+ g/ y/ F
for(j=x2;j>x1;j--). _- ]4 w9 i! u# G: ]$ F! l; }
for(i=y1;i<y2;i++){
) P6 e' o4 e/ ~- e' S8 G goto_xy(j,i);
' q6 V. t! c; m$ [1 }8 E+ z putchar(' ');2 K$ F) t2 r/ F' j+ n* _2 d4 s B
delay(10);
% B# q: S( t8 O! }7 }; f }
5 i# w: p# Q$ u: ~! w } D T* x0 _- e- Z, w
/******************设置光标子函数******************/6 R) @1 S0 M' ?* q' D
. Z! ^2 l$ k6 R% x3 W7 L+ }
void goto_xy(int x,int y)1 `% \& W7 S6 A, `3 ?
{
' B- f# J( |$ s8 ^5 N, @ union REGS r;& a3 {/ w& Y1 A9 n3 e
r.h.ah=2;" R- Y9 B, v. E4 X
r.h.dl=y;# Y/ Q6 i& s( g
r.h.dh=x;; u9 Q4 |0 `/ R' ]7 E! P( \
r.h.bh=0;+ e# c& L" k! `. |( Y7 r' u
int86(0x10,&r,&r);: U) y3 L. B) M0 E1 P ?' F6 g
}
. B; Y& q) s6 J& B
0 Q1 e$ _8 M5 I1 _% S" j Y /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 W0 t6 s2 y/ t- s" f
( @5 v* F4 F4 C3 d; T void puta(void) D. g' `+ i1 N& L+ \- l
{, k' @0 M K5 Y6 z8 |/ ^9 I
int i,j;) Y; {8 A' d8 r, l% D6 J( z3 B1 ^
for(i=0;i<24;i++){
X4 U" b8 o2 ? for(j=0;j<79;j++){
/ M, F0 k- E+ ^' @ goto_xy(i,j);
, Z3 \- C3 d8 W# s6 ]6 @6 h, d printf("a");
3 Q0 v. k+ D, g+ I ?2 \ }
! X9 R. \1 r0 d9 z; R- U! F( I O }0 z0 ?' R3 p' J* _ K' Z
} |
|