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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
3 z2 X* a- r" z H! N1 W) h- e+ M% V/ @
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" q$ ?( d% D/ Q1 i: U: q3 J. |
! a! t6 b# E4 M7 }8 i% q
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) P! N/ r Y8 Q7 `8 s: } 子函数及演示程序:
0 R6 A5 O0 \" ]: J# h) Z; h" F! i4 N. A" ~% q3 L( ^ O
#include<stdio.h>
/ W8 r+ Z& t, c& `/ T #include<dos.h>5 C6 R( X. B' U) K/ b+ o, ]8 U9 v; J* ^% ~
#include<conio.h>+ {- Z1 A) |0 o/ K- m( |/ `! `
- y$ l# o! z4 u# c$ ~, [
void goto_xy(int x,int y); N9 k: y+ l; `& X
void dcls(int x1,int x2,int y1,int y2);
2 c* y2 `1 U0 j7 G4 Q3 O void bcls(int x1,int x2,int y1,int y2);
8 {" J" h# Q8 y1 M( E void kcls(int x1,int x2,int y1,int y2);
6 v! G+ n2 _) R; Y+ ^ void recls(int x1,int x2,int y1,int y2); ?7 g* r, r8 L" [! m: K3 R
void zcls(int x1,int x2,int y1,int y2);7 h- W5 M4 D! W
void puta(void);# f9 k" z' ^, C8 h3 ?' u
0 u7 _% I+ H6 W6 e2 t6 o! {
) c9 Z4 g3 G: S! W /*--------------演示程序---------------------*/8 O1 H4 x% W: `
main()
8 L3 Y: b/ ?2 |' m: P {% A( x9 N, R) @- K) K' s) {5 I5 M8 ^
puta();1 g: ^; r- P+ q7 C- h
getch();
& X: Y0 l* T( ^0 S; D dcls(0,4,0,79);2 U& u: r0 e7 m0 I
getch();& s; ]+ a" V4 p) U! \) V; b' }
puta();2 _9 I! D$ [3 \7 f
getch();! T; |/ p* n+ z* F, d6 v% @
bcls(0,25,0,79);; \2 P, F+ `, m& D o
getch(); z# @8 `6 c5 O% n" v
puta();
4 ?& D# W. h5 ^6 ?9 i getch();, t6 i# j2 Z8 n; M4 i: O4 z
zcls(0,25,0,79);
9 m( h0 S+ M9 ]$ h1 v) Z getch();
% E" E2 j9 D& Z }& J- G' S& l: i7 b: h$ |/ P( \
/*********center clear screen(中心清屏)***********/2 [* Z# u: _+ ~8 I, u) ^* M7 y
void zcls(int x1,int x2,int y1,int y2) z( ]9 L! S' ?9 c
{$ b$ U5 V6 L# g" q0 A
int x00,y00,x0,y0,i,d;
$ c& w) E6 z \6 A2 [& Y if((y2-y1)>(x2-x1)){" z0 |5 x: ~/ x9 m+ z7 P; r% r
d=(x2-x1)/2;! ]2 _* l$ C/ T- h1 m( H X9 y
x0=(x1+x2)/2;" F: c/ C7 h4 } n
y0=y1+d;3 N0 h8 j8 m& v; j2 F
y00=y2-d;
+ K8 }' B4 t- N& T q; L+ {3 e for(i=0;i<(d+1);i++)
1 O; Q9 u" [6 {# v recls((x0-i),(x00+i),(y0-i),(y00+i));
( e: }2 \. E) s$ R delay(10);+ T: c% ?, Q3 A* {
}8 P' S, ~" a5 U1 Q% |, ~
else{$ B& ]3 Z5 E6 V. ~& V( K8 R
d=(y2-y1)/2;4 @3 Y' C* \" V
y0=(y1+y2)/2;
8 e" u7 _. v9 d' i- P8 C x0=x1+d;
% s, k/ l7 E/ F! T4 f3 o- c( e& E n x00=x2-d;
, ^# J* l7 G& h/ i$ d for(i=0;i<d+1;i++)8 A4 S- W6 ^9 H0 @, v( v! {3 L
recls(x0-i,x00+i,y0-i,y00+i);
* o3 w+ \( g" K9 V3 Z9 S$ j- v delay(10);
. \1 |) \# m/ G- n }$ ?( m+ [: L% m8 D1 r; Y4 R
}
& t. v3 K: X' r3 C/ e# K/ z
& Q# R' Z/ j4 Z1 V& X /************* clear rectangle side(矩形边清屏)***********************/% B/ B: C, C( |4 F
k R% q) V0 ?" I/ t void recls(int x1,int x2,int y1,int y2). \* ~1 T5 h2 B% c6 G- Y _
{. r$ F: k9 u* t6 R, \5 A+ Q! n) ~$ M
int i,j;& ^4 O* g) c% X4 r' @
for(i=y1;i<y2;i++){
6 ], r8 M- o# U( e$ H7 R! `% j6 e& R6 u goto_xy(x1,i);: k& v. v9 ]6 E
putchar(' ');
& s1 w8 k$ h+ N. ^' Q z+ G1 K6 e goto_xy(x2,i);$ L& ]! u: z! {% r4 u4 U! e
putchar(' ');; Y- V3 F& v; h" O0 }; a/ ?
delay(10);
; n3 o) X) m. Y) H( ^8 i }7 o7 \: P4 Q# r- s" k0 c
for(j=x1;j<x2;j++){
m5 I' j5 o# A, z1 F( Z goto_xy(i,y1);9 v4 V% s$ W# K- j" n3 m9 O
putchar(' ');- ?1 N/ H# o3 e3 D, I2 S
goto_xy(j,y2);
1 o( u4 _2 d$ O X putchar(' ');/ H( [7 J( v5 b, a3 X' S% F w+ e
delay(10);3 [; h! U1 d' v
}
" B3 t$ `7 E( |4 r) V }
9 v& K' _* z% S( J2 m /******************open screen clear(开屏式清屏)*********************/
6 Q- `7 u) ~& L/ C T3 G5 J
" q& t. z$ i; c8 T. x& s4 d void kcls(int x1,int x2,int y1,int y2)5 q7 T% y7 m9 p8 Z: P. t3 Z. H. P
{
8 G7 @! n' c# @ int t,s,i,j;; h6 J1 u% P; w( M9 E
t=s=(y1+y2)/2;$ _, H9 ^1 c, [4 n2 U
for(;t<=y2;t++,s--)
! q- R- d% P% B% V for(j=x1;j<x2;j++){8 B0 K( ]+ ]0 W2 R
goto_xy(j,t);- {0 ~* @! K8 W7 d% L
putchar(' ');
" Q H8 i% L8 e$ t goto_xy(j,s);7 {- |6 h5 i; W/ Y+ c( Q
putchar(' ');) L! A" L8 U. S% a
delay(10);# q; H& ?- o* {; b9 i: X3 ~% d4 S2 t
}+ q- B: p% q+ p$ x. i/ Z- p# z' R& c
}
) o; O: U5 N1 m9 q /*****************close screen clear*****闭幕式清屏*******************/
: d, K2 g- f* Y, X9 p( I1 K H/ S4 ^( O: s
void bcls(int x1,int x2,int y1,int y2)
. }7 n+ B3 W' `, V) y {
% b" C: d3 C$ e int t,s,j;1 p. S0 n% z& y1 b$ L9 W- O/ p
t=y1;
& r6 j/ g: M; [8 V( R# e s=y2;
* a4 y3 z2 E0 e/ j( b6 Z0 K for(t=y1;t<(y1+y2)/2;t++,s--)
) l( N: {3 J1 `" F$ p: B for(j=x1;j<x2;j++){
% X8 O7 U& u$ Z$ ] goto_xy(j,t);
N8 _# _/ T" L: i0 o3 ` putchar(' ');) ?1 ~$ p* t' s5 F$ B. L+ p
goto_xy(j,s);3 M, P# l. S; L) o& }6 N
putchar(' ');9 [- i7 K P+ {; b3 F
delay(10);
7 ~. s" `7 P, ?4 S' b. w. { } ]3 v- L/ f m! }: y
}5 }8 N3 t2 a* S0 v# \' \ b u
/******************bottom screen clear(自下清屏)********************/
: b1 {+ \7 G5 v! E) X. |
% E) {) ~$ U8 C8 \8 I+ V2 U void dcls(int x1,int x2,int y1,int y2)
" ^4 |1 R3 H M- n1 z- c, Z {
! R- E5 g: H" j0 d; h& ? int t,s,j,i;
; c, l) f+ G. C j' ?+ Y t=s=(y1+y2)/2;
7 d2 m$ V2 Q. n4 ~& g8 f2 k( N for(j=x2;j>x1;j--)# i* M% `8 R8 ?
for(i=y1;i<y2;i++){
% X1 i0 _1 C8 P goto_xy(j,i);
- _0 }' n; ?! [+ _ putchar(' ');' h: V* N- c% w0 ^" ?/ Z
delay(10);. E. Y' x! D1 M# C! X+ l- W
}9 ?6 M# s# H: T; [$ u6 e: K
}
! D6 |0 j, t5 Q) l5 m* D# k3 x /******************设置光标子函数******************/3 L+ f- q, A M5 j& s6 M' x+ k* R
9 f3 L5 E2 N# a& N& M3 `
void goto_xy(int x,int y)
9 }+ |5 F* ?: ~7 i* I% W7 n {
4 c, b' N- G; e: O, O union REGS r;( j! |: l4 f8 o! K, ? m, \# u
r.h.ah=2;9 K) E% v3 f6 m3 y( u/ [
r.h.dl=y;
: [" m' U' f0 k r.h.dh=x;
4 F& A1 e9 J( }2 `5 J; X N r.h.bh=0;9 p, {- U4 k- n* Y9 |! k) I) H
int86(0x10,&r,&r);$ ~# _: S5 S& `' W: ]
}
/ i5 |7 H% D$ C5 Y' i' K* m
2 X' i' J! K+ Q, L% i /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ S5 m; b3 X8 E4 { x. W% U
# N c0 D/ B6 Z; L# l( v& a void puta(void)
- a+ t3 x: P% ] {! J0 d5 a3 h, O f$ g! S" y
int i,j;' b# u! h$ }% ?7 M
for(i=0;i<24;i++){% \* u1 w1 B8 `4 R, ]3 @
for(j=0;j<79;j++){
2 {, F* V! D5 @! J goto_xy(i,j);; I2 V3 H7 f7 \: ~2 l
printf("a");4 G" X! K7 D& E3 D) A1 M
}' ?- F4 Z |' [! }# `
}
" v8 n. G+ C X' p. r# \. _* S. | } |
|