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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. }* G& u- F& K! v2 |* @
& z% P& h- Z0 @9 R( F 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 d4 W, J# v1 Y: p' P2 H. A
' J! C2 O5 G0 j9 `) |- [ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' w1 z- [- r8 d _# g* H! x. n, o: c 子函数及演示程序:1 E8 O& K! |+ a7 Y
9 S2 |' j( {5 K
#include<stdio.h>
8 |0 x4 w) e* {8 f6 e #include<dos.h>! g/ u, ], q) x; t. v4 t, Q1 h
#include<conio.h>( m# n0 n5 j6 _% d% z! r$ U: b. R# g
6 f: x# Y) v( _- A
void goto_xy(int x,int y);
( k& | y& ~- d1 B* w9 h/ ?. \ void dcls(int x1,int x2,int y1,int y2);: F4 U5 H m# j* R3 S& u. V4 H
void bcls(int x1,int x2,int y1,int y2);6 j4 F6 V2 e s& A: }
void kcls(int x1,int x2,int y1,int y2);
; @- m" l8 ]; s9 [( j7 S: D void recls(int x1,int x2,int y1,int y2);
: q; j/ M& X6 D7 m# R9 |, W4 Y void zcls(int x1,int x2,int y1,int y2);
# e" h/ Y! x7 y; t void puta(void);0 d: E( |0 x- ~8 C& J& @, ]" v6 t- A
4 L$ D/ a4 A6 v9 B4 [% J
) z! {3 S* F9 h5 K6 A. O- P* y5 X( I /*--------------演示程序---------------------*/) q$ ^) X; B$ {6 Y* `
main()
4 C+ `. s, e( }2 `) g {" h( _+ J' ^- l# Y+ T' t% T
puta();
, {5 L; h- X. k getch();! g$ Y9 i) N, ?8 K6 u+ H! Q
dcls(0,4,0,79);# D8 z; q6 S' ^
getch();1 [/ d" Z% P" j, `# r9 k! X3 j
puta();, k; q# Z8 u Q/ B
getch();
5 R& O; \! Q5 d, B6 O4 J bcls(0,25,0,79);
/ X( v/ m. ~; b( ~ getch();( L8 ~+ n- ?1 U' A+ H( T6 K& @
puta();
; Z$ g9 t( {; b getch();! d6 n2 P+ z0 e" D' P5 }
zcls(0,25,0,79);
( W' u# a* { x8 \0 N# b getch();+ l, e" ?' X( T0 N
}
& {! x* G6 F/ _5 G6 ~5 E /*********center clear screen(中心清屏)***********/
# J8 P& F; n/ H( q void zcls(int x1,int x2,int y1,int y2)# B2 k# s, x8 m
{( q7 U$ S& J% g# v! T
int x00,y00,x0,y0,i,d;
; u. U2 b$ A8 H9 t4 a$ P0 l! ?7 Z( g if((y2-y1)>(x2-x1)){
: o( r+ S, e2 U: g d=(x2-x1)/2;( ~9 X H3 t2 L9 c
x0=(x1+x2)/2;
1 ?5 ^* i& ~3 K' l+ u( Z" E y0=y1+d;9 d9 P/ M4 c% P1 n
y00=y2-d;8 m$ y) J$ J5 g+ y. b" D2 f: X7 M
for(i=0;i<(d+1);i++)
; {: p$ L" r; U C$ c recls((x0-i),(x00+i),(y0-i),(y00+i));
4 d: o2 ~& w3 p0 Q' r5 E) K. M3 G' i delay(10);
3 l8 P# Y& Q' x7 S3 Z }4 V5 H, m4 a3 M* l; w: O9 Y
else{
' F9 S- g% W1 p( F: J1 r d=(y2-y1)/2;* [/ m1 Q4 C, ?
y0=(y1+y2)/2;
( s! {; e: P3 F6 m x0=x1+d;
. P( q4 M. A& I7 j. v, a `4 Y9 g* T x00=x2-d;
7 Y# d! s8 _7 n& i5 ^. b for(i=0;i<d+1;i++)
7 h( ~/ o8 f g$ z- R3 u3 U+ L& Q recls(x0-i,x00+i,y0-i,y00+i);+ c0 W- O8 c7 T. e( [" @' t
delay(10);' Y$ w" w) Y& H! S. p
}( H" `0 ]6 r% K# q3 v2 I& Z7 V
} B1 E. `- Y: _; ]1 k: t6 y6 Y
8 L0 I b' ` n# p9 U' o- _
/************* clear rectangle side(矩形边清屏)***********************/
6 X. V# P: |3 R9 b
8 g- M: U" w7 c/ D1 e void recls(int x1,int x2,int y1,int y2)
; s7 c, c' C1 `! c& [7 S( ^ {
c# e2 P% ^# O0 W int i,j;, o+ U B7 c" V' I' R
for(i=y1;i<y2;i++){
2 n+ F1 u% c: v$ `( s _* u. W goto_xy(x1,i);
5 r" B2 h" [4 d9 |, W putchar(' ');
; X5 h, B# R f$ k! w0 M8 k! ^+ j goto_xy(x2,i);
3 l; o8 L" R0 X& l8 N! Y* L/ t% }1 j putchar(' ');( B, p% R8 ^$ C% J) ^
delay(10);1 r# L* d3 V8 q4 d' T
}1 O' i! v8 s3 r: H0 ~ d
for(j=x1;j<x2;j++){
0 P: |, J% [ N8 }8 Z0 q6 D goto_xy(i,y1);( O/ j' _ d7 E, ~ u" ]) @7 N6 R
putchar(' ');% m3 ?/ y) ]/ J# Y
goto_xy(j,y2);) z4 ]0 s9 s7 \2 f
putchar(' ');5 F8 ?' |4 @2 |# y; E7 y
delay(10);
3 W* z$ E4 o6 a( V) c s! r7 u }0 b( W5 u( `# E0 @
}
% X. W# u1 s! X# _3 i/ Y /******************open screen clear(开屏式清屏)*********************/( y+ ]9 q5 }4 d5 G5 _5 T s0 E' |
- U0 I$ N7 v$ i( X* T: i4 T
void kcls(int x1,int x2,int y1,int y2), |+ H8 U' e1 e6 h0 @
{5 H6 r+ z" v0 I% T3 D/ [
int t,s,i,j;
4 v7 L7 Y2 D7 b% B8 Z+ p t=s=(y1+y2)/2;
4 b/ m/ u1 M' B. n& |0 J* B for(;t<=y2;t++,s--). i6 J4 y9 c' x& Q% o
for(j=x1;j<x2;j++){3 v; b ~6 \" q% H
goto_xy(j,t);& I5 p [# s' T- O0 p" f5 ]
putchar(' ');8 U* l* ~( M# _) k0 }
goto_xy(j,s);
6 ~ N; ^( P2 B' L! j putchar(' ');' F/ ^( ^5 i! ]% x( s/ T) S( E& }: G2 B+ n* E
delay(10);
" j: i3 D, i2 s0 t( x+ A }
; t- h, F5 ^+ [! } }% e* A. z6 n) ?. I; F) K# A
/*****************close screen clear*****闭幕式清屏*******************/
5 `" l [* N5 h9 ?) m# {+ P" M3 k$ H
void bcls(int x1,int x2,int y1,int y2)6 {) t* ^& d/ U$ D: |2 U4 s
{
& Q* h" F; J6 D- Z* D int t,s,j;7 O' p4 H& x, w9 h! D
t=y1;4 N- t2 n: ?1 l6 t9 x. v
s=y2;
4 `+ x9 l0 X$ ] for(t=y1;t<(y1+y2)/2;t++,s--)" y" K# O- `! Y0 C% ]( [
for(j=x1;j<x2;j++){
3 P1 w0 M c) s3 j7 p0 Y goto_xy(j,t);
! e" W! a( h- |. O, i putchar(' ');
! A8 l% m* S8 Y3 C2 b& c8 C goto_xy(j,s);
) T2 L; M/ W! l" W' k putchar(' ');
' y8 d$ L& c' ^! n/ [ delay(10);
! p& }+ v7 t$ R" C2 f+ ` }, Q I- L! {1 O4 f. c3 t- s, `
}: N+ i0 z" R% k) s* i& d
/******************bottom screen clear(自下清屏)********************/& l% [8 f7 c' O4 h+ n
/ }! ], V9 v$ B0 P8 f2 V* Y9 l" a void dcls(int x1,int x2,int y1,int y2)
# L0 r; A& O# p( l3 ?5 c. h {
) W2 _( d1 ~6 Z* O; K int t,s,j,i;8 k# ~4 Z8 M5 r$ N5 k" O
t=s=(y1+y2)/2;% ]" X3 ^0 F+ u' a Y1 h) x
for(j=x2;j>x1;j--)$ R: q; b0 @/ X; M
for(i=y1;i<y2;i++){0 b( |, p& X$ d) U0 {$ i% o
goto_xy(j,i);
1 a' L4 B2 c, I" K5 s putchar(' ');- Y" r; Q& ^) Q
delay(10);
# k, ?# b0 O3 j9 o5 R }
: F6 Z. B) ^! m$ ^& _& v }
9 [$ ~0 Y, }5 ~. {/ O4 p% o! G /******************设置光标子函数******************/ I# o, G2 _! a' Y8 m8 G7 {) c( p
2 j; y. O1 b. S% Z! r
void goto_xy(int x,int y)
! A$ {9 q# M8 i% Z {
# y; \ X! J9 S0 y" d union REGS r;
( c) C( @% D/ V8 l r.h.ah=2;
& E" w9 |4 h0 U r.h.dl=y;8 w' h$ W# n) r
r.h.dh=x;5 S% y7 I% ]$ V$ \: X* P V
r.h.bh=0;
8 L+ B. t( u; M& ~ int86(0x10,&r,&r);+ R/ C6 f0 n' e5 c/ u
}
y2 V* |; j. F# ] H0 E. u7 `7 y# \3 A/ D' N: S' a
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* o; n! S: {( I- J! k2 x) V
0 `1 b4 g7 F( _$ i8 S void puta(void)
, Y# l4 u0 E0 Q; R& C# x- C {
3 K% O! p7 P( R int i,j;2 Q2 l/ Z- F' L+ y# j+ F& d0 |
for(i=0;i<24;i++){2 K5 J0 h' s& Z* @3 A( v) C
for(j=0;j<79;j++){
: z8 i) E/ r Z; O' f goto_xy(i,j);0 d2 m- h: g! \+ u) B
printf("a");
5 L, u! \3 Q/ }2 [4 @ h( ]% \2 k3 D }
: V* v) @/ F: u) t1 s5 a6 I9 O }
! N* X; x; D; x+ a6 T4 ` } |
|