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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," z; Y" Q" r- n8 m2 `9 w" T
, `# a" e; Y, m: S0 t 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' F6 y/ {9 ]: u9 W+ S, n% h; ^
7 }+ d4 T) j2 b6 A) `% } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 3 X5 J) T& [+ v( p, _
子函数及演示程序:
: m* B" b6 Z% A! b
' P3 q* k; Q3 U, @" G( D #include<stdio.h>5 X/ I4 |2 r" Z' z' Q
#include<dos.h>
) i0 i- a4 g* l6 M2 ~( o/ K #include<conio.h>
1 U0 m% S, d% @4 l0 \! V+ O* } Q( e8 {6 N4 a
void goto_xy(int x,int y);. |3 q2 t* A: ?0 |
void dcls(int x1,int x2,int y1,int y2);8 y, @* R1 N: |1 S
void bcls(int x1,int x2,int y1,int y2);6 F4 Y R. O% E5 X! o+ j
void kcls(int x1,int x2,int y1,int y2);
" G( X5 A, K( y4 N6 v. j+ N q void recls(int x1,int x2,int y1,int y2);" M' q+ s+ p: o* C( U; {7 [ r# m
void zcls(int x1,int x2,int y1,int y2);$ U* y& P, m8 w
void puta(void);3 @/ n1 j D2 u# @$ Y, C' _8 f# T
; c6 s* h2 Z7 h' b# c* _& q& b# K8 @9 H7 N3 _: H" `5 i
/*--------------演示程序---------------------*/
! o: x1 o; n& @0 d. ? main()
, P0 W" R- {1 f8 Y. t/ _) S {1 e$ A5 q5 _/ T e e' V
puta();
9 \5 \# o" w/ f! e1 _% y getch();! h, J7 G4 M0 K `2 V: @1 A
dcls(0,4,0,79);5 u1 e# g$ T" ^* U5 D) w, R( h- t
getch();) l) [5 V. N1 L2 k. k1 Q+ U
puta();: g; C; N3 r, u
getch();
. _$ U' L" P* T/ z* q9 o; ?; s bcls(0,25,0,79);3 `# |$ w" x% U2 T8 m
getch();1 H1 D% u7 D6 m. F) H: G
puta();
7 D9 W$ t; ]- W2 [ getch();
. ?2 u& a* o2 L% u i! v/ L8 r zcls(0,25,0,79);* [7 h8 Q5 E- j) u4 }! D) O, r* B
getch();( `; |/ H9 i6 c0 j6 r
}& C1 M; G/ Y7 p9 Z, Z- D
/*********center clear screen(中心清屏)***********/
2 ~1 o4 Z4 E \4 e" \ void zcls(int x1,int x2,int y1,int y2)
% {0 M% k* l- ]! L0 f {
% a! B Y2 L# o$ s3 c& o int x00,y00,x0,y0,i,d;
: H% I0 |5 S o if((y2-y1)>(x2-x1)){5 e* i8 z6 `' T, m
d=(x2-x1)/2;
/ t- p: h4 z8 Y1 f% B# Z& } x0=(x1+x2)/2;
/ X: _7 c5 ~2 u( q- A4 e7 q y0=y1+d;
0 O t5 I+ t+ o' \9 F% d2 q4 \ y00=y2-d;
& Y1 A: j- c, n: @ for(i=0;i<(d+1);i++)
8 j' f. Y+ f3 _. f$ d8 S9 g recls((x0-i),(x00+i),(y0-i),(y00+i));
. \- p& I5 h+ n: [' T: J' C delay(10);
* A, ~0 i' c3 G$ Y2 k/ p }
- E! n% U$ `( k) a2 |. {7 e else{
6 ~" L4 \; Q0 a- ^& C% h! _ d=(y2-y1)/2;
4 J+ K ?( o* i r. p/ P' l" G q* a& n y0=(y1+y2)/2;3 m. w+ a" b7 a: j6 r/ a
x0=x1+d;
: D) W/ f$ z* z1 | x00=x2-d;& G- d; P$ C& {. [4 N% e6 j8 P
for(i=0;i<d+1;i++)5 v& \" h) z Q; s
recls(x0-i,x00+i,y0-i,y00+i);
6 D" c+ H' F: {+ }. \8 h% Q delay(10);+ Y1 D+ R& N. k. a, O0 k
}
! B4 i1 @: I9 `7 S( l; { }* }6 C4 k' s0 g
/ t" T' W1 [$ r9 `, V" V$ F) ^
/************* clear rectangle side(矩形边清屏)***********************/4 c9 e r% C- a* n m
( X0 ^% j. b) C* e9 C i# o: f
void recls(int x1,int x2,int y1,int y2)
- C' {2 ^- g. G1 x7 H2 Z& Q9 l" t {9 z2 X& i9 e8 U F: g7 n# W2 n; k" s
int i,j;
% D/ @8 A) W" |$ X for(i=y1;i<y2;i++){
+ R+ F- Y0 g/ B' G' i goto_xy(x1,i);% R0 }- {( k( u! R+ r
putchar(' ');# _, x5 u u4 G0 m) ^
goto_xy(x2,i);
+ T- w+ k4 q6 U% P2 S' u# s putchar(' ');! }# G5 x1 V$ k0 |2 Y0 i
delay(10);" l/ ], j( a' U. a" x) K0 T
}
4 u: v( _0 P8 B* \4 G; r for(j=x1;j<x2;j++){
C& e+ _+ r" t$ E goto_xy(i,y1);, a P' D5 i+ p4 L4 G3 e0 m
putchar(' ');
$ y V p, @& T* k% h goto_xy(j,y2);
) d4 W" i/ i* H5 v! m1 ~6 R putchar(' ');/ ?& Z* F) E& a& ^. a
delay(10);: L3 F/ l' J, f9 ]3 Y* k# }
}
: O, i: S! L) q% d) O }1 H) ?- r' t5 h+ O4 n
/******************open screen clear(开屏式清屏)*********************/& f; a$ U3 J: I7 K( p
7 ^( U! Q; e! u" h
void kcls(int x1,int x2,int y1,int y2)7 Q) H( N4 t' p# ^# x1 y5 T
{; |# {# s- Y) [ F
int t,s,i,j;5 v) X( f3 T7 m% o
t=s=(y1+y2)/2;& }+ W* k# V0 Y4 ^* |* x! E& z
for(;t<=y2;t++,s--)
/ y* \! j+ I+ z4 w for(j=x1;j<x2;j++){0 K$ _% Y( V3 W8 p1 H8 I5 {& ?: `* X ^
goto_xy(j,t);# ~" v8 S* [8 F" F d0 D
putchar(' ');
6 M! S# l! L- T6 Q$ X7 `2 G goto_xy(j,s);
: x2 e" V; o' P1 D9 O putchar(' ');
5 Z! o G3 l+ P; O$ C delay(10);. G h7 `; h+ E% {+ U
}8 F2 [ b, @* _' r
}
6 h! z5 S* A: `7 @% j; o( c3 s /*****************close screen clear*****闭幕式清屏*******************/
7 i( Q- `% m, a4 b( G D2 w" e' r" J* H4 Z( J. g
void bcls(int x1,int x2,int y1,int y2)
$ f& k- b+ l2 a {6 O; ~ a1 D; _: A7 a: t" n
int t,s,j;
, @ M b# r5 [ t=y1;5 D8 m5 t. }" y$ r p0 k
s=y2;
2 u+ n/ U+ j- y for(t=y1;t<(y1+y2)/2;t++,s--); ], p+ N- t3 d6 d/ c) X4 Q+ e5 d
for(j=x1;j<x2;j++){
# c+ ]: m/ s: B/ Y; i: Q goto_xy(j,t);
( V5 V# c9 z- y9 |1 d2 o putchar(' ');! b1 U' C6 E% \3 g3 e) ?
goto_xy(j,s);
9 A4 |4 ^' o( q) [9 { putchar(' ');$ y% ?* N( z/ @6 l
delay(10);
; ], a* \: M; n( W }/ M6 x- R0 l9 s7 y
}
, K; m4 g* u! B2 @2 q /******************bottom screen clear(自下清屏)********************/# t8 v5 i1 @* I
" u& N- _% m. V [) a+ r
void dcls(int x1,int x2,int y1,int y2)* a: Y, l8 s i
{
8 J- f% C0 m: Y int t,s,j,i;
; m. \% d/ V* V" p% x t=s=(y1+y2)/2;( f& j4 g. S, t4 J5 E
for(j=x2;j>x1;j--) q1 Y& N1 ]. D9 n) m( W
for(i=y1;i<y2;i++){
- I, Z$ m, s q' r$ U. Y goto_xy(j,i);
7 K& A: }" s" U3 Q B putchar(' ');
9 i$ |3 |$ Y6 D5 S: m2 y0 ]. A4 d delay(10);
: |/ O) H" _7 w* N, U- P8 I }
" F+ n5 B; y$ C% k y0 F( e }0 }+ \3 d; t. t/ X7 i- B
/******************设置光标子函数******************/
) @6 x/ d6 l* l# _- U. v( o3 z9 P# M( z$ L O: g5 S, b
void goto_xy(int x,int y)
2 j% s/ P B- V( J4 ?) { {; ^3 }5 S! j" Y2 V4 U4 o6 k' N
union REGS r;4 h' P3 l! w. R" B
r.h.ah=2;
% n$ n' H4 i+ A- [2 y+ F7 V r.h.dl=y;) v$ D# Q0 v1 c; @
r.h.dh=x;
0 o; `/ ^! l" q r.h.bh=0;
; B. z7 t# T* {: x: V( s8 G/ i int86(0x10,&r,&r);
/ u/ e3 r& o* i* K6 ~ }
: x9 M& @ J" ?3 @0 E* C0 `: S# |1 S& L9 p
/**********************在屏幕上打出一连串的a字母用于演示程序******************/- \ ]; c' J/ [. ?: X2 _: J# F
; w4 W! _' U! L
void puta(void) P' y/ b5 {. u7 d( M3 X% ~/ }
{
4 A- b$ o8 I! z, }) a, A1 t& K int i,j;1 H6 Y! p' E2 e1 e( H8 `7 v
for(i=0;i<24;i++){: j& x/ I& k# `0 x1 P& f
for(j=0;j<79;j++){1 S; @# F# p; y2 p C/ [
goto_xy(i,j);7 n; b* |2 K3 o' h/ s, K- B& I9 q
printf("a");
7 {! _: K8 c( a# {: l, [7 H" ]. E }: T, M0 E1 D7 k! V
}
) I: ]. M( L. S# q* | } |
|