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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 e& W' x$ G( U. q p$ ?: D8 n
4 v5 u, ^) {9 i9 o9 t 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+ {" h0 T5 A. [4 ~, M# x
6 ^& V4 p4 s' C6 m" @& o+ z4 m
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 ]& h' a2 d1 R Z9 E
子函数及演示程序:
2 c6 o7 }' D* t& ]0 G. k3 J
7 _( g: ?9 A/ B+ _2 E" T #include<stdio.h>
' w7 \5 ~- N. b: J+ X4 W2 Y8 _4 q #include<dos.h>
, n& U3 }7 @4 |0 [3 @1 ^- |/ p9 K #include<conio.h>
# {: e8 G5 ^& R2 V+ L6 ~
6 j/ f2 G2 e5 v void goto_xy(int x,int y);
; B& a* _ A7 o( a6 B& q void dcls(int x1,int x2,int y1,int y2);! N- Q' A. d0 D. c* Y* Z2 L
void bcls(int x1,int x2,int y1,int y2);( z1 o3 `6 g& E g& |: \. B
void kcls(int x1,int x2,int y1,int y2);
. e) d3 ?) d! i' @; B void recls(int x1,int x2,int y1,int y2);! o! N3 r: i2 P. o& X3 }
void zcls(int x1,int x2,int y1,int y2);- {) b4 n L- ^" x
void puta(void);2 ^+ T C0 c4 \0 P' f/ u
# q2 Q& c# S4 t l& Q
+ {0 x/ N1 ]/ R( A9 R. J* K& I /*--------------演示程序---------------------*/2 b$ f) f" `7 U: G
main()
' L, R& N3 J9 p: ?, p4 h( p {
7 ]6 `1 O+ A' V puta();# h) J& D/ ` \1 A1 f: `. z+ t+ o5 x
getch();# L' E" R& s1 i& x
dcls(0,4,0,79);1 r3 `5 u* ]. C) U7 |
getch();
) k2 D( r& {- _6 t0 [7 S$ Z/ e puta();
, M2 i6 C3 D- s+ k/ L! j getch();
" S8 L; y; k; P bcls(0,25,0,79);
1 _ j9 @7 W- ~ getch();
. S) e/ s$ ^1 L2 o5 o% a puta();& u Q& H& V) b# o
getch();3 x4 M; v! }1 B3 p& p% h& G# y2 E
zcls(0,25,0,79);% i& B$ ^8 x/ \* v* ^
getch();
: b1 U( ^1 Q8 U$ y }
8 _% S" I; j i* p /*********center clear screen(中心清屏)***********/
$ [3 k8 @; p8 p/ H% j9 G6 ` void zcls(int x1,int x2,int y1,int y2)$ J% A0 }- t* b2 O$ V7 ] O
{; _( R1 i! W/ S4 s
int x00,y00,x0,y0,i,d;
|' w( Y3 |. I4 }' g if((y2-y1)>(x2-x1)){. u: V- v/ a, H- S2 ?$ Q
d=(x2-x1)/2;7 f) r* _$ a7 g# j4 d1 M* D" L, |
x0=(x1+x2)/2;
8 ?4 V( w C# L: C6 | I, F. x& U y0=y1+d;2 X' q* ?3 T) V2 L$ S! |
y00=y2-d;
. Q% M) X( Q: u( S for(i=0;i<(d+1);i++)8 ]0 p m: m( i6 K( c1 \) I
recls((x0-i),(x00+i),(y0-i),(y00+i));" Y0 n$ u( b* ?! d$ `( c/ f' m
delay(10);; R M) [. q. g+ P/ e
}
$ t; H9 N W& C; E6 q7 a else{
7 q+ X$ H. s! C, W7 p/ B$ U d=(y2-y1)/2;: _" a7 W2 q% F. a" f, c
y0=(y1+y2)/2;
# [- Z5 Q |- o+ o/ [0 @ x0=x1+d;7 G+ S3 O# s* q
x00=x2-d;& [* c: g3 a( S+ u
for(i=0;i<d+1;i++)! h* U# G7 [7 m! a' d& \6 [
recls(x0-i,x00+i,y0-i,y00+i);& j. F3 i0 a% Q H+ q+ ~0 x
delay(10);) @5 [* I' P$ P' J
}
* }, X' Z; i- h$ |" V$ \- r }7 U( {2 G2 e% x4 C3 ?
7 j: O: a& {- _0 b! H /************* clear rectangle side(矩形边清屏)***********************/8 l6 ^7 e) B+ P5 m' T
: r9 M( m% W8 b) X
void recls(int x1,int x2,int y1,int y2)
1 d5 j1 w9 m- L# o {& s- j, A+ @: R x
int i,j;
; k$ K7 B& o# y1 X$ E for(i=y1;i<y2;i++){
4 v8 c# b# a4 M* x6 V goto_xy(x1,i);. U( Y8 f3 Z" e
putchar(' ');
% V" B5 c7 p+ F4 N& p+ c# I' ?" K0 V# o goto_xy(x2,i);% @% _5 R6 Y# v2 V$ l
putchar(' ');8 ?1 q8 d% `4 ^
delay(10);
# o3 {1 \" E0 U; h. S }
: Q$ k H4 Z0 z0 h+ W$ C for(j=x1;j<x2;j++){
: B1 S3 H/ {: M" f5 C) O5 x goto_xy(i,y1);
, n5 O! `! L/ f% Z' c @5 K. T putchar(' ');' c; E) Y @1 W; y
goto_xy(j,y2);
, f1 G+ @ M+ f% w) B putchar(' ');
. s6 r) y, K' f1 H6 c# r delay(10);# u) f7 R3 v1 n, d
}1 ~1 i! {: h& v6 R0 F6 E( X
}
) d0 P/ K# g3 m7 |8 ? w5 n" O4 r /******************open screen clear(开屏式清屏)*********************/
& [$ @# g. L9 E( `( i
, r/ R6 }) x6 R+ I$ z void kcls(int x1,int x2,int y1,int y2)0 f' j/ {* d# J7 A6 `7 ~! T
{
' M% ?2 ^5 i1 `2 E int t,s,i,j;/ s) t. o% H8 K1 s( G
t=s=(y1+y2)/2;
, N: h/ M+ t, C0 O1 k% l" U for(;t<=y2;t++,s--)3 {3 O, b* k) G& Q" @, D
for(j=x1;j<x2;j++){
. X7 [7 x/ Z4 W* [8 F' n goto_xy(j,t);
# W; t5 j: p. B5 o4 b1 Q' n) q putchar(' ');5 ]. A4 K* Y0 J' o* y, Y! L
goto_xy(j,s);
7 c9 g1 G9 y/ s" E0 Q& V4 d: }3 K putchar(' ');! \# {9 m. l% D- U+ {
delay(10);
- V8 E' z" E6 m }
! j; X0 h% o6 ` w' r+ y }
6 X- J) T# N( M" t /*****************close screen clear*****闭幕式清屏*******************/
- j) P. n4 ~2 P0 w$ W
/ @+ F0 c( g% M5 Y M void bcls(int x1,int x2,int y1,int y2)
$ Z' ` n) i& N {
- m- {$ H, c# d+ g% J C int t,s,j;
9 V1 G4 ?: E2 W/ K t=y1;
+ Z0 ^* d7 W. q w5 n# j9 V% ^0 c s=y2;& R& @7 K) `! m/ X: n- K
for(t=y1;t<(y1+y2)/2;t++,s--)8 \- ~! A* `( w4 s# I6 a# c# _
for(j=x1;j<x2;j++){
4 X, {/ c/ a) u( U, g goto_xy(j,t);
& p$ T9 `( C, Z putchar(' ');. }0 y# M# s/ M G
goto_xy(j,s);6 P' D' b6 ^# E9 D$ Y6 t( ^6 |4 y
putchar(' ');
- I# d3 I2 t1 { @3 W& V delay(10);
: T7 r3 f5 S& u4 w3 T" } }
6 ^9 O5 ~) x. } o S8 t }
7 f1 n4 ] r* v5 \, f# ` /******************bottom screen clear(自下清屏)********************/; O0 J/ _; z, Z. K
. L9 D) m. H8 t1 u0 I void dcls(int x1,int x2,int y1,int y2)
/ o y( w. z# _/ K9 }- w7 ~ {9 [$ H+ @0 f4 b
int t,s,j,i;
. c: a4 ?) r+ O6 _: ]* \ t=s=(y1+y2)/2;
9 C H7 S/ c& O' K* {( |' w for(j=x2;j>x1;j--)( {5 b, l! J( Z. C# {! L7 |2 o
for(i=y1;i<y2;i++){* |9 I, V! Y9 v6 Y$ Y: Z
goto_xy(j,i);
! X+ j# r; ^6 v, @& s% g+ t putchar(' ');& n0 s$ U+ M/ j& L( v8 d
delay(10);
; |( u% R5 m% `& V& X0 {; h+ j8 A }- K, m- A' V* q) x7 _+ s7 Z
}2 E: i8 B0 ]& Z) L
/******************设置光标子函数******************/% g8 u9 F0 p3 D1 V5 y/ }& v
; R! {* C0 x! |. Q
void goto_xy(int x,int y)( T o a2 x) o! \- w1 X6 U. s) x
{6 w9 B+ H4 z8 e
union REGS r;
/ {! ~1 L1 h) i& H* @9 X+ t9 D r.h.ah=2;
$ P3 ~: {/ {) ` r.h.dl=y;0 O& E; t4 B* }7 i
r.h.dh=x;
5 N" t" D% h; s, I! h) r r.h.bh=0;
9 a( f2 n7 o- W4 E) f+ H+ r int86(0x10,&r,&r);3 o' Z1 C0 g7 J9 R; `2 R
}
8 m- M6 b! ~( h' P3 W: l$ V8 V8 L8 V7 |7 |0 W& u- h7 J
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
, W% x8 q+ _$ g! w- b& B
9 ?% P% W3 f7 n' S+ t+ a! }' ]" N void puta(void)
7 Z( x5 t/ A' v5 c {5 e1 P$ V2 X6 p Z. o1 A
int i,j;
: @' @( {+ X* w% e! \1 \1 | for(i=0;i<24;i++){
/ R3 _+ m+ z; y) v1 j& \ for(j=0;j<79;j++){; H, B3 \3 T% w; _9 i n+ S
goto_xy(i,j);
5 w$ r* t- t$ @; o; e printf("a");, p4 k4 h* M' Y. P, b4 Y6 N
}- e5 l5 E* w8 T/ e) y3 a
}. ?. T3 m& M9 v) }6 \
} |
|