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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,! N; I2 d! j. I' _* B* z8 |
* t9 {& W1 I6 G 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. j5 `* X/ O9 U2 d7 _; Z3 v
' w4 V$ f1 S9 z2 Z Y* v 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! Z# [6 E7 B% y2 }% s' e% f9 c 子函数及演示程序:
) W+ H, Q/ V& _8 _1 G( g4 C" |, z1 A& l- B4 i6 G4 [
#include<stdio.h>
& [1 p7 ~$ u$ P+ S: c #include<dos.h>
: G& ^ l1 e5 A #include<conio.h>
5 r7 P! G1 k, b5 {+ Q2 n" M. R a% ~
void goto_xy(int x,int y);" S: \$ R4 k( L0 w
void dcls(int x1,int x2,int y1,int y2);
. x( R: ?* w$ g2 Z* l; a. F8 t6 G void bcls(int x1,int x2,int y1,int y2);
9 C. m- d8 l7 w- g# D5 x void kcls(int x1,int x2,int y1,int y2);9 H( p$ [9 U+ X& |; y; I* n8 p
void recls(int x1,int x2,int y1,int y2);( W/ [# M' Y% Z
void zcls(int x1,int x2,int y1,int y2);
) p% b9 } b* a3 ]3 W void puta(void);, I6 Z$ Z0 U8 ?6 ^4 o X2 T
7 t4 F/ K8 ` T3 E. g' i3 T8 L9 @
* `- x* A! e9 u2 T. J; h/ q9 d
/*--------------演示程序---------------------*/
3 |1 G+ S; y/ k! z main()0 [9 D' s) `+ @6 }9 E/ e& e+ v' o
{
4 r) k8 |1 F/ s; a- M puta();
t$ l3 ~1 n# T% _, p getch();
* C8 y( [9 F; r6 v5 b dcls(0,4,0,79);
) Q* t4 t' k M& ~& {. j getch();: }6 a3 @# i. N% n2 ?
puta();
^8 Y' S/ q' d+ h" } getch();
$ m5 i: U* ?" h- W. ] bcls(0,25,0,79);
* m3 Y8 l9 q7 W p8 R: o getch();1 V% ~+ a9 u5 _2 a( ~
puta();" Q8 r7 G6 P: T# `3 `5 z
getch();; j. C( |. u" U- O; J
zcls(0,25,0,79);
- [; c% a5 C1 {* _3 x1 K& B/ T getch();
5 C! Z' u" H- ] }
, @1 E5 X8 R/ _! o, M /*********center clear screen(中心清屏)***********/
. ~8 Q6 e1 {" Q5 [" K void zcls(int x1,int x2,int y1,int y2): ?8 H! {# R0 ?- n
{
6 h j) s* X9 X0 } l int x00,y00,x0,y0,i,d;
' t2 a z! {4 Q/ M% z0 B if((y2-y1)>(x2-x1)){
5 U! @* }( Z" s* T3 B d=(x2-x1)/2;; T3 W# O( Z# @, Y
x0=(x1+x2)/2;9 `' B( |& w7 L$ D8 t# l6 d
y0=y1+d;" y/ J0 F# d5 s% z
y00=y2-d;
5 M& b' }5 r; @9 P# P4 r1 T for(i=0;i<(d+1);i++)1 v0 x# K/ M6 t! h7 Z# g
recls((x0-i),(x00+i),(y0-i),(y00+i));* M- H) s1 v) ^& w
delay(10); K3 Z+ t8 o7 ]8 o! A7 ` x! p5 A
}- b v) `$ T% `* o0 V
else{$ g+ L9 ~/ v, y2 N7 L' K5 P
d=(y2-y1)/2;; ~+ C) B3 }7 \* L3 |& \' v
y0=(y1+y2)/2;# W. x" L" B3 a* _! G0 r* d
x0=x1+d;
3 [9 K6 g4 @9 e. A x00=x2-d;4 X) p1 I1 A" \0 f) z
for(i=0;i<d+1;i++)
# ?$ \+ a' e `; a) G" O recls(x0-i,x00+i,y0-i,y00+i);
3 V2 j* |: s' h; ]: k delay(10);' z" m# C5 R2 K$ i, R# m- x7 A1 ~
}
$ F$ x5 ]" I# r5 h' s0 J }9 H( O% K8 g5 C/ J8 z* X+ t
. l0 j# X4 ?7 A: f /************* clear rectangle side(矩形边清屏)***********************/
o4 L& y% U3 a$ x6 q
5 a# x+ j1 F( U: M0 F' G void recls(int x1,int x2,int y1,int y2)
- a7 S; c6 h n5 M6 _ {
& M. a' [3 R2 ~* b int i,j;
! F0 k; `- C7 C& A for(i=y1;i<y2;i++){
% k+ P1 ~. X% \) _, t7 C goto_xy(x1,i);# T; ~, B" R) _3 p5 P1 C0 L* n
putchar(' '); @0 x6 I2 p8 M3 W8 R$ P
goto_xy(x2,i);: h4 T; d+ w" P4 X& I( ~
putchar(' ');$ p6 v ~/ `0 ^7 d. i- |0 v0 V
delay(10);9 ]/ S6 j1 H; L4 }2 `# J' R
}
3 l/ _" t: x& L' I/ | for(j=x1;j<x2;j++){
% f1 T5 @( o9 F& G2 U: s- c" K goto_xy(i,y1);1 j6 o7 S" S5 ]% Z2 V# U
putchar(' ');+ b6 g; ~% |7 ]" O
goto_xy(j,y2);( D# x! [; A7 v9 J4 }$ I5 ?+ K
putchar(' '); i1 x9 n. \2 o( S3 k
delay(10);
6 `) {+ n/ y# }' C }
) g! W8 ]5 X& C0 D2 [: @ }
' G0 d" q1 ~: c$ x! ~- _& [* z /******************open screen clear(开屏式清屏)*********************/
$ Q/ g6 B2 _% v' s/ K! J/ C0 | R% z! @! X* M6 j/ z
void kcls(int x1,int x2,int y1,int y2). C6 i7 q& F$ T/ ?! X; B+ T
{3 F0 y2 v" n" ?. U; c
int t,s,i,j;* {$ t, S: M4 ]) @# c J0 ~' c) T
t=s=(y1+y2)/2;
0 n- A+ K, X. ?3 V for(;t<=y2;t++,s--)
. k5 @/ k3 P ]0 p# [ for(j=x1;j<x2;j++){
5 g$ z, `- \% \' c2 x goto_xy(j,t);
C* U/ l0 [2 K. r putchar(' ');
# V, P# A1 I5 ^& h S3 H goto_xy(j,s);( U3 R2 i5 B$ f, k- c; \( ]% X
putchar(' ');$ Q, S+ Z: y6 d1 C0 @
delay(10);) z8 W" Z, N) A! F, e
}
0 R) |4 @* ^* a$ W7 x }' W p% H4 }+ I7 I% F7 V
/*****************close screen clear*****闭幕式清屏*******************/- Q; c% Q# y `* B, @
$ B7 ], @( M& a+ m z6 Y$ q void bcls(int x1,int x2,int y1,int y2)0 Q, m: ~4 e- O. |6 A/ V
{- Z& R9 Y* w B# V+ E; `; j
int t,s,j;0 X$ S8 E) p/ H7 N. C; r3 b
t=y1;% v2 ~; f H( H
s=y2;" x( J: I/ L: T
for(t=y1;t<(y1+y2)/2;t++,s--)
& H3 o: H$ w' ~% n$ ^4 C7 g for(j=x1;j<x2;j++){
, L- S3 p6 g _- A goto_xy(j,t);
- w; y1 q [8 v9 C! N- }; o putchar(' ');# c- l: r$ `* ~; i
goto_xy(j,s);
% _% e' c3 ?: i" U6 ?) x a7 ? putchar(' ');
- o3 X" s+ n8 y3 Q- x2 J delay(10);& R, s" A- A+ j ~4 D& n$ u% }
}
s$ y1 |0 D( ]2 L: K1 p8 V$ \ }( F+ _' H" V6 A$ Y+ T2 y- D& h( K
/******************bottom screen clear(自下清屏)********************/
4 {: ^: T" \! C( ~& J* R- F2 \ Q) G" c J& o; O" |
void dcls(int x1,int x2,int y1,int y2), v& v4 E1 v$ E
{; w* d. b4 R# X5 H% u! Q
int t,s,j,i;7 G! i3 x; r8 C/ Z2 k8 |, ~
t=s=(y1+y2)/2;
1 ]) q. P/ s- K5 s B( g for(j=x2;j>x1;j--)7 R$ Y9 z4 y6 ^, f0 @
for(i=y1;i<y2;i++){+ c ?; F2 E) r+ W. P; c
goto_xy(j,i);
+ [+ b2 k# c6 `; M: L1 L putchar(' ');* v) c+ g; [6 y8 ~$ d5 N; o" `
delay(10);) m% d; h) }3 z9 }- p6 o
}0 r) ^6 z/ N8 H7 z
}
0 m* X. [' j! w( z" R# x /******************设置光标子函数******************/( @" g- c8 M* l. @
4 _8 p! n4 K0 O6 W1 q- |7 |
void goto_xy(int x,int y)
+ u; Q4 A. x6 Q y0 ] {) P6 Y' P: S2 k8 m% d+ a
union REGS r;* z- Z; h- V) F. S0 c8 A' q- o
r.h.ah=2;
* I( M& O0 |' @- Z" J r.h.dl=y;; f2 u4 H. |+ ?& c
r.h.dh=x;
' i6 r, K1 B4 m6 A/ U: W r.h.bh=0;1 c* y# @/ g7 K# y4 }
int86(0x10,&r,&r);0 m- a! N+ O3 x7 |$ o- E3 n V
} V6 @( j2 P; G
2 j2 U* W5 a. i3 j6 v* w8 K /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 [' y; ?( N4 _2 z: v8 d8 p
- n7 R$ ?5 F2 I3 N# g+ m$ R void puta(void)% R" X' z2 q d- o6 C* z0 t% Q
{
3 H* i& j7 N" k& q0 ?+ e int i,j;
2 A8 N- u( D4 W: V) u4 J for(i=0;i<24;i++){
- r% |/ L! ^ I8 v& b2 [- r6 g for(j=0;j<79;j++){% ~: b( U& L! p) O' p/ A: k6 @
goto_xy(i,j);. T9 [0 Q/ y8 E
printf("a");
* [9 Q* Y! {; g! i$ t% G }
9 C6 o) E9 e) t5 L: y# C3 _ }. {5 V8 i$ P, b4 H
} |
|