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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* @5 q0 {, U5 M6 ~* p
) |' B6 h6 y1 r( `, R. i& |9 ]) T" w, C 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+ u# W3 t6 W" X( m3 h* z
+ i9 C& U" n, U) k5 R3 K
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 v: e- t/ b& j
子函数及演示程序:
/ _ |- {- B$ H! R. f& N9 r! f2 P1 l/ N
#include<stdio.h>. h; z$ S* U3 P/ |6 C
#include<dos.h>
& n* S1 k7 g: ^1 V$ t0 ], p #include<conio.h>. i% X% n, O! o6 [
; g" J* G8 F$ n1 G9 X' o
void goto_xy(int x,int y);- Z5 t4 {! p& ^9 A2 `# g
void dcls(int x1,int x2,int y1,int y2);
7 l" w0 m; e6 _ M; V8 e void bcls(int x1,int x2,int y1,int y2);1 Z' j* H4 U6 g
void kcls(int x1,int x2,int y1,int y2);1 T, J* s- E; ~3 n" Q" U( B' M
void recls(int x1,int x2,int y1,int y2);! L: W7 {8 \0 K
void zcls(int x1,int x2,int y1,int y2);# H2 k% _* @7 w5 y
void puta(void);
3 x7 ]+ Q0 o( ~ h! [/ g' J, E/ Z. D/ Q+ E+ K5 K% L Z* d( [
; t3 P M( P! n9 b/ `+ F, c; E0 J. D/ Y /*--------------演示程序---------------------*/
$ g, N, N5 F, x1 E) [2 s main()
$ ?! s5 R$ e0 ^: |$ j. ] {
- z2 M' Q& b, e0 _( [ puta();* g. B( Y! w: |% B2 Q
getch();
# W! K- ~2 j' Q5 g4 F0 y/ T dcls(0,4,0,79);+ b8 _+ r# u* S+ U- B$ }
getch(); G3 } z) Y6 M
puta();+ G3 T. V( @$ K2 F3 h
getch();( B) p7 S7 b' }/ ^
bcls(0,25,0,79);' Q$ y( _$ L1 B$ K$ i* o
getch();4 _3 U- V* r0 p! n( j* U8 J" F
puta();
% L* C- g& \6 l% S3 C* ^" x getch();
( i/ n' }: {/ m: l* L zcls(0,25,0,79);
* n% `6 F- `! k0 F, z- z% ], e getch();) U0 v' M0 S+ p+ h6 v; c) A
}
7 Q# X# z+ j% i( x. ^/ H# M /*********center clear screen(中心清屏)***********/ b5 D+ T( A* {" ^8 t$ ]
void zcls(int x1,int x2,int y1,int y2)
, j) o5 E0 N# n; L& m {7 ~& o& C0 j) H
int x00,y00,x0,y0,i,d;
) H8 x' U0 H0 h0 J h if((y2-y1)>(x2-x1)){6 w( I* i: C' g: V) X. U8 ?
d=(x2-x1)/2;; D. A3 o1 ?: T2 j b, ]0 F; t. _2 T1 d
x0=(x1+x2)/2;* V R3 ] B7 b* _2 R5 l, i- ?7 @- k
y0=y1+d;
e6 c. y) ~( h) H& z y00=y2-d;
' r- i5 k" _& F" t* d$ \ for(i=0;i<(d+1);i++)# R9 B* n3 g6 N% {" C5 }2 Z2 i4 K
recls((x0-i),(x00+i),(y0-i),(y00+i));
+ m9 z0 u- \: Z% \( R3 ? delay(10);
8 c9 I: E. M, b! M }
( i% T$ _5 x0 Q+ ` else{* W8 e1 n$ V) J6 A% Y! \ O
d=(y2-y1)/2;' l7 _& x1 @7 {/ T- T
y0=(y1+y2)/2;( x4 J3 K3 l3 w8 \* C- S# Z% n8 Z4 ]
x0=x1+d;5 V+ ]4 y1 N0 }, B3 t
x00=x2-d;
3 f9 u! p" K5 b { for(i=0;i<d+1;i++)- ~1 [6 S, r6 Q
recls(x0-i,x00+i,y0-i,y00+i);
& B% @3 p: A9 Q) I- K delay(10);0 { B, l# Z# A8 w
}
, j5 V8 G& J* W0 {3 J5 O! Q# O3 f }
& L2 X( i, c4 D U5 d/ ]/ b
% D, l8 v" d- y2 B" T% `, X( ^ /************* clear rectangle side(矩形边清屏)***********************/ t' k" A2 t$ D# ]! F7 O! J
8 W# H) F4 @; X; O7 A void recls(int x1,int x2,int y1,int y2)* u- n6 g. A( X0 R' a/ m' q* a
{, M6 }" k, {* b% E1 t6 c2 Y& P8 F T
int i,j;# o, X o# e2 m; [% D& m
for(i=y1;i<y2;i++){2 y- \8 w" p( \( M/ [
goto_xy(x1,i);
- J5 `0 ~. I$ l0 T1 W1 u putchar(' ');
8 r ~7 b4 Z9 L& F h3 a1 h goto_xy(x2,i);
" Q9 t4 t% G- R: U" J+ E putchar(' ');
, c$ ^) F* x% H+ ? delay(10);, c5 R/ _7 V8 L/ P) Q) m3 w( B
}) c; }5 b5 ~ S* b4 |
for(j=x1;j<x2;j++){
6 M' D3 E) R! K6 g# b1 l goto_xy(i,y1);
' P, X, O0 S- ]! S6 I- @ putchar(' ');6 i* T$ D( k G+ _- F: p3 v
goto_xy(j,y2);7 e$ B4 R: V) V; Y# a3 @$ {- ?- m
putchar(' ');
- X4 s' u; ~# g8 N9 g% z0 c delay(10);
' V k, ?# P! A' }$ h0 d7 Z }6 g, B: E+ o; `* W0 X( J$ r6 R
}
& X5 t0 U4 }+ u ~) c8 k# c W /******************open screen clear(开屏式清屏)*********************/3 |9 u' D5 i0 @8 K; A" c. O
4 z1 {0 |' Q4 m) Y5 y void kcls(int x1,int x2,int y1,int y2); {0 O6 R6 }0 r4 L8 u+ A* H
{) P* n8 A+ i" ]; f1 |5 @
int t,s,i,j;
/ U6 V- U7 Y( _! s) } t=s=(y1+y2)/2;# n1 o. N. {9 T b. F e
for(;t<=y2;t++,s--)
7 \. s" ]9 Q( I) h+ z for(j=x1;j<x2;j++){
6 [& D7 M$ H: X goto_xy(j,t);% E& Z X' n; A
putchar(' ');
" W! p0 d; ~# [3 b4 @, A goto_xy(j,s);9 b, w! X8 {& R
putchar(' ');- k) ]6 d' L' W
delay(10);6 l ]: m) v. n6 E/ F4 q3 W
}
& k2 a% P6 \/ K) [/ p2 k$ u }# ]0 B5 c7 C" J% S& n7 F+ g/ \
/*****************close screen clear*****闭幕式清屏*******************/
9 d! G; h u+ _( {5 X0 O4 f9 ]5 u9 |7 L% C0 r2 S
void bcls(int x1,int x2,int y1,int y2): Y. k7 X! X+ n* b3 g4 S$ C
{
0 l7 K* v' m3 Q6 r int t,s,j;7 Z* ?- B r/ J- }7 S1 r/ p
t=y1;
# R. U c5 K q; g1 s, Z s=y2;5 {/ o( b% F* X! I5 r
for(t=y1;t<(y1+y2)/2;t++,s--)
" l( q7 _% m" p& X4 ~ for(j=x1;j<x2;j++){
8 a# p0 o6 v4 F$ s3 [2 n' R3 ]3 u goto_xy(j,t);
) j. V: D2 e3 e9 i3 b putchar(' ');
& E! \% K. d1 _# P) K7 e goto_xy(j,s);1 F* Z% f/ \; ~
putchar(' ');
9 N" t6 j9 _# T9 m delay(10);% E" e2 ]8 f/ n8 S9 f; G8 ^* |( M
}: }% N" ?( T- k' N' }3 ?: Y
}
: {3 v4 d& F4 Z3 y2 e8 N /******************bottom screen clear(自下清屏)********************/
. ]% t, n- S# d( e5 H" ]) M+ s" Z4 a' a0 J
void dcls(int x1,int x2,int y1,int y2)
: |6 B M/ O" V {4 D+ m* q1 ]1 ?
int t,s,j,i;
' { a5 J0 ~. y$ t/ V& w& d& } t=s=(y1+y2)/2;
$ H+ F; L6 }; }: G" l for(j=x2;j>x1;j--)
* h4 i, u( T! L# N( Q) y, e. z for(i=y1;i<y2;i++){' B% ]8 U3 y2 u
goto_xy(j,i);
5 F8 E" K6 l) A' O; Z& y putchar(' ');
) ?9 z3 y5 m0 l; r4 I delay(10);$ Q5 B( r; F+ f: H [: o
}
9 f. u6 q! z& U' a; u }
! ~7 \( |4 o! `7 O& q4 v6 Y+ ? /******************设置光标子函数******************/
. ?1 b( Q4 j% Z; a$ R" i* {9 R; `6 j$ ~! S3 w9 h ^
void goto_xy(int x,int y)
0 y9 X: |% e. A+ S {* y, m9 W% O7 W; I& ?
union REGS r;' T2 [" U# N5 t$ R0 i, Q
r.h.ah=2;- p. d# q+ m9 D9 l; y, Z: P
r.h.dl=y;
& Z9 G) Y& d7 F6 v% r3 v r.h.dh=x;
6 D3 B* _0 T9 c" c% h. h r.h.bh=0;1 w# G( l& B" T/ K7 d
int86(0x10,&r,&r);2 W2 E8 A7 _* H2 l# B, `* y7 D
}0 @6 \. p8 p7 \
( f) [$ S, {! y' Q0 U* N /**********************在屏幕上打出一连串的a字母用于演示程序******************/6 o; @5 y5 h+ Z C# C- J8 w, n
$ K8 n% m3 T5 F6 Y( E q
void puta(void)
( g% C0 a3 H3 H( O# @& F {
' w D6 F T1 H& G4 O9 d/ S int i,j;
, x2 C2 d; v5 c8 ^ for(i=0;i<24;i++){; k- @8 N0 o9 z# s% @
for(j=0;j<79;j++){
, v. a3 P( d7 l5 E; t: y# Q goto_xy(i,j);* J! v1 T: V: S7 r" @) x% \8 y4 L
printf("a");
& L2 _. f0 C, U0 M K2 j }
# b; P& E( m2 D" A ~ }: }; x/ K$ p9 J; _& T
} |
|