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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 w+ s. n1 d1 K. ~: `# _ V
U. \) d3 b& s$ C4 D$ C 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ B5 {. _) I- |( E4 n- W" ? P
& V2 ]' ?+ x3 {* P3 ]; t1 F
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 m& u8 a# c9 h 子函数及演示程序:7 |) V) O6 r* y
) g7 b( K# n- L, f
#include<stdio.h>/ O! c) S( N# l, @$ }% u
#include<dos.h>
0 y' [2 F0 q0 u8 w& W #include<conio.h>
7 q! Z$ b$ L2 Z; o5 v5 X! f4 e* @- o1 ]1 f% x) E
void goto_xy(int x,int y);$ \. N/ W N9 h9 b
void dcls(int x1,int x2,int y1,int y2);
8 Z7 U7 ~0 F; C$ X) d void bcls(int x1,int x2,int y1,int y2);$ l+ s; m2 R) B! b9 ]4 i2 z7 O
void kcls(int x1,int x2,int y1,int y2);
2 i, F r' V' c% n8 U) u6 A- Y void recls(int x1,int x2,int y1,int y2);
0 ~6 c; q5 L4 y1 ~ void zcls(int x1,int x2,int y1,int y2);
, n* I4 V5 L( Y. ?5 q" A void puta(void);/ q0 L+ d/ M2 n0 B$ o, U
m y( H4 u& K' _5 i# ~) {
( L! x/ _3 R3 d+ A6 q4 l' o
/*--------------演示程序---------------------*/) N5 y9 z. t6 d/ A
main()
, P1 ^5 T" I$ e/ D, I% `. G {
! c; ^) ]2 v, X; V* B6 n puta();
' X6 I3 r5 I, p5 i getch();
) X- A( v6 u+ \% m dcls(0,4,0,79);
# i |: y' f5 C4 D& g: t7 _ getch();& w( T; Z- T) D: A! g$ F
puta();/ Z; y1 y7 d. G4 T2 D0 y
getch();
5 p8 e: @+ f' y. N) T6 h bcls(0,25,0,79);/ T( s$ `( D7 C& J; g0 l2 v6 E
getch();
8 |5 M( M* ?, l" k# [ puta(); R' ?9 k0 {4 s3 G& B4 }: h& Y# y% K0 ]
getch();
, T9 u' E0 E( n zcls(0,25,0,79);
1 L7 Z& H8 e0 A8 f0 \ getch();
9 O/ {3 H4 D- n! x }0 F" `" ` [8 v
/*********center clear screen(中心清屏)***********/
7 V. R. k% K# v void zcls(int x1,int x2,int y1,int y2)
: h2 {# @$ t. q( R4 [7 | {( ~1 ]; b! f% d7 V' |( u, b0 w
int x00,y00,x0,y0,i,d;" e1 O; ?8 s n- ]7 {) @4 `
if((y2-y1)>(x2-x1)){& U) ?: I1 O* u g$ n9 E
d=(x2-x1)/2;6 k& G5 U, b% U; q% b8 @' ?
x0=(x1+x2)/2;# f, c/ i* Y; h; a9 U
y0=y1+d;
1 \/ B# C. W4 R$ v) v8 w C, b! O. Q) ~ y00=y2-d;( j. i0 P" g" m% I, t
for(i=0;i<(d+1);i++)
U0 j& z3 o& |1 H% b; D5 I recls((x0-i),(x00+i),(y0-i),(y00+i));+ p. m( _* f ? h# c ]# Q
delay(10);2 z( N* M3 \* q
}1 d8 b2 j5 S9 l5 K' n' i
else{
# M, Q2 W: [& l5 j" O d=(y2-y1)/2;
6 k) T( S1 @0 c8 L2 n" p y0=(y1+y2)/2;, z' }4 c% R3 h, U9 V
x0=x1+d;
6 }# c; x/ p$ R: p7 I x00=x2-d;
/ V" V/ R4 M2 m3 G for(i=0;i<d+1;i++)$ y- a# c: D' m4 D
recls(x0-i,x00+i,y0-i,y00+i);
1 c7 O9 L7 p9 @% E delay(10);
, r( s/ T, p, ]7 c }( B! c- K; B4 z0 M! N; N% g
}" J8 B8 t G/ ?3 X \+ d
4 h; B; g7 _2 h! T4 c3 e, ]
/************* clear rectangle side(矩形边清屏)***********************/
1 r0 H' ^; |! x: c
3 K7 h# ], v8 @" m: S4 [2 N void recls(int x1,int x2,int y1,int y2)/ Q( v/ {3 C3 Q6 I) T/ _
{3 X* [# O1 i; r* ~
int i,j;& {0 c# K: I6 x- D" f, w
for(i=y1;i<y2;i++){+ K: F& o9 [3 s
goto_xy(x1,i);
$ y5 O5 V$ e3 [' P putchar(' ');
+ n9 Z8 o. g3 Y( T: ^8 u. M" x. e# a+ U goto_xy(x2,i);
+ `9 X1 Z h' w! N* D% @ putchar(' ');; H1 U3 v, d3 s7 `! E! Q7 w
delay(10);
$ R+ O# e* A5 g }
; H' I' b7 w( r; {+ k9 W' y for(j=x1;j<x2;j++){1 A. z# R- A5 J8 o) a: q0 p! U
goto_xy(i,y1);. `! d) B0 K9 ^& L
putchar(' ');" o* F+ \& _* l( o
goto_xy(j,y2);4 \$ x7 v4 C) K& b% H v7 K! ?7 l6 ]% {
putchar(' ');
1 ~4 H6 t" x( k% g delay(10);
' h$ `. C& L' c5 a) `. d: a7 y }7 ]' [% }" Y# Y, G
}
8 q6 d6 y# K: }- | /******************open screen clear(开屏式清屏)*********************/4 A* y, H% e- F' |
" ~2 R! x' p# m3 b
void kcls(int x1,int x2,int y1,int y2)
+ Z4 N( B, A" ]/ e& W* Y {
& T+ o$ V# c- ?* F8 c9 e1 E int t,s,i,j;. P8 v! b) V: _' H" a. k8 o( H
t=s=(y1+y2)/2;$ u3 _6 {2 Y" J' B- r
for(;t<=y2;t++,s--)
$ _3 C5 m2 ]7 b: w% u for(j=x1;j<x2;j++){; q: r m0 b$ j$ \
goto_xy(j,t);
" i8 O0 z* B C; F n putchar(' ');
u4 B( K1 b/ d goto_xy(j,s);
4 d. M: g+ m S6 r putchar(' ');
! v7 B0 i' X9 s0 p) Y delay(10);4 W. I6 ?; {0 F
}- t2 S9 g+ z5 E
}
# p1 ^0 M7 `6 l0 U /*****************close screen clear*****闭幕式清屏*******************/
3 f& Q6 f) L9 [( a# o) Y9 r v
* r( n( t) C. x7 R/ s3 w9 a+ n void bcls(int x1,int x2,int y1,int y2)
0 @5 Q: l- S$ a { a5 y5 r5 S9 d; J) u
int t,s,j;
) v# K4 u# |# P _ t=y1;3 G. f% `. v$ X% |
s=y2;$ [! E9 x, w& y/ f) P! g
for(t=y1;t<(y1+y2)/2;t++,s--)
2 `6 m* F2 @, u6 O0 V& \ for(j=x1;j<x2;j++){
7 y! n( r, k" Z1 I3 z4 @& G goto_xy(j,t);4 B$ |, n2 E1 q# u5 N; Z% \8 G: v9 G
putchar(' ');$ W) c9 c* f$ S, O
goto_xy(j,s);
0 T5 j4 V3 P& x! }0 B7 |% E' F# o putchar(' ');
0 k! R# R; ~' }" l. |* t( |- d delay(10);9 [- t* |$ @ W! e* r5 C' |
}3 L" s- M" T# u4 B, _; f0 A4 j; I8 o, c
}9 o: h5 _% o+ q) V/ p
/******************bottom screen clear(自下清屏)********************/
) `* h4 p6 f n( y* {8 T$ p/ i4 L; j0 u6 Y2 U6 l
void dcls(int x1,int x2,int y1,int y2)
& }7 K+ G0 x# Y' W" G3 {6 N {
6 C* S2 f$ I8 ^ S int t,s,j,i;
. U' r# c9 ]7 |, q& j; H5 |5 g t=s=(y1+y2)/2;
. V% _0 ~; T8 }% ? for(j=x2;j>x1;j--)
1 ]9 v, q! U& O8 k0 d. ?- z; u+ Z) H for(i=y1;i<y2;i++){/ d- w& R ~! e$ U
goto_xy(j,i);: R1 }8 }* D- Q# j# T
putchar(' ');% z0 Q ]& `5 ?+ }; b2 W' Y
delay(10);
: X4 B, P8 x# d9 i }
" b! u0 \. [" P' H; Z9 Z }% z e6 |( l% o" ?0 B' j1 M8 \8 I. M
/******************设置光标子函数******************/
. \% o" X; E# Y2 ]* I9 y' Y* ^; x% f" f2 b
void goto_xy(int x,int y)
& E; }5 g. F- f5 y7 y# D8 m {9 ?. d1 t! u% w+ |0 y9 b
union REGS r;
5 o# Y0 f3 C' n' y% }1 G r.h.ah=2;
J5 U4 p- B0 ]' S7 _4 F2 a r.h.dl=y;
7 O, m2 ^" Z A5 B1 G r.h.dh=x;
. s* _/ Q% a6 a( E9 W8 M( P. D8 J5 m5 q r.h.bh=0;0 ~& n3 V: J% I2 ^. N/ P
int86(0x10,&r,&r);
! U9 Q. c$ V& K$ O9 O: s3 Z) n4 |9 y0 ~ }
: u9 @6 P% A1 W4 ^" _- d* t. _& l* S0 `
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
" c) _ a% A- _
. V1 I* w( i# j7 \1 ?. E2 F; \ void puta(void)# j" j. b, R- t) f
{3 Q3 j& B( C9 i8 A! t& _ r# U
int i,j;
; D, N* n* W4 P4 o7 A. x+ t for(i=0;i<24;i++){
! v6 N( H b5 Q' x for(j=0;j<79;j++){: ]3 C9 b2 L6 M& C
goto_xy(i,j);9 m( V0 m) @0 L! _/ W& u
printf("a");2 q1 O& |; N1 j% H6 Q
}+ }' W. I/ w$ Z% k& \6 r+ N
}
0 E0 Y Z1 k* @8 D } |
|