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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ M+ ~2 @/ F0 { ^+ C
& S0 Z5 r+ l% B x 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, A* A- b' v+ ^: \$ H
$ v# P: L9 A: } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
* h& J+ R0 ]' a2 G$ j 子函数及演示程序:
: J6 i* [. k* \" ?. ~
. T G1 E2 s6 J" {4 }& I #include<stdio.h>8 v2 C) U, Y0 y; b& K, x5 J
#include<dos.h>
- ^( ]2 v4 @- m$ S0 p #include<conio.h>3 @0 v1 \5 F" e" R' s
0 `8 x- X! }! x0 B0 h
void goto_xy(int x,int y);
7 f) m6 Z7 x# U j) o/ K void dcls(int x1,int x2,int y1,int y2);
0 h+ s; N% w0 b" S, q void bcls(int x1,int x2,int y1,int y2);! f; B- q4 Y) ]( [9 F& ~8 z+ \
void kcls(int x1,int x2,int y1,int y2);& {5 @4 Z2 C& Z) X
void recls(int x1,int x2,int y1,int y2);
, T. z& o" b! _; y/ j" e7 \; V6 D, f void zcls(int x1,int x2,int y1,int y2);
: T' L) d3 v$ h# d void puta(void);& g- H* R, E- I$ j' Z& B
1 r) `. R L! i' o% A, Y8 f! b! J% k6 P+ e
/*--------------演示程序---------------------*/
c3 P! k: H* J3 s- \. y% u) S main()
- }6 F* C8 i# k; S6 Y {
+ c5 V2 l( [. t2 t puta();; h; `4 R7 n, C; G5 H9 U' e$ r
getch();
: ~3 C+ [, F) c# q( e! I dcls(0,4,0,79);1 I( q/ M: F, m1 t0 H
getch();9 k+ Q6 w$ A6 R' s. y
puta();: n3 [1 V! [ m6 S% q/ a5 J
getch();7 }+ |2 P3 k6 n( l7 X
bcls(0,25,0,79);
% w& L! \9 d' I% V/ Q- ?& \ t getch();
! ?2 q& C2 J9 B c" b2 T3 } puta();0 z* z2 L- q, G: |8 z2 v E$ Q
getch();2 n9 o5 Z, [% Q. `5 t v
zcls(0,25,0,79);# K' c5 U8 U4 U2 x$ A9 }9 u
getch();
% i1 P! I+ t( I0 a. c, N+ P. R }
# |; M2 K: ]2 E+ b /*********center clear screen(中心清屏)***********/- w. L# m$ v+ P, k/ _# F# M
void zcls(int x1,int x2,int y1,int y2)
. }+ E9 G6 Z8 y y {- D/ I% Z4 s1 w s4 o( k
int x00,y00,x0,y0,i,d;! o" k5 s" P6 E' @! t2 q; B, J' A6 k
if((y2-y1)>(x2-x1)){
3 x! S ^1 J( F: S5 g, R: O1 c p9 U d=(x2-x1)/2;( j9 B3 g7 h2 x# z8 G' k
x0=(x1+x2)/2;
3 |! D9 v; o; p8 d1 m/ w4 v8 r- V y0=y1+d;. i+ Y0 W6 r+ T+ p$ D9 P
y00=y2-d;
( x: L" u5 d. }4 P+ D6 h for(i=0;i<(d+1);i++)
1 e8 K+ G9 E; b- C$ B: _2 n5 A U2 l recls((x0-i),(x00+i),(y0-i),(y00+i));
. o6 }, u2 U5 n7 d1 N. E delay(10);. M: {! J: C2 B: p4 G/ W( `% |
}- n @+ o9 i4 @' y5 g, v% z& @
else{% R' V; H; B0 |0 h5 Q& F6 Z- r
d=(y2-y1)/2;- O; C2 o% p5 y$ P3 ^: i
y0=(y1+y2)/2;
; [+ `% C, L* X+ L x0=x1+d;
: p$ q4 ?9 F0 ? x00=x2-d;
8 `3 j2 L+ t/ x+ [ for(i=0;i<d+1;i++): B: C M' \3 A
recls(x0-i,x00+i,y0-i,y00+i);
- N0 o5 v) ?1 H3 Y delay(10);
7 k6 ~( T! x. f {1 j7 _ }( r4 X' |3 n! w, Q8 F
}
6 r4 U9 x- B4 F" ^6 r, |* \; @$ J! {# E
/************* clear rectangle side(矩形边清屏)***********************/1 P( m) F, V' H5 k0 |$ Z& v
4 y2 z4 F @7 {# e& M4 _; V! U
void recls(int x1,int x2,int y1,int y2)
$ G! L4 W; J a {
3 S5 T8 e6 M. b3 z# n: z9 n int i,j;$ y- |5 _, ?$ S' L- j4 ~& ^) W
for(i=y1;i<y2;i++){
2 L K3 Z, S* @" g" q0 P' Y* M goto_xy(x1,i);# @! U2 j2 }2 ]
putchar(' ');) F8 D# P& p$ e x% }* j& T
goto_xy(x2,i);3 F4 F# }0 C0 m* z/ s
putchar(' ');; I, T G& k( R4 y5 e
delay(10);4 b: ?9 C6 h; O2 F ?( P- v% }
}
: \% a$ G. v+ I. G- }. }* \ for(j=x1;j<x2;j++){3 I9 ^0 y6 S. y! h& f+ ^
goto_xy(i,y1);
' e. F. g; F' }% r+ \ \ putchar(' ');. J9 G" W# O2 y3 ]/ |4 f% L# ^2 o
goto_xy(j,y2);1 n6 V& C) f2 r+ [" A) Q5 {
putchar(' ');
' q( i) ^8 _" N x$ y* D8 z0 x$ a( w delay(10);
# r% y- Y7 F) m9 n3 F5 q! b }
^+ R: d V$ Q/ s2 n. i( R0 | }
( f* N/ h) r+ ?# Z6 Z$ Y /******************open screen clear(开屏式清屏)*********************/3 E4 Z2 {. Y2 O' T0 o |
2 F4 z0 \+ ^: J! ]. |1 l
void kcls(int x1,int x2,int y1,int y2)
# b$ T" C" M+ ~! ?8 r9 Y" W {5 D; n$ J6 o; D6 X0 H& H
int t,s,i,j;
7 b! h4 \8 b* g e' V7 r% N t=s=(y1+y2)/2;
7 t6 J8 B5 [3 c( S0 F for(;t<=y2;t++,s--)8 `; e2 {" b5 I' z/ X6 e! y# o
for(j=x1;j<x2;j++){
9 @" p+ l1 K6 w- q) [2 I# a* K goto_xy(j,t);3 ^- _" D. h1 u0 L3 D
putchar(' ');
( q& V# [1 B' S' j1 d, t goto_xy(j,s);
9 \0 v' B; l( `" ~% G putchar(' ');+ P3 h% T; T0 `0 v2 R1 F" L M# ~& e
delay(10);4 P$ A$ m: N* B9 r- {0 N' [
}) r; f: k6 y/ H8 v6 r
}
( _& _$ ]/ [4 u1 \3 ` /*****************close screen clear*****闭幕式清屏*******************// r4 `& l% v4 U" e7 c
: s& T& e$ P# M f9 e4 `4 _, P g
void bcls(int x1,int x2,int y1,int y2)
" D9 P l4 g. @+ H {9 r1 X; n+ l4 T1 `7 K8 D
int t,s,j;0 q2 D: V4 w( P' K5 Z5 |. {
t=y1;
2 P& R8 m s- n) L3 R s=y2;) h8 i6 j' [* B6 F
for(t=y1;t<(y1+y2)/2;t++,s--)
9 o. e4 c' x! |7 }0 i$ G! Z for(j=x1;j<x2;j++){
2 I a0 J8 [! l/ [) [" ~9 h! @% o goto_xy(j,t);$ j' p7 B6 o7 s, y1 \! G& {
putchar(' ');$ x3 f5 T! o% N+ D
goto_xy(j,s);2 |* E; A; A7 [# a& G
putchar(' ');
" j0 {7 o; n% L+ ~5 O7 A delay(10);
( h' T4 U1 V2 Y; U1 k1 p }
; F' \' I$ U0 e, {- Z }' y* X1 P4 G& k
/******************bottom screen clear(自下清屏)********************/! j3 D+ ?* o, }5 H$ W0 d, L
- `5 ?5 O4 }8 E3 e) o void dcls(int x1,int x2,int y1,int y2)& P; |. B/ S$ Z* u$ ~
{
6 s# X& H1 x# n7 _ int t,s,j,i;
8 t4 [) @# m. L- A# \1 _1 { t=s=(y1+y2)/2;5 O: I" x- `8 x- N F
for(j=x2;j>x1;j--)
! D+ c0 Q( j. K* T1 \, c for(i=y1;i<y2;i++){, l, ^* r8 v3 V, A5 J E
goto_xy(j,i);# y N1 s4 d) h3 y3 \! y5 F
putchar(' ');) j( P! H" P$ h. [
delay(10);
& t+ n5 y' K9 a }
# G9 U/ q7 o* D B9 }$ D }. J0 P# _) Y% F2 C2 z2 Z5 e
/******************设置光标子函数******************/& x) j& B5 P- K1 Z/ ~/ W
7 o( t- H& r1 |$ ?! P+ L5 ^- n8 I
void goto_xy(int x,int y)
. A0 g" a* C! L( V' t( ? {' [) w0 p$ U% t$ W: T5 ~
union REGS r;6 t0 T8 B; E% e3 ]# a" g0 H
r.h.ah=2;# _# F2 _+ v5 ] |/ m5 r3 L% h- k
r.h.dl=y;3 y7 m" p9 W& i, s
r.h.dh=x;
! z; }, B3 |( f6 T' T1 W t4 ` r.h.bh=0;9 ]5 o+ \3 M- L+ I I2 J
int86(0x10,&r,&r);/ Q# p6 ~1 x) b/ W
}
) \1 t" F8 A2 `% f( |# ^
2 Q. U% U& M" A3 E+ Z2 ?, N /**********************在屏幕上打出一连串的a字母用于演示程序******************/& T, |! a$ ` x# }
' I' M3 O" A, y4 q0 k% H% `! F
void puta(void)3 ~9 _. V! K3 U+ j. `0 a
{) @) R; Q3 M+ R( V) m9 }' C+ b" W
int i,j;
9 ^$ \8 \/ d! N/ D- Q9 P ` for(i=0;i<24;i++){
# ^3 `; ^: r% p# R/ q for(j=0;j<79;j++){
$ _$ Q3 Z0 R* t% w goto_xy(i,j);5 ?$ ^. X0 p$ M" j
printf("a");7 C. M. h* d0 @0 G. h" v" O
}1 n0 Q- d; P0 h" r3 k5 G$ P
}
' g \. `3 P. M, E3 t; p& k } |
|