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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ V6 V8 A. v. T% K0 `4 a0 g7 w
v+ f1 }$ T9 V9 D: L 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. D: Q3 h$ R, C9 L
2 v3 w0 X, U9 O! Z0 e! |2 a. } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . V( m5 ~0 h" |# U: _
子函数及演示程序:
* `) F o1 ?) S% S b' Z
4 ~/ r: a( I) M3 G, r2 | #include<stdio.h>2 K7 q3 U' i0 k8 f
#include<dos.h>
; u: s% l& n9 W9 v, y( h( L #include<conio.h>+ i3 v; U" n& i
, D+ A) Y' r% @) t/ \9 Z; a void goto_xy(int x,int y);3 `% |; Q2 n8 W) @. p
void dcls(int x1,int x2,int y1,int y2);
- {# S0 d. u& E; \) P void bcls(int x1,int x2,int y1,int y2);
" Z8 k) `! U! l" z& H! ^: f void kcls(int x1,int x2,int y1,int y2);5 ^# Y+ d' d8 a% o, J. i
void recls(int x1,int x2,int y1,int y2);1 p( K4 C7 O5 I
void zcls(int x1,int x2,int y1,int y2);* L* E( p3 ]# Q1 ]% Q6 g2 e |
void puta(void);
) k7 c$ d4 R1 P7 E! T( ^# }. K- C
3 ]: t. V- P! u0 c! j# a1 [ h2 P7 K9 b
/*--------------演示程序---------------------*/5 {+ p2 o' c% \
main() ^3 u- s. y- r; D. a
{! ]9 h8 Y5 C6 _3 T) x5 s9 R8 e
puta();
; b) Q5 T9 E8 T0 S1 y: A getch();
* Y5 A, }7 B$ P3 E" U dcls(0,4,0,79);: Z3 n+ y8 w, u
getch();
# u! T1 v- b0 M8 Z0 E puta();
2 s. h: M5 @, n: h getch();
. j! a2 T7 I) K bcls(0,25,0,79);
7 b9 K, n7 o$ O% T getch();7 i4 [( X* Q! q) j' P8 u
puta();
( F5 `& q4 X& L# w+ z: r4 X- d4 n; M0 e getch();
9 {( ]# D& P$ |; d6 L8 z% g2 Z( e& Y zcls(0,25,0,79);: K: q! |" |1 O, w! c& G/ U1 L9 j4 l% j
getch();# Z9 e7 Q" f" v9 o* U q$ k i
}
. F9 Q9 [& }- X2 r3 ~ /*********center clear screen(中心清屏)***********/
4 K3 t3 p. d+ \; t* X* L6 y a/ v void zcls(int x1,int x2,int y1,int y2)
5 n7 X4 H/ x/ J0 v {
) k9 p9 s D0 D$ ~( m- p% S int x00,y00,x0,y0,i,d;
! v6 ]- v! P6 k- ] if((y2-y1)>(x2-x1)){* ^% [# O/ g3 L i: N1 U. V% i
d=(x2-x1)/2;* H! L& s4 C$ K4 x5 B3 Z" u
x0=(x1+x2)/2; P: R1 a: I1 B3 ^0 s" i8 ~ c
y0=y1+d;
& x' ?5 y, ^( T9 q y00=y2-d;
$ Q# c- K2 e- B- o8 _ for(i=0;i<(d+1);i++): A) S9 E' `' [/ j6 G. o4 ^
recls((x0-i),(x00+i),(y0-i),(y00+i));
1 ~5 G/ S, f1 P( | delay(10);
4 p0 K! o* Z9 D5 k- A2 ?/ ~ }5 u' L! h& x9 B i$ u
else{
_5 \' f9 A- {1 y0 a, j$ r* y+ e% R d=(y2-y1)/2;" [7 x/ n' b9 A- G" U, P
y0=(y1+y2)/2;0 T% a& q: X2 X
x0=x1+d;8 E' a: H. h( J1 B
x00=x2-d;+ `; C S1 @1 S
for(i=0;i<d+1;i++)
2 b4 |6 i( @( P r, c/ a5 h recls(x0-i,x00+i,y0-i,y00+i);$ g: l/ X! w; K, q0 f. j: Q6 V
delay(10);! }( ^ a3 [9 P% S$ h9 }, r
}, E9 {, d5 t0 G. Q
}5 ^" v" b' V- Z
C! {3 ]: u, C6 z5 g( W /************* clear rectangle side(矩形边清屏)***********************/( ]* c: c' W' S$ e# Y2 X
" s; I& x4 Y( s
void recls(int x1,int x2,int y1,int y2). E2 p* l: S/ Q( ^4 a% j
{
$ H9 K) H* o+ K int i,j;
# N I' A) X" N for(i=y1;i<y2;i++){8 l) n/ T' @: x8 _2 f
goto_xy(x1,i);
* ?( [ `0 [3 g8 v' B putchar(' ');6 x/ P5 ?: v' @1 c* E! G: P
goto_xy(x2,i);, @' q3 j- Y) Q. g: Z$ U* w5 W4 G
putchar(' ');9 z3 n; J" Z [& C3 i( s. v( m0 Q- z
delay(10);3 g8 a0 J' i/ A4 B2 b
}0 }2 f; q% C9 Z C) H) ~" [2 _4 j, g
for(j=x1;j<x2;j++){, L6 W( W; l9 s6 v G
goto_xy(i,y1);
9 ~9 B1 q4 n+ q6 S) b. E- k) } putchar(' ');" ?& M: K6 ?- [% Q
goto_xy(j,y2);+ B, A$ {0 o) r! ]9 o' @4 `
putchar(' ');
k+ ?9 y- w8 y8 G( ~$ a delay(10);
" }: ^- C6 t) q8 U$ T8 y% N }5 @2 O; M0 t9 T" m L7 U4 p
}3 v/ ^2 x) m$ T- p! c9 x% [
/******************open screen clear(开屏式清屏)*********************/! Y$ b- o7 r1 n- v
; ]5 N) W1 u I' q- d9 F
void kcls(int x1,int x2,int y1,int y2)
H3 ?7 ?5 C6 d( y {& W8 V( D9 ?7 A5 D5 O
int t,s,i,j;
9 q. W/ V$ y2 u/ K$ p% H/ @) U t=s=(y1+y2)/2;
h$ S5 \( H7 s' I$ d' ~' F for(;t<=y2;t++,s--)
3 W' F! H X/ |+ v for(j=x1;j<x2;j++){3 b# T, p5 b( Z, v- M
goto_xy(j,t); p# _& R- [. ?4 I. w
putchar(' ');
$ I% H2 Y- H( [' L0 ^' K6 R goto_xy(j,s);7 A$ w, Q9 L2 e2 E9 Z" b# J
putchar(' ');
7 L9 i4 Y! {' j# U/ [: Q delay(10);
7 c* H( M) X: m6 i }5 q0 e" k5 v$ o4 @; u
}" {4 M) h7 c0 i8 T- s* h9 g& `
/*****************close screen clear*****闭幕式清屏*******************/( w; p+ N! P6 T% K" H7 t3 s
9 Y+ f/ k$ {7 G" r5 b7 g" H void bcls(int x1,int x2,int y1,int y2)
( v( ]- X. |. c! z6 o {
! ?) h& y* F0 b! ?- L4 l int t,s,j;
7 d# J# @9 a! l* [# \& k& z t=y1;
3 G2 Y6 J/ F; R* Q% \5 X: l s=y2;
) R. q+ f# ^& B, X for(t=y1;t<(y1+y2)/2;t++,s--)" W. i' v: d9 r0 U; ^: j% k/ w
for(j=x1;j<x2;j++){7 P+ B- N+ N3 v0 i: k
goto_xy(j,t);6 G7 W; W4 L7 |
putchar(' ');
9 H+ {& z8 s' `2 K- c" a! X. i goto_xy(j,s);
8 \9 ]( _; ^3 T, L1 u putchar(' ');
- G% t4 C! P% S$ M delay(10);' `) n( Q/ e2 P' I8 a4 K1 z
}
3 l. u6 e, V v$ f' y+ A1 P }. o( l, D5 `1 I% L; j# G: M% J
/******************bottom screen clear(自下清屏)********************/+ t) X; f$ ?4 r0 s0 J) W
7 U" E; m7 X( P Q
void dcls(int x1,int x2,int y1,int y2)
# D/ S0 C* F8 V. @# j8 D% H. N' J {# t4 B8 M3 G6 y/ G' V$ _! }
int t,s,j,i;
) V/ t! [& L% ? t=s=(y1+y2)/2;
6 {$ S0 Q6 w3 f: p for(j=x2;j>x1;j--), x9 ^+ v N) m' i: [8 Y) {
for(i=y1;i<y2;i++){1 s8 o5 `( k W
goto_xy(j,i);4 H- e9 M" T1 s7 {" }
putchar(' ');& O F' t: Z/ N" l0 [! t
delay(10);9 G5 ]) K, e* p) D3 k1 d( P" O
}
5 h6 v2 ~6 w7 c( A& c6 x }, r% v$ F* T% A) c3 k7 a" w' U
/******************设置光标子函数******************/
% R& Y# o& f9 B! Z- O, ~; ^
: Q) R, C# b8 W# ^3 U' d void goto_xy(int x,int y)4 |* j( j' k; P; ^9 F9 d
{
& Z! ]( a/ X: J5 T7 x union REGS r;
1 f6 [3 W( T) O, G* L1 L9 B6 u% b r.h.ah=2;
4 h" I) x/ y/ m( H0 _: |" G r.h.dl=y;# l- w3 a3 L6 g0 i! m
r.h.dh=x; ?& P! D: M0 p( a
r.h.bh=0;
" W+ ]" I" D5 l' O* L' Q4 v5 G int86(0x10,&r,&r);
" y3 s6 D1 ?6 ?+ Y }9 a2 B5 c5 g9 ^( x, N
E- P5 n0 K! v3 Q7 H! q
/**********************在屏幕上打出一连串的a字母用于演示程序******************/1 p2 m! u( @; i" S
( N8 _: r4 b9 O3 i5 c% V& X$ t
void puta(void)+ X! g' g+ `" l4 s& j7 D" k. a: H- R
{, s/ Q' W8 C' y. w* y
int i,j;; |: \0 G; W3 U+ A/ _
for(i=0;i<24;i++){
! X; a( K' B" s4 w for(j=0;j<79;j++){4 L' p# m: D) C9 x( L F! X
goto_xy(i,j);, @( a' n$ R# ]+ w# U( B
printf("a");
[- k' @- c; c' j" ?3 i }
6 Y1 J9 D4 x# [: ^# S) j% H) O }% l# o* R+ }! N% Z3 t& }2 F
} |
|