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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& P) m7 w, r3 i2 o: F. X$ h1 Y" w8 s
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& O9 Z$ E: @8 P
5 \5 l1 W3 k7 F) u( ?2 @$ Q
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) V5 K8 a t% w. i9 _ 子函数及演示程序:- p8 W7 N" _& f+ a/ Y
8 R3 B6 u8 O( t$ F/ f5 i
#include<stdio.h>! J1 d r5 b* X& d! t
#include<dos.h>
+ j/ a+ h* }* p; m #include<conio.h> G0 G6 p. a0 u7 i
. o$ h) y" H( A3 i3 S void goto_xy(int x,int y);! Z/ K# C; A$ C5 `( t8 A
void dcls(int x1,int x2,int y1,int y2);
5 R q% E' j. o' O+ V4 y6 t7 d void bcls(int x1,int x2,int y1,int y2);. t7 k9 N- E5 j5 T# v" Z
void kcls(int x1,int x2,int y1,int y2);
& e8 K+ a- U" d void recls(int x1,int x2,int y1,int y2);
5 S" C- M) H3 b void zcls(int x1,int x2,int y1,int y2);" E& }7 h' {# y* X( }
void puta(void);
. G0 F/ l! }5 y. Z
- n5 ~: c1 Q5 R \' G C0 f( q! _/ o4 d0 P9 }
/*--------------演示程序---------------------*/
) C: x/ K1 x p main()
5 H. t7 F. v" t ^9 f {0 G) d9 R' _0 ?+ j" j
puta();# j) r$ S. q; q* e; @
getch();2 p4 j) |1 w& x) u- J; X! {7 r
dcls(0,4,0,79);; N! W$ L, Z8 r0 y: r1 z
getch();9 C( Q. l: @7 o3 L }; W! @
puta();9 m: s& a/ ]: e( w, P6 d
getch();: \; s6 z K# v0 T" z2 S
bcls(0,25,0,79);
P! n0 D. _6 X8 \, _, G- i/ k getch();3 S: I; T! @) J4 R9 B( ^' m3 ^
puta();
$ m# n+ s( ~- h3 f. ~2 A1 n getch();
9 b3 \! y+ G0 z t; x+ t zcls(0,25,0,79);
0 P C' |" V9 X. S# G getch();
/ `6 s# c: h) Z6 ~ }
3 E( K+ m% P& y% \; [% n /*********center clear screen(中心清屏)***********/
, D9 T/ a4 M* B* X+ g2 Y void zcls(int x1,int x2,int y1,int y2)( d! ~5 A6 a! [' Y
{- M" c! h+ x; X& t' t3 c% b2 ]% m
int x00,y00,x0,y0,i,d;
% x2 |, w/ i" }5 d0 H( \ if((y2-y1)>(x2-x1)){( p ?+ t1 g& O9 v; `
d=(x2-x1)/2;
" |" S/ C* ^% ?( Q' g. ^% {+ Y$ x x0=(x1+x2)/2;
( v) v8 n& u/ C6 |3 i+ W1 y2 j y0=y1+d;
% q, l9 M, T: ~2 D$ a: W; } y00=y2-d; j! f _1 T3 L5 \! S
for(i=0;i<(d+1);i++)
9 \$ O" ^4 v+ g! f recls((x0-i),(x00+i),(y0-i),(y00+i));
! Y2 l& c; }. {8 Y4 x" d delay(10);
8 V5 e! E0 \ b }9 `& ^& ~: w' Q2 W- I: k3 {9 v7 T
else{
# h" ^& e- ~9 F6 C+ v4 \% X& A8 H d=(y2-y1)/2;7 f+ V1 ]- b: H
y0=(y1+y2)/2;' S4 v6 \6 j8 O* |% U- ~
x0=x1+d;: K& u# z9 C9 ]7 ]
x00=x2-d;
: {9 x7 g8 Q0 w! |0 v for(i=0;i<d+1;i++)# O; L/ v. I( I9 t1 e
recls(x0-i,x00+i,y0-i,y00+i);
& a8 t7 z- L1 ]0 F: x delay(10);
! f/ f& ~! w4 w+ e }
( s; a7 _. T; G& V& J! S" s }1 B' F1 p% D0 S+ e* q
2 H6 E0 ~+ p% }7 u" {9 p& G /************* clear rectangle side(矩形边清屏)***********************/
1 O; ]" q2 u9 F# V
; k5 |: e9 K" C/ d: P: h. J V void recls(int x1,int x2,int y1,int y2)
$ P8 Y: L* m8 ?& c6 Q% [ {, g+ R3 d2 y: |# n
int i,j;
% o9 ? ]8 [3 C2 V3 i5 s& @ for(i=y1;i<y2;i++){
7 ~- O$ {! a0 L8 e# p% e+ n- ~9 D goto_xy(x1,i);
5 K4 l+ q1 Z; H/ K putchar(' ');
: G6 c+ W$ M9 J$ h goto_xy(x2,i);) X+ q0 R& x, ~: n
putchar(' ');) t- C" k, K& J
delay(10);
- T: c9 C" S/ {4 C, e }
. @! @0 M; G: T for(j=x1;j<x2;j++){
. Y7 d) e9 c4 M- q' |2 ] goto_xy(i,y1);
. ^4 J# t! c/ T7 p2 n putchar(' ');( Z$ O3 }& e3 X, M
goto_xy(j,y2);
/ i" i) V& [& f$ {& Q+ z putchar(' '); W9 d1 ?! r9 r4 g% Y4 B' \
delay(10);0 |" v4 [3 V( i3 c: n* o
}
% s3 i' T& u+ h! g }
; Z5 P }2 K. `4 S, D; p /******************open screen clear(开屏式清屏)*********************/
& O; P; Q5 \' q/ U
; W; V4 c; e" H7 z8 I void kcls(int x1,int x2,int y1,int y2)
; a% V( k" G8 D8 }" K/ g# i+ q {, q# @3 w/ d! C. x" n
int t,s,i,j;& r x% v) M& i. g. h
t=s=(y1+y2)/2;6 V% F: C' _" _7 F! Y
for(;t<=y2;t++,s--)
- ?0 T4 m7 C- G0 d for(j=x1;j<x2;j++){
! k: ^' I; g0 i4 Z goto_xy(j,t);
% q4 L8 u7 M1 Z: u* o. i putchar(' ');
$ @. s) A5 P0 v3 t* @5 d1 K/ h goto_xy(j,s);
4 c7 C" L; s& ]# [ putchar(' ');
* C$ z. n, o# |. I `- G* _ delay(10);* Z% [8 Q* v+ }* C, t% }
}
- H3 H/ I v8 t( N: } }
' t+ Z9 k, _" V7 s; z( b' W /*****************close screen clear*****闭幕式清屏*******************/. o! [# I' p. E! W
: T0 B/ W! ~0 }% Q' C# a; q2 d% { void bcls(int x1,int x2,int y1,int y2)
7 p9 a) H0 j0 U& {# d8 N {
3 j( |- z6 z: k1 c int t,s,j;
5 W; J6 W% K! O! a t=y1;
* }9 {; |2 I: @8 q6 b( K s=y2;$ z+ E3 Q8 R6 ^% L7 A
for(t=y1;t<(y1+y2)/2;t++,s--)
. Z1 a9 d4 W8 V; B5 c2 a. P for(j=x1;j<x2;j++){
2 a9 K! T+ s! A goto_xy(j,t);
: ]# @0 \ _ M& t& @+ z putchar(' ');. p$ m5 Y5 T& @. j1 ]' j
goto_xy(j,s);
! ?! A( \4 Z* ^6 |$ L putchar(' ');4 O7 b ]. Z( ?$ o; N* m9 R
delay(10);
) l1 t F; h( u, \1 h+ L- t }" J& Z( S. M" u' E
}
( U+ k# \$ @$ F* I: e /******************bottom screen clear(自下清屏)********************/
5 R4 ?! _9 G7 G) Q/ J# U, ]# C
3 h9 P% }2 K6 D& m* S& ~4 I; j: Z. m. ] void dcls(int x1,int x2,int y1,int y2)6 a) U" P5 t6 o. Y
{2 U9 w, b3 q/ u% \& c
int t,s,j,i;
0 l" p5 n0 t, f' V7 w t=s=(y1+y2)/2;+ s, c/ p9 a7 S8 L% I5 W
for(j=x2;j>x1;j--); }" z9 z# b! a! i6 Q9 [1 R) I0 s
for(i=y1;i<y2;i++){
: X+ o) ~. q) S- ?7 a7 b$ u goto_xy(j,i);; c5 }* a! z7 m% G
putchar(' ');& l, C& M' t) P
delay(10);
' b9 A" w# F; G: }& _: R } @( q* z6 d9 i1 b2 {+ G
}6 T$ T* J5 R2 d! U8 l
/******************设置光标子函数******************/( E8 C# m- r4 A+ q$ L& f7 B- O
4 c- y( A( _5 w; A& Y8 R6 I9 C
void goto_xy(int x,int y)
3 u) H2 o- A( `9 n {1 n' s, x/ F$ z0 r
union REGS r;
+ Q; o7 l0 l d$ \$ |5 o! ` r.h.ah=2;) o" J: u0 q" Y5 W
r.h.dl=y;) P V; l, [, }
r.h.dh=x;2 z8 S5 Z; i/ I3 E, i- j
r.h.bh=0; K3 S( }) _: }2 }! |- ?; A
int86(0x10,&r,&r);" j0 ^0 e1 S. @6 [8 m7 h( b
}+ R( s& i7 V$ x. e3 I) G/ i
: J6 Z* Y t: Y9 i- J9 ^ /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ q N' h5 Q3 K) B; P5 C2 e
1 z( E- t: |5 w- u# y: F void puta(void)
( I7 }. e! |' s {
! Y. U0 Y3 Z) h, \ int i,j;# o. l8 u/ i; {1 W4 K+ p" U4 G
for(i=0;i<24;i++){
; K* j4 @5 K! L( m ?3 D& a7 F for(j=0;j<79;j++){6 P$ j( M" r# @
goto_xy(i,j);) C- I `. |' k" T. h$ p
printf("a");
3 a9 @. b5 {; B% X }- G4 w, r# ]8 G# b- }+ j
}. m7 O% v1 M8 D" H, T
} |
|