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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! K% {( ]. ^5 D7 ?! W: I N% I( Z* Z. I
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, l3 V/ R6 ^* d
0 c5 G! s, Q3 G: A. r8 \: s0 s$ ` 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# {3 s2 a! O5 ] 子函数及演示程序:4 q0 ]3 T5 K' w. D: z
# m/ T8 Q# J ^- \- C3 O( r
#include<stdio.h>
. g& N) b# N$ S #include<dos.h>* V: x. [) \8 o9 x5 f
#include<conio.h>
3 \0 t, ^( \ x9 k" A
7 d( @0 P7 ~1 |2 ^# @" K( Q# G void goto_xy(int x,int y);
- a& X/ Z" P1 |5 r; E3 y void dcls(int x1,int x2,int y1,int y2);
- f! S1 \) @1 \ \ void bcls(int x1,int x2,int y1,int y2);# e+ `- [; Y$ O+ L/ l7 Z2 ^5 n( w
void kcls(int x1,int x2,int y1,int y2);
' `& E4 Z. u9 r( q( U void recls(int x1,int x2,int y1,int y2);' m) O3 q* y) u# T! i$ ]
void zcls(int x1,int x2,int y1,int y2);
5 `, a/ t0 t' B- j$ Z void puta(void);
g0 T) A: h) p
( a% P4 u1 H+ f; L3 P7 W& R% ~9 e. U* D" g1 s+ c8 Q$ A1 n4 j
/*--------------演示程序---------------------*/
* k; y4 T, G, i: r, J: Z, G main()# d* o3 Z( e7 D2 ^' [
{2 s3 M. f, W( b% Q/ |' U8 f$ ~0 d
puta();
6 w# [" O! B+ ~3 |* r& X getch();
" Z e, ~" I" a0 E' Y" y dcls(0,4,0,79);) `( B1 V& b6 \! _' c
getch();$ P3 k+ w$ w0 K! q5 W+ E; |$ ?
puta();
# f! B( ]; ^ N getch();
' `( R4 k( M/ G bcls(0,25,0,79);
) b, U/ V( r$ G getch();
3 w. P" @: i5 O( i4 i puta();
( g+ g: P) \3 E1 `; _- o+ K/ r getch();
7 Z! z! R" U$ l8 e" }9 `3 W4 p: W zcls(0,25,0,79);' G1 P, T( [- z. ^/ @- `
getch();
+ C5 T7 X8 \' X6 s4 C' V }- x1 E7 {: X! W4 \( p
/*********center clear screen(中心清屏)***********/
! p8 W! }- Q# H, ~) ^ void zcls(int x1,int x2,int y1,int y2)$ P9 s! E/ [7 ]7 C
{
* A) E) A1 j8 b int x00,y00,x0,y0,i,d;
- n; k/ H9 i5 H4 V b if((y2-y1)>(x2-x1)){% S( Q- u6 j' d# P" }2 s* o
d=(x2-x1)/2;0 l! Q1 ^9 O, D8 D5 q. h0 N
x0=(x1+x2)/2;( h: |# ?; c% I! X; n
y0=y1+d; N5 G r( t7 x
y00=y2-d;7 s) m$ k( h& a' |# Y! Q9 q* Q
for(i=0;i<(d+1);i++)
2 r# d1 p" Y K- j% T recls((x0-i),(x00+i),(y0-i),(y00+i));
5 \% Q9 T# W6 Y0 J delay(10);
+ c3 H- ~1 N5 \* Y7 q }
4 b, O, I7 F( H" L5 J else{
1 [5 v$ d1 L5 |0 M8 ]! O d=(y2-y1)/2;' y& ?: @& x7 B1 S0 b1 v
y0=(y1+y2)/2;# W0 h" W; P& Q. S7 x- ], y
x0=x1+d;
* u( `7 U* L, `6 x7 l2 U0 q: e7 o' N x00=x2-d;
8 b( n* ^4 g' U% p$ r' ] for(i=0;i<d+1;i++)! ? |, H) G. b4 W+ ^
recls(x0-i,x00+i,y0-i,y00+i);9 v+ T& S" {1 n) Y
delay(10);
( }# ~; q* x# g' o }( ~. j2 B1 f& }8 g4 C
}% f$ [) q" W, Q2 E5 z% v
6 {- i# B: v* B" l: t/ p j /************* clear rectangle side(矩形边清屏)***********************/
; B* M$ c: D" f Z: N
. T+ t7 r+ q1 v% Y6 ^# u void recls(int x1,int x2,int y1,int y2)
. h6 c, p% s9 G+ n8 `5 |) N9 G* X {2 b# a$ J4 T& w) T. L' M* _2 F
int i,j;
! M' E/ D( l5 s+ `$ k& ]( E for(i=y1;i<y2;i++){
, W& S) O- R3 J' _9 v9 h* q3 Q B% i goto_xy(x1,i);& |5 V- ?' k, S0 I' M( R5 ^
putchar(' ');
, `- _6 q, n) O: R6 P0 d goto_xy(x2,i);
6 J% M7 M4 F ^3 N putchar(' ');
: P! b' n5 L; j3 \$ J: v, w! Z% J delay(10);: k7 V3 `' s0 g* C
}
" `2 ], g% M8 T/ g4 B" m: w5 b! T for(j=x1;j<x2;j++){
8 v2 R6 c7 _4 |' \0 }2 d goto_xy(i,y1);5 Z/ z6 y+ r( w* V
putchar(' ');5 @; Y, T8 R/ Z4 Y
goto_xy(j,y2);7 [' S1 X4 h0 I+ V5 R3 D* U
putchar(' ');
6 a1 K5 {9 E) b0 J( N+ {2 W$ T, } delay(10);
9 M2 T x4 m; V0 B4 \7 D }& j8 {. j& A7 c' h8 J
}
& C& j% {: e" h3 |* {. w /******************open screen clear(开屏式清屏)*********************/2 l* r" ^/ U9 \( ?6 g- n* _: b
" A; ]% L8 M% K. U6 t- `8 u
void kcls(int x1,int x2,int y1,int y2)
$ @+ l1 D2 W9 R1 b- S& j {
! L; V% Z& _. ~) F# A int t,s,i,j;
+ E0 T h# M" `' I9 Y- E/ C. w! u; l U t=s=(y1+y2)/2;
& O: ^' C5 V; t; j' C for(;t<=y2;t++,s--)( n; o7 T! M+ _% c
for(j=x1;j<x2;j++){
3 ]) ^' G2 `6 {9 K0 T; u5 ? goto_xy(j,t);
2 g& ~: _2 |' R5 U! E+ ` E( w+ ? putchar(' ');# W( [! d/ J5 G. j8 x
goto_xy(j,s); I0 r+ T, L7 ]$ B
putchar(' ');5 u3 k. K# r2 r
delay(10);5 I1 P8 f( V& c3 [' N
}+ q: S9 M, U7 s5 T$ |; T
}
! y, r/ ?' U1 `4 P /*****************close screen clear*****闭幕式清屏*******************/
: N) Q1 P4 E4 N* \) d3 y9 d" D0 O$ c" u3 M& X. G
void bcls(int x1,int x2,int y1,int y2)8 u( | ^/ p8 u2 i* I
{
+ {9 `# Q5 E3 m: j int t,s,j;" g' a0 a7 M9 z
t=y1;4 q7 h4 |. e9 Y5 I
s=y2;: e" _' d, H( |% A
for(t=y1;t<(y1+y2)/2;t++,s--)
! |8 E( Z7 i3 w, Y for(j=x1;j<x2;j++){
% [6 d$ G* }1 J- ? goto_xy(j,t); V0 `3 D/ P/ S# B+ r
putchar(' ');9 h4 p& [0 U8 f; l3 ~
goto_xy(j,s);9 M) M! V+ I% j0 z6 z' i: s
putchar(' ');) V& j6 Y5 {; e/ N$ C; I* N
delay(10);
& S. Q/ Q o; o9 D }8 X+ u }
( K1 a7 P; S0 i( P! b. y0 V5 y }
; Z$ `' ^" u6 ~5 c /******************bottom screen clear(自下清屏)********************/
# J4 s k% T) h% n% m3 i# u' a& m0 N6 |! V) j) w0 l! u0 `
void dcls(int x1,int x2,int y1,int y2)( m; {9 u2 g7 m/ l; n" N
{) C9 J6 H" f' I+ Q% Y9 e
int t,s,j,i;4 A: H/ v2 q" s; s
t=s=(y1+y2)/2;
( Z6 F. l; F+ J for(j=x2;j>x1;j--)9 _5 e/ Z$ [0 y/ x
for(i=y1;i<y2;i++){+ s+ Y2 O0 D# ^6 `: V- \/ q
goto_xy(j,i);
m P" p9 ^3 x2 ]$ q* W; g1 z putchar(' ');) r+ k; N t. G' s9 Z& F
delay(10);
3 A$ S4 n+ E& t9 o }; C) n- X" d4 i: N9 m
}; v. W& l& w# e+ ^( B; K
/******************设置光标子函数******************/
& N8 `+ H k) ?# u! r1 X
+ Y+ j' `7 L0 T, @, {4 @+ I! G void goto_xy(int x,int y)
) Z8 O2 t0 f$ } r5 G {
& p7 M9 ? c/ \- Z" W8 h. Z union REGS r;
7 }1 ]1 e' J4 Q r.h.ah=2;0 e% Y/ W6 M' Y0 X2 O1 d/ x$ o6 Z
r.h.dl=y;
; {' y) _4 s8 z U* k3 H r.h.dh=x;
( ?1 k! m; a3 j( I V# t: M r.h.bh=0;
; I: J" j) n6 S$ P: Q int86(0x10,&r,&r);! u$ x/ Y$ r k2 p* ] M' z
}1 X% s; ]# [8 u9 A% j* w
8 @' E" ?" Z: I1 r: g /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ W' P e" K+ {& V. B. B1 I4 @) O1 o( |9 g; ? k2 n
void puta(void)
* A4 c; R4 a* [- ]. _ { a& y h8 C# X/ j& \0 ?
int i,j;
# g2 |0 q1 D' E for(i=0;i<24;i++){, t- q, B8 A/ k8 w
for(j=0;j<79;j++){, s3 @/ K( l8 x- c
goto_xy(i,j);
) S! C; B) r5 h5 u printf("a");
) e2 V, K) ^: g# U! ?, V }
& x. s: T5 \; q }% m+ T! L) v- F( q& L1 c
} |
|