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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& b2 c& O+ q" d, g$ N& J+ |. C* \9 ~* e
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里 {2 ~! L4 v- ?) }$ K
2 y1 N2 V# W3 O7 y* k Z
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# {3 i: z7 a) @& ^; h6 C U 子函数及演示程序:
' v# t: Z i* M- H# D* W
; B# g6 |! |) I: H: N* q) m #include<stdio.h>
( p* R, a4 ?" t* ~. w8 H7 R( a4 Q #include<dos.h># |' a! J' r, X
#include<conio.h>
6 N0 P2 q9 }' H
& p% h8 ~9 e( _4 ? void goto_xy(int x,int y);
, k1 a- `( V- f/ W; J" n) _3 D4 E8 b void dcls(int x1,int x2,int y1,int y2);/ `0 S, H) B( N
void bcls(int x1,int x2,int y1,int y2);. {1 ^/ J2 X5 c) Y$ H
void kcls(int x1,int x2,int y1,int y2);
# A6 h+ _+ \/ j# _2 J void recls(int x1,int x2,int y1,int y2);( j3 p, y$ P( [- h8 _/ e9 ]) P# n8 o
void zcls(int x1,int x2,int y1,int y2);: A7 A( f8 f1 r: c, c& d
void puta(void);6 M$ q6 Z7 L) f- r" U1 F2 d" ^
4 G! T. w" A1 E
4 P2 @2 n6 _; i/ V /*--------------演示程序---------------------*/; D0 O: X( C2 A" x% t! C* M
main()
6 T6 D. S$ w( j% m# _ {
% ]5 g3 v. o9 v1 y( { puta();
0 Z$ c, o2 J' l, I1 ` getch();5 `2 \4 K. L& ~" y$ E1 E; L
dcls(0,4,0,79);
5 o* o# F( |, e, w0 G* k2 N" @) } getch();, `0 r" n* v8 |
puta();1 f) ^: c7 ?" ]# K, O2 ~6 U
getch();! {0 I4 F4 E: q l2 q. h* W
bcls(0,25,0,79);
1 A0 ^. b1 j# X0 K3 Z getch(); ^7 n0 E% r, _0 ^1 p
puta();
: o) w1 W% A# K* ?& e# ?7 \ getch();
! b# P' h% M1 {7 ^ zcls(0,25,0,79);
1 j4 Y; N- P; f; x getch();
0 j# U( i' l- v/ l0 N5 v% n }
) ?3 x6 [. v( x /*********center clear screen(中心清屏)***********/( A% N, i; a5 Y; ^+ N& N6 k! ?
void zcls(int x1,int x2,int y1,int y2)1 ~& i0 H3 x8 Y& y$ n [
{9 H7 U7 Z" g! u( t& t( V* w
int x00,y00,x0,y0,i,d;2 e" v; I$ P, p$ y2 m
if((y2-y1)>(x2-x1)){* g( h, x0 ~3 s/ Q/ X
d=(x2-x1)/2;+ y7 m+ f0 A1 X* p7 F9 b3 y2 l
x0=(x1+x2)/2;9 J9 D3 ]" f5 T
y0=y1+d;
5 q: S; W2 _6 w# \ K, h- s, V: _( j" B y00=y2-d;& \4 {, Q- R; t. `
for(i=0;i<(d+1);i++)
\1 H1 B! y6 i [& e. S& a recls((x0-i),(x00+i),(y0-i),(y00+i));; z0 F$ j6 `, R" H
delay(10);
1 b0 F. P" a6 M }& u* ~2 I1 T* }% o
else{
! G, n4 U# v- M0 S# X3 x) `: W d=(y2-y1)/2;
8 k# y$ p" t1 Y7 B U y0=(y1+y2)/2;
( ?+ m6 ~+ p5 T* h# q8 R x0=x1+d;
7 O6 S. d$ M8 D9 }3 f x00=x2-d;
: N/ f: B# f/ Z for(i=0;i<d+1;i++)5 S2 a; g' Q% ~) C( L
recls(x0-i,x00+i,y0-i,y00+i);9 G/ [' j3 H6 s- W
delay(10);
* j2 C+ i" b) [3 `- f0 x8 \ }
2 o* m6 S. s5 B& H; D }
( b: Z1 p: o4 e$ O# y/ x
: B) Y8 @7 K% L2 D5 T [0 U. n /************* clear rectangle side(矩形边清屏)***********************/
7 X. M2 M1 W" k( K5 I5 q$ @- v& q; S: i2 s
void recls(int x1,int x2,int y1,int y2)0 w! q3 }" H( f) y1 D6 y$ d3 M
{) g& |& w. M1 r( g$ Y) C) i
int i,j;
2 Q7 ?5 P2 r3 W for(i=y1;i<y2;i++){+ Y. R+ R8 \6 `8 Y3 o
goto_xy(x1,i);2 {3 ~: {7 G3 g3 z6 H
putchar(' ');, y* c- q. y9 E q$ S" H
goto_xy(x2,i);5 k- h0 _" }0 O3 Z$ h( S: y
putchar(' ');
% n! P9 m5 m; u delay(10);
6 Q6 M( @( J0 C. q }
+ v. F' G$ _, }- y( D) } for(j=x1;j<x2;j++){
: }* m6 ]1 M3 O$ n2 j7 N goto_xy(i,y1);
3 @% j' `5 I/ X putchar(' ');" ?' [, W6 H1 z9 I8 w% f; Q
goto_xy(j,y2);
B# @1 p0 d* |4 m putchar(' '); t* [* w) [% }, G/ E
delay(10);
1 ]" c- u& B# z4 ?5 t }' A5 I2 ?( W6 {. r
}' F4 r, l2 o! B! v& k1 j
/******************open screen clear(开屏式清屏)*********************/( {+ f% V1 P! r8 J ]
2 v( y" D3 o* H) L, K
void kcls(int x1,int x2,int y1,int y2)3 {6 S* g; G- d9 k0 `( n2 n* P: Y' Z0 q
{
& [! f+ P& P5 v8 A1 a3 b) C- b8 Y4 w int t,s,i,j;$ F6 h- K9 X3 b! C! Y/ j
t=s=(y1+y2)/2;+ a' A! B/ N% ^/ T
for(;t<=y2;t++,s--)
0 A4 t1 u2 l4 x- J8 G! y$ P" H3 [, i for(j=x1;j<x2;j++){! [6 ~$ G* g6 b
goto_xy(j,t);1 U' f+ |4 s2 @/ p
putchar(' ');& M7 t) ?* P# `/ G0 y0 \
goto_xy(j,s);9 }/ y [" T' |+ _, G/ O( t; l
putchar(' ');
4 V1 N u4 c4 h delay(10);
6 N# K$ L9 ?4 p6 Z }
! G: H% T7 S/ `, I }, a4 k3 b' d8 L" u: z: B- N
/*****************close screen clear*****闭幕式清屏*******************/
' E3 F9 I a1 r. ]
( Z( R3 j0 {, u3 x4 w void bcls(int x1,int x2,int y1,int y2)
- v. N2 _1 t$ P3 ?, [2 R+ X {4 G7 q4 h' U6 z6 Y' i7 u6 P
int t,s,j;
/ T& {: o: k: h" | t=y1;
e. s# }9 J2 {. N i s=y2;4 B2 a' X, {7 W9 [
for(t=y1;t<(y1+y2)/2;t++,s--)
5 k8 R7 v8 Z4 K for(j=x1;j<x2;j++){; R5 |, ^5 R4 Z% l8 N9 i! Y
goto_xy(j,t);' A4 W7 U0 Y& c4 ^
putchar(' ');/ ~; Q% g$ i5 v. [! L
goto_xy(j,s);
) g* b: }' O1 G putchar(' ');
9 {% r. |$ r- s) S' j! P( c4 J" k- |. e delay(10);* z; \: r, I2 I. k5 _
}9 j. u K H; p6 X. S% }0 D3 u2 R$ L
}' k! F- E8 _, h, m
/******************bottom screen clear(自下清屏)********************/& U8 ]: E- I$ L* K( P W) x
$ H5 _8 }$ G1 k2 K, G void dcls(int x1,int x2,int y1,int y2)
8 T; J: M. U* U& y {7 p+ ~) w7 l" o1 V5 u, }. ?0 ^. L
int t,s,j,i;
9 p7 n5 s+ _1 S, C1 V t=s=(y1+y2)/2;
$ q. ?; ` s' w" q" ? for(j=x2;j>x1;j--)1 j+ l* `* M; J
for(i=y1;i<y2;i++){! D9 u0 V" b( G% s
goto_xy(j,i);. ]2 b, f6 K9 v* \; t: m Z5 A& w
putchar(' ');
) _0 B$ o( j2 m n3 f' f delay(10);4 v$ s* C4 M0 H2 B' z0 j9 B, \
} L0 s6 H3 b3 e3 _% a" D! W# S1 W
}
# ^9 Q4 L& `% l% }/ H+ ]9 t /******************设置光标子函数******************/
; b" D% v# E' z( c
8 B: M q. j6 r# c. o& e/ L void goto_xy(int x,int y)
1 Y, i6 J6 B8 T3 m/ n {
8 w# {% e( w4 ~7 U. A union REGS r;
8 U, G0 R+ H# I; W9 X% l r.h.ah=2;
& [6 Y$ U1 S% X4 t8 t( q r.h.dl=y;$ G4 l: c: o1 Q( a
r.h.dh=x;: u1 r t5 l- |- L l- n6 W( {( k
r.h.bh=0;' h( X* p/ e9 G
int86(0x10,&r,&r);( u) |% @6 L# ~5 j
}
) Y% z% A. ?" I- b) H3 P% H6 S! W
6 j' Y* ]. l6 @1 P$ W9 k; R /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ Y( ]8 g, D8 {: b* H% |
; S4 Z+ \ h: f* S* N- c% r void puta(void)
3 w7 u& A0 ` ~1 g* f {
+ I/ T2 [& G7 V1 G( r) Q. }# Q int i,j;2 c+ c# x$ |4 m; U7 d1 X8 n
for(i=0;i<24;i++){' |7 y$ T0 e, _% ]: ~$ P7 }
for(j=0;j<79;j++){( t$ r2 F6 R; y+ ?+ }/ `0 x
goto_xy(i,j);: Y# L$ [# H! G7 ?6 c/ E
printf("a");# g) b K, x0 p( A- b
}. R8 R2 Z8 K+ b* B8 p
}4 y1 i% B5 R$ c$ J0 f2 W; U1 ?% ?2 J
} |
|