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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% j; J- e P6 Z% z% B
/ ^4 k' \% o' b, s5 C" J* V4 ` 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& Y; `) o1 \9 Q* h+ T
. q( A7 ^# m$ o 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ G- z3 H: A: V: J2 ?0 Y$ s* s 子函数及演示程序:
1 g: x `4 l- \; L3 I2 v7 J/ \' X6 Q$ a0 F# Z1 A0 ?( Z$ V# t0 R/ K) J# ]2 C
#include<stdio.h>
( w) M* c( U- P #include<dos.h>! F8 ^7 Y& v/ f0 X& C o+ Z
#include<conio.h>$ b. ~0 R3 e- S9 g' @; y" k
" m9 v& a/ w. o U5 W! _- r void goto_xy(int x,int y);! d& \- c3 g$ C; T3 F% R9 M
void dcls(int x1,int x2,int y1,int y2);
/ @- z, F$ F6 J! _ void bcls(int x1,int x2,int y1,int y2);
/ Y$ O+ m2 S0 S- T* o; O; `2 ^$ P void kcls(int x1,int x2,int y1,int y2);
% K6 T- }3 A1 m8 w7 `' P! k void recls(int x1,int x2,int y1,int y2);6 D( y1 I& H& u- u/ |" ~9 s: V6 N6 M9 r
void zcls(int x1,int x2,int y1,int y2);
- K- z2 r) W* S, W; @ H8 ~6 }0 ]; ` void puta(void);0 E- C- E3 \5 x$ k+ f8 v
; u- ?+ V! Z" X( P4 s. C+ }+ d ^
1 ~5 D# O: P2 S7 P$ V- b4 q
/*--------------演示程序---------------------*/1 ?: d$ j& @- h3 [
main()
, f6 f; ]) e/ G- v o. R {
$ g4 ~* t' q R% M# [; k: u; V puta();1 R% ~6 t7 Q' K5 V m ?
getch();3 m, s$ M1 {: g
dcls(0,4,0,79);
+ Y [# D0 s9 v8 D2 D$ V getch();# c7 W# ^1 Q- K1 C
puta();9 Z& I* z, ?" y6 F3 u
getch();; t( @- I1 V0 [. h! p
bcls(0,25,0,79);7 j! y9 j% E3 ~
getch();
( q; C% S; ]; N- i; M$ o puta();$ ~6 Q( E: n, z9 q" m! i" L
getch();
2 C. e3 ^/ d+ l9 _4 A! w) Y zcls(0,25,0,79);2 {5 s9 Q" g; p$ t K
getch();3 A+ `$ G) r( G
}2 Z' v' v( i. a* \% B
/*********center clear screen(中心清屏)***********/
1 _' k( m/ t2 Y void zcls(int x1,int x2,int y1,int y2)
7 F2 g" I. ~ u2 e3 }% } {
4 V4 y" ?! J( v* i" Z8 c J int x00,y00,x0,y0,i,d;! l8 j8 g& R2 v2 h- L' {, m; f
if((y2-y1)>(x2-x1)){% T6 r4 X5 K' A/ U- a* E) c: `" Q
d=(x2-x1)/2;# H* O; T0 G2 }
x0=(x1+x2)/2;$ `4 D3 I+ n% f( Q$ I
y0=y1+d;
! B& Y- e" @( `7 i6 y% z% E y00=y2-d;: s' ~- d2 Z2 C" Q# h6 Q
for(i=0;i<(d+1);i++)5 Z! m" s" g9 e. D
recls((x0-i),(x00+i),(y0-i),(y00+i));
1 X) j0 I" o9 K$ n delay(10);, R% k: q5 L1 \; F% }* s, N0 [
}
# F) s! @- D' h" b( K else{
( `2 G# |& x0 ]- I, k" s+ X d=(y2-y1)/2;4 O; E1 C r, q0 `; p' e
y0=(y1+y2)/2;
& o5 |3 D5 g- U' W x0=x1+d;$ o1 ~9 H' i5 H9 I" M/ u
x00=x2-d;) A% }' }: d# h4 {9 {
for(i=0;i<d+1;i++)
0 M$ g. l$ V& w% g- ?+ Y7 ~ recls(x0-i,x00+i,y0-i,y00+i);; R5 U5 G8 @; z% v5 H3 v
delay(10);8 _6 C% ]; h" Z, {7 c" o
}& v+ _, v' d, s6 o6 s
}3 Y3 S0 {1 q% l; c8 I1 C
; [0 c: t! q9 U- J, N5 S /************* clear rectangle side(矩形边清屏)***********************/
$ R! O# z( `/ w8 A" ]' i- ]1 {$ F, r6 S7 L9 U
void recls(int x1,int x2,int y1,int y2)/ i* ~$ u6 j3 e8 ?; `
{
$ F; t* J( x. G. c( ] int i,j;- |- [6 L! |2 |& j9 _
for(i=y1;i<y2;i++){+ i% z7 H4 Z7 u4 j
goto_xy(x1,i);" L9 [/ k' r/ |$ N
putchar(' ');
9 d9 ^. O" ^* z/ L8 B goto_xy(x2,i);
E) ]1 X7 T- }' a1 _, G& T putchar(' ');) T" }# d7 V* O2 p
delay(10);' C7 w# h+ {: I' N
}
; |, n% Z4 i7 n2 X @ for(j=x1;j<x2;j++){
3 d9 ~2 N+ z7 {5 w goto_xy(i,y1);
3 h0 S. B' ?2 W( q- _! } putchar(' ');
+ v* Z i; ~. r$ Q& `( Q goto_xy(j,y2);
+ {: t9 ?3 I6 U0 f/ T% Z putchar(' ');9 i" @$ v8 |4 f* \9 h. D& E
delay(10);
: j/ J6 y" u- R }+ Q0 T a1 j+ i& N
}
' J; N( F) z7 a' X /******************open screen clear(开屏式清屏)*********************/9 ~# v6 j; z+ l3 Y3 ]7 @
! h4 @6 h: ^$ K: z7 M, a void kcls(int x1,int x2,int y1,int y2)7 l- b& ~" g9 B2 T+ t% `
{8 w q. V* K- Q/ ^
int t,s,i,j;
1 i! C2 G2 M# v* o t=s=(y1+y2)/2;% r" B( Q; d" p3 }' v D
for(;t<=y2;t++,s--)* f# N) g8 I$ f E/ g8 X) P( V
for(j=x1;j<x2;j++){' V E; g6 S# F! n2 w9 x+ u5 P
goto_xy(j,t);
. O+ w. i( V" Q3 A putchar(' ');
% j: U+ W, } ^6 c# C goto_xy(j,s);
0 H7 {: {: N- y* l4 Z3 n putchar(' ');
2 R5 s* R0 D% L; c' z6 {+ y6 f delay(10);
. w) V/ S7 W$ ~! U& N }
0 Y! b0 Z' O( t- z# F }1 |6 Y0 X8 _$ M
/*****************close screen clear*****闭幕式清屏*******************/
! f1 z1 [1 R7 j/ v, y
) X& v/ Q6 ^3 {3 @1 o void bcls(int x1,int x2,int y1,int y2)" w. X$ R3 T/ u$ i
{
# S. n' d' f5 v( Y5 F int t,s,j;6 M$ Q. B3 R% M, P* Q
t=y1;
8 Q/ Q& i6 b" f2 D s=y2;
; Z5 R5 S% ^& V8 x3 m* ` for(t=y1;t<(y1+y2)/2;t++,s--)
- B. i4 c& @4 p8 r7 b" |- u for(j=x1;j<x2;j++){
2 z9 a: _9 `! q9 x9 v. `0 E' Z goto_xy(j,t);' R& M6 H7 V4 Q8 ?+ t: c
putchar(' ');
+ C1 J+ J9 _, F6 }; y+ r+ d& a goto_xy(j,s);
+ S/ v5 H" d4 d putchar(' ');
! T7 B, ]/ ~ E delay(10);6 G/ W5 x* m& d0 x8 j6 t
}2 v0 g% C- E% ?4 y5 ^' e4 [ U
}
& J I0 e# K/ C# L /******************bottom screen clear(自下清屏)********************/
1 u3 E& c1 I. z3 g! |
. v. c* C1 n8 `: _! a4 M% s. f void dcls(int x1,int x2,int y1,int y2)
# N' t# }& o* @ {
# c/ v( E4 z' ? Q9 C int t,s,j,i;
- x. x, m! x9 v% {$ `( x t=s=(y1+y2)/2;
# b" h ~" l0 ]6 A ^5 A for(j=x2;j>x1;j--)
) u* K# G. m& M) } for(i=y1;i<y2;i++){
" |4 t& U; K6 Q goto_xy(j,i);' D, O5 c+ Z0 ^2 |
putchar(' ');/ e6 a' y$ z! w7 k' k' b
delay(10); V! ~) h1 k* _ q
}3 [7 l8 U: m# M
}7 H. i0 ? Y' W2 }1 u; U0 ?
/******************设置光标子函数******************/9 ?: q9 g: a: U' e. p* l% y
* {6 Y% e6 s- r3 h% t# i% C. v void goto_xy(int x,int y)
+ N3 `9 {0 `1 I8 l {
# s4 @- D2 F2 q7 E( W ]% A union REGS r;
* [5 O# M+ k2 Q+ E r.h.ah=2;% _2 J" r4 h {4 C. Y
r.h.dl=y;
* K# Q; ]8 p* K# I# G7 q; M8 s" d r.h.dh=x;
$ b: \. O. W/ o/ E3 M q r.h.bh=0;
6 z: h: @) P* @3 V int86(0x10,&r,&r);
- ~: S! r" a) T1 Z" o }9 ]. A! [! w2 T* n& \
6 s3 s4 u( Z0 O" ]9 a& ]% F /**********************在屏幕上打出一连串的a字母用于演示程序******************/! ?$ a. r0 q' S: t
) k' i4 r/ J' n- A8 `0 Z9 x0 o1 h3 V void puta(void)
}' o3 r1 ^9 \& i4 M1 F {
' x- z! H# p3 ]1 G/ X int i,j;
/ H1 I4 |& ^2 t; R- r for(i=0;i<24;i++){8 z8 f7 g4 g/ H& `& |+ ^
for(j=0;j<79;j++){( d+ G, Y5 ~/ b4 }1 ]+ ]. W
goto_xy(i,j);
: b9 f8 \- X- e: q printf("a");
% a. D1 x2 y, t' t& P }/ P$ s$ n7 O: a3 K+ C# \/ n7 W
}
" o% R! G, B7 l7 u" @& L } |
|