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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 Q! o4 k% n* Q) X% z) U/ p% W: C( x; O" `$ Z3 l6 P
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ a# {& u1 }! c
( _) t S/ p+ z$ ~- @2 w( T w* l4 \ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: h0 Z- U" B# X8 T2 M; M0 g" f 子函数及演示程序:9 M1 n$ i$ Z, `1 y8 y% h
5 X3 m( s, i# F* Z( X
#include<stdio.h>
0 ~5 Q# u) J3 F8 ] #include<dos.h>
" M( q3 C, B) L3 u5 M6 ? #include<conio.h>' n) @$ D1 K. Z
1 A) z/ ]9 j! A$ D0 ~9 g void goto_xy(int x,int y);
4 d* o( J# l E( }% o8 C, V void dcls(int x1,int x2,int y1,int y2);
5 [, F# z' P- x& B' @ void bcls(int x1,int x2,int y1,int y2);
9 N$ L# O! C3 c B# B void kcls(int x1,int x2,int y1,int y2);
! E4 o& r T1 k" ~* Z3 ?, e void recls(int x1,int x2,int y1,int y2);3 h0 g+ n/ \& `2 Y* f+ H
void zcls(int x1,int x2,int y1,int y2); B3 n+ q4 _" w, W9 u
void puta(void);
! A! O" t" D1 V) M! W) ^7 R! N, b# T N! O- O
3 `$ D% o$ N* D- L5 c
/*--------------演示程序---------------------*/5 \9 V( g6 b% L9 Q: R, z" w
main()
' w6 O& A, a) T* q* Y K: M {/ K! {/ R: o4 v; L
puta();
2 Z7 ^3 |; U5 Y$ h, D3 d4 W getch();( P" a% S1 s$ _' }5 X2 I8 `0 `+ f( ]
dcls(0,4,0,79);9 H2 |$ M" v5 N! S9 ^' u
getch();
: W0 [ P& @2 X f puta();
" i: w2 _ r! m% M: i9 k f getch();4 k9 d$ Q% q6 X8 T1 ^( w) E7 x
bcls(0,25,0,79);. e, R' a( q* C# c) L
getch();
2 u3 O$ V. E; t2 \/ N puta();
# K5 Z4 E+ x. Q. C getch();1 ^5 \% v9 V: c8 z. x# S, l4 g
zcls(0,25,0,79);
) w. u$ B& T6 I: `( H getch();
* k4 c4 {7 K' I }
2 c( f' ~% `& @8 u /*********center clear screen(中心清屏)***********/
( Q) t& D+ G. l" F& U# W void zcls(int x1,int x2,int y1,int y2); x8 k5 B7 Q6 K% z
{" ]! d5 }9 c Q, J- b6 _1 E
int x00,y00,x0,y0,i,d;
8 ]/ o% U- @; y% g+ N. b: n if((y2-y1)>(x2-x1)){
6 a3 a) @8 s& j: [, H d=(x2-x1)/2;4 R/ M/ R8 `4 {. L- [* m% _8 X# b
x0=(x1+x2)/2;
- J# ?3 ?- n5 q! u6 x y0=y1+d;
: v( V. S& _1 c4 s4 m& ^4 r& _$ q y00=y2-d;+ y( A( J" J; B6 D
for(i=0;i<(d+1);i++)$ [5 G9 s- E; F3 A- Y; o' f
recls((x0-i),(x00+i),(y0-i),(y00+i)); ^# }9 C1 y2 n# z5 w0 T
delay(10);. G$ u8 j; K9 X/ a0 Y0 j i
}( g3 E/ T) f; h* r% A5 G9 l
else{
+ k) N5 q: L m/ k: Q3 x d=(y2-y1)/2;; S5 m* J5 e, X; Q: p: I$ a) L& V
y0=(y1+y2)/2;* \; `) r' L' `# z* |% m
x0=x1+d;6 m4 `! v/ f# R2 s2 ^/ i
x00=x2-d;
: j0 A$ I! N/ O& o# q' T0 [ for(i=0;i<d+1;i++)* Q b9 ?, Y5 Y# `
recls(x0-i,x00+i,y0-i,y00+i);+ w; _ Z' ?+ \& @, L. {
delay(10);9 K! R1 ~9 X; O4 k1 d% W9 ?* @
}
3 B h- c6 ?3 p$ E/ U0 A }
0 e! G7 y/ v( Q) K3 a7 G! T w6 d9 d* d) `. V5 g' D
/************* clear rectangle side(矩形边清屏)***********************/
6 F' a$ {; t( _8 w& C, t8 p. T! C# p8 f8 `) t2 y
void recls(int x1,int x2,int y1,int y2): g* H, W& T6 J, ?) k! S! E% Y
{
: r' H- p' W' [1 c2 C ~ int i,j;
' U X4 z4 }5 Y2 @! _. ^ for(i=y1;i<y2;i++){5 v; o: R7 T7 Y: u1 P# O
goto_xy(x1,i);4 n$ }6 v7 b0 m% D
putchar(' ');) |9 J4 I2 W x
goto_xy(x2,i);$ \% I3 q. Z7 @
putchar(' ');- A6 q4 s$ i# \$ e# Q; Y
delay(10);/ \2 h- g# V+ Z0 G1 k
}
* @* S+ L( k: {, J" H6 P for(j=x1;j<x2;j++){. k8 u' f4 l1 i* L6 h; f
goto_xy(i,y1);! W. t: I$ y6 R) C* }* m
putchar(' ');# {4 y/ m! J; Q) B
goto_xy(j,y2);/ g$ ^" V2 R$ y
putchar(' ');6 G2 n4 H8 R+ ^- j- J0 k( t9 Q) H
delay(10);4 D- `! p9 `3 M
}
6 t% q: a) ?( h }
3 F3 i; o9 ], y/ P /******************open screen clear(开屏式清屏)*********************/
* [3 J) q7 I' x. I2 `+ b% w8 x% @3 m! l5 y9 P2 n
void kcls(int x1,int x2,int y1,int y2)6 K& \8 E: w5 t' B
{ [6 }3 P: Z! t) f, S" \$ t7 A
int t,s,i,j;- K: D2 r T! ]5 Y4 x& L* y
t=s=(y1+y2)/2;
9 o3 [: r4 r# R( c4 z$ i* p for(;t<=y2;t++,s--)8 [. K% t) v& e, s n; N
for(j=x1;j<x2;j++){) [8 Z5 C) o, l& n2 ^+ v1 ]
goto_xy(j,t);1 a r1 c3 Y* t) b5 i/ s7 P) Y
putchar(' ');
/ B4 {3 R2 W5 ]9 f3 e goto_xy(j,s);& Q) y: y8 f" Z
putchar(' ');+ M3 \5 n0 D" J5 u
delay(10);- e! ~$ d5 D: [0 u+ h$ C
}- ?7 Q' n% M& X+ S+ J
}: l" \2 Z; D4 a* C
/*****************close screen clear*****闭幕式清屏*******************/
1 @9 u0 _2 g$ L4 { U# _* h
5 }8 h: }8 |9 `, n" Q void bcls(int x1,int x2,int y1,int y2)
1 V }. b$ S! Z r {0 R3 f' N; D( N; t
int t,s,j;/ F" Z1 o+ X# t
t=y1;9 F* G6 ]) j2 i" n, w: h9 ?, a
s=y2;' m5 r, D, d* L- ^ h
for(t=y1;t<(y1+y2)/2;t++,s--)
/ o5 |3 {6 W$ A1 ~' m) V7 ? for(j=x1;j<x2;j++){
8 A6 h3 j' S$ @/ T+ x goto_xy(j,t);
0 T: g- Z5 G. J S putchar(' ');/ X% C# m# S$ \1 j. u9 {. f. k
goto_xy(j,s);
+ B) q- K' I) ^. \ putchar(' ');9 [) k, y) `& ~
delay(10);
9 p; A" a; D0 S) @, ~, d }
7 ?3 k0 n0 |7 q" `. w }
+ i' t T8 {$ L; X. V /******************bottom screen clear(自下清屏)********************/: p) J: X2 b7 ^, J3 y( P
: r) B' l% Z* w% d# V/ J6 m void dcls(int x1,int x2,int y1,int y2)( U: m. z1 m5 z* P
{6 M" }# q- Y ]8 N
int t,s,j,i;
, k! i9 J0 C3 i8 A! R t=s=(y1+y2)/2;7 y d% x+ { {# X2 S& R$ o2 k
for(j=x2;j>x1;j--)
6 [2 G. o. ~7 c9 {* V* o1 t for(i=y1;i<y2;i++){! M5 d0 U; s, R( ]
goto_xy(j,i); H) ~: ?: u6 \, Q/ M+ o
putchar(' ');. ]0 |, \- o# B0 G+ x# C
delay(10);
2 [9 B2 V* [% ]8 g: c+ d }; @: ]) k u4 M6 ?! ]6 M
}
0 U, P$ }! e& E+ f /******************设置光标子函数******************/2 Y! C, w. p0 C4 B* K% q1 Y" |; W8 i* m
8 T/ _5 l; i1 c: V: y void goto_xy(int x,int y)
3 P' }3 i8 C( r0 m {1 l4 P! j7 F6 y* B
union REGS r;
( n7 G- p- G/ `1 c/ G6 R: p r.h.ah=2;
. n/ J+ @: ^0 h5 R r.h.dl=y;: ]1 o1 n' g5 H+ c5 B
r.h.dh=x;
& M0 [3 F; V$ N: W r.h.bh=0;
) M# n% m) ]$ a) I0 v) A int86(0x10,&r,&r);. M A. ^) p2 J( p& J3 b
}# _! \( c6 y8 ^* j0 `
2 {) v' ]; a) i# W
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
& w |* Z& A3 `/ p p" N _3 U0 g) g5 ~' B n! u1 U: K& w
void puta(void)% P1 `, |2 G6 X4 Z6 ^# } w3 v
{
7 Q& a2 @" s6 I" U3 w( L- c9 j int i,j;; p3 o3 ^% {1 d% i( t0 |# a; T
for(i=0;i<24;i++){
, \. h1 B5 u6 n for(j=0;j<79;j++){
2 ?3 Q8 P4 _0 v: s. W) x goto_xy(i,j);! l7 n7 @) T" ~8 P
printf("a");
' ^) }& Q; W1 D$ e7 V y! B }
! P0 V- o" u# Q; R( _: I }& @5 P! v/ a6 V, c2 S' K0 ^
} |
|