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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) d, ?! F* u" d c7 g
( i# v6 m: f0 p: g4 _7 F0 C* a
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* M$ J X; D8 @5 Q' S4 l# w8 Z; e$ w7 j" s( i! |# c7 z3 }
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & b* u, A$ j- d% r( A
子函数及演示程序:/ I# b4 y# ?5 M( [9 d) d
$ G9 C! f$ O q6 y/ |
#include<stdio.h>8 q* _5 R0 P! a
#include<dos.h>2 J9 R7 ~. o) s0 ^
#include<conio.h>9 l5 g- w9 k5 |8 I( K5 N3 P
" ~8 v M ?8 s ?9 \) P
void goto_xy(int x,int y);* K# Y# j" r" F$ B1 V8 `) w
void dcls(int x1,int x2,int y1,int y2);# Z, e8 S& }4 |7 C- m- U! O
void bcls(int x1,int x2,int y1,int y2);
$ k9 i( T) ^+ G" X void kcls(int x1,int x2,int y1,int y2);0 ]6 y% j3 ^ Q9 S
void recls(int x1,int x2,int y1,int y2);
, @$ d; A6 U3 y d void zcls(int x1,int x2,int y1,int y2);
9 M9 j/ V6 ?1 @5 E2 i! q void puta(void);4 d, B D. U/ v! H
0 [$ R) f0 K0 `( v% y& u+ o& b: ]7 j' a4 q$ f3 q' I
/*--------------演示程序---------------------*/1 V. S: ^/ `# H
main()
3 s# z) s# ]0 ~ {
* E' v J' I4 n6 W3 [9 V% W puta();
4 g7 D4 T) ~% o2 n9 i k8 E r1 \9 B( } getch();% E: K# J( y! R1 a7 [+ y K
dcls(0,4,0,79);1 Z2 c, F1 E+ \
getch();
% y2 p7 P' t- ]1 F- t& B3 s( V0 A puta();
; X6 j. X! c7 V7 S+ |: Q. `( R/ O7 k getch();
2 T6 N0 \0 d% v bcls(0,25,0,79);0 \: p/ N( }! Z0 a$ c8 D( B& `
getch();
3 F# S' b m4 x! j, |/ D puta();
+ v# ^3 V7 U0 ~; m0 ^& o% J getch();3 |/ A @0 i6 o' f+ |- y) x
zcls(0,25,0,79);
4 ~) w* ^ c1 E) X getch();/ R9 x* _& O! ?) r, y# L
}
1 t7 S& ]8 {( K8 P /*********center clear screen(中心清屏)***********/* J; c3 {4 K5 f K
void zcls(int x1,int x2,int y1,int y2)
3 |2 ], @/ q8 r& h6 T {
% o) S* K$ Z$ I4 r: v+ r int x00,y00,x0,y0,i,d;5 s) @+ j% I* M: M: P
if((y2-y1)>(x2-x1)){% y8 \# ^' G, e, l
d=(x2-x1)/2;
- a8 Z! D W4 s, E x0=(x1+x2)/2;
2 E( j: m" g4 d- R$ h4 v y0=y1+d;. t# o9 v0 ?1 f6 }* P6 e
y00=y2-d;
: y5 P3 r4 `! ], r+ ]2 ^# D for(i=0;i<(d+1);i++)2 {& r6 ?8 G' J$ c; e
recls((x0-i),(x00+i),(y0-i),(y00+i));! E' T* N+ M+ {) H
delay(10);3 j1 Y+ y4 B% V
}
& I% g6 b6 T) _5 y! Q( ^( d else{( @$ M1 l; X0 \- S# y( I
d=(y2-y1)/2;4 D- ^9 _; S' m1 B9 r M9 x& v
y0=(y1+y2)/2;
( R2 E0 k9 X4 u% @' ]% p5 O x0=x1+d;) @4 \$ N' |) a' _ m; l9 |7 U
x00=x2-d;
; `* |% z; M7 s3 m: { for(i=0;i<d+1;i++)4 ?, S5 c2 y4 c2 Z K
recls(x0-i,x00+i,y0-i,y00+i);0 b0 p6 c1 M3 x8 k
delay(10);6 Y1 p, J% t1 W* `
}' a$ U' S$ v% s3 j5 W
}
5 x8 X$ O2 u5 f9 w( j, ?" ^$ j
b! n3 h% e! L+ V, i% Q /************* clear rectangle side(矩形边清屏)***********************/
2 n* ]3 G2 l' i' Q
' a" L% ]4 q% p) m. a) Z, x# T2 L void recls(int x1,int x2,int y1,int y2), F. s9 T# w- B& ~5 |' R1 a
{
5 F# j; [( {6 h5 ` int i,j;8 n% l% M$ C0 B$ G
for(i=y1;i<y2;i++){
# z( v% L1 ~" f goto_xy(x1,i);/ M. P3 |8 P: m# z0 o5 E
putchar(' ');1 @7 W2 u* [! Q0 \4 K5 Z/ l' K' l
goto_xy(x2,i);
6 J' v0 a4 w6 \ putchar(' ');0 i6 |% T: ^9 s4 O/ |; j. k
delay(10);
- v. V9 Y |. p3 ~ }& `& C3 _- E9 _# j. _' W g# ~ r
for(j=x1;j<x2;j++){7 U7 I+ N _' B0 f. u! D3 F) V6 P
goto_xy(i,y1);
: ?9 W. H8 q1 |4 B putchar(' ');2 r+ \9 b! f' K$ b2 E& \
goto_xy(j,y2);4 @3 K. C8 o4 b3 M3 f
putchar(' ');
, a/ a- J" @* w delay(10);2 M4 ^* K$ D/ p% Z; R
}3 H: H8 s2 x E
}
) {9 d5 u4 r% A" ] f. z /******************open screen clear(开屏式清屏)*********************/
/ |) K5 |! S7 @3 y, W+ @/ t4 D( A. h _8 k) u$ q+ f/ z$ h3 C8 ?
void kcls(int x1,int x2,int y1,int y2)
! B$ g$ X T% y' A3 s% x0 @/ f% u {' @+ g) Y& j) y; e3 z( ?
int t,s,i,j;' Y. G# f+ M1 p3 k
t=s=(y1+y2)/2;6 x2 ^9 a7 R$ e) t7 c' R& H& `
for(;t<=y2;t++,s--); C) [- T2 e7 l: p- Z8 O. U* @
for(j=x1;j<x2;j++){! i7 `5 E4 K P, U4 n
goto_xy(j,t);
+ b) I' ^# _& [- X6 {- G putchar(' ');
( ?2 y* }6 a% N4 y. P6 e+ x3 k goto_xy(j,s);8 i P8 N: J: X( o6 o6 y
putchar(' ');
i* M/ k* N* a; [ delay(10);
) M7 Y% I6 l$ ^1 N* H }6 B. L8 {8 u. Y& _( W0 N, X' X; A+ {# g5 I
}3 m; R6 ?/ c* F4 S8 r1 l8 e( V
/*****************close screen clear*****闭幕式清屏*******************// i8 o4 ~6 P t, g
2 p* y3 F0 `) r- O7 }9 L* w
void bcls(int x1,int x2,int y1,int y2)
9 A# N. K$ z0 M$ V {5 U8 e* O% o& o( K
int t,s,j;0 X m0 V4 f' M7 @ B) K
t=y1;
3 |1 f9 N- Z- J6 S/ \( E: t, s s=y2;
2 \3 v4 T7 q. p8 e for(t=y1;t<(y1+y2)/2;t++,s--)8 ?# D9 c, Q) U4 d9 s
for(j=x1;j<x2;j++){# s) J5 e* V8 n9 h6 Z
goto_xy(j,t);9 g- `( b; k9 m
putchar(' ');
( R6 N& n, I. D) [( y7 f/ A: F goto_xy(j,s);
( |. z' I; t% Q% r1 c) _ putchar(' ');# i0 ?* u# b/ t( p: S" I
delay(10);
; E+ ^1 ?& [: D$ B+ q }
9 j. e) x: P# K }3 V3 i( H6 o; ^$ n8 w
/******************bottom screen clear(自下清屏)********************/# D; I }8 a, T1 f) b& s+ h
o$ W# Y# O& Q1 I" M# d% ^ void dcls(int x1,int x2,int y1,int y2)
. Z! T+ ]. I: E5 e {
+ W8 `* y% ?6 _9 x0 j$ z int t,s,j,i;
- e* W. e( V0 \" V& |5 K3 b t=s=(y1+y2)/2;6 H6 v( W g3 @' i* R9 d, B: _7 X" [8 f
for(j=x2;j>x1;j--)4 t3 v- O* n2 S# A5 F
for(i=y1;i<y2;i++){
; f, t: b0 S8 f goto_xy(j,i);
" g" _4 w; M$ i' i" R putchar(' ');
6 p& ]6 n6 R! A6 R* g1 h6 {8 v delay(10);1 u( r+ l! m B" _% G- i; q! b8 k/ P
}
6 x$ v/ b' h7 X9 [( H' c0 k }
9 j3 @+ o6 e+ e5 Z3 C /******************设置光标子函数******************/* v0 q2 I! B+ [5 j, I
& ]* g& x' p2 l# n9 V7 @
void goto_xy(int x,int y)) s# X1 W- z! y; @% F2 E" H
{0 \( f7 A9 ~- l* y! u
union REGS r;6 L: C8 Y- k- a6 G2 \3 V, d
r.h.ah=2;/ q8 k, o- T S! G( ^0 U' \
r.h.dl=y;, m+ n- d$ u/ L1 j4 R% A
r.h.dh=x;2 ?: [8 p5 V$ `6 }- f( D
r.h.bh=0;
' Z/ t% Q) U6 ] int86(0x10,&r,&r);* a" i- y8 R. v3 |& e: X( z/ o$ {
}
. ]$ Y2 R3 n& V+ \( B4 k
R# `* |& a. D9 N /**********************在屏幕上打出一连串的a字母用于演示程序******************/
t8 g( \" }% c$ q8 i
( |9 ?: u( \* R4 @ void puta(void)" @5 g2 P$ j4 t
{
+ H1 S4 k5 {$ [) F1 P% A int i,j;0 B7 R2 N$ k4 D' J9 ?7 f) G- m
for(i=0;i<24;i++){' ^0 f+ `3 R# Y2 s% t) l5 s( s
for(j=0;j<79;j++){$ J( _" g6 f4 }4 g- C6 ~% P8 A
goto_xy(i,j);8 U$ N" O5 o, g% n1 ]) @ R
printf("a");
" Y, p& Q. ^9 A% f } e. A5 |7 f2 p& Q' F! p
}
* g: x8 w7 ]! E& G' T" Z2 A; T } |
|