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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% |. M/ M' N# m4 _8 L1 Y3 t2 Y' E! x9 f1 ]
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 G6 r5 ~% c( Q2 ?
) q8 F7 `( H( k1 i" N% e
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 { E! {. |7 [0 @* Z1 I7 _! U/ q 子函数及演示程序:6 D4 f) q6 P( J, h1 L
3 Y. {# E, w# {. t #include<stdio.h>
# p" ?2 g" {' N #include<dos.h>
9 g d' I$ f/ T1 C" \( U2 C #include<conio.h>
; W7 i' e) G1 i I2 z+ R; Q+ Y0 h& b8 z+ w: w
void goto_xy(int x,int y);" F" M% i- h- G" o9 X
void dcls(int x1,int x2,int y1,int y2);
A( {8 W- Y7 @. J2 f; z; @! j( D void bcls(int x1,int x2,int y1,int y2);8 P* e# @1 s- {* s1 h3 d* n
void kcls(int x1,int x2,int y1,int y2);# _1 O u& n) Q9 N& c
void recls(int x1,int x2,int y1,int y2);
2 r3 T+ e8 _+ v* `! b3 L# `1 q void zcls(int x1,int x2,int y1,int y2);2 n7 j1 A" q# D/ p; w
void puta(void);0 [0 m; K; b2 m4 n- {
! c. C/ @. y: K$ q' V9 |( y+ H
/*--------------演示程序---------------------*/
3 P1 x% y2 T5 n" R5 U2 y3 F0 Q7 H- P) F5 @ main()
1 M9 w+ j2 R' `2 A8 \ b1 @/ c5 a {$ U; D' ?( E0 ]: v# t( R
puta();
7 p" R' v6 x% Z- `7 V getch();
# {1 \9 Z9 f4 x4 X, c% e, F dcls(0,4,0,79);
9 H7 j( L9 c. N7 p getch();' g, T& x% [+ \
puta();
0 b$ I0 r% z! z( w$ J getch();4 [6 y. Y) @4 p2 J9 `
bcls(0,25,0,79);
, K- H, F3 e; m/ P) u8 H' s( q getch();" E0 T' ^4 e+ U
puta();+ ] K+ b: Q) t( Z: l6 }" {
getch();& ^* Z0 M6 G. o9 A4 W9 R
zcls(0,25,0,79);) j2 n* o5 d9 Y6 R' I# W2 g7 F
getch();+ B9 W W* |! Y4 K# Q/ M
}
* P' J j& g5 T3 l8 {& \! g /*********center clear screen(中心清屏)***********/% X4 n3 F/ V8 n* R
void zcls(int x1,int x2,int y1,int y2)3 y6 E" G) |7 l# Z# k. C) ?
{7 B7 U# Y1 W) @: a5 f: a; f$ d v) U- C
int x00,y00,x0,y0,i,d;6 y) c% D2 r; \& e3 o. H3 E2 k7 P
if((y2-y1)>(x2-x1)){$ @8 \; P- H" q$ v
d=(x2-x1)/2;" [2 R+ O6 o0 I6 |; }
x0=(x1+x2)/2;
$ D C, f$ Q. e+ G8 T' R y0=y1+d;
1 i) k. A" @3 o1 d" [) ?) V y00=y2-d;* F* }2 F7 M c# v7 b# j
for(i=0;i<(d+1);i++)2 Z F" I0 l3 E+ }
recls((x0-i),(x00+i),(y0-i),(y00+i));
' H5 ]3 m! K, A* d delay(10);
+ E6 v- y+ f! X& h }
) e* a' ~, b2 t: }7 p4 D else{6 C* _- K. K0 ~; }% D. q
d=(y2-y1)/2;
) U/ ~' v( _/ X R/ ~& D/ c; ? y0=(y1+y2)/2;
' \% T& A) N+ ^' m7 P# g9 I- ] x0=x1+d;% C0 Z* m w6 X! B4 A
x00=x2-d;4 J- |2 z- I( h$ Z m7 `$ E6 y
for(i=0;i<d+1;i++): N# |3 n/ F* g
recls(x0-i,x00+i,y0-i,y00+i);
1 `, U' e) L5 X: I% M. I5 y2 z delay(10);1 j/ f: k8 l6 ]0 e) w
}
2 g6 b( x2 T# \& J2 s/ Z }( {% \1 G6 Z8 n) s5 ^ U/ ?
2 I4 Y* g7 g% V! D& A* a4 Z" L
/************* clear rectangle side(矩形边清屏)***********************/
- ^& H) H! U" N
5 ~; @3 ~: F& a" e8 T void recls(int x1,int x2,int y1,int y2)+ S" p2 W9 l; ^* v' ]; S' O
{' K$ L( g+ {) T* C! W
int i,j;
& X. ~. q( y9 T/ K: r for(i=y1;i<y2;i++){4 s; y# n# ~5 d" ^7 D
goto_xy(x1,i);0 j7 |' ^: j2 h: A( W$ W
putchar(' ');
8 o! m/ \: L: D) r goto_xy(x2,i);
! q- ?. B1 J; H( G0 P putchar(' ');
+ f2 J* n6 I, I* j3 l, e x delay(10);
! w6 \9 j1 {% c+ x! p, [ }
h( H- ~* I/ ?9 s) P3 p for(j=x1;j<x2;j++){+ V2 w) o3 \ Z: a
goto_xy(i,y1);6 w- d/ E8 y8 O& N
putchar(' ');
+ m8 p3 O# _) p% j+ _' g goto_xy(j,y2);
5 D1 ]5 k. @ e: V putchar(' ');1 x4 f. q# {" t% H T
delay(10);
" r5 B6 o' g- _6 G x; o3 n }
# I, d5 B5 G, w1 ~5 _9 \2 D! q }
& S' A* _4 ?8 o7 S3 ?- { y# ~5 E3 l /******************open screen clear(开屏式清屏)*********************/% A4 Y- ]* N! a0 [
& P$ l% z- B* x/ q: E void kcls(int x1,int x2,int y1,int y2)
5 H n$ b ^. V6 A* Y7 o {: f/ ]& K" U7 y
int t,s,i,j;
8 F: ?) S/ N; x( x5 S( C t=s=(y1+y2)/2;
+ s+ i: M% n! v9 _4 y for(;t<=y2;t++,s--)
# E7 p# B( A' K for(j=x1;j<x2;j++){+ g7 Z& x# _! r5 r9 ?" d* c
goto_xy(j,t);
" B {6 F; x) U5 o/ d putchar(' ');
, Y" i3 p4 {5 c2 g' i goto_xy(j,s);8 d# ^8 N* Q0 {
putchar(' ');1 g& {! M+ d: N z
delay(10);
# s- G7 m4 K" F) l4 q" j }3 |9 A; O3 @9 w6 G. K: Y9 i: n/ g) n
}
) ^" F1 u! ]0 O4 Z3 [ /*****************close screen clear*****闭幕式清屏*******************/
- S* a7 ^! U" L: W, ]/ q! B# w# D0 v7 K* E; Z1 L* P, u; T
void bcls(int x1,int x2,int y1,int y2)
- k9 M6 l; I: h1 [ G {4 K% y( P7 M9 p+ P$ c# ]9 k
int t,s,j;
3 t- Q+ ^9 ^4 t t=y1;
( y! q. t0 v; w9 U4 K$ n s=y2;
( @( j7 @$ T: i3 g$ p5 W for(t=y1;t<(y1+y2)/2;t++,s--)! p5 @4 M4 L$ G- l
for(j=x1;j<x2;j++){! U" x3 |. O9 w3 i
goto_xy(j,t);
2 r9 C9 F. F; K/ p3 N3 V putchar(' ');
6 d9 {2 I' _. e* @ goto_xy(j,s);
) U, v$ r5 _" G6 L8 L) z putchar(' ');
3 p- _ [9 C9 \5 B( [ delay(10);+ q% q, B; R& P, |5 I. e# [5 ^
}
: G/ i: K/ U3 V8 ]% i }+ b, _5 Z8 `4 i' B4 T @5 e+ A
/******************bottom screen clear(自下清屏)********************/
: q [9 g, V1 |5 _3 A+ _3 p, ?: p7 ?+ ?: U/ ~: w
void dcls(int x1,int x2,int y1,int y2)7 K( V, e: v3 P+ g, b' t
{' V% z, X. D6 k- o/ P
int t,s,j,i;
' H* j2 P0 _0 l# v8 Z; Q( i. j t=s=(y1+y2)/2;0 a9 l! e) j0 E) r _
for(j=x2;j>x1;j--)
: ^3 H3 M4 K- b% ~. y for(i=y1;i<y2;i++){6 y0 T2 h% f2 w4 b, d/ o5 w
goto_xy(j,i);
|4 y2 f& e/ ]2 `8 D putchar(' ');
& d- X1 c/ L0 A5 q3 L+ E delay(10);/ o# h) A* P4 S( e
}2 }4 z4 A$ ~: D6 p
}. |: u' }" _2 s- [+ D4 k; B
/******************设置光标子函数******************/+ ~- n8 I1 H( x
' `' d7 e1 ~, u# L; F$ L2 O# E; a
void goto_xy(int x,int y)+ S9 j- C8 e5 X9 M& s9 T7 Z
{
5 @3 X; Y3 c0 N% T1 a union REGS r;
5 `5 L3 s6 D8 q q+ R r.h.ah=2;
+ O' J/ d( E0 x; t' f6 K9 p r.h.dl=y;8 S; a# F3 f4 f/ E% V9 R
r.h.dh=x;* \, L% U3 B0 c {( Q
r.h.bh=0;
4 s' y& q' a: K6 ?- h; B int86(0x10,&r,&r);
) [/ {& i G; {' D7 k8 P0 } }
- d' {& a7 a, e R6 _
9 }2 x' J, ^5 a) P3 B /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ C m1 R# J% S% i
) ~3 N3 N% m' j$ x9 J1 N
void puta(void)
4 B7 c2 _1 {0 X T S) _4 y {
" _' j9 i' \. P- { int i,j;
3 ~; n% F2 B* {7 B& p. _ for(i=0;i<24;i++){- h9 K2 d. i+ a, n/ h3 q3 Q
for(j=0;j<79;j++){
) g& f' o* X! [1 { goto_xy(i,j);
- P% T+ Q( w5 r; H* ? printf("a");5 ?( ], ~9 r" ~0 P
}7 L$ B" L- ]- F. c4 @5 r
}
$ ^& Y/ z/ z; K) o! n } |
|