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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 _. ^4 g8 f& D; r5 Z/ [1 {4 R- Q( ]% M6 O$ F; C
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里 P& X0 E5 f/ d" R; f0 @" B! O
`8 s+ |; m5 J1 j# | 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: N O4 j. z% D# ~8 W. ~6 J W 子函数及演示程序:
. r' a% C! p5 y/ K
1 C# q+ t9 J5 j) m& }( f/ f/ A1 M #include<stdio.h>3 f/ w( ~* U: Q
#include<dos.h>
/ m5 V% Y k+ O #include<conio.h>
& D# O% o( j8 @6 \; y" g, {9 P) i7 Q6 f p! T, \
void goto_xy(int x,int y); M! h, |* y/ N e( E* n; v
void dcls(int x1,int x2,int y1,int y2);# ^; {* _; x5 Y+ X+ o/ {2 N
void bcls(int x1,int x2,int y1,int y2);8 C& P* h2 r9 |4 R7 e
void kcls(int x1,int x2,int y1,int y2);
8 b: _) Y; O b8 z# X. G$ P void recls(int x1,int x2,int y1,int y2);
* u- f* z. c8 l6 d void zcls(int x1,int x2,int y1,int y2);! q$ N3 Z# `1 x
void puta(void);2 ?5 H& R0 S d3 _- H7 m" D1 h7 b8 P9 b
" o: ?1 \+ J* X3 B# F/ J
- V$ _- ?4 \, c5 d" u" N+ U0 o3 S. s
/*--------------演示程序---------------------*/
6 n8 }+ j0 O* p7 a3 ^4 h5 ]* k8 M2 _1 r main()0 R0 @9 Q' o3 {! ^
{0 {+ [# l# Z" g2 |. D9 r, R6 ^
puta();
+ H1 n2 D8 E6 t3 Z' p getch();9 D! T0 M, G- y. C- h2 k1 `/ C; C
dcls(0,4,0,79);
, b6 v6 P( J g4 ? getch();
9 ?. e' F; c! H; @ puta();; n6 x2 H# f; f0 X
getch();
, V0 Z# [9 _- G2 O; p: O1 n5 z D bcls(0,25,0,79);
4 m! Q( Q3 R5 w# V ^9 [ getch();2 k$ ?* u1 D, y7 A7 l- ]. i% K
puta();& R- s) F4 I+ x+ n5 g& ~* U. l+ x
getch();
4 @! n6 R v$ u* ~. j zcls(0,25,0,79);6 O" v. [! _; o7 C- p6 ?, g
getch();1 L. A0 e4 h+ X; m2 m
}6 r$ P! ?5 v7 \7 I$ q1 f. f5 s
/*********center clear screen(中心清屏)***********/1 m8 u. U }, D; J# F X" o
void zcls(int x1,int x2,int y1,int y2)2 C! S$ t1 w- `! L" m) E( e
{$ ?1 U( z' s2 y2 t
int x00,y00,x0,y0,i,d;7 _; C! t; Q+ ^% j3 f4 Y/ F
if((y2-y1)>(x2-x1)){/ H/ s6 I1 I0 @( h& C; V Y
d=(x2-x1)/2;1 C0 z5 I3 b. P0 H0 _) f+ v
x0=(x1+x2)/2;7 m4 j9 \% ^( W' E
y0=y1+d;( w7 D! s$ g1 I! I, b
y00=y2-d;& d5 z- c* g, R: X9 R" } \
for(i=0;i<(d+1);i++)
& U/ Z4 n. n/ H0 `" u6 X7 v recls((x0-i),(x00+i),(y0-i),(y00+i));
7 B5 X( I: p9 s5 a" W; ?9 U delay(10);
- F8 {) f/ v8 Q, k* f3 m }
. A2 t( o% q2 _; R N0 d8 H& F' X else{0 c5 u4 U# j3 b9 L0 S& \
d=(y2-y1)/2;
" R2 Y! \- K+ S4 ?- a1 ? y0=(y1+y2)/2;. c* [2 H& C% y r7 L
x0=x1+d;8 |% ]' I' e, }- v3 P8 ?6 n: _
x00=x2-d;' e' V4 j, U" j
for(i=0;i<d+1;i++)
1 H! z7 {/ {) W" ~+ ]6 f E recls(x0-i,x00+i,y0-i,y00+i);
+ v: @# ]) O8 r- G delay(10);
. M% {' C6 q4 u( N# B: g }% M( v$ m* T' e& V# e/ G
}
! |- W9 B$ ^& O, n6 |" @- ?+ W, `/ ?( r7 G' w: X7 I
/************* clear rectangle side(矩形边清屏)***********************/
' x4 E' K" j8 R( c3 v. l! N h4 T" d
void recls(int x1,int x2,int y1,int y2)
& l5 l3 e% H6 M6 c {
+ k: Q3 @; _, |% n( y8 S# d* z int i,j;
8 u# l) z5 e* ~ for(i=y1;i<y2;i++){
# W1 s# f v! ]3 t9 e goto_xy(x1,i);/ {; `* ~3 a0 V% X' H- [. X9 n2 S* g
putchar(' ');
r, _4 k w$ C goto_xy(x2,i);3 c6 l1 s" @' v3 G b) c
putchar(' ');
2 B6 l |$ x) r v# ?/ @7 i3 J delay(10);' u2 e3 U G% I, M
}0 J: X1 p& d' X
for(j=x1;j<x2;j++){+ R" d; [/ x% _; Q& M) R. S
goto_xy(i,y1);5 _% T0 u1 l) D, W( E" |1 I
putchar(' ');$ f8 x C, g8 ]; Y
goto_xy(j,y2);2 x* \1 [) @9 ]& l0 b4 \$ J5 t8 y
putchar(' ');; f/ G2 G R$ f. N) J5 F1 f
delay(10);; b- ^* u0 N9 t+ o
}
( H( O: e* A) d5 o! M }$ h) b. E. T ~* L* R9 M
/******************open screen clear(开屏式清屏)*********************/: ]. T, ?3 j* V0 m
# K/ T l. z5 g" ]6 R9 `& J
void kcls(int x1,int x2,int y1,int y2)# g6 {$ V \' V/ J; m; Y
{
6 I: T% i* l+ U, J/ l# ? int t,s,i,j;
, F7 C% W( Q, T1 ]( q, x t=s=(y1+y2)/2;+ ~6 O8 r% i2 `4 v& s m* X
for(;t<=y2;t++,s--)
; Z& \; B# S5 y' u) q for(j=x1;j<x2;j++){
9 a6 o/ d( p3 w- P8 L! Q0 o5 ? goto_xy(j,t);3 Y$ r& ^9 ? ~8 F* D& z; E
putchar(' '); I* E" g! s6 ?) R( a) [
goto_xy(j,s);0 \/ y( O3 \7 K9 `" L% c9 P
putchar(' ');' k0 s E/ P5 _5 m( N. j% ^5 o
delay(10);
* J0 Q$ Y& W9 @6 \6 B }
' w) H2 h/ m8 G/ [) C* r+ |3 I }$ e: n, |8 b+ ?6 T- E
/*****************close screen clear*****闭幕式清屏*******************/
2 m& z9 j/ _" r5 d' @; o1 r2 }& \7 |
void bcls(int x1,int x2,int y1,int y2)0 _7 S% r6 w6 L3 W. P- L
{( E$ a" E+ D( s
int t,s,j;
% Z2 G9 b6 U. e: v9 ^ t=y1; w% X# D6 r: ^' g% d& l/ e
s=y2;
7 g8 }0 l+ ~% ^ for(t=y1;t<(y1+y2)/2;t++,s--)
# v) L+ r& A b. Q, @ J& k- A for(j=x1;j<x2;j++){! _/ A$ D5 _/ F+ n3 @, S" p; k, s7 D
goto_xy(j,t);/ ]1 [! ?9 b4 T4 m
putchar(' ');0 m; r+ j7 D' ~( d. X* q
goto_xy(j,s);
4 ?' x0 ]3 m0 E9 R$ ~$ x) b+ Q putchar(' ');
5 {) l4 F: I7 u7 t9 l delay(10);7 I) `5 p, }0 J. F
}8 I+ a5 Y) Y; q: `9 }; ^
}. ]/ k/ @: q2 G5 U8 O. ]
/******************bottom screen clear(自下清屏)********************/
9 Z w& X6 C. d
6 O- H# P8 Z, `' |- A8 a void dcls(int x1,int x2,int y1,int y2)& s# W. R; W& P9 X
{6 R+ X @7 C- @
int t,s,j,i;8 j, I4 d7 h; g
t=s=(y1+y2)/2;
4 @3 L! o- Z9 C8 N; h6 J2 a for(j=x2;j>x1;j--)
) u6 K8 U! Z0 E- c9 f for(i=y1;i<y2;i++){
4 I( s. r( X- ?" m goto_xy(j,i);
/ x1 R' L! n! R) G+ N3 f% F2 h$ b putchar(' ');% n0 K0 V8 ~! V8 ?" J
delay(10);
' b* q0 x& X' i! k }
' N; n8 l2 K. \ }
0 N: x9 `0 l' a /******************设置光标子函数******************/
% K* w. C& N7 O1 E
9 W g4 W% e# [$ M void goto_xy(int x,int y)+ G5 F* y- \7 {2 B6 _4 V9 e5 _
{( J0 }; O( n, \* Q# t
union REGS r;
9 h& j! i1 z. f# E r.h.ah=2;* w1 J; S( O+ }) Q- P) Y) W
r.h.dl=y;
$ |0 a2 t5 [$ c! g r.h.dh=x;- j* `; | J {
r.h.bh=0;, L3 Q- y1 R( k3 T. z% Y/ v
int86(0x10,&r,&r);# U8 A1 \1 Z' X" C4 ~/ L7 V0 T
}
) s2 E5 u; D0 P% k, H# {0 y; v8 V/ ^8 d
/**********************在屏幕上打出一连串的a字母用于演示程序******************/0 X; N! K- K; B$ q- u+ b
- M, L( l- Y4 N: }8 s+ l" B void puta(void)
* O, n; f! ~; {$ j1 W7 e1 K {7 J, I6 y$ a; C1 }' o
int i,j;5 ~# {& \4 k- w/ O5 D
for(i=0;i<24;i++){! a v8 `) Y3 L P$ Q# e
for(j=0;j<79;j++){! o4 y% U; P5 B
goto_xy(i,j);
3 a; E- H* a8 @! d printf("a");
- }% s" s; _$ G; c* m0 w }
, }! f2 U) r8 w; `9 p" h! x }
; f+ }# U) c6 [( a c I } |
|