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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* z" a/ Y2 P5 S7 d8 t; b0 n6 J4 c& u. V
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' x7 p0 D! P( S
7 n; z" D, L# }' c* t+ L 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
8 t+ y ^" H, @, }5 `# d 子函数及演示程序:
( c0 m0 r6 q% ]$ x4 p* M m3 ]1 _0 u( L
#include<stdio.h>! W( _" P2 g; M. m0 B# _
#include<dos.h>
; m( I# t. d2 N; @ #include<conio.h>
. P- S6 ]' N9 G* }+ `
% ]1 F# M7 c% M- g void goto_xy(int x,int y);3 O5 @! A2 i" M& V% K7 c* K$ R
void dcls(int x1,int x2,int y1,int y2);
8 j: j f; w0 Y6 x/ k! R void bcls(int x1,int x2,int y1,int y2);
0 n& ]" Q9 Y* C& G6 z. H void kcls(int x1,int x2,int y1,int y2);
$ ~5 A2 y4 ~. ^9 [1 ]& x7 { void recls(int x1,int x2,int y1,int y2);. |+ ?; T7 _/ h( B+ T5 M
void zcls(int x1,int x2,int y1,int y2);) N, m# v+ o5 g
void puta(void);
! g# h- Z% S- i" B7 Y& `) W( Q
7 s! Z" L6 A$ G0 Q, n+ F, F) Z
, X+ Y' }9 s2 ?# R /*--------------演示程序---------------------*/; ?8 M. u c8 s
main()
' A3 ^" P9 h% v, w {
0 m8 w3 _* o5 S1 K7 R0 Z9 m puta();3 S6 G, E+ C P, r. R5 ]3 |$ }
getch();
( A% e; O) l* v' [1 y dcls(0,4,0,79);" \/ A# K6 {/ k, h( I6 H
getch();1 {4 |! ~5 x& O
puta();# p7 L8 {* i L j3 W" _. ]% f# I
getch();
8 T8 i1 {! h: Q( J% i bcls(0,25,0,79);% S# G1 Q. X; b1 o7 V
getch();
3 l# B3 O$ M1 N5 d9 L4 ? puta();) d; e1 v& K1 `* E$ }% c" U) n% b
getch();% A1 f9 ]5 F9 {1 `
zcls(0,25,0,79);
, u; R5 h2 u5 T+ W9 a2 x getch();9 S( @+ G" _& s! Y4 Y+ @ D
} b$ U8 i$ O9 |3 H! Q
/*********center clear screen(中心清屏)***********/) ~! c; k# H" b: D5 }5 p
void zcls(int x1,int x2,int y1,int y2)5 y4 C9 M. x. O" a9 ^, ~9 }
{
( [* q. C+ l" `& q! _2 k int x00,y00,x0,y0,i,d;( y# y( F0 ]7 ?6 c
if((y2-y1)>(x2-x1)){6 w, P, k; `6 o& s$ v+ R+ D5 F1 ]* Z
d=(x2-x1)/2;
5 l# i& q N ?) j x0=(x1+x2)/2;
* t" h( K: H: x+ P3 Q2 R9 }) N6 j y0=y1+d;* z7 G7 O0 o0 B( F
y00=y2-d;6 l) z: E7 N$ R3 `# ]/ J9 G
for(i=0;i<(d+1);i++)* I O7 p* K1 [9 f @
recls((x0-i),(x00+i),(y0-i),(y00+i));
1 W8 U+ o; w. s" H- Z% B2 N delay(10);
9 d, M! V b3 w3 R. \8 ?9 H1 a( ? }' [& B$ A# j9 I4 w
else{
( W2 [8 E x; z, v8 n. V d=(y2-y1)/2;
6 o- L9 ^( G. k. |- ~ y0=(y1+y2)/2;: j- a6 j& t! J7 F
x0=x1+d;. z/ q- ^; Z1 Y- S, @/ \
x00=x2-d;9 n: ], E- O; D R4 p) A& C
for(i=0;i<d+1;i++)5 v/ |$ D% [: `' ~2 [7 S' [5 ^
recls(x0-i,x00+i,y0-i,y00+i);
; _! X$ c% K# l7 p* {$ s delay(10);
9 I4 @6 {1 d& J+ v6 j8 ^ }6 z B8 u7 o7 |4 X; Z' W
}
" k& y8 b. i. W! y& y" f6 B: V) P& x8 a# o
/************* clear rectangle side(矩形边清屏)***********************/$ a2 {' P; J2 Q. o
$ [, C, u9 ~5 N2 O void recls(int x1,int x2,int y1,int y2)
& h; y: R5 P6 l* W {: t. W- {4 R* |* c- d2 R6 ~
int i,j;
* G* n5 w5 T! [7 F# v% j2 | for(i=y1;i<y2;i++){
+ z# r4 X* w) K; [9 f goto_xy(x1,i);8 }; F) b, a( p
putchar(' ');
9 |. V& i z& l. r+ n- X* d' i goto_xy(x2,i);
! ^' w5 [6 A, [! u% n3 e$ \9 W/ R6 b putchar(' ');
) X) t8 N% V0 [1 t9 M/ a delay(10); i7 U: R# o4 T+ F
}3 B9 {! S) `: x$ N) O' [; I8 ]; M
for(j=x1;j<x2;j++){5 h1 n; v& K# P8 x3 D$ k+ j: w. |
goto_xy(i,y1);" U/ l/ Z$ ~$ M0 I$ u
putchar(' ');
& b1 J1 Y* M6 N; B5 [3 n4 S/ N$ W( F goto_xy(j,y2);9 R' b* ^' m: z, L- T
putchar(' ');: \( D% E) C. d. n
delay(10);
! p6 p ?/ G" E }
6 r$ \) @$ b. g& q; L" v' A8 \( O }
; Y* o) `+ A5 M8 j /******************open screen clear(开屏式清屏)*********************/& Q0 {/ R) L3 U6 Q5 ^0 V# R
D5 {2 Q1 q# U1 G( K void kcls(int x1,int x2,int y1,int y2)
% w2 t( a `3 x* C2 R3 t {
7 Y1 m' f- L1 \# Q int t,s,i,j;" _; w. n0 E6 S. U& ` `" p. v
t=s=(y1+y2)/2;
! e+ S6 P+ J& P+ a7 [" j for(;t<=y2;t++,s--)* p* \6 i+ Q/ O; d, _+ ?4 j! [
for(j=x1;j<x2;j++){
. m# k0 n- [$ M4 \7 q8 V goto_xy(j,t);% `7 z% \) U3 o. e* P
putchar(' ');& h3 i& ^/ S! |
goto_xy(j,s);
) I% v7 H4 w4 F putchar(' ');. j2 ^$ C. i' K; r4 Z: o
delay(10);, y2 {+ Q C A# Q7 c- g+ Q& o4 k
}, F: u9 j" [: F# ^
}
: s5 U0 O8 w) s* g4 J. R# b /*****************close screen clear*****闭幕式清屏*******************/! r7 j1 ~2 p3 L* b2 k
4 L' F1 s" K( c
void bcls(int x1,int x2,int y1,int y2)
: c- k% j: }% u {
: R. F" ]% k2 L& D# J% Y int t,s,j;
: Z1 |: M) C( w0 O' h1 b5 Z9 z t=y1;0 o1 v* m: ~. P4 C7 s5 W
s=y2;
) `/ \( y% s+ U for(t=y1;t<(y1+y2)/2;t++,s--)
3 Z$ e( z: p. ?/ Y' x for(j=x1;j<x2;j++){
' c* l5 m0 E& D! T, e1 o4 S goto_xy(j,t);
. U* Y+ V) h+ V# D5 t! w* P1 X putchar(' ');
( S; B: o$ P# P+ J goto_xy(j,s);
+ M* V# o: G/ C, r4 ]; @3 f. j: ^ putchar(' ');
! ]$ X& f6 q% ]/ E8 [6 e0 r9 L2 ? delay(10);0 @; f% o( K: @* w" d4 b. \" o1 [, B
}
: a' R3 F: O- p }9 H' ?8 M8 z+ T
/******************bottom screen clear(自下清屏)********************/& t6 v u1 Q9 ]5 E* M
9 {! g1 L' v5 q void dcls(int x1,int x2,int y1,int y2)
. t* E, m6 ^- J9 c) |% \ {8 X0 B3 [( S' N2 Z; a
int t,s,j,i; P& |3 I% U/ @& r
t=s=(y1+y2)/2;
& Z" b* L# |+ m) ` y' t* z( R* t for(j=x2;j>x1;j--)3 L* e, ^: S. P1 k
for(i=y1;i<y2;i++){
; t$ e5 l( q H& c. N+ J goto_xy(j,i);1 }( \$ P* E7 ~
putchar(' ');1 s$ X" `( C7 r2 G- B+ i: X0 }& G
delay(10);
7 s3 G+ ?+ t5 j, F8 F9 g }. R* D8 s' Q0 P$ s6 {
}& n6 }7 b7 c6 g7 ^6 s- Z
/******************设置光标子函数******************/$ x( `7 o/ Q* E5 ]5 f. t8 u0 `" T
" J* J. h. x! E+ x! ~- S5 {; ~
void goto_xy(int x,int y)/ k9 Y) r3 d) Q: X1 R
{* T, y% |; g0 z0 Q
union REGS r;' K) F9 H' Y+ ]# h
r.h.ah=2;
( A* r. V' w5 ?/ N& T9 P r.h.dl=y;, M* i+ {* U0 G5 g/ m9 c+ Q
r.h.dh=x;
7 z' Z0 k- z8 x2 c/ l8 F2 v r.h.bh=0;' l, s) N! ^' E& ~: D
int86(0x10,&r,&r);
3 {% m$ w& T! l0 v }1 L7 G9 U$ F* ]- m
* y `0 s7 Z0 N n/ S" y. i /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 t1 I2 s' E" P: E, m0 U+ h
p. N1 d$ p' ?$ n; P* D1 m void puta(void). ?. J" U/ T- S& [
{
# f4 h, d* u9 C# U- N: }( f( F int i,j;6 d x. X. L2 ]+ A, B$ @: f2 n, h' M2 ~
for(i=0;i<24;i++){
' {2 W: [7 y" Q j4 E! S for(j=0;j<79;j++){% R3 K- W. f) t
goto_xy(i,j);' f* l, Y) x) |: u7 v% \* O
printf("a");
3 }5 q$ {' h3 c @6 I& N }3 w" L0 \7 P/ V1 y+ j
}
, l% l; M, E4 U$ @# V% X } |
|