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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
) v* T+ h4 U! _0 k4 a
; k! I# ?2 g# s% ^! J" P 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 c+ {) V3 }" c0 V, ]$ _5 d, q7 L4 a$ @7 V' w* G0 `
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- ]/ k: w3 `; y5 F8 N" b( o 子函数及演示程序:
1 }) ^' U% O- h8 a+ v2 C' u) X4 |$ {
#include<stdio.h>
* U# K$ G. V3 U* t w2 C8 r #include<dos.h>% S1 I4 Z8 A* J; L: } @( [1 o
#include<conio.h>
- g' E2 ^) I6 @: {( d- [; u j6 k5 f5 R' u" Z% G; o x
void goto_xy(int x,int y);- \% A0 b* x4 W! s% P
void dcls(int x1,int x2,int y1,int y2);4 T2 M! C; V3 ^8 h" N7 q9 }5 ?" s
void bcls(int x1,int x2,int y1,int y2);
; X& T6 H! S- E. v8 y8 L5 e void kcls(int x1,int x2,int y1,int y2);& ~4 S4 E, Z* J3 ?5 o( Z% F4 n8 ~
void recls(int x1,int x2,int y1,int y2);7 b# y- g7 M! i& m" q6 q+ f
void zcls(int x1,int x2,int y1,int y2);2 j* B- V5 {# v* @8 ]2 q- L
void puta(void);9 m6 I* e$ F1 M" j9 X& j4 @
9 N5 R$ a. J4 } x6 v
' E7 b. U! L' Q- x4 r /*--------------演示程序---------------------*/! C1 J( |! z: W1 x
main()
/ l* ~3 S: J% O9 E' S {
0 m; M4 J& H7 ^ puta();
: ]$ F' b$ o8 ?% m9 [ m getch();
8 V+ W% _- Q- N4 y dcls(0,4,0,79);
3 d2 Z- L" x x; q5 G( ] getch();% v) P& N% F7 D3 m$ E) b8 R
puta();
, a" R# Z1 [% Y3 I# B7 S getch(); i* |: m4 e' E0 A, m9 l" Z% @
bcls(0,25,0,79);
( K: H- K/ l' |% S$ W3 \3 ^ getch();. E1 U* ]# Q' K9 K* j. H6 a& k
puta();- [ W$ J' o. W' ?9 B
getch();- i% D. ~9 I6 K$ e
zcls(0,25,0,79);, t1 B* O7 v$ L) u$ s: k
getch();: s' E/ c; c' j. W: k1 C9 @
}
) |: O, t& J3 O1 f /*********center clear screen(中心清屏)***********/
1 F1 W' U$ K' h6 \% v% u void zcls(int x1,int x2,int y1,int y2), w/ N4 G# [% g* a' k
{
! u# B2 C+ G8 O7 |# e H int x00,y00,x0,y0,i,d;1 z/ q& A- g9 _% V1 v: N
if((y2-y1)>(x2-x1)){. R- z4 H* p/ M* v; Y
d=(x2-x1)/2;: c# V& y' ^% L% E5 h) i
x0=(x1+x2)/2;1 }+ F5 k' U, B. d1 X! y
y0=y1+d;. V, p' [3 X! ^- K n' A
y00=y2-d;
6 P, `- b I+ c- H& N" @& o% i! E for(i=0;i<(d+1);i++): B4 P+ c' T7 | F
recls((x0-i),(x00+i),(y0-i),(y00+i));% S, R( M7 ~) K' n
delay(10);1 N9 O) h1 X) [# ^% X
}5 \- z2 S( z6 `. F1 [9 v$ f& H
else{$ c( ~. K& d2 q* a
d=(y2-y1)/2;
7 C9 {% x- r1 B4 G y0=(y1+y2)/2;
! Z% j$ ~" a) U2 s x0=x1+d;
% B, Z8 i7 v9 @ x00=x2-d;% G: ^5 u1 v# y ~( b
for(i=0;i<d+1;i++)
{$ ~; T0 A7 k+ W recls(x0-i,x00+i,y0-i,y00+i);1 E' B. S! C) W7 j* [/ ^" V3 R6 U
delay(10);
( L: s& C" ^% c1 G }
+ ~% Y# ~& J/ M0 G5 e }
7 R+ O; y( X t- R6 m
, t @4 [; D. r& [* F /************* clear rectangle side(矩形边清屏)***********************/9 B* M( G7 K% X( H6 D
v" }" }% S# g' `% Q
void recls(int x1,int x2,int y1,int y2)
- c5 l o/ [( x, M {
. Z5 I0 s6 p t3 Q9 C int i,j;8 y% ^. u( E. G, G
for(i=y1;i<y2;i++){
- g: q {8 o4 y: e goto_xy(x1,i);
) {0 G* [7 F$ \* u. }2 } putchar(' ');& N z+ D/ u7 a$ T! B- t, d
goto_xy(x2,i);; l. G" C7 z1 C7 |& K& n
putchar(' ');. }3 X- g! f" O8 o
delay(10);
- q5 V. n. [ J. z% [- _7 E+ P }
; `& Y% }$ [& A q& o" S for(j=x1;j<x2;j++){8 T ^) @& c$ Y0 [7 U
goto_xy(i,y1);
2 Q& _) d, P) r putchar(' ');8 u( W5 K \: i/ h- Y: H) p4 K
goto_xy(j,y2);: Q3 H4 r. l; l" \0 b
putchar(' ');
4 T6 ~1 P4 ^& s) W! r delay(10);
5 t6 f+ o" o, m0 `4 Q' n0 D& J: T }: `/ U! `, d8 i0 B% W
}+ O6 |6 z( y2 Z
/******************open screen clear(开屏式清屏)*********************/5 {/ I# k2 j( J7 L. _& i0 i1 b
& D# w% @) H! a7 x7 l void kcls(int x1,int x2,int y1,int y2)8 R! y. i; V: V n5 q5 ]
{
4 q M0 a8 S5 V% }# ] u% L" t" z int t,s,i,j;$ _9 ^) J) Z' I: M) t3 S
t=s=(y1+y2)/2;0 ]' i; I8 S9 T7 v K( l
for(;t<=y2;t++,s--)9 }: f% m) E: x" A
for(j=x1;j<x2;j++){
9 k/ m. G/ g, x$ `8 U7 W goto_xy(j,t);
! L; E7 }. [# Z" K# b putchar(' ');9 S3 a8 @- \2 e/ `4 Z( v
goto_xy(j,s);
' w5 Y' Q, C& @6 s/ o: s/ A putchar(' ');6 I2 \- X. r; S3 t3 U: ^
delay(10);
( n: U6 A) I6 t, Z5 J }; u- T1 L- P) i3 @, C4 C4 B& x
}3 k- c5 J T9 Y. {
/*****************close screen clear*****闭幕式清屏*******************/8 ?4 I9 H0 b3 I, ~
1 r9 v' P- ]) K" `# {
void bcls(int x1,int x2,int y1,int y2), Y+ N" M0 d% N' _) L
{5 G) Y+ }4 E/ g+ p( x/ y
int t,s,j;
9 O: A+ S& h0 X t=y1;/ M3 O; u g x: `
s=y2;0 E- D& L H% |' @; t7 p2 W" B+ @
for(t=y1;t<(y1+y2)/2;t++,s--)/ u2 f- _2 [4 g! L: k9 T R7 q
for(j=x1;j<x2;j++){
6 E8 r2 i5 n3 |+ C goto_xy(j,t);2 a2 @ R% u: \! o3 L
putchar(' ');
g6 J/ T7 v3 m0 V% S goto_xy(j,s);
" |' y: i. w9 F putchar(' ');
6 X# j# X& n: ?3 m& ~% }' ` delay(10);
" y# v# _; R7 q }% z$ [5 C- m6 s5 j+ M2 x
}
6 ^' z/ x2 t1 |$ S1 k /******************bottom screen clear(自下清屏)********************/
& h0 z6 h- P9 F* p( M3 a, v1 y5 Q
! @+ j4 A4 E( f6 B2 D: n7 ` void dcls(int x1,int x2,int y1,int y2)
$ |/ d: }8 s; A8 @ B" X- } {2 B0 d. W( J @1 Z& W. R
int t,s,j,i;
7 r. V+ z W: N) S y t=s=(y1+y2)/2;
) P. U+ N; x+ ], G- A/ c for(j=x2;j>x1;j--)
~" E7 {, v& R/ [ for(i=y1;i<y2;i++){
! G' Y: n$ B y. ^# F Y, K" I9 i goto_xy(j,i);% E2 ^. V' [' h2 P
putchar(' ');
% j- S* O$ A5 A delay(10);5 f8 e3 N5 L+ ~, ?
}. r% Z2 z: W: Q9 J3 ]
}
% ?% |" ^) `- k- R7 \: q V5 K, g- W /******************设置光标子函数******************/
: H7 ~, B) S+ W8 V( v% X" h+ j8 d) f$ K( Q) J: w
void goto_xy(int x,int y)% S8 v B w. F5 X7 }, c/ j6 F
{0 O+ M% q; [$ g
union REGS r;
' ^& U. u! B4 x0 t5 t0 K r.h.ah=2;* |. n% P+ y6 l6 A- ^. K/ e4 N" g
r.h.dl=y;2 Z5 K# B' F4 U$ U% `6 g
r.h.dh=x;7 w; h" i) Y t6 L2 s7 m
r.h.bh=0;
2 b [8 v( g, ~, m int86(0x10,&r,&r);
( B- d: x/ ?# X7 K }) i; B4 J; e) R, J
2 ~3 f/ H. ?8 P6 ^$ M /**********************在屏幕上打出一连串的a字母用于演示程序******************/
- o' i! b6 I0 m+ m- R% X$ _$ B
4 {( \8 I0 Y5 B" q7 o void puta(void)
( F0 ~9 t8 ~7 f# H/ [ {) k3 t: t5 w! j6 S) L: @
int i,j;
3 C9 Z2 X6 K% ]% a& v3 H for(i=0;i<24;i++){* P9 ~: L. O9 w* C) s# H: |" c& q3 g
for(j=0;j<79;j++){8 H* q: e' U7 }7 `
goto_xy(i,j);' y% a% L* _7 d: `" h# b
printf("a");& Z5 F+ V1 U; {8 z& T1 X
}
# l+ c/ ?3 W8 m7 k" ] b/ R1 Y6 W4 u }
% _3 ~: j- }( e. H$ j; H) ^ } |
|