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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% e/ U4 a# _! q0 W! I4 q' h7 W+ q6 q: E; w; A& W
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. c Z3 u2 {+ m. n' O+ X+ W; c
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 f& ~) U! ^4 E. [/ I" s$ F
子函数及演示程序:) ~4 }1 i3 U7 N7 W$ [1 L; L0 v/ _
8 C, e% W( H, f/ m7 m( | #include<stdio.h>
$ M: D. O2 M. w& g; X+ w #include<dos.h>
7 Q- z" H3 x; l/ p }7 A! E #include<conio.h>3 g u0 |$ E5 T1 I$ h- z) b
! G) {# G) W2 N7 B$ q! B+ M! Q void goto_xy(int x,int y);
3 z) |5 _% Y6 `) [ P void dcls(int x1,int x2,int y1,int y2);; E# Q& N# g. _& r3 f
void bcls(int x1,int x2,int y1,int y2);
6 T" ~! B; l; K" j) q$ G$ r void kcls(int x1,int x2,int y1,int y2);
" G7 ^; t7 Z& J7 R void recls(int x1,int x2,int y1,int y2);% r" f* o% k# l8 z9 W/ F
void zcls(int x1,int x2,int y1,int y2);; N5 ]1 Z/ C/ Q1 z; r- i
void puta(void);
0 ]+ e9 p$ c; g2 w" W6 f+ A6 a
4 F6 F2 |5 \: J6 d8 x2 O5 d( Z& W7 j* U. u
/*--------------演示程序---------------------*/
( K n, I% l. o0 u) O# n main()7 ?2 \2 r, o6 P, @& M1 ]7 W
{+ H. n9 Q: F B' z R
puta();
- G* b# A P2 }/ z! m$ S/ E getch();% L/ T6 {$ }3 q' C
dcls(0,4,0,79);
( d. Y" k' g5 E* u getch();# D8 p% N1 a7 S! a5 f
puta();
3 U! G B: c; _. I) B+ u/ f2 Z getch();
) ~! K7 @8 @* b9 Q bcls(0,25,0,79);5 ]5 E& x) E. ]/ s5 e" O' M1 r. Z
getch();
5 N" A* X5 k" o8 k/ Z puta();2 ?. t1 c/ M) U) W
getch();* v$ G7 w" v: J8 [9 L
zcls(0,25,0,79);
0 U' A. m: N' w: n* R/ t( A2 D getch();
; N0 X4 ]: s( R0 Y }, [5 P8 v5 Y" }* l6 j. O$ Q7 W
/*********center clear screen(中心清屏)***********/
) \/ r6 n* L9 J% z void zcls(int x1,int x2,int y1,int y2)( ]1 M0 o' F; R: y$ [' l4 U
{
0 i3 H9 r( H d4 G int x00,y00,x0,y0,i,d;
$ o5 l8 R. Q. {" P, C9 u4 O if((y2-y1)>(x2-x1)){6 }4 ?1 P$ Y( v& j+ Y, ^! l+ K
d=(x2-x1)/2;. l5 G5 p! ?) Q" }: c! _4 \, z4 B! d9 C/ Y
x0=(x1+x2)/2;
8 e; E) Y2 L! a A/ F3 h y0=y1+d;' V6 @7 r( W: |8 j! o9 K8 g
y00=y2-d;# ]9 Y4 v' N# B2 X
for(i=0;i<(d+1);i++)
! S& h, b5 x6 M6 ] s( T8 y! S recls((x0-i),(x00+i),(y0-i),(y00+i));, j: W4 {1 j1 y1 l
delay(10);
N: X; e, |7 x4 `5 {. V) T }# [5 t% k$ u$ r
else{
& ?2 c _; X# _% ~2 ?- s d=(y2-y1)/2;
4 y$ F4 @; l3 K- x3 T" p y0=(y1+y2)/2;$ R6 [- X" V8 @6 [
x0=x1+d;
7 I+ u; i5 V7 U1 v' [: b x00=x2-d;6 v6 Y( Z J1 k# Q6 [
for(i=0;i<d+1;i++)
& F( F9 {. h Y4 t recls(x0-i,x00+i,y0-i,y00+i);
/ C' p0 T1 z& W* v( b6 S% W delay(10);. ]7 v. ]1 G* p: h0 ^* {# u5 A& |
}5 o- G+ S$ {( m8 p
}' b8 v. A# P p7 W5 b' H$ `0 [
/ Y, P: K# w8 |4 ~- K$ J& u /************* clear rectangle side(矩形边清屏)***********************/3 T' Z+ `6 N s* u8 }" A5 @# ^$ s+ i7 c
) d1 h4 M5 G; c5 @. M }! _ void recls(int x1,int x2,int y1,int y2)
- c5 R, P8 ~5 Y8 v7 k {3 J; x5 ?6 l- ~) n0 ~
int i,j;0 Z4 n' Y0 b* L4 c
for(i=y1;i<y2;i++){1 S7 ? s( U; B' G
goto_xy(x1,i);
0 M5 Z2 t5 h: N7 L8 {2 O5 Z putchar(' ');
3 L# [, W8 a" X- W3 T3 O5 ` goto_xy(x2,i);2 y3 |& z. M7 l- Y S0 P) G
putchar(' ');/ W2 J4 ~1 Z3 r! b% S) l
delay(10);
3 T2 u* {1 Z% k( a/ ?9 U, r }
2 x# O4 k a) D6 c# ?9 y: L for(j=x1;j<x2;j++){! G* R8 h! F- e5 L. ?. u1 Y5 Z
goto_xy(i,y1);1 N+ X) N% U } d Y7 `( H
putchar(' ');6 h" ?/ }$ s) `
goto_xy(j,y2);- q+ W6 @: {8 n1 i4 q
putchar(' ');
4 u+ a7 y# W2 B: O# N5 M. q delay(10);* j- D- G5 J& {' q( e5 Y5 u; s
}
3 A A8 p" A8 z' a, D }
" y. E+ {/ }6 h9 o# r x4 N; R, {( | /******************open screen clear(开屏式清屏)*********************/
) N% l/ I9 m) m9 d. h5 W! U
5 m+ T2 ]2 h& J9 P6 ^, V void kcls(int x1,int x2,int y1,int y2)
: Q9 K( K2 a+ f7 r: Z, H A {
' @1 ?% f9 V% D) e! g/ ~% v int t,s,i,j;
1 g5 t2 f2 B. x& e* A4 R' | t=s=(y1+y2)/2;
% C: D6 Y9 Y/ f0 P3 q for(;t<=y2;t++,s--) A) c4 y2 ~: q
for(j=x1;j<x2;j++){
w! h) X1 |7 d! K. Q' U$ K C, d6 w2 @ goto_xy(j,t);1 i; d) q' f8 c5 [9 ?
putchar(' ');8 c, B9 o6 X- {3 p, X. x
goto_xy(j,s);' j( g# Z- X8 [) n: ? {
putchar(' ');6 f3 `! b# j+ Q) A- s) I }
delay(10);/ ^, E1 x& R" V: W2 }
}$ ]+ a' m' t$ |; F9 B
}/ D. b+ o& ]1 I6 @" M! c
/*****************close screen clear*****闭幕式清屏*******************/8 X0 h. n0 f8 v4 H+ G( J
v; _9 T. ]/ z4 \$ m void bcls(int x1,int x2,int y1,int y2)& S1 \0 N8 p R, Z. N; {8 T- ]3 g
{
U% s" k" G+ i% C# @ int t,s,j;' a- T0 z5 C5 `' b; t
t=y1;
2 h. K+ {; Y. C s=y2;& ~1 V7 z* c$ [" l
for(t=y1;t<(y1+y2)/2;t++,s--)
3 c: N0 u. E* q# K for(j=x1;j<x2;j++){, L. J0 w/ f/ O" l9 a
goto_xy(j,t);
% a' ^8 z) I7 g, S putchar(' ');
. m7 `% Z* {6 X5 f# `" t# k goto_xy(j,s);8 \) B7 U3 t, V0 u1 T
putchar(' ');( |, [) ~- }4 K/ R/ C, `" \) u
delay(10);
% \! Q4 j5 X& F- W# m* V }
K; p; j4 V. s% U, v }% P* h) f' U/ I4 {/ W Y
/******************bottom screen clear(自下清屏)********************/
# @$ Y$ [- f7 @' n0 d# u* Q! H' Q7 g" w; x! s* I
void dcls(int x1,int x2,int y1,int y2)
2 Q' N% u1 D8 Y0 G* p6 P { P8 }0 ], I3 E! B [, w( b
int t,s,j,i;
8 B/ U* V) @7 _* L5 \- _7 b t=s=(y1+y2)/2;
( @! t& u* |( a4 [4 l0 N" B for(j=x2;j>x1;j--)
! g% t( O( V. T" M2 z9 Y for(i=y1;i<y2;i++){6 p8 ~' W/ d; n+ w0 R( U
goto_xy(j,i);
/ ?7 [- ~' I" o5 J! }- P% C putchar(' ');
; k6 w5 W: x' I delay(10);$ A' { F5 [' Y, ^; `& S
}7 |- }- [% ]1 P( {# ]
}
$ i P+ ^; Q2 m: s0 x, \2 Y7 b3 l, d /******************设置光标子函数******************/
6 R9 R% i1 Q: r5 d
2 g; C( T0 H# p! v* {' ]" O2 V void goto_xy(int x,int y)! B" v1 p6 {) p$ U! c$ H
{- s1 i5 x3 N2 @( R f! Z9 p( P
union REGS r;4 ?- i3 [% l+ r+ d
r.h.ah=2;
' N" R) F* m( M. F9 @4 Z$ w r.h.dl=y;
& |- X5 d" z: i r.h.dh=x;- F# c; D$ G2 a9 }) Z
r.h.bh=0;% ?* p% U4 g- a
int86(0x10,&r,&r);
6 C8 X9 K, P/ O6 b6 z* _ }* c$ C3 }* x# F) b8 g+ M
% v6 j# f7 }, ?" f /**********************在屏幕上打出一连串的a字母用于演示程序******************/+ i/ Z8 F1 ]% C# x1 J. e
( W, f0 g# n: m! X
void puta(void)
" e+ }9 o, T( k: w& K! F @ {
6 N% S" S! ^1 h7 l- K1 f! E& Y8 G int i,j;4 E* R4 P( |9 z+ D) z
for(i=0;i<24;i++){
1 j- r8 [3 ]9 G$ { for(j=0;j<79;j++){" C& J8 s' F2 x! v
goto_xy(i,j);
: m A. d* N" x printf("a");
1 o; i- e# ~( ?% N0 } _ }
, \% u2 h5 M+ P. M0 {4 o: l }- f3 J2 Y ~5 H7 G% Z7 ?
} |
|