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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) |; T+ y- V% u
. ~9 b$ O" h2 U; `- E- T
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里* f/ C- w. d& }% p, q* u$ {. N
( q. \7 U7 f$ b7 N, n& d+ V5 Q, [9 } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 ]7 e- H7 w+ ]- ?1 G% t
子函数及演示程序:$ A; B% L4 C' S2 [
$ H8 ^; J- ?- L' M# [$ T
#include<stdio.h>5 M# c( w* p$ S
#include<dos.h>
! G0 v6 ^& J1 |3 V% n8 i( U- n0 l #include<conio.h> ?6 A, T6 Y$ E5 D# c
' K7 j Q5 W2 T' @% f- } void goto_xy(int x,int y);( z5 [6 O. c7 f. ]) Q! ]1 d
void dcls(int x1,int x2,int y1,int y2);2 B2 V) B& Z* o2 _3 N, W" ~
void bcls(int x1,int x2,int y1,int y2);, o1 @2 J5 f% j6 [ [
void kcls(int x1,int x2,int y1,int y2); \/ E% Q* z7 Z
void recls(int x1,int x2,int y1,int y2);( i6 Z$ \, s$ l- l/ F+ H8 h& X. n
void zcls(int x1,int x2,int y1,int y2);
0 U" H h0 A) f. s1 [' @8 {- f void puta(void);
! ~5 J+ \6 m/ M, \0 C& Q7 L; c: m8 I# N3 w- O3 i7 z! [; r, [
/ u* d) f6 f; p3 J
/*--------------演示程序---------------------*/
$ Z1 a2 @- J* c* I main()8 S" H# K5 Z9 M. N- T$ s$ {6 R
{
' y) ?1 E _1 m! G5 r5 l puta();7 X5 J' d0 g" ?, p
getch();( x8 q% k2 K+ L
dcls(0,4,0,79);
" g+ `) K: g* B! }/ U1 | getch();
2 J: H, L/ {1 p6 g2 K2 b puta();7 N5 t6 C! y# Z# Z' ~5 F$ o
getch();& f' i* C$ }+ X7 y
bcls(0,25,0,79);
- h9 w. F/ |6 O& u" D6 M7 U* q getch();
( t) V* k- w" R! ^$ y puta();3 O, z) m* ?) N# Z4 L
getch();) m3 h- L- |9 B) X1 B
zcls(0,25,0,79);3 ?5 r; ~0 U; Q7 Q! o1 j
getch();6 }+ g7 a) \* s5 `# M4 K$ ~" H
}
2 B# r+ G% i# h: t! W /*********center clear screen(中心清屏)***********/
4 v* N5 k: G: C1 o4 O3 v void zcls(int x1,int x2,int y1,int y2)" U1 a, h; ^9 a+ x$ N
{4 r2 \& ^$ O4 [9 g' [. v* [
int x00,y00,x0,y0,i,d;
% n' T4 C" b- \' \! y6 Q- ]8 e if((y2-y1)>(x2-x1)){
1 S% s- Q3 d" c1 O8 f+ N7 Q d=(x2-x1)/2;
( _; c: D8 h( |+ l" U! ^, l' h x0=(x1+x2)/2;' Y$ }: T0 u+ A3 |$ A
y0=y1+d;3 J4 d9 S6 |$ ^6 B
y00=y2-d;
1 u% e) f8 G. R" u- F for(i=0;i<(d+1);i++)- `5 R! T+ P- v7 C0 ?
recls((x0-i),(x00+i),(y0-i),(y00+i));
D# i' I8 ^2 A$ @' c. H delay(10);
% z! A1 C. g9 m; { u }9 ^) k* r* R% \* H$ Q) \" j6 }) ~
else{6 t# u$ {3 C8 n7 A* J, `: O+ R
d=(y2-y1)/2;& j* W6 `5 q/ p
y0=(y1+y2)/2;: n+ V; X+ l5 J" m
x0=x1+d;
+ y7 `( p! L( \0 t8 p* k- J# t5 L x00=x2-d;5 U: }% ?: P d. T+ [+ L
for(i=0;i<d+1;i++), @7 y" \* \4 q- z s
recls(x0-i,x00+i,y0-i,y00+i);& m3 g( c8 m5 Y% Q! K4 ~% z
delay(10);
' o7 M! B$ L2 U( b }
5 R4 R* {- s/ ]4 u% |8 L }& |3 H0 i( V) G
) d' j6 Z/ W/ | |4 i" }8 T
/************* clear rectangle side(矩形边清屏)***********************/5 v6 F( p# q; O6 s5 k. B( M
1 ^2 B* _; b& ]" Z( |# } s# y void recls(int x1,int x2,int y1,int y2)3 d- C$ T* R. ^% z# R) R
{. E( O8 ^. Z S3 O
int i,j;; g' @+ ]9 ?- J5 [
for(i=y1;i<y2;i++){8 w# U, H+ C2 R
goto_xy(x1,i);
$ A' g. |' \4 A6 M8 P' J: W7 S putchar(' ');
9 ~4 y1 q/ v) o goto_xy(x2,i);1 o$ N" Y4 q3 k* [( m
putchar(' ');
+ g! P% C* P2 F8 S6 I- ^' m: n6 m delay(10);+ n. p( ~. K. v2 d; t
}; @' F8 {+ M+ @' ^
for(j=x1;j<x2;j++){
j; R( }9 N* F$ \. b8 z7 v+ {* q3 j2 H4 ] goto_xy(i,y1);
2 V" t0 ~0 K* b; v r) G putchar(' ');) b$ l6 I2 _% ?$ l5 C6 C! X( M$ T6 A
goto_xy(j,y2);
& V) v0 Z7 ~" W$ s putchar(' ');
; [6 ?. h3 K9 i( B% u delay(10);
+ |9 w) I. n! H' E( H }' W" B q. X$ V$ d
}
% C! ~- L( r- _3 I2 R /******************open screen clear(开屏式清屏)*********************/$ [5 j) @; T/ n1 W
4 E& _. q9 m. n. Z4 f% _/ D void kcls(int x1,int x2,int y1,int y2)1 @+ V3 b! B4 c* K* G1 v
{- n: u4 i2 ]; T: h9 O. K
int t,s,i,j;
9 m8 @3 c/ E# ?: d2 \ t=s=(y1+y2)/2;9 r) ?& t- } @2 M( K0 ^0 k
for(;t<=y2;t++,s--)
* Y: D$ g1 u! `# D, g3 n" \ for(j=x1;j<x2;j++){
6 m( k, d/ x" J! f- ]' H5 M" F goto_xy(j,t);; | v0 p0 n8 [. c v# k _
putchar(' ');
6 m+ L& m# f1 q7 D8 Z goto_xy(j,s);
3 S0 v6 r' U u( v$ Y* x putchar(' ');7 [9 q) }3 b9 \( d, g
delay(10);5 |2 r. {8 r ?; O! c5 N
}
% n: ~2 g: d+ I w- _ }( O, G5 ^4 \. }9 U B0 h) M% K# E
/*****************close screen clear*****闭幕式清屏*******************/
4 S; x; G1 G1 i% H% g8 Q6 H
' @7 K; w7 d8 r/ v void bcls(int x1,int x2,int y1,int y2)
+ v) |0 ^# J! k) t0 U) Q; Q {
" @- R, |# ]4 W3 D: g$ ^, b6 L, s$ V int t,s,j;
5 c5 P% {5 Y- ]3 K$ `" { t=y1;
# y& X7 J; m+ G6 g4 C1 L% H% W s=y2;6 {- t% Q# [5 k* d% ~+ n! S
for(t=y1;t<(y1+y2)/2;t++,s--)
& u" b- U9 m8 C! P F4 T1 L for(j=x1;j<x2;j++){
, S+ a, c$ _2 J* V goto_xy(j,t);
; W+ k. Y. L0 ~ U/ @* D, L" [ putchar(' ');5 N' ^/ @5 w/ C) t3 D" y9 P, v
goto_xy(j,s);: p1 ]4 V$ I5 P1 q
putchar(' ');
4 V; G, n7 b7 V. m; I delay(10);
7 Q; S* r" H, ?, k3 u) F }' s9 |0 y( N2 i0 ^- r: M; M
}
$ l- m5 t( v' J /******************bottom screen clear(自下清屏)********************/* q! C& q7 K9 f& w4 K6 f8 o: M
! g0 n6 [3 M- i F! U
void dcls(int x1,int x2,int y1,int y2)7 O. e' h0 V/ e" C, N5 U
{( P3 V& P4 z8 N+ d% b
int t,s,j,i;) s% F$ W% m! \! ^( \; t4 ~1 ]
t=s=(y1+y2)/2;* n9 i, Q4 _8 N- _- e
for(j=x2;j>x1;j--)
" n9 f% M* T" g1 d0 h& e for(i=y1;i<y2;i++){
- Q0 g# z' m" d' g% b) @# ^) h+ } goto_xy(j,i);* {: |5 c S* z4 q# w$ Y3 x1 V
putchar(' ');1 E: z2 n4 ?' Y) Z# P- s0 R- O' @
delay(10);# I+ `( v' I8 D7 t0 n
}5 F/ W3 g5 b( f9 d$ C r) ^
}
+ Q \( Z5 i0 D0 a" B2 c /******************设置光标子函数******************/1 V/ Y1 F# Z4 q9 n- t4 Q/ M
' U# o3 f( A" E% c void goto_xy(int x,int y)
" z( z4 _3 t) U. q) \1 p Y6 k {
. ?% I' N3 i- x7 n9 W union REGS r;
; x2 a% R4 t% [! l$ { r.h.ah=2;. Q+ ]* ]$ S5 j3 m7 e
r.h.dl=y;+ s8 u! h7 G* N0 H
r.h.dh=x;! \" ] ?, g" N; N
r.h.bh=0;
/ x; q/ G- C$ I9 `9 _( E' _4 V int86(0x10,&r,&r);$ [& a% O+ M: J/ X
}. @: }4 A. x# c
6 x3 \) m, z! u" v6 R8 Q \
/**********************在屏幕上打出一连串的a字母用于演示程序******************/+ u: `" x3 v& c* |
~$ _( r; F# }2 f. W' v: {, S9 } void puta(void)
; U1 e6 `) N) Y3 j" q# E- Y {5 d9 Y' k) s' z4 g+ R: M; M+ ^- \* e) G
int i,j;
+ ~ E% d) F+ u' }4 r% }2 A for(i=0;i<24;i++){
$ u! t. E0 J1 `6 m for(j=0;j<79;j++){
7 B# g" F2 u Y+ n8 }! ?( w2 ] goto_xy(i,j);3 i1 z1 E' g- X& {
printf("a");; a9 j% @2 w4 k% X5 Q6 H
}+ o* u/ @! \! @; O4 V
}
. a- ?1 \5 } s } |
|