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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ q2 j9 a/ z% N5 }, K& M' a4 t \2 _) _9 M4 e$ g: p
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" W, {; {; g8 d Q% B4 O5 H( p4 z5 L
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. + U o* [4 H) O
子函数及演示程序:- B/ t- P5 B9 a( }0 t
3 t Z1 R. ~4 s/ z
#include<stdio.h>6 W( k1 K6 Z& E7 L6 ~6 A
#include<dos.h>
7 x3 L, Z; R; K+ }; {7 p #include<conio.h>
( T; M/ S, ?$ ?$ g$ v0 H+ R4 w. s4 m- k5 z
void goto_xy(int x,int y);7 l" Y1 z+ `; _0 ]& z% R% Z
void dcls(int x1,int x2,int y1,int y2);% }: k2 ^" `. t& h7 w
void bcls(int x1,int x2,int y1,int y2);
+ N7 K7 O2 |; D" ^# w- \$ B. B void kcls(int x1,int x2,int y1,int y2);, I0 B6 X6 ~& Q, ~5 q0 [: x
void recls(int x1,int x2,int y1,int y2);0 b; q& J" `; E
void zcls(int x1,int x2,int y1,int y2);) k) {, x2 p4 d5 g: }# U
void puta(void);5 T5 z0 I- S9 B: K' |
' _0 m2 W" c1 S- r; Z
$ |% D5 t) F% P/ S' M0 V! \
/*--------------演示程序---------------------*/ M( O/ r# b0 p9 C* }( R
main(). I3 w4 t2 V1 @& F% I
{
. t2 H' l r' \: |6 J5 A puta();
/ k/ f; p: q3 I8 N1 e getch();
1 n; e+ G: [6 [ j& ^# m; d+ H dcls(0,4,0,79);
1 X5 [4 u) \; r getch();! u3 l- t) w7 f6 w0 T) j! t: P
puta();% a+ m3 _9 | x8 D) G
getch();! ^! R: I, U" s, p
bcls(0,25,0,79);/ \/ X& `0 f# X( D2 ^( O
getch();' ]' T/ u" Y7 S2 Q
puta();, Q' k w' g$ V( k
getch();
/ o' k. Z: s: y1 Q" E$ x, V. [ zcls(0,25,0,79);
u% T# H. u" ^ getch();; s+ c0 C4 e" F- g
}
# C* u9 o2 n" g) b" |4 X, ] /*********center clear screen(中心清屏)***********/! y/ w# g2 ~1 C5 h/ Z8 n- L
void zcls(int x1,int x2,int y1,int y2)4 F( T# u& x; ~
{1 K% p' ~, M3 S0 _9 J0 H
int x00,y00,x0,y0,i,d;
9 a5 H. _4 j: Z: w if((y2-y1)>(x2-x1)){- C* `# t% u. \1 V- ?
d=(x2-x1)/2;. ^3 u2 o. b* I8 q% o
x0=(x1+x2)/2;
7 z9 F9 i @2 j9 F ? y0=y1+d;2 r; v1 U1 Q9 t- D7 n" t
y00=y2-d;9 h6 T5 z, [3 p5 p2 Y+ W
for(i=0;i<(d+1);i++)
; o4 D" V' T0 M1 @( a' {) v recls((x0-i),(x00+i),(y0-i),(y00+i));7 N4 n( {5 Z# i$ c0 {; V
delay(10);
& Z& E9 v% u& `5 B8 Q }
5 e: _2 X/ f2 g/ p& E else{
: r$ G( `- {* v3 k3 U' K9 U d=(y2-y1)/2;
0 i$ M6 I+ }. t5 f( o. ^ y0=(y1+y2)/2;
" {# a; T7 j H3 j x0=x1+d;% U' r' x2 Q& n3 q
x00=x2-d;
0 b) t/ n) }) P0 x2 B for(i=0;i<d+1;i++)
0 N( E% E! n: U% k+ r9 ?& X recls(x0-i,x00+i,y0-i,y00+i);
% U; z4 b- d7 S8 a( A delay(10);
P" z. ]; v$ d+ f- ]" G* e7 C }
9 k; |" S% e3 Z1 P4 L6 K }
\1 a* h% z5 h8 n B2 r V) m8 t. b( t5 o C8 [
/************* clear rectangle side(矩形边清屏)***********************/
- D' T7 _# t7 ^- p! i& a; U
! w6 H0 ?( w+ r/ V) g/ k* C% [ void recls(int x1,int x2,int y1,int y2). v% R! E& |3 x1 A8 i: q7 I+ m; Z
{
1 \) [, o" J0 ?3 D6 h9 F6 S } int i,j;; B# \" u! U% u+ @7 e7 B2 s6 K- I( m3 F
for(i=y1;i<y2;i++){
1 [1 P: j P( Q1 w0 T goto_xy(x1,i);' W6 {; X" w# P' \& X. P) G4 n: ?0 i
putchar(' ');) I1 i& }$ e/ z/ R; F- `) r
goto_xy(x2,i);
2 E0 r3 I' ~& H- { putchar(' ');
* J4 Q/ U+ [" q+ {/ ^; U" n( L delay(10);
8 Z, u6 N) U* F5 z) i6 w& x+ X6 p, e }
! g) G) S) W- k for(j=x1;j<x2;j++){
8 f4 T. q6 t) \8 p goto_xy(i,y1);# p+ X5 n3 N! y5 z
putchar(' ');1 Q# Q* h @' D8 f8 c
goto_xy(j,y2);
" Q. ?3 w. c# k. O: X" d, Y% L1 T putchar(' ');
! h+ J. ?, i' r- Q6 U delay(10);
7 \6 h" n+ E1 Z" N2 f7 C5 f }
$ c7 _( _- R1 [) P }' Q: B, M+ `3 N9 G" n2 U! C, \
/******************open screen clear(开屏式清屏)*********************/6 k: d+ W4 ]; o/ I# ?
6 X3 |! l! O1 ]) {6 D0 ?+ ^- j void kcls(int x1,int x2,int y1,int y2)4 B" S, V: v3 x0 v6 I9 [' b
{
* u1 j! Q, K9 D- i5 \' m int t,s,i,j;
, \; I3 Y' a2 O/ l" B9 U( T t=s=(y1+y2)/2;% s2 V( x3 ^* K6 @
for(;t<=y2;t++,s--)
) q$ x; P$ p4 d for(j=x1;j<x2;j++){
; X& Z9 |% L& `( ~+ ] goto_xy(j,t);9 u" _+ i2 _. r8 Y
putchar(' ');7 F) }" P$ a6 r' V% l! T
goto_xy(j,s);
( R8 O" P {: X# Y9 \" | putchar(' ');
& d5 [. ]8 c- f) n delay(10);
4 y; q& ?8 H( H }
) u: U W6 j. S3 j- Z: e& S }
' \& g2 p v8 z /*****************close screen clear*****闭幕式清屏*******************/( R% i& H# y, n& |6 U/ k8 t+ v: n
8 G0 U" y' f4 q6 u9 n9 ?6 l6 G void bcls(int x1,int x2,int y1,int y2)
0 p$ [( I& U+ @% ]9 J0 P7 `1 m {+ l, {; p9 B1 O1 y% ~8 Z/ E# z* N
int t,s,j;* c* T0 K8 U( z! j, }4 ^/ \
t=y1;$ M" d# F- Y5 A3 P. Z
s=y2;
+ t( U e1 [; t# b for(t=y1;t<(y1+y2)/2;t++,s--)
& n* z2 ?' Q3 ?0 I6 N" O for(j=x1;j<x2;j++){
G; n! o6 k2 J0 F. }4 P4 Z goto_xy(j,t);+ S. h" j5 i7 b$ B, y
putchar(' ');7 s5 n X- g$ }0 l5 ?
goto_xy(j,s); I+ x8 G" W/ X, k2 J3 y
putchar(' ');
5 h$ c2 G9 V1 C( f8 H0 M5 w delay(10);
0 k1 ]' T0 n: ~+ P* D$ R1 |) f- O }7 h, A3 s8 {. c
}$ l+ r& O' d! B
/******************bottom screen clear(自下清屏)********************/" [" K& L0 v8 {1 r0 \9 v
; |8 q" \( b: k
void dcls(int x1,int x2,int y1,int y2)
9 l/ r# o: l- z1 W" \$ W {
0 w) k) o0 Y7 J! g1 P2 C2 b: K int t,s,j,i;8 {* d" A2 g2 F6 f1 u2 Q
t=s=(y1+y2)/2;
+ ]5 a# `6 e& |3 N1 U for(j=x2;j>x1;j--): G+ |% u: s% H, R: o. t0 s) u; h
for(i=y1;i<y2;i++){+ k! v2 W: y3 M% a9 M# z& Y
goto_xy(j,i);8 ~; h0 M" B2 S- u* _; J4 s" x
putchar(' ');0 `* Q) R+ w6 S- Q
delay(10);* o1 b3 ?0 M# }
}9 M6 V z; p' Z
}
2 x$ C1 N; q4 c; X /******************设置光标子函数******************/( }, B+ _; G9 |/ m/ }1 s% G
# w. M! Y M, E void goto_xy(int x,int y): y6 |2 S) k' j! [
{
* `# \3 _& N G \2 L+ R2 m union REGS r;7 w* O9 ^+ X. M( t% J6 T
r.h.ah=2;( h# p: E, ]- j' O! R/ o- ~
r.h.dl=y;* F7 o' G+ v; J: C/ ]1 S
r.h.dh=x;
$ M8 }& Y, p5 F i8 z r.h.bh=0;
. }3 w1 p# d& m6 b) i: X2 \) Z) {$ b int86(0x10,&r,&r);; ^$ i3 o1 k9 H8 W. D
}& v6 r. u" A: b. X9 l( P: v% G
2 E, |% Q8 a1 _) m U7 t /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* ?0 y! M$ v0 m
6 G B/ ]' k! a: _) C$ m% `+ e void puta(void)$ ]5 C8 ]( p) V- d$ A
{ h/ [% \ k7 }! n9 l& r
int i,j;6 K7 |4 W3 ]. f! ~. p* ]' k' v
for(i=0;i<24;i++){- ^' W6 ^, E; w: c& G% B
for(j=0;j<79;j++){% v4 G7 e X, Q2 C( K
goto_xy(i,j);
3 t0 L/ V8 Q9 T" _/ S8 a& { printf("a");
1 O# u+ ~( v: ^- w2 Q# Y" i* [ }* \; W1 P0 d5 S
}0 }- i! A- {7 L. X1 P; h' E
} |
|