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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,2 n6 _: q/ z' T/ n* ?
3 {1 Q# l" \5 J+ X1 B 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 L$ V4 A% g- y3 R7 @% U
; K# \7 |5 B! H; s. ~4 g9 b
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : R& v9 }, d! w/ c% T# B' _
子函数及演示程序:" B7 D9 n( F$ L* L7 C& u0 C% U
3 H& _5 g" }) {7 K #include<stdio.h>
) A5 e8 p! m! R: p' F; s #include<dos.h>
{7 r0 S q* {; W0 ?( r #include<conio.h>
8 ?- ~( U4 E& R) N: P# D( a$ l4 f; h/ B7 a4 ]* x
void goto_xy(int x,int y);8 r- _2 ]' E4 c& @
void dcls(int x1,int x2,int y1,int y2);
5 E* V: [- `7 S5 M* x- j9 T( u' h/ X" [2 E void bcls(int x1,int x2,int y1,int y2);
B' ~: A- N& w1 A void kcls(int x1,int x2,int y1,int y2);7 }- ~' v5 G1 K* v; z1 n
void recls(int x1,int x2,int y1,int y2);
- Y- i8 i$ o& K void zcls(int x1,int x2,int y1,int y2);
3 O2 O* ?/ q" t' K void puta(void);
; k% l: ?) Z+ |: W+ O
; W/ ~0 I. G, c4 B" a
5 f: a! ~# }: l* M /*--------------演示程序---------------------*/8 b' `9 D2 ]$ h
main()/ s, r ` O$ ^( \
{
+ j+ g0 W; e2 O# ` puta();
3 k3 E7 a* S$ g7 b getch();$ j% u1 _" [7 L6 h. _$ z/ W
dcls(0,4,0,79);
/ L3 a' J" D9 s, S: f5 D0 p1 [ getch();
4 Z7 F/ L4 p* m4 \; ~ puta();
! f6 c* Y9 D9 e" } getch();; l0 A" s* K( A: ]/ ^
bcls(0,25,0,79);
# k( {2 A) u6 [) _; p5 ?4 | getch();
+ v5 w2 L% U- E3 N; I* B- n puta();8 z0 {" o& c" d; }% N: X$ ^/ d
getch();$ ~# j& c' a) A/ w% q9 P
zcls(0,25,0,79);. \9 [' A) h8 D1 J
getch();
, o0 a2 A; A f5 U5 C0 u0 m }
, m O8 Q- f8 ?; d4 Y) R /*********center clear screen(中心清屏)***********/0 {; `& w. `8 K
void zcls(int x1,int x2,int y1,int y2)/ s: f0 c1 R2 x5 V2 Z' E
{& H1 M/ Y/ y K5 C S/ X' U
int x00,y00,x0,y0,i,d;
) A8 E: c" i' j! M( C( [/ Z8 ] if((y2-y1)>(x2-x1)){( B4 J) R( R( t- W( v2 h" |8 j7 y
d=(x2-x1)/2;9 p; V# }/ y% z9 S
x0=(x1+x2)/2;+ x$ Q, w# a9 C0 {; r+ b
y0=y1+d;
7 z$ D9 n! W6 X8 r n& c" C; s" S y00=y2-d;& r- _( _7 @, S3 r, B3 E
for(i=0;i<(d+1);i++)
% V+ V: y; e. c" H/ v! Y recls((x0-i),(x00+i),(y0-i),(y00+i));
0 C4 S2 @* A. P6 L5 I4 H delay(10);2 N7 P4 r% B4 g# `% ^# @
}
9 I" d) F4 A9 ^ X* E else{( H5 z) v; A$ L; G% I# Z9 d
d=(y2-y1)/2;: e/ l6 K9 S0 C$ R: E7 a
y0=(y1+y2)/2;4 z/ o$ D0 w0 {% B* [7 j0 b
x0=x1+d;: f% K# s! ]) r+ l/ l
x00=x2-d;
; T! U9 B% C; }7 l \- y for(i=0;i<d+1;i++)7 I( y) K; R, o1 x! }3 P. D
recls(x0-i,x00+i,y0-i,y00+i);# T% W, b7 X9 G
delay(10);
; {/ D" b2 n$ p }
2 Z. U; Z" z% I. I* Z l( N }1 _. K! ?+ Q p4 W0 V, {" M
" G& N9 c1 \' f; q /************* clear rectangle side(矩形边清屏)***********************/' O! a' s7 h) u: Q: I7 w, y
/ ~. c r2 z" p6 Z$ a6 ^ void recls(int x1,int x2,int y1,int y2)
. T5 m1 o! ~# P3 h7 B) D {$ Z" P* d v& ^% B3 Y2 n! ^' @1 g9 i
int i,j;# H' K6 I7 I8 q5 r( ?2 B
for(i=y1;i<y2;i++){, E& \+ j7 C: \5 k' o Q# z# B
goto_xy(x1,i);
* p6 k( I! M2 X# H0 U) @. A, k$ J putchar(' ');* q1 X: m$ z, B
goto_xy(x2,i);
' @1 l) X O0 n$ w3 q$ V: Q* W M putchar(' '); M5 e+ o& n; T' x6 J0 L9 W
delay(10);
: e- L$ a5 Q8 {( p: C }2 e# ^: `/ J% I
for(j=x1;j<x2;j++){
+ J( H8 G+ L* |4 `' k R goto_xy(i,y1);
* h# S) |9 P# E putchar(' ');. j; D7 x0 C1 {4 I
goto_xy(j,y2);
# U% O( a! y1 N putchar(' ');# S1 b$ ^. P5 d, t- h
delay(10);
+ f3 x. f7 x/ Y5 f+ w" \ }
5 t! g8 G6 |2 |' b( e" M } s. G* ?9 {5 W3 Y2 e
/******************open screen clear(开屏式清屏)*********************/
4 M7 ]. y0 l/ S4 a/ k
2 @' x0 z+ M3 C% J# m! G void kcls(int x1,int x2,int y1,int y2)
/ h1 [" \ D/ H( j5 e {8 R/ F* s" d: M1 O) h& x* ?
int t,s,i,j;! I2 I% C; ]: {- y
t=s=(y1+y2)/2;
. B6 k/ ^( r, f. I/ ~3 ? l) V9 E$ P for(;t<=y2;t++,s--)
9 P' ~! R% f+ k. t8 G2 F. Z6 F3 j for(j=x1;j<x2;j++){* }& w4 V) W' J3 I/ I
goto_xy(j,t);
0 y7 b5 V6 o \& Q8 E& l7 U putchar(' ');7 z( ?* K) ?7 V, p, E. M5 u' N
goto_xy(j,s);
6 A i& ?3 T5 k M) J; D1 [ putchar(' ');
. h3 B% L) V+ P/ V2 `" I7 }7 I delay(10);8 I5 D9 g. N% z7 H( ^- m
}/ I- d4 |' h; D9 }! O/ O
}
+ @8 p- R! a& f /*****************close screen clear*****闭幕式清屏*******************/
- O" G2 q4 T1 P8 R, ^" y7 B
' I3 {$ H" S8 I0 z) A0 b% w8 g3 g void bcls(int x1,int x2,int y1,int y2)
; [/ Q2 [% E. m! L1 e n) c2 J& t" V {# ^4 f0 T3 s& c j* _
int t,s,j;+ e5 |2 X5 A1 q; _# P& d, I! E; I; [
t=y1;" D/ i& q1 c3 r+ `
s=y2;
( P" d! }( G6 H& M# J: h for(t=y1;t<(y1+y2)/2;t++,s--)5 N. I6 e+ Z1 f4 @7 v. x4 m5 K" S
for(j=x1;j<x2;j++){
8 m4 E4 O4 q8 L; B. | g goto_xy(j,t);
9 f8 @7 U: U+ d$ O3 Y7 T putchar(' ');
& t; n0 w/ o* {9 D2 s goto_xy(j,s);0 f$ X0 B$ T; g* \1 h
putchar(' '); T) L2 i" k5 _- @4 z3 j0 c( S
delay(10);: x2 M# [$ J/ |9 j% w4 c
}
A, c( i! X7 F* t: Q1 o1 ~9 q }
3 O6 Q1 k. r! P1 T! i, o j /******************bottom screen clear(自下清屏)********************/
6 Z1 n2 c/ A8 [. N5 x& d4 {! x3 b, h. Z
void dcls(int x1,int x2,int y1,int y2), [1 T+ z2 n9 H( ]' E: X+ L# Z
{
6 J6 W0 J& K4 g: u; @( K0 h int t,s,j,i;* I- L' g6 w% U$ M: A9 L$ ], E
t=s=(y1+y2)/2; l1 r0 T& h2 r' H( Y8 p% d4 v& U
for(j=x2;j>x1;j--)/ F3 q, z+ R* N, Z- l
for(i=y1;i<y2;i++){" b! I# u3 V- }) h3 a* v1 `, ^
goto_xy(j,i);
. z1 m) Y+ ^; z! W4 ?/ i0 c putchar(' ');
5 L( O( O+ z; H; u. n( M1 ^5 q1 J delay(10);' a. {5 Z( Z) }
}0 H& `+ L4 D0 m5 h+ b% ]
}, `1 K5 d; K7 j
/******************设置光标子函数******************/% C# ~! g8 N$ Y8 V! ]) n3 m
^: j- D# @- I4 F. w
void goto_xy(int x,int y)
- |+ n0 M/ y6 [9 M {- y' T- [: h3 c9 J
union REGS r;& v/ E( k' B. r( S# q! `
r.h.ah=2;4 [' ]& u. s t
r.h.dl=y;" I0 i# p. I/ k1 @, a
r.h.dh=x;8 a! p. Z; i: p
r.h.bh=0;
; e* e4 d4 M4 N; c; c5 y int86(0x10,&r,&r);
7 q/ `- O3 g* _* x }+ d- C B$ M) U# M
4 N, O# \& e) V" w2 ] /**********************在屏幕上打出一连串的a字母用于演示程序******************/- n) |' |. {: R$ K5 [+ g+ \# \: \
A8 q: B5 J d K void puta(void)& ]) c0 l7 N% a8 D
{' }; I5 \- z) ^
int i,j;& f: a' m! [( {8 }( ~
for(i=0;i<24;i++){* N D& B5 S* ~) x
for(j=0;j<79;j++){ ?* |- \3 t1 t: l, v5 ] U
goto_xy(i,j);
& J* x1 F ~! K2 b1 _ printf("a");
3 u+ h8 g( u7 F( r. m- N% c. e }
) W% v1 D( [2 Z4 u5 _) D }7 \* k [9 b1 u/ n$ j# A
} |
|