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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; [+ V- ~5 c/ l- D: }
& M+ |7 `6 D4 Y- F2 `! n. s 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里: M; U2 e4 H" p: A) Y% P3 S
' L6 d5 h1 f M8 B7 x1 a4 `
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - F3 s% d5 V2 V# L+ _
子函数及演示程序:1 ^0 D% {* N9 W$ O$ `. \( J" l
9 `! ~) c9 I* a5 e! q #include<stdio.h>
4 x1 X3 Z* X( l) V) z8 v F1 \: ^ #include<dos.h>
' s1 h! I( R3 B2 S* q( e; @ #include<conio.h>
& ?- U) h& x7 y# w
4 X" s; [7 H) f7 r void goto_xy(int x,int y);
4 Z/ ~, q6 d2 O* N void dcls(int x1,int x2,int y1,int y2);
4 y) F6 Z l% p void bcls(int x1,int x2,int y1,int y2); ~3 H3 V- W6 |% W
void kcls(int x1,int x2,int y1,int y2);2 y' _! Y& d/ _0 [# P- h: q! p; O
void recls(int x1,int x2,int y1,int y2);
v& Y. s+ w: J3 L" t void zcls(int x1,int x2,int y1,int y2);
! Z3 c0 S' I% v7 }; V void puta(void);
" W2 z& z- E; T/ P
% Y5 L( [+ w$ Q. B: u
1 Q+ I) | p* q7 L /*--------------演示程序---------------------*/
: _7 U C0 F6 m1 m% x0 A, n5 x main()
/ c, `$ G- p+ q9 L {
`+ a+ s9 L. k puta();
) |* C8 N1 Y2 t1 T! _ r getch();
, d4 h3 K' U- @7 W6 ` dcls(0,4,0,79);
4 K( O( L* f7 A getch();
, E& ^, E( F0 T4 U/ { puta();/ R% W( n3 P6 C7 r7 V
getch();
3 ^1 w; d, r# r bcls(0,25,0,79);
# z) P. s- e5 L. _! ?; k( s getch(); J* n( B* W1 \; |
puta();
5 ~4 R, x+ Q: \. i9 } k getch();9 n- B l1 ]! _$ T0 M$ g
zcls(0,25,0,79);
5 K. R5 w- U8 U( E6 c getch();
: f6 Z- B# q) y2 c }
V, P( \4 ]9 Y, Y# | /*********center clear screen(中心清屏)***********/
+ f/ g3 D" v# L g$ u void zcls(int x1,int x2,int y1,int y2)
- g6 |8 ~+ f, @ \ {
) M% `) N# a) _3 f [7 c int x00,y00,x0,y0,i,d;
5 B+ W: p5 i; X4 O if((y2-y1)>(x2-x1)){% c8 |7 p& v2 m7 c v9 [
d=(x2-x1)/2;; f: k4 W) r/ ]- l- t
x0=(x1+x2)/2;: q/ h3 O& w& ]* B$ C
y0=y1+d;
: m( s% D8 _7 R0 }7 L; F+ | y00=y2-d;* @/ Z0 g+ Q# O+ u2 P/ L
for(i=0;i<(d+1);i++)5 J/ Y9 n' t+ q" w
recls((x0-i),(x00+i),(y0-i),(y00+i));1 n* u3 V$ f' D& n( }0 G9 i
delay(10);
; H& Q, z) `4 B& M5 S z, u }9 M9 g" H% I7 x) v" i
else{
; ^- {6 I$ ~% V+ i: M d=(y2-y1)/2;8 v- R) H$ g' w3 A6 o
y0=(y1+y2)/2;+ e; x1 Q6 ]$ V. x" F
x0=x1+d;
( Z! y0 e, N9 j0 \) h x00=x2-d;9 D8 a; p& D* P+ u; I0 P
for(i=0;i<d+1;i++)3 {& C: o' H% W4 A
recls(x0-i,x00+i,y0-i,y00+i);, H8 I1 ?8 Z6 T D
delay(10);
* V- O- i) `% T }
2 z2 G" ]0 u6 t1 h" b& _& A: [" {0 n) V }
9 t' U( h9 w! [5 z, v2 \' j# F7 ]- P: u1 G9 W, o5 |" y9 o& z! [
/************* clear rectangle side(矩形边清屏)***********************/
. O6 A- @0 n. n/ N/ C; f. ~1 x
+ |# D& Z! i/ S( {$ e0 z ^ void recls(int x1,int x2,int y1,int y2)
& b+ l" ^2 {% C {$ `& J7 ?6 A v& a8 _
int i,j;
1 T$ h% e1 }) P, D: k, p for(i=y1;i<y2;i++){0 f8 L: q& }- ]4 q# J$ `
goto_xy(x1,i);6 F1 `' S2 B$ b3 f' T3 b1 u
putchar(' ');- O0 I) f5 `( y) c# f- j O% {
goto_xy(x2,i);6 L4 V2 ?7 A+ `: |3 i% m( C/ A% |
putchar(' ');
$ x* i7 S6 B/ t }' o4 M% b6 P delay(10);
8 H$ s* Y" _- b }% X% N1 h4 P1 C: _) \5 o
for(j=x1;j<x2;j++){% S/ p, o! R; @* h0 M4 I! V1 L
goto_xy(i,y1);
1 v, N4 |; Y# h9 u" s3 A( m putchar(' ');
" J# b+ ~+ v7 h goto_xy(j,y2);
, ^$ i: {6 M5 x putchar(' ');
1 p& S# t# I: f- S# C delay(10);6 f: U2 ~- s7 v1 S8 k) ?
}
; b7 s3 j8 q: x; N0 @ x }& Q9 I% E. I6 |4 {8 G( P g' A
/******************open screen clear(开屏式清屏)*********************/
5 M$ s/ V, _' S. S
1 |& c I& e6 v9 b void kcls(int x1,int x2,int y1,int y2)
, O+ e6 S/ Y/ |* Q/ c4 F {
9 y) [% T5 A* _6 b4 O5 K int t,s,i,j;
9 N, V( i p# {/ _: h t=s=(y1+y2)/2;
- q% x+ ^0 v" \# v- W for(;t<=y2;t++,s--)6 j, F% |& a- a7 m
for(j=x1;j<x2;j++){
" e' o) \. C6 i goto_xy(j,t);
1 G8 C% Q; l0 Z putchar(' ');
* g) e6 \" D. d R5 f- e; y goto_xy(j,s);
& `4 S# L: e, X0 j/ T/ L/ [ putchar(' ');
+ `, f8 ], j U delay(10);
" K+ ^* c! e0 B/ y }7 e4 B! D5 x, x8 O' p
}
, |1 u5 G- y9 \# d6 b% c; s /*****************close screen clear*****闭幕式清屏*******************/
' n) V2 Y& E: n1 ?2 u, M0 _" P& e$ _
void bcls(int x1,int x2,int y1,int y2)
; e3 i6 X1 X7 T( c4 E {
, c( v% J0 V# P1 _* W8 H) U int t,s,j;
6 M: l* j- y% | t=y1;$ c# i& B3 X5 l- k; b4 ]
s=y2;9 y" I$ q3 v! [% t. b5 Q; K2 p
for(t=y1;t<(y1+y2)/2;t++,s--)
8 h- R( T! {4 B: J+ q% ~ for(j=x1;j<x2;j++){$ ]- @% {5 N" n* [6 H! y
goto_xy(j,t);
& r. P: n, ~: l, N; T2 s putchar(' ');
7 A3 p0 S! z) h! h+ O# ~ goto_xy(j,s);
; v( L. T- _) h putchar(' ');2 ?, ]' W' E; u8 ?+ o
delay(10);$ q7 Z5 j# w6 @' b
}
) k6 \7 q, a4 K3 S* P- l }
3 y: T* {6 j' z8 ^! a7 i! e /******************bottom screen clear(自下清屏)********************/1 {' M1 K5 r/ H; w
5 ?7 b# G; _) e$ E* Q void dcls(int x1,int x2,int y1,int y2)! L; [% J7 b4 S+ e7 }: p
{, ?: ^0 d9 S, k$ j4 [1 |
int t,s,j,i;, d/ V5 P' ^+ C3 U$ m
t=s=(y1+y2)/2; b T3 U* k+ S! i4 f
for(j=x2;j>x1;j--)
( p4 V; H/ r4 A7 U for(i=y1;i<y2;i++){9 b& a" h4 g; k
goto_xy(j,i);3 u: {0 @6 K1 A4 G3 q/ E
putchar(' ');
x0 M% l1 ~# T% y, p \ delay(10);8 v* C/ L) m; M8 n5 o
}9 {. G; N/ {! }
}
' v' a( g; I* R& t /******************设置光标子函数******************/
# s5 Z( O) E1 l* I0 B: m: |4 l, M/ N j
void goto_xy(int x,int y)
9 A5 ]/ i: q* Q5 F; | {
4 l7 R! n- ]9 V7 a! `" n! @ union REGS r;8 B* C$ a' R( Z1 ~' n
r.h.ah=2;
6 x/ L4 x3 u4 a1 i5 p6 W0 K$ i r.h.dl=y;
& J+ Y' D" W- D5 ] r.h.dh=x; N6 H1 z6 X% z
r.h.bh=0;
/ {8 g1 u. b$ S3 i int86(0x10,&r,&r);/ `7 M! i- e4 B6 k1 }, f
}5 y+ x' G2 q# y" r6 [0 ^$ g# {/ T
3 T9 D j6 a" f- l /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 A) G) y! s, D. N+ B }+ ~( [! z+ w7 d% \9 o# H: L- e( m
void puta(void)! S) G7 V3 V, f% ]
{
1 p( y! ]0 t! o: d9 l6 @. x int i,j;/ ?4 a- o# x* I+ Z! O
for(i=0;i<24;i++){
* i9 q2 e5 z. U v for(j=0;j<79;j++){
' c1 l& x1 v; v w2 q' P goto_xy(i,j);
$ v# a% M" f, S2 ? printf("a");
% S# M- o1 ~1 E# a# A# L }8 W L$ e& h8 ^
}+ w2 A3 |6 ]; s/ m( ]
} |
|