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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& I( x% S$ Q- e m3 ^, B5 ^
2 J/ K# E/ V! [, D" S 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 ^' Q# ~5 z$ H, }$ ~: G! N8 i
. I' z2 l; j7 j7 J8 R, G( x
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 C% W) q" h! a! h1 U% Q
子函数及演示程序:
# H& F. w3 B/ N- s- A g4 o* J' x+ t& R
#include<stdio.h>% [; i+ m9 y2 c$ h
#include<dos.h>
5 V. Q# U! [" w9 Q #include<conio.h>( k" P" i+ y/ X9 a/ F2 l
1 I/ r# B5 r* l6 P$ e' R$ m: b
void goto_xy(int x,int y);# }( x% x1 `: y; f) N6 g7 V/ r) Q. Q7 i
void dcls(int x1,int x2,int y1,int y2);
- v" p/ V e$ V1 H. S |) {8 k void bcls(int x1,int x2,int y1,int y2);
: X5 C# W: z4 ]) J void kcls(int x1,int x2,int y1,int y2);
/ ~$ |4 W4 Z- {4 Y9 K) m void recls(int x1,int x2,int y1,int y2);
7 I% c4 b3 j. F void zcls(int x1,int x2,int y1,int y2);% h; h$ W0 W4 B+ p% C0 X8 A
void puta(void);
; C }# s+ {3 o. A3 @+ Q) _5 J- w A* `
2 v1 y0 F! F; D9 X# t' F
/*--------------演示程序---------------------*/
% v3 m2 u4 Y0 M+ A& S" l" H* H main()
; e. f7 z( `+ Z {
) a$ @+ M' X' S! ? puta();
+ i( B s8 o( `2 f+ ?& t getch();
' h, M+ u4 i5 O+ \7 N, ^' N dcls(0,4,0,79);
+ k, A, `. F" y+ x5 r$ `4 v; c getch();
& U0 N2 S( `# Z: l, R puta();
, v8 Z: ~4 n) {8 R1 L d* | getch();
: k. T0 p% t" W( { x5 z+ \' L! f1 E bcls(0,25,0,79);
& M# D Z/ p8 w* z" m2 V* B getch();
/ g' L: x* U1 w; X puta();
' o* X3 V% b; n) \: E _ getch();
6 @; J5 R8 u" Z+ d6 b3 T zcls(0,25,0,79);
' q" t& g: R2 S getch();
- m* ^0 E! [. L) a% i }
; w6 _. p; I0 w6 C2 X5 _ /*********center clear screen(中心清屏)***********/ s( q# h" n/ c, k8 X1 Z
void zcls(int x1,int x2,int y1,int y2)) e+ s; x& J' Z& Y1 b* n
{
! f) Y4 y* L/ u E- e; q+ ^; U int x00,y00,x0,y0,i,d;% R; H7 Q# z: d3 Q: {! F: v
if((y2-y1)>(x2-x1)){4 r/ [0 ?5 u4 P* r3 N4 d2 x+ A
d=(x2-x1)/2;
' @8 Y. A. ?6 ^ ^# o7 J) W x0=(x1+x2)/2;2 b& ]+ A1 i! T
y0=y1+d;% F' b8 J0 i0 ]4 B
y00=y2-d;
% `* C v2 z: t, w ] for(i=0;i<(d+1);i++)3 O; r K: X9 l- m3 r! Y5 v
recls((x0-i),(x00+i),(y0-i),(y00+i));
8 p5 l0 M8 o$ c( M; d delay(10);. m' d. K* D% M. ^8 _( Z
}5 @1 `9 c/ U- J- s0 {8 z+ O
else{6 z+ i% Z& N- B5 @! Q0 R* f
d=(y2-y1)/2;
D2 @6 Q' g% @0 v0 c0 }1 U8 w y0=(y1+y2)/2;
/ z+ K( s$ C5 |0 z& R1 ?8 u x0=x1+d;
4 v8 b: w1 C. T x00=x2-d;
6 {) N3 p; O, M3 d for(i=0;i<d+1;i++)3 _- V! T$ |% A; @: a8 w
recls(x0-i,x00+i,y0-i,y00+i);% S# `7 L8 M9 n9 ~) b( c, n3 |8 z) X
delay(10);6 m4 w" o3 c) J. x r) d
}6 T3 l5 \7 C+ m# V0 }- R
} I# a2 |1 J) z/ F4 o! m
3 T( t+ R6 R4 l0 ~7 J
/************* clear rectangle side(矩形边清屏)***********************/
5 K; ^9 |" ^3 x2 c, o. \0 y2 q2 i" p) Z$ [$ s9 k% H
void recls(int x1,int x2,int y1,int y2)
' h: h2 {& f4 X. ?) C7 N2 S3 Z {
% R; F! K* `3 h# f int i,j;
3 R8 N- U1 C- ]) a* w) G) I for(i=y1;i<y2;i++){
* X; C3 _; }- \! Z6 q9 A+ V8 X goto_xy(x1,i);
( F5 w) L( l, {, r4 v putchar(' ');+ A9 b9 Y9 s$ r G6 R* j+ `
goto_xy(x2,i);5 n! J/ y9 L4 h% Y4 ^
putchar(' ');# l D+ G1 O* t* z
delay(10);
' Z8 q8 i5 l& q' k" ~- @ }
' ~8 s2 B/ G0 E7 ` b+ G! z/ ]& M for(j=x1;j<x2;j++){* U0 H! b8 |4 ]; l6 O/ e; `* @
goto_xy(i,y1);% ]( M0 ]- N* x: ? J+ c/ x
putchar(' ');3 W+ ]' H6 u1 c2 J
goto_xy(j,y2);; E [- S; L Q
putchar(' ');
' G! C2 a F* ~; i' u delay(10);
; n9 n* {# h4 w: a- S8 Q }
# F: `1 y$ c4 J! B+ M& J# B9 [ }3 k& Y! r1 x8 J4 u3 H
/******************open screen clear(开屏式清屏)*********************/$ F4 B" R- N" b0 C) r
1 A2 |4 h" K* l6 m: [
void kcls(int x1,int x2,int y1,int y2)
, a! R- `" I8 ?6 a" Q$ ` {8 Q9 Y {
" ]- c7 r! o3 ?6 N int t,s,i,j;- c% o1 Z. f- M- b+ g- y% c/ Y+ \
t=s=(y1+y2)/2;
$ r: @5 J# P, h4 g, _ for(;t<=y2;t++,s--)
) R8 l) T+ \4 `1 E, q9 \9 \ for(j=x1;j<x2;j++){
' B4 N6 }8 c+ g) Z+ @! I+ R, P. j3 \ goto_xy(j,t);
9 ~7 ?2 G0 Z( r% \! N putchar(' ');
7 t7 R# a% P# V goto_xy(j,s);
3 K$ X# Y$ y( e3 G, D" |# A" U putchar(' ');
* ^+ }9 c) p+ b8 p* e delay(10);
) L/ {: L) ]/ s; V }# _7 |3 g9 k. _
}) _0 g, u' h- H7 O4 G, r4 W
/*****************close screen clear*****闭幕式清屏*******************/# [ ]" b8 B# K* F, A) ^
5 ~1 P# A$ r3 V void bcls(int x1,int x2,int y1,int y2)
7 \9 @! ]3 F3 x8 S9 Q- `. z {
. ~, _' D' W( i. a+ ~; c& ` int t,s,j;
, Q$ ]$ ]2 e+ F) M" ?+ h t=y1;* a( @/ B! Z, n, T2 l4 X8 x4 W
s=y2;, \9 e, e0 O h$ B% Y
for(t=y1;t<(y1+y2)/2;t++,s--)
* t8 P, O1 u8 Q1 C. E& t# c for(j=x1;j<x2;j++){0 {) G4 p O2 f, }" X' S
goto_xy(j,t);; ^$ i0 j: A0 w; V1 q- \! T( E9 Y
putchar(' ');
; ~/ T" @6 R, V9 P! |: B+ Z goto_xy(j,s);
* f! W# c$ m; i putchar(' ');, e& V/ k6 _; d* X G. ~
delay(10);
4 c9 o2 ], {# V5 Q9 _: k* x1 b }+ ?/ e8 x6 S" s% b8 q- K
}
. ~* N6 U' _' H /******************bottom screen clear(自下清屏)********************/
+ x- c( @8 M$ F! U5 a; [) L( a ?3 H: T) @
void dcls(int x1,int x2,int y1,int y2)' O/ T- V8 C8 r# T$ Y
{
$ ^- ^: c8 \! l) |+ T1 @' |4 } int t,s,j,i;6 F! ~8 _3 r* [: g( ?* U
t=s=(y1+y2)/2;, G4 p7 F2 r* t$ G0 W2 |2 h* J8 l3 K
for(j=x2;j>x1;j--)! f7 b% o0 n1 ~6 L8 \5 [ o
for(i=y1;i<y2;i++){
4 Z1 S4 n$ E5 Z$ l9 `" U9 W goto_xy(j,i);
9 ~2 r: I" k8 p5 z putchar(' ');
. F* c$ F* T# Q% i; [ delay(10);
( }/ t! n8 f5 w- {4 x: {& \ }% w, G5 }6 S- L/ S" O) M# q9 ^
}
' H9 g/ J! c( } /******************设置光标子函数******************/
( S4 y2 P4 M4 h
. W7 Q+ x# ^7 E6 J7 N" V- ~ void goto_xy(int x,int y), l d5 S4 R8 f
{3 I' ]0 C7 q3 I, {9 V2 H
union REGS r;! p8 r8 S9 q& U* W
r.h.ah=2;5 e5 Z2 n/ d. @$ T1 I& r o& H5 e
r.h.dl=y;2 W* y' T$ }6 P% U' A! v
r.h.dh=x;
/ Z1 M$ C+ G7 m# }+ Q r.h.bh=0;
7 D2 Y; W" z! \* z: H int86(0x10,&r,&r);
) K$ u+ j3 S2 Q) t! O/ r }
7 [# S$ k! H- G, {% d9 T9 y7 a; a% Y3 D) a
/**********************在屏幕上打出一连串的a字母用于演示程序******************/" @& `; [8 ` \- f" [
$ W/ r e6 }& C! E8 z void puta(void)
/ m7 U9 j( ^8 H( W! H% Z {" C+ j. ~/ z- }2 }1 J& [
int i,j;
2 W- _" @" ^. I, d$ Q for(i=0;i<24;i++){
- z0 _3 t3 D/ s0 g2 A for(j=0;j<79;j++){
8 ~$ x. `- V* ^. v goto_xy(i,j);7 s2 I7 j- V" f' D0 M0 [: G
printf("a");" }6 k+ r* e: o6 ]
}% [" s2 B* l8 Y$ L% d# B1 u
}
4 ]! g+ M2 |6 u$ p& l* `( @, s } |
|