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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, b% s& H R+ x7 x1 e! J/ a$ H' n
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 N$ n2 Y$ i: v7 y2 d$ i; r+ k% X- o
3 t4 M: K8 R; o" L 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . T4 O* ?7 J0 I: s$ J. M8 _. Y0 Y
子函数及演示程序:6 {8 H$ L( |' |; b% E7 N. x
7 x. A! M( V( e( X# m
#include<stdio.h>
+ V) R" g1 r& _) @; G: O #include<dos.h>( r9 j, l, K: T
#include<conio.h>
0 {9 S' W; ~. _3 i, t+ F, V1 ?. R* R+ q* a( i2 V
void goto_xy(int x,int y);' ^) ^+ h8 N; ]! c% u
void dcls(int x1,int x2,int y1,int y2);
) K; t6 |& U {- V* ? void bcls(int x1,int x2,int y1,int y2);7 h( K' I+ r4 ?9 k! T8 {" g
void kcls(int x1,int x2,int y1,int y2);& V1 g/ Q8 P- O r6 N: x
void recls(int x1,int x2,int y1,int y2);! Y, _9 W, U% S' i" l
void zcls(int x1,int x2,int y1,int y2);
0 _/ ~, @6 A+ C2 T void puta(void);* _+ T* Y: v* b* ~2 B5 o5 }
- K, a. a# D9 V" }
. j0 A# o) z7 r /*--------------演示程序---------------------*/' F$ h! A% a g
main()
: q5 d7 f& e2 h. B$ w; l5 V {: a4 n/ c3 N, c# y7 V1 d: x/ k# g
puta();
; {' m4 p, F+ K& d0 a+ u6 K getch();, R" N) ^3 p) @& E
dcls(0,4,0,79);" [% R/ L: n" w" |% }) Z3 C- j# a
getch();% I" O' m3 ^3 ?; d; G% t
puta();4 n6 N0 T. s8 f O
getch();7 X8 a/ t3 l4 T: B
bcls(0,25,0,79);
/ B' g5 \6 y8 M9 y( S0 h getch();4 e# M9 S5 R0 ]4 s; D9 W
puta();
( o; y- c/ j( V$ I O M1 ] K. O getch();8 Z( [$ c- W1 X# G
zcls(0,25,0,79);0 m7 {/ X6 D3 @
getch();( j }& S, k9 j6 ?
}
$ P2 l2 Y) _1 P! V" r$ \7 j /*********center clear screen(中心清屏)***********/1 \& {& z8 K1 ]; Z6 o$ v
void zcls(int x1,int x2,int y1,int y2)5 x0 D6 e |4 L( H( C6 j+ f$ e
{, v9 s$ b# G7 i B$ ~; G4 G3 `0 g
int x00,y00,x0,y0,i,d;9 T9 v5 x' J7 a* f( ^0 N' K7 e2 m
if((y2-y1)>(x2-x1)){6 B' [0 Z4 x% K: Y3 @9 ?* B
d=(x2-x1)/2;
: E/ q3 I, f4 [" O0 e x0=(x1+x2)/2;
0 U3 A, L6 F7 F2 |% n y0=y1+d;0 D, K/ F* ^9 `" C3 a' d c) X9 ?5 x
y00=y2-d;! o, I5 Q" l/ z
for(i=0;i<(d+1);i++)
- d f& E; T8 I b5 h; \ recls((x0-i),(x00+i),(y0-i),(y00+i));7 U% l. K% p2 O7 T1 S
delay(10);
8 K, @$ d4 \6 v9 e4 \. o! I }
; s4 `/ ^: |) y, K! {) O; [) u( v else{; a8 E# @, k! h: v, O6 d
d=(y2-y1)/2;
) d; V+ c/ B1 C& g3 Q y0=(y1+y2)/2;
! U1 M( [1 {2 C& N, c+ p5 e x0=x1+d;
/ S6 V: u, A6 _0 e3 k. }5 a x00=x2-d;
) I5 _4 k; q5 c5 w for(i=0;i<d+1;i++)% v1 }6 |( w& I# b3 z" P
recls(x0-i,x00+i,y0-i,y00+i);
! K9 F% J9 S7 q3 @( \1 f delay(10);
7 t4 Y0 T) D5 N }
' Y1 |$ R. A6 c8 w }7 P- Y$ f: v1 F1 }) U
U! W; s0 z9 i6 G7 J" e9 ~ G. p+ J5 K5 d
/************* clear rectangle side(矩形边清屏)***********************/( v- b, ^( P; G1 t5 `- t% ~0 X
8 s' p, Q' P$ o& l$ {
void recls(int x1,int x2,int y1,int y2)
E2 G8 n. C* ~: b5 S: U {# B2 h D: u. z! w' L ^3 j/ q
int i,j;
+ _' c' P. w9 W for(i=y1;i<y2;i++){' c8 s6 r* S; @% |6 {1 v; F
goto_xy(x1,i);
+ e! O7 i K: a, D1 _ putchar(' ');
: D& e) {- S# S [* p. O goto_xy(x2,i);+ P7 X4 z8 g8 U5 B# D1 s) U
putchar(' ');6 | f' G% Z% K3 R. P- R
delay(10);0 o, d. V& l! _* Q4 R n2 o
}
% O1 H& p6 \7 w9 T8 n for(j=x1;j<x2;j++){4 t4 M7 n# q( c, S6 j/ s7 m
goto_xy(i,y1);
: _$ w6 P! K5 s# z putchar(' ');: z' I" l! } G* t, g
goto_xy(j,y2);/ t# ~0 p- J6 w* k' P( V
putchar(' ');
* {( U0 j- e* f" Z8 e& \9 s; A0 [ delay(10);
; F5 ]# w5 {+ _ }$ ]( t1 S+ H! i
}
& u( G6 V; [1 D /******************open screen clear(开屏式清屏)*********************/5 U% v7 j4 y5 A. D. n5 C
. v1 ~' {& T! j: W+ k9 D
void kcls(int x1,int x2,int y1,int y2)% Y! e4 K# u, |) x$ i. `4 U" r
{' R, \; n- O4 c3 U9 T. p ^. c, K
int t,s,i,j;0 q' W9 t& B# p! k b9 r# V
t=s=(y1+y2)/2;
8 w$ p4 [* @( B$ A. X0 P for(;t<=y2;t++,s--)
6 L% h! L! Q1 {5 ~& \# l1 N5 O for(j=x1;j<x2;j++){
. Z/ C( l) F1 P1 _, G/ |8 [/ R goto_xy(j,t);
9 H9 F4 I& t i% J6 L/ ~ putchar(' ');) L1 M( T: q- g- g$ {0 _% V4 G
goto_xy(j,s);% a# ?7 Q1 C5 J% B2 W4 F! ^8 `3 w
putchar(' '); }1 w- P: P& V6 | m
delay(10);& W" E/ U! L# B7 [ s
}2 x8 \! B5 W& E+ o" X7 A5 m
}
. _; O) U5 z3 d' } /*****************close screen clear*****闭幕式清屏*******************/
" c8 @4 X0 ~% w+ c Y) k
. X6 J, B2 s/ h# G" p' b: F+ { void bcls(int x1,int x2,int y1,int y2)) U3 d- U6 p/ H
{2 P) o. p$ Y9 X; s: d4 U
int t,s,j;1 r! K# n$ }5 L7 [5 L
t=y1;
0 b7 a j/ c; d# } s=y2;" H) K/ D7 H. U' T+ Z7 r+ u" L
for(t=y1;t<(y1+y2)/2;t++,s--)! K4 p1 }" ]. Z0 q" q
for(j=x1;j<x2;j++){
0 B+ e4 W( J' G# e' k goto_xy(j,t);
; V3 E( t8 q+ g- F putchar(' ');- a- `4 c1 @" f2 w: O4 X o
goto_xy(j,s);
# g1 d1 h3 ?/ v/ ]0 g putchar(' ');) \! k, i1 [) Y! u2 p
delay(10);
1 x @" S' {& D" S* g }! T$ t1 y4 r0 n
}! U# f& {& q& S+ g/ S" T& z |
/******************bottom screen clear(自下清屏)********************/
& R5 K# ?8 |9 b
, f5 N- o% B# |, A0 b void dcls(int x1,int x2,int y1,int y2)
4 U8 J q- z6 b; c1 o {
. p; S6 C" }/ n* ]! S, E int t,s,j,i;
* \! S) J3 h( v C t=s=(y1+y2)/2;6 x( p* o [; v, P+ K8 s
for(j=x2;j>x1;j--)/ P* B+ d# _# l# U
for(i=y1;i<y2;i++){$ Z) P- q D5 w8 W
goto_xy(j,i);; L7 F9 R0 T Z
putchar(' ');
3 t7 q% Z+ x. A8 R delay(10);# j, r# w9 [. u2 |
}) w7 v/ `8 O' e. e8 v+ y
}
; k+ S4 o& c# U3 x8 R( H. B /******************设置光标子函数******************/
; ?: k, D i/ X. p% u3 |+ l5 K1 c& o: E" X% O8 p% Y* y7 Q& r# @4 Q
void goto_xy(int x,int y)% C" @& |0 R' v
{
, J" E' X0 p) M1 m0 S1 E( Y union REGS r;
4 ^: m: W. O' j; s1 M( k r.h.ah=2;6 B% a7 G2 n8 w- o; m! G) n
r.h.dl=y;
2 d2 m! ]- w# i r.h.dh=x;
8 k$ m' a. _ l' g. M! G# I r.h.bh=0;) r, [9 N3 [6 `
int86(0x10,&r,&r);
q1 g( P; O) R E }
@5 p, D! l8 ^8 q9 T" d6 c
0 v* }1 _ A" b+ d /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 e+ Y L2 c! i8 L* `* z6 p H$ d. K* z4 ]- ]
void puta(void)
* I5 P: N9 S8 n! K) D {, }' ]0 g0 u- C8 O" G$ O' Y
int i,j;: M. y) \! T" T2 P
for(i=0;i<24;i++){
+ }9 Z$ u! ?% A7 ^0 k! V- V# w3 h$ w for(j=0;j<79;j++){
8 k( I% D1 N' q Y, ? goto_xy(i,j);
* d4 H% `6 a: K8 E printf("a");
; i) U$ k& b& X, n5 G }/ D& W1 |% ~" h
}; z+ }* f/ B/ z, O$ O
} |
|