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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" |( \/ [. k k' I5 K& n: L. t
. x2 o3 _0 g. A5 K8 @ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, X5 d# t# u2 W3 V" G; K; ?% C$ B }
9 J; r; e, E$ D! B1 |, h" t 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' n; L! z; P- E$ k8 f8 K 子函数及演示程序:
% S* d1 ]# p* Z+ f
3 B: y" \% u; t- q #include<stdio.h>
$ h O [' P' Q; W5 u `0 @$ A #include<dos.h>; Q- ?, n6 M' m* j6 U# P4 s7 d2 G t
#include<conio.h>
! z$ T a/ z* g+ T
' Y3 f( B: X) c- {8 N0 p6 w: p4 k void goto_xy(int x,int y);5 Q/ N% p; i; o R
void dcls(int x1,int x2,int y1,int y2);5 w- }& \& t C% N; f7 s
void bcls(int x1,int x2,int y1,int y2);
) I$ C' O$ C% q) ?! F void kcls(int x1,int x2,int y1,int y2);
! ?7 p/ U t. L void recls(int x1,int x2,int y1,int y2);* T. C$ Y+ B7 o% x
void zcls(int x1,int x2,int y1,int y2);
3 }, P9 b. o" [, Y# n. M: U8 V0 } void puta(void);2 r) \# j) A+ \' L1 f% e# e" Z
+ o" Q, M4 `) \+ u u( k7 k ~" O* {+ [
/*--------------演示程序---------------------*/
# ?0 w4 S. g* U$ |5 F. i main()
6 W3 K) C+ |: @* p" y- f { r# R4 k) {/ ^3 G8 l; ~, m
puta();' s: q& I; ?0 E% [/ Y
getch();* Z% U0 W8 D& n% A
dcls(0,4,0,79);9 k* h ]% ^3 u; _
getch();! w( Y/ d3 |6 c$ T3 V% D
puta();( ^* S7 t1 \2 u; C0 H7 M
getch();& @" E4 x3 i; [6 w# e( a
bcls(0,25,0,79);4 N$ W" a2 R: R- D4 S, j0 O4 `7 j
getch();
/ h9 S2 m$ B) n7 U* f$ n" i puta();
8 c& J8 [' X0 \1 `$ [; m getch();, H, m, R) Z: N
zcls(0,25,0,79);# |, v7 }; h/ r: I; o7 o* [
getch();
& y- G+ c4 m6 n3 ]7 U' V8 W }
/ J/ q. B4 C N# h( y, @ /*********center clear screen(中心清屏)***********/
) x% Z1 \! f# i5 J5 i2 f) W$ U void zcls(int x1,int x2,int y1,int y2); O$ y# {" [" G+ _" l
{
2 A+ X" z, F+ _2 y$ L) L* ^+ F int x00,y00,x0,y0,i,d;
" K+ {, p6 X# Q8 V0 \) v9 y: t if((y2-y1)>(x2-x1)){
! m5 C; K: {6 \+ h" j, J7 j d=(x2-x1)/2;2 F5 o% |( |! g3 Z
x0=(x1+x2)/2;
6 D( N% Y: V: X& }( a. u y0=y1+d;
4 e7 V7 R z. i' b. s& y y00=y2-d;
5 ^& G" S8 ?9 A+ q5 j for(i=0;i<(d+1);i++)4 e& Z* d* y" G3 c7 @+ e
recls((x0-i),(x00+i),(y0-i),(y00+i));
; o1 R9 Q% E% z delay(10);1 H9 f- y! k" _6 d9 D, o
}
5 K2 \ z; C* e( H1 `. @2 C else{
2 B( T: H' f8 u- X8 b6 d9 W/ U d=(y2-y1)/2;: d7 n2 q- F% i3 A) D
y0=(y1+y2)/2;
6 x2 n5 Y4 H0 O( o+ A5 F+ W x0=x1+d;
$ P. V: [ W# a9 R3 m! }" V! ^ [8 I x00=x2-d;6 C. N# u. ?3 D% ~1 ]
for(i=0;i<d+1;i++)
4 v; h: e% D8 F& n; n D* z recls(x0-i,x00+i,y0-i,y00+i);
* c4 t" t4 ]7 y, W delay(10);1 ]8 t9 K- e0 f/ m
}
0 V& @- j% Z- V( N6 T0 F! o4 x }
3 j3 z+ m, L' S7 O% S" c) f6 y* F f0 T$ A# |! G
/************* clear rectangle side(矩形边清屏)***********************/
% L) u5 v" h7 J; k# D& z) E' s# y, r, S
void recls(int x1,int x2,int y1,int y2)
2 t, B3 X& ]2 E5 X4 c# w2 |4 y {
4 X9 L8 \3 w1 \/ e/ ], J# p) @ int i,j;6 e4 [5 [: Y* d6 A
for(i=y1;i<y2;i++){
( Z4 j, m f# e$ b" n goto_xy(x1,i);# `) R) K0 E2 G, T E
putchar(' ');
: ]" i6 F, B+ x goto_xy(x2,i);
( O9 }) I$ X! Z" b: A% A6 \ putchar(' ');7 }$ D: i- W" b
delay(10);
[9 |9 \2 g2 V5 b }( Z1 X( o) ?% M* z% @' e
for(j=x1;j<x2;j++){
5 Q6 R! h% i+ D$ N goto_xy(i,y1);
1 T8 Q0 ?; b, `& p& \( }$ E9 h% G putchar(' ');
4 C4 R4 Z" ?, z4 S4 g goto_xy(j,y2);# |. _2 ~; @$ `4 I; v9 |, P4 t5 c
putchar(' ');
. j0 e& W# e, m, S9 {1 C9 e delay(10);$ W. R! w. y9 Q: z
}6 @: y- U$ p( h2 k' [7 z8 P
} T6 |: Y2 t6 w' ~8 f
/******************open screen clear(开屏式清屏)*********************/2 W$ }' v( G, D" ]5 D
, |6 T3 l+ O! V void kcls(int x1,int x2,int y1,int y2)
, K3 c; |. `# P: D! h {+ V( c5 Z) i; _% }. i% ?5 Z7 T
int t,s,i,j;
% h4 p4 C5 A/ b& H9 {" ]0 A! r4 e t=s=(y1+y2)/2;( }5 g2 y' @/ a- R' }
for(;t<=y2;t++,s--)
2 j3 ?2 @3 \* {* L for(j=x1;j<x2;j++){9 j. n% r3 i+ X& |' _: P+ `/ y! w9 ~
goto_xy(j,t);
4 ?) O. K% @, l* q7 q6 A# y putchar(' ');: e( l+ _0 e2 ~* o8 c9 O1 ?
goto_xy(j,s);9 [9 b2 I" H( O( T
putchar(' ');
2 g) e4 I) `, p delay(10);
% g+ I2 p' n; @9 S) Z }6 X6 V% N6 i8 x0 k! p: k" |
}
& L8 f" M, Z0 P. G0 }/ d, b& [* ] /*****************close screen clear*****闭幕式清屏*******************/
( z. C+ f, g4 a8 O, s- y. [6 L. |
# X7 |$ @4 f1 D) S' O$ S void bcls(int x1,int x2,int y1,int y2)
8 V$ S/ E/ \' Z9 I9 ~2 A {
+ q! x1 W# z3 g! k int t,s,j;
0 f$ p& ~8 u+ S' c t=y1;
* n0 x2 j, o2 o9 Z s=y2;
) c0 V2 {% {( C4 K# C9 { for(t=y1;t<(y1+y2)/2;t++,s--)
& e" ?8 N' _1 }2 l6 { for(j=x1;j<x2;j++){
/ C6 P+ o' Y. m3 l* `+ R goto_xy(j,t);
" [3 s3 O8 J( x7 s+ X& H0 c putchar(' ');5 Y' e5 c; F9 k" z
goto_xy(j,s);
4 ?7 d2 L% E# y5 V8 h9 O putchar(' ');# T( C# `4 @! w$ E( j- _
delay(10);
; C( f0 d+ a- G7 V. u% L9 N% r) g }
0 I) V3 ~- q0 X8 y }
, r9 `* d3 M5 ~* p, M: N /******************bottom screen clear(自下清屏)********************/# z) Z% N" c+ H& X# K
6 |- P* g# a& @* E9 T. L) u5 J; W void dcls(int x1,int x2,int y1,int y2)
. U' f! ~1 J* ]$ q" c {
, G8 o& X8 M( p. v; g int t,s,j,i;9 I A/ r7 U' |" D8 z; [
t=s=(y1+y2)/2;9 s. d6 J) r1 O3 D: s' c! H
for(j=x2;j>x1;j--)" J% O) L- i% o$ P, ]
for(i=y1;i<y2;i++){5 B/ f$ ^( X# G# H' G: X
goto_xy(j,i);5 F: V2 m0 v. N
putchar(' ');
6 T: l1 }5 [' d$ x, V delay(10);. z( y' v$ {# |, E6 M( p
}% [% E9 G) H- b! ]+ I
}
# H4 c" f: E; h" T& c4 h2 A; L7 P /******************设置光标子函数******************/
& L& i }: ]- T" o( s9 @) A) Y% X( O( I& Z5 f5 `
void goto_xy(int x,int y)$ H* n ~8 K) V: W* o" @
{
* T; V) A( y q2 t6 B$ e union REGS r;, T3 K4 G5 p6 k/ Q0 ?) `
r.h.ah=2;6 k6 a+ f+ S% {( K
r.h.dl=y;' k8 D* W( d( j) C
r.h.dh=x;' M( P7 T! Q3 {9 ]5 P: f7 u# w+ {
r.h.bh=0;
6 ]" e# T, u% Q4 U7 Y% J int86(0x10,&r,&r);
2 g) Y: q3 E8 U4 ]1 \ M }! C' H: p, N; F* p, G7 Y
; F3 M+ ?) E$ ^7 I /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, |4 m8 R; o) O0 t; X0 P
5 V% ^5 Y. W& E9 i$ z8 v s0 Q void puta(void)
: P+ j4 x# E/ T) D0 w {
: g- e* [8 V( e3 c int i,j;
/ G" Z; U; c; m5 F$ z1 q: p% G for(i=0;i<24;i++){+ w# w1 Q+ p6 N
for(j=0;j<79;j++){
& U; ~6 K7 e: I3 H, k goto_xy(i,j);
* u' m1 ?! _: s0 y printf("a");
z9 ~! q2 U/ K1 @ }7 k6 ]4 Z4 K4 a" B/ b0 \) Q4 _
}
2 P! y, G7 t: f" M! [0 V( J } |
|