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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' n. F. G# a- \2 B" l2 D' G) L7 I' r: I
* u" c& T( l& g; B 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 ?3 g9 I" j" k$ k" s3 M) ?& Q! `7 c/ B) v% s
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 h; N$ A" f$ k 子函数及演示程序:
- m g' Y- j4 T0 J
g* K! {2 a# I7 A' c$ |( s #include<stdio.h>6 v# A$ }6 h8 N3 r5 y/ ^
#include<dos.h>
! l( ^5 Y* f5 h; `6 s #include<conio.h>
# S* o6 [9 `3 A
# S4 L9 _0 H# T# Z$ u void goto_xy(int x,int y);* e; [' {2 E% m; p! H9 w: S+ v
void dcls(int x1,int x2,int y1,int y2);. N: ~# h' e8 i4 I
void bcls(int x1,int x2,int y1,int y2);/ r4 I/ \2 C: r3 r, K5 s" n3 H* _
void kcls(int x1,int x2,int y1,int y2);% w/ m: E6 ?# g2 C u( e
void recls(int x1,int x2,int y1,int y2);" P8 v/ `+ T/ _. T) j
void zcls(int x1,int x2,int y1,int y2);3 R' F5 F+ S6 j/ n
void puta(void);% f1 G! {5 s; P7 X
6 m7 N9 R9 v3 f! W$ p: E% [
* r" d! c# t1 Q0 X2 w( _- Z8 T /*--------------演示程序---------------------*/
6 {4 z' Q# M+ x- v& j9 V+ {: y main()7 w4 ? y+ `% ]2 A5 e
{
' I) E) m1 Y) ~) G% W puta();5 U1 S3 a) f' p5 K
getch();
/ z) f# g9 Z$ E+ k$ v dcls(0,4,0,79);5 L9 z2 F& j7 ]
getch();
. X3 N: ^- p! f2 ~9 |. K# [ puta();
* d6 ~' F; A, U getch();2 j3 Y) r+ p3 l+ }! r$ F; [
bcls(0,25,0,79);
& R3 b) I% p3 T/ Z$ D, ^ getch();
" t! K" L: D: k J( ]2 _! Y/ H puta();
9 G5 H f8 f3 _; \8 ^ getch();$ L3 k1 u1 m' b4 S8 g
zcls(0,25,0,79);" X( A4 b3 L3 u' v
getch();2 \* m# `* p2 ?
}
" x: p! F( Y1 @* t0 F /*********center clear screen(中心清屏)***********/
1 c% p9 g" \/ X( ?8 }! \ void zcls(int x1,int x2,int y1,int y2)
8 _/ j4 q& n3 v1 T" U {' A$ b/ n# a' g' R. r+ v) T8 k8 t* H
int x00,y00,x0,y0,i,d;# `. p4 k$ b' E6 Q: @9 w* `/ L
if((y2-y1)>(x2-x1)){
: R6 j! t2 F# q! `4 k+ p, R d=(x2-x1)/2;
# U6 M/ b/ F5 M* C8 ^ x0=(x1+x2)/2;9 T& y& y/ M. {, q
y0=y1+d;0 I/ ^& k" {' a1 B- r% C
y00=y2-d;$ G8 J" Z; n, _( N0 v/ G e
for(i=0;i<(d+1);i++)) J$ |% y# J( t: J
recls((x0-i),(x00+i),(y0-i),(y00+i));
& [& @2 L, z" ]2 l delay(10);
0 V' L1 v1 x% G* ^! i$ l, v }- }! u ~) H2 n9 F! p! I
else{4 O) B J% U7 C9 \
d=(y2-y1)/2;
) P5 l; t8 l4 W% R/ D& k y0=(y1+y2)/2;
/ d+ k' K$ a$ l x0=x1+d;
2 w( o3 ~+ V' O9 n9 z x00=x2-d;
" _6 L% X7 b5 W8 g. h for(i=0;i<d+1;i++)
! F1 D8 y. {! Q, D recls(x0-i,x00+i,y0-i,y00+i);
5 p$ W3 W- s* I) u# {* { delay(10);; n! ~2 D, s& `' y: d& Y7 v( Q
}2 G% G+ |$ }. J
}; u2 x+ s' L9 O6 M/ R0 A
, g6 j) C6 l n3 }& a
/************* clear rectangle side(矩形边清屏)***********************/& ^! `9 U; |4 @+ ]; b
! V i; P, b+ @: k# l) S void recls(int x1,int x2,int y1,int y2)( t" p1 N8 H# Y4 F6 x: ?
{
0 y* G; j3 R/ V8 d int i,j;
. @/ x6 v8 c4 }" {$ z* ^+ i) t for(i=y1;i<y2;i++){
2 @6 r1 `1 t, V7 l6 A. t# ` goto_xy(x1,i);
: O+ v/ v n! H8 Z1 } @% q putchar(' ');
- o& Y$ {9 f8 s) p+ p. E; y goto_xy(x2,i);
. g `+ ?4 r; X1 C) t putchar(' ');, j! {* ?% N Z1 k J |
delay(10);
5 F; P* B6 C* O8 a+ n8 R3 e; d }
9 {1 f9 ]& |( A5 [3 y for(j=x1;j<x2;j++){
" D+ K" H4 g g* |; C6 u8 w" U goto_xy(i,y1);
! Q. v; G {& O4 H' Q2 E putchar(' ');
% V) V. K6 A3 b goto_xy(j,y2);
5 M& g: C' b% B4 N8 s- _7 R1 H putchar(' ');
' k2 j+ u. q$ h+ }& _ delay(10);. G2 w2 i# o+ z
}1 C5 U! J. y+ h" O# ]. H; u
}
7 s# |; B2 k$ J$ t2 [. Z /******************open screen clear(开屏式清屏)*********************/' v# A0 P# W+ k% u
4 B1 k+ m8 K, S4 A
void kcls(int x1,int x2,int y1,int y2)
" ~" l& ^* p9 W' s. T2 l: E {3 ~: G* Q+ Y: }( k
int t,s,i,j;
# ?' B+ q: J1 u1 j8 @ t=s=(y1+y2)/2;
/ Q- L4 A0 y$ Y* C1 C4 p$ F for(;t<=y2;t++,s--)
* I! D1 _9 }2 G9 _ for(j=x1;j<x2;j++){
~8 y) O3 ?7 m( ^: z goto_xy(j,t);
) o8 l2 ~. E% _! p putchar(' ');
) e: ]" g2 L. W" K goto_xy(j,s);) p) x2 z/ r+ H6 h
putchar(' ');
. K2 b, a( k0 K delay(10);5 R$ r7 c4 D7 [# V3 V! b8 m/ b
}
v/ x; B) ~- m0 w }& s& ]: J% \% A8 }0 W6 x
/*****************close screen clear*****闭幕式清屏*******************/1 l6 r' t8 r# A Z
% E1 K4 I& `% [4 B- E$ {+ O void bcls(int x1,int x2,int y1,int y2)& ^6 K s: {; ~% q) S
{
, Y7 m* h8 [ R- D8 i int t,s,j;
, g& O* H* w( n- f9 L. v3 @- t t=y1;3 ~) S2 v! i. A! }/ |
s=y2;
+ t& O" N, Y; j& p' j- C for(t=y1;t<(y1+y2)/2;t++,s--)4 S. m# w% w$ b* l* }* X
for(j=x1;j<x2;j++){4 N7 V! y" a& x' {, q3 L$ S: {
goto_xy(j,t);
& Q2 H2 f5 |. ~2 n3 R) y* e! A. _ putchar(' ');
0 I( d, s8 g% T: W, I goto_xy(j,s);
3 R* ]6 F) ?8 F' g/ { putchar(' ');
! I, P9 A* H6 t4 V+ z delay(10);6 I' s$ x4 j8 d$ ^# \1 v( o) S
}
. ]5 f, b% n7 ~) @- h& Y }9 b4 X9 `; O Y# r6 i4 a
/******************bottom screen clear(自下清屏)********************/
4 [4 X) M1 K2 E0 |: e& Z' M( F: m6 M& P9 ]
void dcls(int x1,int x2,int y1,int y2) b& v8 _6 A( m x3 K2 D/ s
{
. ?( O" {, H* v1 V( o$ [+ X) K9 u+ z+ p int t,s,j,i;9 R. V5 B! X h) F6 g
t=s=(y1+y2)/2;$ ~- R9 P; a9 ?; T+ M5 C
for(j=x2;j>x1;j--)1 W3 b1 k' m9 s/ F7 u# y
for(i=y1;i<y2;i++){" F9 u0 ~: |6 i- o( Y
goto_xy(j,i);
4 {4 i0 u; j& T3 ^9 `0 |0 B+ s0 E putchar(' ');5 T6 L. J% O8 s% M* T: \
delay(10);: A" ` G, s" J' s
}* C+ g* O0 i4 `$ }& J. |7 J
}
9 w0 l- |# d7 W! j3 t+ B /******************设置光标子函数******************// e/ t' `( M4 h8 m, R5 H2 p5 T
: M& l7 X0 D# i+ y void goto_xy(int x,int y)7 i7 y: x+ U0 ~& ]1 @& ?) U0 `/ d
{6 b" x9 G: g! ~9 h* V# M1 m' F6 m
union REGS r;; p9 M" C. a4 T+ q
r.h.ah=2;7 r- e; r1 g! @% q( i0 m }; j5 v
r.h.dl=y;6 e# ^6 o! E' |3 L. J( O9 E
r.h.dh=x;
# P/ h8 e* y* d9 D+ I r.h.bh=0;
) l" L% }4 t" U2 r2 m, n' I int86(0x10,&r,&r);
7 T5 J/ m9 P! U4 {3 n- O }
) S$ K+ m$ O2 U; a' a% w) }9 n- n B5 t1 M2 N7 G$ W: ?3 W3 P7 X- t
/**********************在屏幕上打出一连串的a字母用于演示程序******************/. T) \) C% `/ p6 u; i
# [2 X4 |" B Z! l* j void puta(void)
' x" L+ x, l1 l( v1 q4 p- b, J: K {
! b- H# l; ^ ]4 s! O int i,j;
: w0 i3 A! n8 a3 Z$ c. }* [, e" J for(i=0;i<24;i++){
& [" `$ C8 {0 F1 N# b for(j=0;j<79;j++){
5 \ R/ P, [! H" T3 o goto_xy(i,j);) I9 g8 W P/ {" h4 Q
printf("a");
/ u4 e a' T9 n0 E- C }. d4 @9 s! X7 b9 M$ W( e; N
}! h; I, a8 \% d" Y
} |
|