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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ {, j% {3 e/ Q* B' [
# Z M4 Y$ z' q: r 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 H' P) x8 D' H0 c. f/ m i- k8 ?9 F
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / ?7 i. I8 h& H- Z2 c1 G4 r
子函数及演示程序:
r# w( U3 V* B# @8 p- I0 a% g4 Y1 C$ k# Y+ u( J1 P
#include<stdio.h>
) K0 e8 u4 }$ U; j: S& u #include<dos.h>
( ]( t- D& E' m, R #include<conio.h>
6 Q5 v+ _2 v4 s ^0 h% c: e" x+ \- o6 c o! J& M
void goto_xy(int x,int y);
9 a- h* s% M9 @ void dcls(int x1,int x2,int y1,int y2);( ]. w2 s- A; S p2 `
void bcls(int x1,int x2,int y1,int y2);( G. `$ f1 r7 o) V" X: [
void kcls(int x1,int x2,int y1,int y2);* [+ k6 Y0 q" C
void recls(int x1,int x2,int y1,int y2);' ~7 m6 M& p9 l# {2 l" t
void zcls(int x1,int x2,int y1,int y2);4 R9 I% V% c1 G/ \2 i# B5 d; b
void puta(void);/ h! ?) z2 s" `: ?3 ~) M: v# R* }
8 L, ~. `" x2 T: s: A
3 @9 r7 Z8 p8 |( l5 ~1 y
/*--------------演示程序---------------------*/
; ?# h5 ^. J1 e) e% R2 l" i: W0 z main()! y) @2 H" Y+ o! x9 m1 c7 }- ~
{+ s+ Y/ g# y( l( b
puta();( t; {+ p; q- l6 M
getch();
s' J* s. ?; w0 k, |6 A/ D3 @' A dcls(0,4,0,79);3 ?/ c( P4 U( B; r/ a* V3 T- x
getch();
( [$ l: a6 ]) n puta();
4 F1 i3 Y- D7 g0 ]* H! Z7 S getch();
}; P8 y) W7 y bcls(0,25,0,79);
% S9 J: r4 w3 ? getch();6 l" j) j" u0 C) R/ r
puta();8 J/ C9 r! m9 C6 [; c
getch();
; r7 o6 d3 D: l$ q5 L4 w zcls(0,25,0,79);+ r" _" _# p8 h% {0 z/ a
getch();0 w* |# I1 h/ |- X' S* x# h
}
7 B* R8 f R2 e m /*********center clear screen(中心清屏)***********/' x# r3 e9 }2 {
void zcls(int x1,int x2,int y1,int y2)
7 @! x D7 k6 `& E- R0 j# m$ j {
3 z) s5 S% R% J( {& O$ j int x00,y00,x0,y0,i,d;1 s8 U1 k' R& @. X9 C3 @
if((y2-y1)>(x2-x1)){
: I, X0 v. u4 O; Y/ i" W6 k. s d=(x2-x1)/2;
& e4 H+ S# i$ T2 ]1 }' R x0=(x1+x2)/2;6 E! k- S" X$ i( p. r$ m
y0=y1+d;7 v% E1 v1 Q0 i. x
y00=y2-d;; L6 | F e6 k* ~
for(i=0;i<(d+1);i++)
: F/ g' F& s% H( h recls((x0-i),(x00+i),(y0-i),(y00+i));
3 z( x+ ]7 R7 K delay(10);# B) R" O6 L9 k O$ X( x: o0 T1 h- \
}
7 }' T) k1 _& ^; C1 I else{4 j: e2 L: q. ] l$ ?/ ~
d=(y2-y1)/2;- E7 o- P1 Q: w, ^4 O' t+ r7 R) J
y0=(y1+y2)/2;/ h$ n o! Y" [ c, [% N
x0=x1+d;
$ ~! K$ ?" ~+ h) b3 N x00=x2-d;2 C+ g4 Y* B0 o* e7 {5 N1 ^
for(i=0;i<d+1;i++)
$ ?2 V4 L- ]# x, L( F; ? recls(x0-i,x00+i,y0-i,y00+i);, _" G. w/ G( X+ i$ O0 M/ o
delay(10);0 `1 p3 m2 g% O" Y& u& T" v. ?
}. h9 g9 g: R( `. d2 v
}
) X2 z9 L. ~1 D, \9 v2 V
/ W0 o. d3 _& e h5 ]! y /************* clear rectangle side(矩形边清屏)***********************/: I3 J, Q( v1 q* S" w
2 I; H+ _# X& U* H void recls(int x1,int x2,int y1,int y2)3 T' f1 T+ W- t6 z
{( M2 R' J2 J4 ^' I" R$ v
int i,j;
+ u" ?! y, d0 f0 u# ]5 T5 I a for(i=y1;i<y2;i++){
7 L/ s% u! [ p3 u1 c( v goto_xy(x1,i);( N1 Y" C. `% L @' g
putchar(' ');
; |3 q0 \2 c# h8 O1 V8 D goto_xy(x2,i);
3 q0 [3 n: J" {/ @: s. J# A: q putchar(' ');/ J1 F& R! Z; c" |, h2 I
delay(10);
1 f: `0 U4 N: i* c+ P) U }3 G0 C4 h- u8 b5 P2 w R
for(j=x1;j<x2;j++){; X3 u: t; F3 ?4 f
goto_xy(i,y1);
2 L0 w& u' Y( n J* T5 |" X putchar(' ');
9 X' @5 ^5 V! }+ t" Q, h goto_xy(j,y2);) O4 _ h& E* m z2 H, X1 L
putchar(' ');, |. n" g3 z4 a2 S
delay(10);
( D4 f( u5 B) H: m4 [1 ` }
; J" C& b6 Y, _7 z& y }
; R: F! H( w; Q6 h /******************open screen clear(开屏式清屏)*********************/+ S$ G( n' v1 n& \* h
' h2 E6 A, E8 S+ I6 L void kcls(int x1,int x2,int y1,int y2)( x4 N4 }. ]2 c/ \( m; ^0 y9 P
{& E2 N0 I5 F6 T2 x
int t,s,i,j;9 J9 Z! m' c" ?" V E J
t=s=(y1+y2)/2;) y3 m. M- F) E$ u# ?
for(;t<=y2;t++,s--)2 o k! M0 Y9 t( L6 x
for(j=x1;j<x2;j++){
4 O2 g7 U; Q5 u goto_xy(j,t);
: ~2 G" m0 e/ K9 h! ?: t8 i putchar(' ');7 O6 v' l# O+ C/ z: C! r
goto_xy(j,s);
! s& l5 U( L/ a& N1 z putchar(' ');+ A2 H6 a' |5 s$ q! K
delay(10);
* ^7 L# U: d+ H% F6 ]6 A }
0 W# `5 P" z5 A. i0 _3 U2 k }2 c/ G: I) I: i8 c1 ~6 `7 T
/*****************close screen clear*****闭幕式清屏*******************/
$ b# U8 p' G) o' y/ D, K3 o/ e* v3 I+ e) X' L- w$ @
void bcls(int x1,int x2,int y1,int y2)
1 R6 A7 J5 r) `; { {3 {5 j' {$ E( N: H
int t,s,j;
% ]" v! @2 I3 |, E- ] t=y1;# ?4 j% R4 M+ {% m- Z6 [
s=y2;
3 m8 m1 g7 N6 s( A for(t=y1;t<(y1+y2)/2;t++,s--)
/ R1 v. a: P# U7 n3 n5 [8 W for(j=x1;j<x2;j++){
5 A& q/ p: M. j: W- V goto_xy(j,t);
! K' k- Y' k& A2 ?. d7 O6 ? putchar(' ');1 I6 t; O. Y& T% n" p. e7 E! c
goto_xy(j,s);# z9 j& X! |5 s7 l
putchar(' ');/ r* T6 E# x4 Y
delay(10);
4 d3 i+ L$ t0 \& M4 E' I, v1 a7 B }
, D6 @& ]6 D6 s+ Q/ u$ k }
' d" V# |% S* T9 _0 @3 R /******************bottom screen clear(自下清屏)********************/
" U, ]! P% i+ Z) @' l6 T
& s; g" t! J% N9 _! T void dcls(int x1,int x2,int y1,int y2)
: I$ }8 E6 l- ~8 }! Z& O {6 j* y2 y0 }4 G* l( y, |, r
int t,s,j,i;0 I2 T# { c7 t7 C# A" K
t=s=(y1+y2)/2;
0 f2 y4 d* p2 h5 w$ I for(j=x2;j>x1;j--)9 g, w5 K. V% E5 [& C4 {
for(i=y1;i<y2;i++){
" k, \% [6 z' d Y8 D: J goto_xy(j,i);
" G$ w5 t6 F* q' W3 l/ h" u putchar(' ');% e B: G5 d4 N: _1 E( u
delay(10);
" I. O4 o5 }. u/ ?" \ }; L2 [& H, Z% I/ y8 E. S
}
6 |: T* L% k( m y9 N4 {/ k1 \0 i /******************设置光标子函数******************/
$ [' v9 k# ^ ]/ q- t7 U$ L. k( p8 K7 f8 O) S+ y
void goto_xy(int x,int y)& y' I) {2 m# S" G
{- x& @8 J' c7 `$ {8 R
union REGS r;; Z6 |: g" c, _8 {
r.h.ah=2; b# ]: O2 D( K6 p( ~
r.h.dl=y;
0 a7 U1 R3 F7 }8 `. v" q r.h.dh=x;# @2 z3 X/ a; J; w6 t: Z# ]
r.h.bh=0;$ F! Z. O6 C$ l1 S, X' n) ^3 p
int86(0x10,&r,&r);( Z/ A) ]5 l) P8 W; t
}
1 d3 a7 ?8 J! F+ J2 y4 c$ k
7 k; Y- Z6 p5 m- E+ [# d0 q( v /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% C7 }4 t9 p3 M8 t' Y' ]7 V' c' x" J, e2 ?& a3 R3 W
void puta(void)
6 q9 n3 Z* [/ x8 |& X8 |* V- N# t {3 l5 [- }; @3 G8 `+ a& Y
int i,j;
, Y4 |! h: ] y for(i=0;i<24;i++){5 J9 X6 X8 q; q" C- A4 ]% l; |
for(j=0;j<79;j++){
: ~+ M* K! X$ x( Q( K7 H goto_xy(i,j);+ l3 D" d# M9 n" F
printf("a");
+ b( V. K5 j4 w+ [! ]) a) I* n }, K+ L9 x- G' z- S# N
}+ s8 |4 L% J5 t! v! }3 }. j
} |
|