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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
4 }+ R7 N8 r+ b% H: @$ S4 d. x' _7 `- g- k4 K6 A5 ~
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' ~( [( v5 N) }0 T$ D/ I
0 s. q5 T! ?" c1 ~
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: y9 p5 o& Z' L, W" K 子函数及演示程序:
4 L* N, ^" r4 ~+ _. M& z& l8 [( `! X; d! _
#include<stdio.h>8 o: ?% O, D# ?* C
#include<dos.h>
3 S J5 F2 ?$ y( n7 V4 y' f8 v" Q #include<conio.h>
9 Y5 q5 a1 w) w/ H- L# i3 |
0 d7 D7 B6 ~% N7 \% i% k8 m* j void goto_xy(int x,int y);5 W" h9 j/ Y9 l, c8 L5 x, z$ n
void dcls(int x1,int x2,int y1,int y2);( ~7 l/ @0 w9 J% a+ r) i
void bcls(int x1,int x2,int y1,int y2);
4 h" q, ]5 |8 C) x5 R0 }& x void kcls(int x1,int x2,int y1,int y2);
' A5 B7 K1 i% z) F9 F: G/ x void recls(int x1,int x2,int y1,int y2);- }" H) h! g4 Y$ p6 Z* z
void zcls(int x1,int x2,int y1,int y2);* y* W5 |7 [; H H" ?
void puta(void);4 f) \! T: W; ^2 u1 I; _- r4 p
1 f5 I$ [% F _4 g6 s
, z3 R! c6 q* H+ Z: |; n /*--------------演示程序---------------------*/9 l' N# J5 O# v8 L/ `
main()
. G/ \* e0 z# u: O6 Z* i7 j {
2 S" P' u( a( S. Y! ]/ R; Q puta();
3 ^) e* q0 Z; Z$ O getch();
1 ]. N. W J, b- C t dcls(0,4,0,79);. Y/ R! q: }; ]% Q) [" T2 c
getch();9 ^' J' B' G+ y, @2 y6 `; ~6 Y
puta();% O* ?; w" N# N, ?( y+ f: V
getch();
5 V4 B) D* k7 _! s bcls(0,25,0,79);
7 z7 H9 j' g) A getch();% v. c: i, [+ E, K
puta();6 p; d, p$ ~- }$ S/ G
getch();
/ V" A- O, x5 |& R9 R$ x zcls(0,25,0,79);
7 E) D! C$ C7 U( j% u getch();) `: F4 S* E) E: ^- b' Y# d
}7 p3 z) ^4 ]7 o [8 ?4 ]
/*********center clear screen(中心清屏)***********/' o: N; @- k: P6 T9 U$ N+ N
void zcls(int x1,int x2,int y1,int y2). y; p M0 U, L7 S4 v
{$ V( C$ G* [# H6 E0 s
int x00,y00,x0,y0,i,d;( X& e2 R1 i7 \( S
if((y2-y1)>(x2-x1)){$ f! A2 @3 q" i$ y! n
d=(x2-x1)/2;
6 p0 E+ c6 b( R% r x0=(x1+x2)/2;
( O3 V/ d' |+ j5 ` y0=y1+d;' {) ~8 ^2 @8 ?( \' s5 _/ j& c
y00=y2-d;
& a0 w/ q' P0 s* q" g for(i=0;i<(d+1);i++)
, [5 b5 r- |% e: z recls((x0-i),(x00+i),(y0-i),(y00+i));. t4 `: m' n7 @
delay(10);- W7 S4 a( ^* O
}
v' p% c, f* U- z% a else{
& R) g5 f9 h1 J7 c7 e d=(y2-y1)/2;8 G$ O; R* [* C! ~' N9 }- Y S
y0=(y1+y2)/2;- M( H( K* H2 w8 Y1 U, @, E
x0=x1+d;
. V# ~8 b" W" i s: @& S x00=x2-d;
$ J' {2 |6 x4 m. Y; \$ U3 N for(i=0;i<d+1;i++)# L; N( v6 w. ~% x5 N! P
recls(x0-i,x00+i,y0-i,y00+i);" ]8 x" |4 N& N+ |9 h
delay(10);
, i8 t5 \" C: A6 V7 f0 l- j } Q0 R9 d F7 r! {% g" O J
}
; o7 Q' ?* }0 N* @6 J
. M* o$ ]6 A5 w0 ` P /************* clear rectangle side(矩形边清屏)***********************/) O" G& e9 e5 H2 o
* l& F* O8 i/ c% x$ a9 H7 I void recls(int x1,int x2,int y1,int y2), ~2 B7 O+ E; Z) ~
{ G) ]0 N% b3 z) O
int i,j;
. v- j" B4 g& V/ U, A for(i=y1;i<y2;i++){
$ p! N$ R0 ^6 F1 k7 z+ e* E( [ goto_xy(x1,i);
" b! S y2 @" {8 |! S7 g& o( j \/ _ putchar(' ');
" K1 ]4 p: J# X' u goto_xy(x2,i);
! r3 u% X; E/ A( A& d: G putchar(' ');5 e2 P2 h$ ?1 X+ p! ~9 @0 @
delay(10);
8 d' b" w* |& u, v/ r( O" u }
; P. S/ M3 I2 N# W4 A" j ^, G for(j=x1;j<x2;j++){# M/ d+ Q- ~' o' h3 o" s
goto_xy(i,y1);6 d% Y- u( B5 i" ?; w$ {
putchar(' ');
* }# D5 A9 s$ i$ A goto_xy(j,y2);2 J5 r4 b) Y4 O0 u! P' H7 j/ ~* v
putchar(' ');
! g9 X P0 D8 d) Q" v5 Y' F/ s delay(10);
. v0 K% ]* i- v" i7 _, Q3 D3 l+ m }7 h# h: j" X1 v4 B: Q( ]
}" g4 W' n/ M6 ~) T `5 y3 K
/******************open screen clear(开屏式清屏)*********************/8 C7 s# T9 K2 ?3 ~
8 g) O2 k. F/ L( V# L0 @ \ void kcls(int x1,int x2,int y1,int y2)2 J- k! Z; `. k8 i) l0 p( ~
{6 n0 O6 N+ x; _% l1 g! j q; l: P
int t,s,i,j;% M. I+ m, }- V
t=s=(y1+y2)/2;
, L4 i& m9 G6 o for(;t<=y2;t++,s--)
8 U. [* x+ S+ m" K+ _ for(j=x1;j<x2;j++){& U$ l3 S; w3 O6 i
goto_xy(j,t);
, a1 t# o3 X5 Z& b putchar(' ');0 `; K* w7 Z, g9 l- Y- {
goto_xy(j,s);3 {: ~0 O) B3 W' Y* |
putchar(' ');
! Y8 j+ {. l' h0 `! p! ^# x" V* i/ R* ` delay(10);. q; _6 [! P( a( Z8 A% b
}1 F& S0 ]8 I* _& C
}
8 b8 F' n c) _. q [' j. O /*****************close screen clear*****闭幕式清屏*******************/4 b6 f1 J5 S8 D' ^" [0 K$ u' O8 d6 x
( n) |: I7 `& h9 t
void bcls(int x1,int x2,int y1,int y2)& g' Z5 [8 m; R' j# Q. ?. x5 n
{
3 Q% I7 I- |4 Q7 w W2 D* j int t,s,j;( X3 T4 i1 f% R; Y, H) q8 d
t=y1;+ w/ l7 n% L% g- h. x2 J1 t
s=y2;$ [6 P# J# W' X2 ^- `2 Y
for(t=y1;t<(y1+y2)/2;t++,s--)2 Q! c; F6 S8 l' g4 g4 u
for(j=x1;j<x2;j++){0 z( p' R: ?& u. r, K' W8 ]( h, ~7 g
goto_xy(j,t);
2 o) u" ?" u" `3 z* P( J4 d putchar(' ');
- [, t8 T. s! { goto_xy(j,s);
, I% z; M/ h5 k1 D$ n/ O7 \ putchar(' ');, H: Q& |! Q! S! y- l
delay(10);* W9 w, S9 g3 B
}
5 | S7 [3 c8 `. j& S }+ s" S! P5 D7 J# R4 n7 v. l
/******************bottom screen clear(自下清屏)********************/5 b+ d% c+ w4 a6 d m2 c% j
# n0 ~' [$ \( g2 x6 o3 P void dcls(int x1,int x2,int y1,int y2)
0 h: z7 i, ?' y6 T, ^) I2 ?7 c8 V {: m5 x7 t' _* V3 \5 ?. ?4 b! H8 L
int t,s,j,i;
: z) R c( {/ q5 Y) O2 `: ^) {# I2 w t=s=(y1+y2)/2;
" N; ]0 t+ {( Z W) L" b6 t- S for(j=x2;j>x1;j--)
+ V- [1 @1 h& t! J' l8 c for(i=y1;i<y2;i++){; ~% w( [" _3 a
goto_xy(j,i);: u H a& f4 F( i# n5 G+ F
putchar(' '); a {: \( m! A# f5 Q+ }" p" F
delay(10);
c" E: @" s, U! U6 Q }
# w, b- }/ O0 x! r }
% a) V7 [- G" G. F0 ?- ? /******************设置光标子函数******************/7 E) s$ p @: m
- c- d2 e. K4 V5 m
void goto_xy(int x,int y)
+ Z# R! w3 o! b& a) b {
& [1 m! A4 W/ I5 B( W2 m: ~ union REGS r;( v; A% _& f+ {$ f; Y1 ?, X7 J
r.h.ah=2;/ l/ D+ I/ p6 ]+ c" F6 D8 C% L0 T
r.h.dl=y;
' n3 K! W3 X, d8 k r.h.dh=x;
4 M: a) d0 {- ^4 a r.h.bh=0;% U8 R7 F$ g+ |- ]
int86(0x10,&r,&r);
3 \7 R% a9 |8 E1 E6 } }9 N0 K: x3 N; i7 d0 Q3 O" O1 t: j
" _/ S1 f! ?+ k5 p* h s3 v /**********************在屏幕上打出一连串的a字母用于演示程序******************/; T0 K! p1 g9 r( a0 T
: \7 b# z9 H7 x9 ?- E; \7 Z% e/ }+ i
void puta(void)+ l: j) Z; x0 e, O; Z- Q3 X
{" ^9 p; w& }, U' h+ Y+ [7 Q
int i,j;# T1 G% S. Q) x% @1 E
for(i=0;i<24;i++){) ]5 q0 l8 o* T, E) D% v6 o" s# Z k
for(j=0;j<79;j++){$ f: e' V8 S8 g8 @0 F
goto_xy(i,j);. L( x3 {* h; z
printf("a");8 U0 Y4 Y* Y6 e A) o
}# C. n0 ?' F* V& t8 t# w2 _1 ?/ f
}
1 K9 U O* N* @! i, _ } |
|