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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, L- V9 S" d5 [5 O$ ?& }; h3 P" i3 D, V3 }
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
4 j8 A7 t, o; p" ?# N6 ]6 S* A$ d' r7 W( }. L& M4 h1 T1 O
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 C% ]7 E* J! N% W; H) p% I 子函数及演示程序:
# g R1 R; ^& ^/ D5 u* Z5 o; @5 m w: E, p- H! U0 J* {
#include<stdio.h>- Z) e. A. ?0 }4 }2 J( n* p7 y
#include<dos.h>! j5 |$ h% R d, n8 Z. r3 [
#include<conio.h>
; s# q/ m) V! O2 q, y1 L5 ~* j" O" ~( a& @6 t+ A ?7 T& k" N- K
void goto_xy(int x,int y);6 P1 W# _2 y& h( H3 F; w. w$ K) E
void dcls(int x1,int x2,int y1,int y2);
% T$ y+ z3 K0 d3 k% q0 ` void bcls(int x1,int x2,int y1,int y2);* a7 [) h q8 d
void kcls(int x1,int x2,int y1,int y2);
/ U2 h- O$ \; s# a void recls(int x1,int x2,int y1,int y2);4 l. w W' Y8 V$ J) n1 e
void zcls(int x1,int x2,int y1,int y2);/ r( A3 d% X4 Y0 j4 i
void puta(void);
& U6 i9 [. e! V4 T
, u- |: f5 j. \6 m4 Y g$ E) |
5 D9 j$ Q5 [; [( a9 h /*--------------演示程序---------------------*/% ]- B! ?: K/ H7 C i
main()
; F5 Q, R7 |/ ]% G" G$ U, I4 z {
2 N5 X; c7 X( e puta();9 }5 A' ^9 c- N2 `1 ?, P: z
getch();
* Y( M6 m& V- d+ Q( x6 K2 d dcls(0,4,0,79);& m2 W+ l& C, x4 \# W. P/ x
getch();
, m3 \: M% c/ g' K# ?" @ d4 S; o puta();
. K9 M- `2 p2 _5 S3 E% M getch();
- E3 F# h& [" ~$ y3 y bcls(0,25,0,79);6 B; J7 R' E5 s8 z, [! Q# k
getch();
7 l. l& ]: [) @2 O+ r, j% i0 ` puta();+ s5 M3 j: i. d4 c
getch();
5 X) P6 s J& e/ ` zcls(0,25,0,79);
3 \- {7 `% K! h) f' b* U9 C getch();
- L) `; R. Z+ H7 Y8 z' B* o }' k! |% e4 B( h$ D5 k& X' u
/*********center clear screen(中心清屏)***********/
6 r! ` t! e, _9 N2 n void zcls(int x1,int x2,int y1,int y2)9 T. |1 I* f9 m" c4 s! q
{# Y$ B) S+ t a( d
int x00,y00,x0,y0,i,d;
0 n+ s4 a# i, I. j$ P if((y2-y1)>(x2-x1)){5 w/ r4 ~) b5 c2 ?, i7 N5 v; L q; R* L
d=(x2-x1)/2;
0 C/ ]0 e/ p' w5 t x0=(x1+x2)/2;2 Z5 |$ g6 W/ O6 Q N" |' D, B
y0=y1+d;
0 c( c4 d! ~ |# t; _; N4 @2 X y00=y2-d;
# L# V9 P1 M; w ?% t$ A. Q for(i=0;i<(d+1);i++)
3 }' S6 ~/ R7 h6 A5 M recls((x0-i),(x00+i),(y0-i),(y00+i));
2 f% z9 F) ?& s# w; D5 j delay(10);# P E" T$ ?* p
}
, v7 E/ Y# Y; G9 T a8 h" t else{
+ V" S/ M1 [. J- n d=(y2-y1)/2;, |0 }5 ^+ M1 X* q
y0=(y1+y2)/2;" [4 t) D D! V
x0=x1+d;! A/ H- l. v; O1 ^$ B& l2 |
x00=x2-d;
, k2 o- j" V% F for(i=0;i<d+1;i++)
! x3 |* g" S( P0 b r V- R0 w recls(x0-i,x00+i,y0-i,y00+i);
! Q3 {& P2 J/ U" m, \ P0 Y* }8 Q! Y, d delay(10);# D; i, p$ Z( ^ }, H- m
}
% u5 D$ x4 I5 Y) | }
/ \8 c# b; k1 |$ q& e9 p7 d z# f8 w9 Y, h
/************* clear rectangle side(矩形边清屏)***********************/% I4 X0 b( L7 P7 w
/ }+ ?7 v( e: |4 I+ \/ S, A e6 }
void recls(int x1,int x2,int y1,int y2)
0 `0 p' Y4 x0 P4 X {
/ d, v$ C4 o+ a; d9 [4 f8 d7 D/ V int i,j;
% I6 E; ~* _+ N for(i=y1;i<y2;i++){: P& d0 [* u1 J) D5 {1 ?' {+ \4 A9 x
goto_xy(x1,i);4 ^( z7 X) I, Q; u/ W
putchar(' ');
/ }- }! ^+ Q, X6 e2 s+ G goto_xy(x2,i);! i- n8 y) g( z, b
putchar(' ');
0 I! j: A& `+ J! l delay(10);
+ p1 s5 U) n$ b7 a6 h }; B- W3 p: O6 D% E3 `) h
for(j=x1;j<x2;j++){
: Y2 n# J2 k3 l8 Z goto_xy(i,y1);7 l& F" I' v5 E
putchar(' ');( S, x9 P2 n) \& V% t# u
goto_xy(j,y2);) n; d- W! B( V3 ]7 e
putchar(' ');- @& G4 f, {' ]) j- S& d8 Q" f
delay(10);8 B( t, g! i; t6 d" Y4 b
}5 j7 V4 W1 b# X6 S5 c6 J: ]
}$ o5 U4 d0 q Q; y
/******************open screen clear(开屏式清屏)*********************/
2 R6 F+ c& y$ U. }7 }- a7 v3 u7 {2 c; h+ c. D. G L) X
void kcls(int x1,int x2,int y1,int y2)
) J2 Q* k; y% g8 A, M {
7 r* v7 D2 V8 E$ _ int t,s,i,j;
6 r- P$ N) v: \. z t=s=(y1+y2)/2;
0 O/ l0 n, z& k" B/ a2 {# u P3 O4 j for(;t<=y2;t++,s--)
, g1 [/ j ]1 m$ {0 Y2 T5 U for(j=x1;j<x2;j++){
$ v% M0 \" i! L goto_xy(j,t);
" e# m% a3 u" M8 x putchar(' ');$ S" Q" _" r8 G. }( P
goto_xy(j,s);$ Y9 D( C6 L$ W- o( J0 R( F) Q9 ^
putchar(' ');
: v$ R; X# D! j8 J% [+ |6 ]1 | delay(10);
8 ]3 }& ?6 [( U. ?9 c }
; T) z7 C$ r8 }( u }
4 t2 [, J/ Y6 l: S9 Y& v /*****************close screen clear*****闭幕式清屏*******************// g% `* B! ~5 q- j
' {* Z/ p' F: A( t/ }- s1 r
void bcls(int x1,int x2,int y1,int y2)7 p5 r8 B: C4 o: M% k5 W
{
/ g6 s2 L! M6 s int t,s,j;
, Y( I5 a E0 y! z0 w t=y1;
/ ^6 w! z. u# U- v s=y2;6 L4 n6 o% j0 D5 h( v9 m: s
for(t=y1;t<(y1+y2)/2;t++,s--)
: ]( l1 v7 ?' A0 r' Z7 A' E0 A for(j=x1;j<x2;j++){8 v$ R$ Y9 R& g) O0 W5 f& q/ C
goto_xy(j,t);: T' z* h3 o9 A5 K+ r' R
putchar(' ');- y- ?! ~* B C1 S
goto_xy(j,s);8 U. [# x0 M' f7 L- d W5 P
putchar(' ');( D0 T5 E2 G: Z2 P
delay(10);
% K" l/ r' V. n! F2 S }( M, M8 Z5 M/ F" l8 ~1 Q/ T
}
* l4 G4 i& d9 Q7 m0 z /******************bottom screen clear(自下清屏)********************/2 J+ o. S* T6 ` f7 Y, l
! B y# j2 s0 h* P. P void dcls(int x1,int x2,int y1,int y2)
1 B" H0 z* J3 `- n2 s3 D) x {
/ F8 P3 N+ _/ v5 t int t,s,j,i; z8 ?+ K7 v. N \4 r
t=s=(y1+y2)/2;# Y9 ] p9 H, O) ?0 Y O8 H$ z
for(j=x2;j>x1;j--)
) D& B1 k! i- P/ P) x/ ? for(i=y1;i<y2;i++){
4 f4 ~- K* d4 D* e P$ Y! f b goto_xy(j,i);
1 X$ h* o8 n" N putchar(' ');- u6 m6 d- `. X- e/ U& r
delay(10);
1 e' l, Y9 r2 }$ i# b }
" M b. K' h- W, M4 g7 T( _ }
5 J8 W0 ^; P: ?( h2 R5 a5 b: z /******************设置光标子函数******************/
+ p& ]3 u* v% J5 Y+ w) S) s! {7 ~8 H* {: r P1 Y, [/ X
void goto_xy(int x,int y)" ?2 G1 ]- x# I, w
{3 k J8 f# C' @+ @0 ~; x; p
union REGS r;
7 r' p& E. g D! N) I. m r.h.ah=2;6 a3 k$ o- ^: S; B5 G
r.h.dl=y;, b2 B5 l0 T- d( n) E! v5 i
r.h.dh=x;( r% Q0 z+ n! q' m& y
r.h.bh=0;3 n( I2 R/ u( a7 p7 |6 l! t0 r3 w
int86(0x10,&r,&r);
0 V/ b: [) ^' S% `$ _ }5 `7 f* a1 X0 \, K* P
3 U* x" m/ _& ?9 p6 m, q O% I /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ N1 J$ C% P: U8 k8 Y; T) i; u' M- h4 h) P5 C) z7 E8 P$ Y2 p
void puta(void)
1 H' `" w2 Y/ K; R* L& Y, a {
& _+ [' y& c- E) \! } int i,j;
5 I h3 x6 w' W4 Q W5 c for(i=0;i<24;i++){: e2 e" _( h9 g: A4 a$ |) E
for(j=0;j<79;j++){! G0 Q% i3 M' h2 `: l" E' k) P
goto_xy(i,j);
2 m b/ s8 G, V& n' x5 Y$ n printf("a");0 D$ I5 S! }! I6 `% ~8 i
}
/ L4 o0 a' y; M9 u$ ^ }7 E: F! q" b J2 l1 x- z9 M
} |
|