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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 Q% v: r( W1 l" u
& Y/ u% |$ v+ f/ }* @" a4 K
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 h. K! R; T: J' U
2 w$ k% t' F0 j, j0 |+ W 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: X2 w9 P8 H/ D F2 p 子函数及演示程序:
# p. ]0 P# M3 \ t- `2 L5 ]9 q$ B/ H# p1 g3 V
#include<stdio.h>) H; g8 a: A6 M$ c) y, m3 |% L: {7 U7 _
#include<dos.h>
, G R$ ~6 o3 ~; ^3 r, I, ? #include<conio.h>
) i5 s7 g4 L8 K% W2 E- k
( y" K: J& X5 v4 {, S, ?& q void goto_xy(int x,int y);
4 Q/ V$ C& A/ T" u: E; |* _ void dcls(int x1,int x2,int y1,int y2);
: N8 [/ @2 P3 J9 w+ e- X void bcls(int x1,int x2,int y1,int y2);8 c( z; Q7 v [( |- H5 Y1 _
void kcls(int x1,int x2,int y1,int y2);: n# {1 h1 G# Z5 h+ d; J5 C: ~8 }( X
void recls(int x1,int x2,int y1,int y2);6 L4 p& p' A# a3 @' [+ V+ k" d( [
void zcls(int x1,int x2,int y1,int y2);! z# r8 ]6 l3 t0 U; P
void puta(void);6 L0 u I9 e) o, B8 D. I
# U% }# q4 m9 H1 F
) A8 }) U8 h& c3 K7 Y /*--------------演示程序---------------------*/0 m( X% F! K& z* w- q1 _
main()# i0 _% x3 v+ m0 W' Z+ e. N- L
{; b1 ~. m4 A6 `2 e% w5 }( ~) n
puta();
6 C; s* z' ]$ a( S- Y# C; d2 Y* N" W: L getch();, f2 F6 ]. G; L; j
dcls(0,4,0,79);% t$ S6 E& F) _! T3 i8 l
getch();
% L5 C7 Y. ~+ ^( B puta();
6 D8 \# D6 p; ^$ n0 @: h getch();. c* a( x+ u; s- ?9 w( J
bcls(0,25,0,79);
$ b0 _4 m! K) P- ~* r P getch();# u8 X3 n) \; S9 \2 e
puta();
* y; V7 \* x( x/ d/ q. | getch();5 z; s- H: [2 L* K. j
zcls(0,25,0,79);2 q- K' [, e s4 X! I* J: b
getch();' G. t2 D$ t, x) W3 Y
}
' ]/ A2 e+ i+ K5 J$ B /*********center clear screen(中心清屏)***********/0 T9 @9 w! V2 p/ y
void zcls(int x1,int x2,int y1,int y2)* m+ S+ L) O- g o
{0 x& I8 t5 K- E6 X" d9 z$ y; u% {
int x00,y00,x0,y0,i,d;
6 l( H3 E. `9 y if((y2-y1)>(x2-x1)){
% [* N5 }: ?; s/ [/ C d=(x2-x1)/2;
6 Q6 d+ N% H5 B' _% V8 M x0=(x1+x2)/2;/ R. x7 m- t: t5 @5 y& L
y0=y1+d;$ k7 K) r( q, @+ R6 Q( C5 W B5 f4 V
y00=y2-d;( m# M' d, {8 \2 o- \
for(i=0;i<(d+1);i++)
; ?& b% ^! Y5 L) {3 H+ C: ?1 H& f recls((x0-i),(x00+i),(y0-i),(y00+i));
- P! ~: S8 ]9 n6 g1 F delay(10);
: ?! O+ q; `* H7 K; a }
5 F5 g3 z5 m) i. j' v else{
1 g; W5 z% @% @% }. v d=(y2-y1)/2;
4 T# `' K" [' G$ F9 z2 H y0=(y1+y2)/2;# S- L% e+ @2 L0 z0 i4 k# B& X
x0=x1+d;9 w( [: F/ I. N; u
x00=x2-d;
! `# ^1 ? k. a* t+ a- X for(i=0;i<d+1;i++)
- A X) d! H) O* b+ M# G recls(x0-i,x00+i,y0-i,y00+i);: U9 Z$ k; R5 b. G5 M( q& ]! c6 @" T
delay(10);. y/ r/ I: a" P% ~; w% m
}6 {' q* z3 a/ u
}- a4 r. k- l% t* K+ Q
- V- M9 j, Z/ \
/************* clear rectangle side(矩形边清屏)***********************/
( w9 Q: S. \& `. e
' i6 ]0 ^0 p! q. w! Z void recls(int x1,int x2,int y1,int y2), K; s# j V3 V
{7 v! q2 n- }) t
int i,j;" h. L$ {, j8 N, N
for(i=y1;i<y2;i++){
& i+ N, v' v1 T' f1 f goto_xy(x1,i);7 y/ J" I- W6 W, f6 |
putchar(' ');9 J' `) g; D* ?* l L
goto_xy(x2,i);* E% M ?4 ?$ X: C) B
putchar(' ');8 Q. D" N0 f( q7 w; k9 v1 C( J
delay(10);4 m' _; V+ Y4 Z& B* t1 n% `$ ?! ^
}
$ z) s' T5 t( q" |$ ^ for(j=x1;j<x2;j++){
2 z& m" d. s J+ ]: H goto_xy(i,y1);
8 F1 p7 v3 h+ S- C& ] putchar(' ');5 y- f3 C/ R0 U R# \
goto_xy(j,y2);
5 \' D& X& H" B) C" Y) q putchar(' ');
, ?9 n) w) a! S$ ?3 E3 b delay(10);6 }* Q- ~9 X. _' ?) K
}/ O( _$ c( Z3 g0 j8 {
}
. d# t5 W- s# s /******************open screen clear(开屏式清屏)*********************/. {8 K7 z2 x9 A# ^9 f
' A5 X! t! d; M6 Q! D$ C void kcls(int x1,int x2,int y1,int y2), v* U. B0 s5 t, O
{) T# C. j' @+ ~ ]0 a" x
int t,s,i,j;% p, O6 O4 R( B7 C7 u
t=s=(y1+y2)/2;
7 i" p: B% B; N- d- h* k$ B1 F for(;t<=y2;t++,s--)
4 [ C& [: K6 @) A; C for(j=x1;j<x2;j++){. E1 c P& k( W9 k
goto_xy(j,t);
+ v5 C- K4 V V# @$ _% a putchar(' ');/ W7 f, T# `' a" Q/ e/ k
goto_xy(j,s);
6 {3 ~- R& d$ f putchar(' ');. K( y6 ~- B1 S
delay(10);: j. I/ C* T. y! k1 R* U" u! }( S3 C
}
/ d! b# e3 m& ~9 I3 j* M1 B }
" K9 g; Q- G4 f2 D% ]5 p! W /*****************close screen clear*****闭幕式清屏*******************/" Q+ J A; O7 q- |( \
! {: a1 ]3 h1 [
void bcls(int x1,int x2,int y1,int y2)
! t+ l+ p3 \. K. ^( o {
) Y8 ?7 ^0 `. Z5 G8 V8 s$ o int t,s,j;( M* m |# E- n3 H" [
t=y1;' l4 W0 n ]4 s( ~7 K# z5 v
s=y2;
. Z O( I( w/ E) ]2 n for(t=y1;t<(y1+y2)/2;t++,s--)$ E3 M; Q6 F9 G4 G0 g& _- r
for(j=x1;j<x2;j++){: S. [! s# w6 w6 {: ]* O4 ]6 G6 z6 k
goto_xy(j,t);
% h- F3 T u4 x0 O- ^/ ` putchar(' ');
- Q# h9 U) N% M) u7 ~4 V& d+ h goto_xy(j,s);
1 ]2 j7 M/ ~* [/ k8 N8 @( x8 X putchar(' ');
j8 f; N# g5 e5 A delay(10);% d, A! ~5 F6 |* _( P% Z9 U
}
% E" S* f( F' D" a) q }
+ L# D" V. O8 C% \ /******************bottom screen clear(自下清屏)********************/2 b, p/ ]9 d+ h4 K( O8 R
$ H9 p! P4 l" t) m L2 e0 O9 N
void dcls(int x1,int x2,int y1,int y2)+ G- U2 S1 ~1 S. H: W$ [' Q
{
# k h7 l0 m1 W" p int t,s,j,i;1 \$ W9 c. T5 f- V: [
t=s=(y1+y2)/2;
+ U" `9 f8 b6 j: ]. r4 A8 M. j! s for(j=x2;j>x1;j--)9 t! P! X/ G7 R7 ]7 d s: h
for(i=y1;i<y2;i++){
1 S# t* O ?* o5 x3 T* R9 d goto_xy(j,i);
- |8 @) H3 D l6 `+ X putchar(' ');
5 v$ {# U" ]0 l; L* c delay(10);4 _9 l8 t$ W/ Z7 w& j
}
# d8 a# Q+ T" C# c3 } A- n }
/ c: _* |3 K- _' t, A /******************设置光标子函数******************/& w, v2 I* C' C+ g5 I
7 E/ u7 t0 [! r' @! c) o$ E; {, K void goto_xy(int x,int y)
9 l& T5 h2 v1 b) q+ R* Y" L {
2 `. j' Y5 m, c% g8 @ union REGS r;
, x' T; e# ~! b, L r.h.ah=2;
( k v1 M8 h. Q9 I r.h.dl=y;
6 ]) W! D) }% G% p s r.h.dh=x;. ~0 C' V/ H4 O
r.h.bh=0;1 D1 n; @4 T1 \, @5 S" i
int86(0x10,&r,&r);& Q) [: y, X+ ], o
}4 ~7 ?# M# x3 e6 h8 V4 {
[( x6 O! ]# f0 c( I+ B
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
( P+ @6 m. B. A' L" q5 Z4 A. H' n; m& v* Q: Y3 Q* H$ R
void puta(void)
5 E- \" ^& f, [! x% a2 D3 u {
, N8 ^# [4 v7 G' ^4 t) Z; n! O7 R int i,j;, G; O; a+ Q! R9 {1 J7 x
for(i=0;i<24;i++){
' N7 {; z% P9 J# J4 X+ M for(j=0;j<79;j++){& _- V4 b) G n' J, O
goto_xy(i,j);
5 Y9 b# p/ t% ] printf("a");* f3 J* `$ ?2 s! L
}4 O: J; n* A i) n; n' E
}, G7 F6 E- h9 z0 U7 D5 Z% p' @
} |
|