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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,* X+ _+ x" O0 P# m I* h
1 u* D- x" S* s$ f/ h( [ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 T4 f) |# e1 u
. t5 R8 K7 L P# ^* A7 k" u! w 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 @6 Z0 B) @4 n! U! D
子函数及演示程序:
4 p$ U- D3 m+ A; F# Y: W% q! }( g3 ?
+ d1 _4 ^( v, a8 S* v3 N #include<stdio.h>. a4 d Y# P z" H% B
#include<dos.h>
" L: U! |. K" C! h- c0 s* A2 l #include<conio.h>
& X6 w1 k5 B. w& O
1 i6 n; ~& P! v6 H* X! L void goto_xy(int x,int y);
0 f- A$ @, e) ^) S, }4 Q* f& x: k void dcls(int x1,int x2,int y1,int y2);
{6 V/ w5 Q; F1 l# j0 y void bcls(int x1,int x2,int y1,int y2);
$ \( S) K; b7 @5 o void kcls(int x1,int x2,int y1,int y2); |$ J! R- Z% M. i) @
void recls(int x1,int x2,int y1,int y2);
- \( f8 H5 P( u8 B6 N$ B void zcls(int x1,int x2,int y1,int y2);1 s8 [; E, b7 l: j4 g) @1 |
void puta(void);
% t w$ s, ]! X" a" ?' s" |/ `7 P8 p M- |. S! ~$ f: Y" b7 w2 j% k% x1 ]
1 \" L9 z% f# ?8 h6 j
/*--------------演示程序---------------------*/0 o6 ~% X) i+ W" `
main()
; b) V- Q3 f1 ?8 i( f/ D! Y {5 \6 k1 V5 q5 b5 o+ m
puta();
" ~0 I$ B. G: P getch();
9 \8 X; E( z) X: T7 z% K( Q dcls(0,4,0,79);
1 M Y$ @; T8 z( H% a9 `$ w R% Y. Z getch();
) g0 W4 R7 B* M puta();
6 {: p |* }& W% a getch();9 i0 Y) p7 z- d2 T3 ?1 H Z
bcls(0,25,0,79);
' t" v# f5 m$ }+ ~ getch();
2 G: ~1 Y R$ B$ x puta();
; t( a0 J9 D8 }2 n L getch();
% F! U# w4 N1 G, Q0 m zcls(0,25,0,79);
3 S7 R3 P) q% L3 D getch();
- c8 \" w2 l# }" u }
( a9 z3 K( u# B7 R$ f6 W/ P /*********center clear screen(中心清屏)***********/5 E% e0 a9 {% s2 z
void zcls(int x1,int x2,int y1,int y2)
3 ~) b) C% b5 @ {' h( t9 T% P' L3 j
int x00,y00,x0,y0,i,d;6 Q; Q- n/ D" K3 S6 ]
if((y2-y1)>(x2-x1)){
/ u+ p2 u) I3 \# t% S: b. z: @% j d=(x2-x1)/2;+ J) {' O* n( a6 A: t
x0=(x1+x2)/2;
$ B$ T3 N$ s: G7 _4 ` y0=y1+d;
}' n8 x/ p/ R) v( |& [ y00=y2-d;+ w6 }6 b+ f' f+ d( T* V) Y
for(i=0;i<(d+1);i++)
7 a/ D+ x7 q' h: U O `" u recls((x0-i),(x00+i),(y0-i),(y00+i));3 z4 `) w7 u1 M1 B- {& Z1 x
delay(10);7 M2 L- j# U, u1 z3 A
}4 f+ }# E1 C! c4 H8 H
else{" Q* S/ Y3 u o- ^; s
d=(y2-y1)/2;% f. p5 Z. |( N6 y8 l+ Y- _: H6 d6 y
y0=(y1+y2)/2;7 V# }& [2 {( ?6 ~3 g" v' ?
x0=x1+d;
. t6 ?9 ~; |9 H x00=x2-d;
2 D7 [1 g* U$ E4 ]$ w' M& J for(i=0;i<d+1;i++)
+ d5 J8 E$ ^. c- N recls(x0-i,x00+i,y0-i,y00+i);
& J9 d4 L) [9 |& H4 \ delay(10);
2 y3 N6 F% B$ h! j E$ O/ n9 z2 X }; ]8 T! Z7 l! v! g+ H) V- a* T; o5 j
}, x' Z. r4 P$ x9 o3 [2 \
" M5 Q- \0 ~6 z: A: J9 h
/************* clear rectangle side(矩形边清屏)***********************/
) S. q8 F) r4 o6 d9 s6 ]8 g% r1 l4 e' E0 t" [# R1 u3 g
void recls(int x1,int x2,int y1,int y2) E/ f& `7 j/ ^
{
L$ _5 `$ ^3 ^- N' ` {; c int i,j;
: E) C, \& N( Y9 Z8 @9 ] Q3 w for(i=y1;i<y2;i++){
! o. l7 w; f& P5 l goto_xy(x1,i);( V% X2 k- B1 @) C
putchar(' ');0 J8 l9 E8 H- V$ R
goto_xy(x2,i);
4 e% {/ K* A1 X( r putchar(' ');. V9 g5 t w, K1 b m; D
delay(10);) ?& T8 x9 e; ?* G! ?
}! [7 G0 v1 y3 b5 C
for(j=x1;j<x2;j++){
# v0 A; _0 I+ a( A goto_xy(i,y1);
; i- R- e1 _% r( H: C* h/ V5 p6 t! V putchar(' ');% n' c8 t4 M& D: w0 O
goto_xy(j,y2);
. M: C, v6 h+ o% e+ P7 U putchar(' ');
8 M6 W8 Q0 g* m delay(10);
) ]3 F: _% m3 \ }4 e( B! u ]& |6 U% k; ]
}1 A: t( ^" H* W# T0 b9 l2 ?
/******************open screen clear(开屏式清屏)*********************/* [& q& \+ y/ P* ]. V- g0 @1 |% [
% ^# {0 v# p0 u void kcls(int x1,int x2,int y1,int y2)2 F+ H8 a$ R" f- O
{
T& L0 b3 ~$ j0 O4 [3 x$ M% E5 [ int t,s,i,j;! g" `$ z6 Q) \" K- N: F
t=s=(y1+y2)/2;7 g) Q g% Z$ [; T
for(;t<=y2;t++,s--)
4 s; [' C6 i& P" d$ P* e1 A! Y for(j=x1;j<x2;j++){
. i6 n C* K2 e4 i% k4 ^5 }0 h1 f goto_xy(j,t);/ j; I1 h' ^1 A8 K {6 m) ~
putchar(' ');
4 g) B) [$ g, J C5 d) h goto_xy(j,s);
" L& m; c, d& U) Z putchar(' ');
d) P% q! G. l" T# h delay(10);; ^( O- L+ r( F9 Y
}
( Q+ Z: J. @. Y3 R" k$ T- e$ s }' h3 K2 R6 Q" B1 y& j# V/ P4 @
/*****************close screen clear*****闭幕式清屏*******************/4 L6 ~1 [. \& Q% |
1 t" z7 k& W: o
void bcls(int x1,int x2,int y1,int y2)) h* |1 i0 Y' o B4 S, s' Q4 V# J0 z
{2 v1 }0 D! {9 y" O6 k* ~3 H
int t,s,j;
7 d& u( G' T! P- X( C6 m t=y1;# C8 Z1 h' o* Y0 ]5 a2 L
s=y2;9 ]/ z$ v: d$ t9 R( |* N6 M
for(t=y1;t<(y1+y2)/2;t++,s--)
/ d) i. t$ k7 U" k& e7 ` for(j=x1;j<x2;j++){
3 }: I! k+ I( Z* }( H, P goto_xy(j,t);/ k7 b$ ]" z0 c4 w' h$ ]- j/ y/ O
putchar(' ');* M6 s7 z8 K$ v8 v2 P
goto_xy(j,s);
4 Z+ ]; z& C; s. p' e- _ putchar(' ');' r! x6 ?+ Z9 y2 @' C
delay(10);2 W& P1 m- T* B/ l0 L
}( t$ `. e R6 T4 s. f: ^
}
K$ S# e* F' s0 I; j4 L: P& ? /******************bottom screen clear(自下清屏)********************/
; \! R! z. Y4 _/ k: \
" t3 ?9 o0 D8 w$ F, r# P void dcls(int x1,int x2,int y1,int y2)
; [, ^# V( Y9 c0 P8 ?+ P, |0 E {! U* u; M6 z4 W0 q5 ` S( K; f: c
int t,s,j,i;$ N+ l7 n; o3 j, `+ e
t=s=(y1+y2)/2;
) n: `% \1 e5 ?3 r. z# I for(j=x2;j>x1;j--)
; w9 y; ?: Q8 J0 _7 X2 @* H for(i=y1;i<y2;i++){
: b8 r2 Z: n! P; ^ P. z goto_xy(j,i);
6 b& u! b0 O. P7 T: e1 [7 B putchar(' ');
8 h$ A1 T" |/ r+ f" ] delay(10);
+ _! c# u/ F* `2 v6 V0 d- D+ r/ S0 X }) m( D( Q; @1 U% x
}
' R3 J: }6 v" u7 K4 { /******************设置光标子函数******************/
2 v6 B D9 @! X
( l, v. w: m5 k+ E% f# F. M void goto_xy(int x,int y)% `5 W) C& K" L! C8 C
{
! X3 |+ ?$ X7 H% j7 c union REGS r;. a) c, \" I3 z. A$ z
r.h.ah=2;, l1 K9 k; G/ \# D d8 k/ {
r.h.dl=y;
, h; k4 V7 `5 f r.h.dh=x;
, f: V, {. G3 h: T6 @7 W7 J r.h.bh=0;
' |' x7 v1 O0 Z+ ^5 m int86(0x10,&r,&r);
% K( s7 z+ U# \+ u8 V! L }
# A" F& Z D7 C, ~+ B
: z g+ J0 I8 k" B/ B /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 G3 s4 |# l4 `! G9 F- h) W' s- N1 a+ C' |& U& C
void puta(void)
2 b3 V+ ?. h% y" b7 j% T& M+ [7 d {# l3 g( i) w/ W! W2 P+ I
int i,j;
2 d0 T+ O2 o3 ^! b for(i=0;i<24;i++){
# I) P& T- N0 K5 |! {/ d) i for(j=0;j<79;j++){- w+ i; c* O+ C% G
goto_xy(i,j);' h) ], N, R3 B+ w8 _
printf("a");
: U4 k. Q8 _1 f7 s+ c }
) X8 c% C& r* _ i/ V; D% H' L- g }
1 [3 @/ X' h7 U( f; f } |
|