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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ N+ L6 X, b5 m& E) v# p& t
, v2 C+ @$ X* K! E6 K 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
8 c' B* l- I e2 |; {7 f+ \* O
6 O! V- u0 |: Y: k1 m' [/ h2 L+ s 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ B5 [7 ^0 b( |+ Z) s; H0 o% Z 子函数及演示程序:
$ ?/ B# n7 U2 s5 l c r" C1 t7 D9 W/ G* Z C7 V$ `+ |
#include<stdio.h>
- T8 y) j$ ~( R2 R' R #include<dos.h>- m' z2 i' }3 r" Z" J3 _; O
#include<conio.h>
, B3 | V: c9 M7 R" ]/ D( r
* i$ |0 y$ Y: E1 ~& b void goto_xy(int x,int y);
0 N1 G/ U/ o/ ]1 { void dcls(int x1,int x2,int y1,int y2);, O4 C' @% Z' {: V1 m
void bcls(int x1,int x2,int y1,int y2);. p( o: e8 k* q+ x. I z7 ^" B# I9 i6 o
void kcls(int x1,int x2,int y1,int y2);
$ p5 O0 {, U2 I$ y void recls(int x1,int x2,int y1,int y2);
0 o6 w7 q: P7 I; x- ? void zcls(int x1,int x2,int y1,int y2);
" J6 E- C; Y+ m5 ~4 Q# f, p$ p void puta(void);
% n3 v4 v3 Q+ c
( J& b& I. u& G2 R1 V8 @( B+ X" \. {% K9 S
/*--------------演示程序---------------------*/
$ l) q% Z k7 T main()5 P! O0 T7 j7 Z) E
{! E1 R$ j/ o$ i7 o- a9 u6 c
puta();( k2 o' {, e* G2 p; w
getch();
. U. E( ? P3 @8 m dcls(0,4,0,79);
( _2 Q' Q. J) e) D+ U getch();. F4 r4 E ]6 L- y1 S
puta();- l, S. X) q `
getch(); M% S1 j5 \: ]: K1 N1 ~/ |
bcls(0,25,0,79);
% \; N0 h* }/ t getch();: C# P, Y9 ~" y2 V" F$ W
puta();" H" w+ d3 C) }! [# x
getch();
+ W2 S, Z" m) y$ r4 E: n ~ zcls(0,25,0,79);
0 s8 q( ], r( m, l7 B+ | getch();
% h7 Q! y( R$ J0 P& v3 O5 { }1 [+ P N5 F% L( ^! l _+ q
/*********center clear screen(中心清屏)***********/
( `+ h' V/ A1 W3 H void zcls(int x1,int x2,int y1,int y2)! E4 `9 ^+ v1 F' C6 u( ?, N: T5 Z
{
9 r2 J X6 a. y/ x int x00,y00,x0,y0,i,d;
8 v; ^4 u! q( m( `+ g, H; h if((y2-y1)>(x2-x1)){6 Q" N) M) A) K1 v* N
d=(x2-x1)/2;
+ H, o0 L7 b7 G2 e x0=(x1+x2)/2;2 R% }9 r" ]7 n* m+ L: u
y0=y1+d;
& d1 A+ h. @4 \; H' K T9 @& m y00=y2-d;; l* C U2 {, D3 M. L t
for(i=0;i<(d+1);i++)! S' N* D4 ]& N7 f% e/ x J
recls((x0-i),(x00+i),(y0-i),(y00+i));" u3 H7 I1 O3 V+ t
delay(10);1 r$ Y p( ?4 w
}+ y5 `! u% P4 x7 p( O2 b3 M
else{' w i% u6 c- X2 F
d=(y2-y1)/2;4 }8 m6 Y$ {5 _% t g8 j$ N; G. r
y0=(y1+y2)/2;
3 f _; I7 m+ M9 v6 y' q x0=x1+d;; y9 e$ q% n7 ]2 O: P( `5 R
x00=x2-d;
' o& t/ T5 h3 Z0 m0 W! a for(i=0;i<d+1;i++)
; T+ c6 G8 C' B/ E' A5 t2 w recls(x0-i,x00+i,y0-i,y00+i);
7 a8 B* ~3 o" r% j, o delay(10); `$ x. o4 `0 d% @$ ]8 p
}* J+ w8 T5 J1 l9 C1 [5 _# X
}
- y; X! _) S/ B/ l1 g# z$ y0 e! U6 N' V
/************* clear rectangle side(矩形边清屏)***********************/: T/ M7 t# g" F
- N$ t7 D/ n+ _2 m4 s" `7 Q& e1 M void recls(int x1,int x2,int y1,int y2)
4 D/ |% f3 C( B1 P0 l {
5 q5 N) F' R( P. l. x$ h0 h' ?* h int i,j;# ~9 n) {/ }$ s2 l1 U4 O
for(i=y1;i<y2;i++){
4 H" b/ w9 |( c% ?. R5 o9 a+ P goto_xy(x1,i);
# `0 |8 ?5 e. w8 v5 {4 V putchar(' ');
6 a* E( l) C- j0 S8 [ goto_xy(x2,i);
# J7 b; H \2 ]. L1 H putchar(' ');" X: g2 t& @8 i& o0 T; L. K: P
delay(10);
5 z8 z, c4 A4 X$ Q+ Y }# M; ?1 ]0 W' ?5 P( v
for(j=x1;j<x2;j++){
2 W: }1 b g- { c goto_xy(i,y1);6 q3 A8 U" e E' g: _3 F8 }% V6 g
putchar(' ');, h+ s: ^: z7 H; V4 g0 u9 G; H4 }
goto_xy(j,y2);+ \1 }' w# K8 _! W( m& S8 y
putchar(' ');
# G* \8 Q) {& k) f5 M& Q delay(10);8 Y) e, e! B: i: C0 q |$ @
}
, M* n2 }4 o, W3 a# m }5 G5 q$ r! X( D4 k, M% w0 {
/******************open screen clear(开屏式清屏)*********************/
- [* P0 ]7 \) e' }" {3 D5 w# U( K& o' t9 j
void kcls(int x1,int x2,int y1,int y2)
% f. c" N# b7 G" ^4 [0 a2 x+ J" ~' O {. P- |. N$ A. n' L
int t,s,i,j;
# h5 E4 c3 h7 t- @ t=s=(y1+y2)/2;
! ]1 d B" K l1 u for(;t<=y2;t++,s--)
. L" c H8 D2 J2 | for(j=x1;j<x2;j++){! f9 o, q5 x8 z2 ~2 a9 }# G
goto_xy(j,t);, H2 f7 ^) B3 ]9 D" U4 O& @4 d; j8 [
putchar(' ');, R4 ^. j! `* a* J q+ K6 T7 i
goto_xy(j,s);
6 L& w" N% ?: o6 w- o$ u putchar(' ');) R, g; f4 F. `1 K& j$ i7 l
delay(10);
* A$ s+ m4 U7 n3 C2 z' i6 a7 M }
; S3 `' a# w! a }" x! f7 C* G, A
/*****************close screen clear*****闭幕式清屏*******************/ _" v* [8 h1 f) p& [
) \$ D3 F# E8 m7 Z
void bcls(int x1,int x2,int y1,int y2)
0 Z# `. e3 ~8 X; \+ k {# D# _. ^* {9 w' G* o# E3 T
int t,s,j;% ^' L0 ?# O- G+ i& T( o
t=y1;
, ^: ^8 W# L; f- \5 G; b, ` s=y2;
5 V) [. [5 C; O# W' e# V) r+ s* r for(t=y1;t<(y1+y2)/2;t++,s--)# G9 w/ e" r+ p0 q) p6 ]4 [3 ~
for(j=x1;j<x2;j++){
! l( n6 Y q9 v5 c( J* v goto_xy(j,t);9 x' ~$ R% {6 h! _' v2 q" I
putchar(' ');: }, _9 V0 X7 y" u0 b6 v8 ^, I
goto_xy(j,s);
, C2 H5 f/ Y# Q; a% C putchar(' ');
' f- J5 `1 R- M% W E/ E0 q delay(10);, @4 X! o6 x4 `6 R1 V$ l
}, k! P p9 q) `$ \
}# T( B+ m$ S& s
/******************bottom screen clear(自下清屏)********************/
3 r' k( @$ }, P o: a# g& R) w3 X+ T. O1 @ E% Q% E8 `# z
void dcls(int x1,int x2,int y1,int y2)8 s+ V8 \& K2 A+ _8 I! [* \/ z
{% w- A, O. U9 o$ S# @
int t,s,j,i;6 E/ e% l# w2 H0 k( y, i* w! t; L
t=s=(y1+y2)/2;0 ]6 b# y5 f$ R5 H3 K8 U; @% @
for(j=x2;j>x1;j--)
; k& Y: `) Q8 C+ i4 s for(i=y1;i<y2;i++){: R. G: H, s% D8 T
goto_xy(j,i);
7 \$ R4 w( P2 v9 C- | ?) A putchar(' ');
; X5 p3 Y. |" B6 ] delay(10);
K! Y" D+ M9 R" V }
( S6 T! K. F1 k* W+ l7 M }
2 q5 T2 R6 o, ?# Q! R2 P: k /******************设置光标子函数******************/
1 p* U" g; }* d! U; \# d! S; v) U6 I
void goto_xy(int x,int y)
0 J- K" ~) j, N& i0 i7 S! _ {
7 h3 m$ B+ t6 V; F' r union REGS r;+ l- J- O0 ~7 r t
r.h.ah=2;
+ Z% ?" Q3 t6 | r.h.dl=y;9 ?& Z' L5 q, Z
r.h.dh=x;
& e# B: O' f8 l0 }. [ r.h.bh=0;
7 l) a/ h* _0 x+ a% U& A- t int86(0x10,&r,&r);! T( K4 h% _1 C6 d; ]8 G+ @4 T7 b, o3 T
}
m1 C& C* G+ ]6 T) H0 ~, ^- `- j% L7 p" B
8 m; I4 d$ e3 o0 ?4 Q /**********************在屏幕上打出一连串的a字母用于演示程序******************/8 }5 z' X1 ?% i6 Y9 ~- _
+ x/ ?& N; w2 [$ ?( p( g void puta(void)
* c( q5 T: g" ?2 a7 j {/ z% s0 r& v9 x& |* R
int i,j;# e' c0 _/ W3 i3 [
for(i=0;i<24;i++){, n9 U+ I0 `0 m6 h
for(j=0;j<79;j++){
/ E( g" q, R1 t3 J' y7 }/ | goto_xy(i,j);
% e9 y+ w. y6 }8 H# v7 { printf("a");" i* s& O6 M1 z& c; m- x
}
6 w; K: j; { u* i }
% ^7 A, A0 l5 q0 O3 ? } |
|