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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# k0 u0 t" O: S N0 a( Z
2 e0 p. ^; y$ K9 g 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
8 u' L" ?4 A# v& g) x# l, O7 s5 n8 X+ o" o3 k$ V2 ?/ r- Z3 \' {
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" R/ ~( A# o" e+ _ 子函数及演示程序:3 ]3 P& d% ^$ b+ N
, D: V+ q; n1 w8 y
#include<stdio.h>; B$ J; e* F5 K, P1 {: \& N
#include<dos.h>) f1 B) a2 [# [2 Y1 r" Z
#include<conio.h>$ J; ~% l6 p0 Y0 X
4 `9 E' V, C+ f6 C$ h T/ O+ N. a0 g
void goto_xy(int x,int y); X5 L8 Q7 k6 u' K
void dcls(int x1,int x2,int y1,int y2);# C/ R0 ]: K: z
void bcls(int x1,int x2,int y1,int y2);
( q6 ^& w( n8 o3 O" x" d3 y) X$ h void kcls(int x1,int x2,int y1,int y2);
7 X& o, p$ E5 e! i void recls(int x1,int x2,int y1,int y2);
: F, x/ n! ?9 Q0 _ void zcls(int x1,int x2,int y1,int y2);8 n4 d% e. |9 p! `5 T
void puta(void);- I6 q" X$ H% ]: _* x; O7 k
& A+ U: f8 H2 x9 J$ `! s+ R' Z( H
1 s2 D9 B) e0 ? C /*--------------演示程序---------------------*/ O# m& [+ ]3 d
main()3 \- \. N, N1 v4 o8 z
{
: q! a1 ]; Y0 I4 G- u puta();
9 k7 ?& ?! }# y6 d5 E$ _ getch();. H7 U! m$ A# ~
dcls(0,4,0,79);
0 M5 [2 z: q S6 \; P- G. G" ]. b getch();
/ K% A$ k4 x$ R& @& E puta();
6 r& i# p/ V: ~' B @ getch();% Y2 ~* ?" s( Q F" b, q; J; H
bcls(0,25,0,79);
2 U8 `( d8 P. O* { H! N getch();4 b. y J, i: G3 v+ {" b
puta();
& H/ P; m8 [$ S3 w5 m5 C# G getch();
. E5 @; w" R9 X1 i% y5 R6 p3 n9 h zcls(0,25,0,79);
; E+ L$ y0 f% Y( C/ i getch();2 a; i! W$ I2 E3 x0 [) [, Z
}
7 e: K' U; i c* D( J) w /*********center clear screen(中心清屏)***********/9 r- D( X9 |3 e; R3 \. c Z, r
void zcls(int x1,int x2,int y1,int y2)
1 S+ j) r. I( k { M H! q' a3 b, ^/ T
int x00,y00,x0,y0,i,d;9 G8 K# ~2 |' R0 ]6 K( X4 F
if((y2-y1)>(x2-x1)){5 i4 l0 h9 X9 ]9 O( H
d=(x2-x1)/2;
4 f4 e m5 {( `' U+ J1 T U* R$ r x0=(x1+x2)/2;
' U- Y7 ^+ I" H; W" m1 b5 j% V y0=y1+d;
& _% ~6 a* J+ W y00=y2-d;
7 f7 w. p f; s& z! o for(i=0;i<(d+1);i++)
3 J5 e, g/ x6 y/ E2 O recls((x0-i),(x00+i),(y0-i),(y00+i));# s4 |0 D$ `7 C2 Z
delay(10);
# c8 P0 c0 Y3 G% w' h }
1 j8 _* |* I( f8 h3 R! ^ else{* E$ @: b5 y5 W9 X$ L
d=(y2-y1)/2;0 |* A: Z5 i( e5 G4 i7 L
y0=(y1+y2)/2;
, p- Q, A3 T" u) w! u, C! Y. V2 T x0=x1+d;6 b; ], q8 @: o, D% x* P
x00=x2-d;
3 Q" S7 L$ d9 `* b, y for(i=0;i<d+1;i++)
0 U9 y" m- t; o' Q recls(x0-i,x00+i,y0-i,y00+i);
# n. G; |3 Y. y4 n delay(10);
, ~$ V: S# u! G }3 c) ~8 u* E0 l5 B
}
. C5 g5 M) N8 X A) g6 u
* f$ K& W5 F/ j /************* clear rectangle side(矩形边清屏)***********************/
' R% V, b3 Y; ]+ _+ E0 v, ] m v" [* B8 w& T& n. g* d
void recls(int x1,int x2,int y1,int y2) `% F9 F& m! r# C M7 |
{# r5 ^0 ^9 l+ N+ v0 K: k, X) |
int i,j;3 S% k6 c) Y+ ~+ T
for(i=y1;i<y2;i++){
* _( C2 B, Q2 }0 ~6 V# i goto_xy(x1,i);
3 R- Q+ }" A9 a1 ] putchar(' ');
0 N- P [ Z4 N; P1 S goto_xy(x2,i);
; p0 u+ h0 i4 H, F% [1 I putchar(' ');
, \: E. ^4 c3 U$ e/ Y delay(10);
* e6 x3 V" x0 u4 y$ Y }+ Q6 g# D- v e* W g% ^
for(j=x1;j<x2;j++){
( h+ Z0 ~' c8 T/ n1 P goto_xy(i,y1);
3 E7 R( o. O H( @9 H: E0 p putchar(' ');. e3 O( b! M$ M
goto_xy(j,y2);
) X) c, {" A* K1 z4 U$ C/ e8 P putchar(' ');
+ m& S" i- a8 s. l- n/ C t7 E7 H delay(10);$ I6 q2 X- F! v. J( B
}. R1 j( P" y7 t6 A2 l- ^" z
}
( J& J( Q, s, O3 {2 `5 j /******************open screen clear(开屏式清屏)*********************/6 @- B2 ^4 A% n& m% |4 g
% k6 L) s# H: A
void kcls(int x1,int x2,int y1,int y2)
0 S$ Z A; |% N' F5 ? o {- s6 t2 T6 y; w7 W6 @- w% `
int t,s,i,j;2 G' i6 Z$ J: X; V9 k" x, i6 x
t=s=(y1+y2)/2;
4 a! \! T; t3 j) }( ~ for(;t<=y2;t++,s--)6 x8 Z4 y0 z$ b5 t3 V
for(j=x1;j<x2;j++){* q( Z/ ^2 j' L# i* s& e& R3 O P
goto_xy(j,t);
8 J; r7 u! T9 f W9 I putchar(' ');- {1 E) G8 h2 r- f5 R( G, @2 K
goto_xy(j,s);& Q j, |& A0 V7 I4 \7 U
putchar(' ');. s6 M+ Z6 o0 C K, d4 |% d
delay(10);9 R" i3 N: e3 T3 _% Q! @3 Z
}
" J7 ^3 h0 h1 _; r( P; X8 ?' _ }9 }8 m- i7 N/ N6 l# u
/*****************close screen clear*****闭幕式清屏*******************/
/ H. ^; A$ t1 s5 K/ z% j9 n/ b! O K& c$ Q" ~1 L4 e- b
void bcls(int x1,int x2,int y1,int y2); d! D" w4 Z: D" I
{! O: h- n: n( z
int t,s,j;1 z" d6 o0 p: p" o
t=y1;2 F, j% b- P! q7 a
s=y2;7 w. p7 H% O0 k( g, F, e
for(t=y1;t<(y1+y2)/2;t++,s--)0 h( F; v" f' e
for(j=x1;j<x2;j++){) p2 f) M5 _9 j( l) ?
goto_xy(j,t);6 j0 m3 C7 ?, \* i O
putchar(' ');9 x r- b% d9 y3 h# i* v t
goto_xy(j,s);
* [2 r) M1 ]4 t( q' n putchar(' ');
0 Y9 f, P2 f7 T8 p delay(10);3 ^! W3 S# O1 O; |( }; r- L
}
1 i! q3 L; e; y7 p- h0 G8 R1 w }. _8 t2 y# b/ t1 q0 G* r4 c3 k% T( I
/******************bottom screen clear(自下清屏)********************/* t. g5 d, p# i7 k6 N- r, g% Z* ]) ^, t
3 E8 d! f4 {/ D# D/ q. q void dcls(int x1,int x2,int y1,int y2)
1 k# l( P, G4 g$ S9 N1 t, Y M {7 g1 Z% C7 o8 u2 [ C% @2 c4 X
int t,s,j,i;5 d8 m7 M; V: q
t=s=(y1+y2)/2;" x/ u( w: ^8 q3 c
for(j=x2;j>x1;j--)" @3 z$ b7 B# M; ~+ I0 S, Y
for(i=y1;i<y2;i++){
! K- {4 w# ~3 H5 ^7 J9 a. { goto_xy(j,i);
- D# _0 V$ w) Z$ o putchar(' ');
& |5 ~* \- r/ Z. K, T, k delay(10);
+ h; O2 z" h0 j+ E! ~" Y }
& o" z2 H3 E' ]* t) B& I) { }
+ e0 R2 L- z. m( t+ \7 \5 l+ M+ i /******************设置光标子函数******************/
! F' |$ K9 i6 T( S- w( y" D
! O2 F/ s6 T6 f( ]+ x4 c void goto_xy(int x,int y)
: z# R, z, w' ]1 ` {9 K) K1 Y- \7 S, r7 \
union REGS r;
. Z* R1 J" N. v. g r.h.ah=2;
& }* U$ O( Q! a r.h.dl=y;% i0 o2 h2 U' R; H: q
r.h.dh=x;" T& Y2 T' V, J# z6 v
r.h.bh=0;' X$ K8 q- X0 y# B
int86(0x10,&r,&r);
8 t6 e" g3 s4 e. B" h Z }- w4 ?/ o9 T% L2 z3 K- |, r d5 R. r
7 s$ `8 y2 N7 }/ s
/**********************在屏幕上打出一连串的a字母用于演示程序******************/; H B E) U2 ?2 v9 }+ e- \
& X, n: A7 T' i& D, Z/ ? void puta(void)
' e, N8 u( `: d4 b9 x) f+ P. q6 B {
0 O8 l3 Z+ i0 u int i,j;
6 ?$ S7 ?1 n p' h* B" t for(i=0;i<24;i++){
! T7 n* G3 F5 A! U for(j=0;j<79;j++){
; G( [& o9 e% f/ |" f v goto_xy(i,j);0 h3 @2 n8 L) Z
printf("a");
8 S) ^$ ~ P% P/ k' m }0 O; k& b2 x: V
}- F5 X( Q6 d1 U; _
} |
|