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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8 T$ d/ H8 @& S+ t+ `7 \1 ^
; o8 i! ]" q$ c+ V 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 |! U# S" ~1 @1 x: n* @" `# @# b5 Q" b" p& h+ \* N) a9 ]: C) u
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * u/ T2 B7 H' a
子函数及演示程序:
4 U l+ J- L! I9 ]. v$ A6 ~, ^
e) [5 |7 M' x( g- z3 N! l #include<stdio.h>1 q2 R0 _! s O0 q- e: A i
#include<dos.h>4 b9 J0 M8 W6 H1 h% q+ k2 Z" s' L3 T
#include<conio.h>
* [& M) e# K. s2 O: T8 r5 U& E Z, j. y& I& o' U$ e
void goto_xy(int x,int y);* B. I! D" x8 V5 t
void dcls(int x1,int x2,int y1,int y2);
4 T* @6 s m1 a! N1 S6 Y) l void bcls(int x1,int x2,int y1,int y2);
/ D5 j4 e. _- { void kcls(int x1,int x2,int y1,int y2);
& `( v. e& e2 i0 J void recls(int x1,int x2,int y1,int y2);; Q& D0 ]3 n+ k2 U0 l% |" a
void zcls(int x1,int x2,int y1,int y2);
# z" o6 g2 h( Q1 a void puta(void);7 `1 o" ^8 N3 e1 K" I
8 b0 \$ B4 J! C& z- ^. x
3 O; b8 Y3 n( r' E& W" h
/*--------------演示程序---------------------*/
" ^# e" }- O( h3 x main(); t9 m c' L1 w* b8 z; j
{
$ X4 j) ~& x: a% L: } puta();
; Q+ x* K$ K2 c- ?3 z% |7 b9 F' ~ getch();. G0 N+ a- ~* D- K/ K
dcls(0,4,0,79);$ j2 m) {; N# L' i6 Q1 j0 Z, c3 M
getch();
, I. m( r4 M) m' M puta();% U- x$ @7 e# U% [+ T' k
getch();
+ C+ B V: }' o2 c& u bcls(0,25,0,79);- Q, n, W# K) }$ @1 X
getch();
; f7 S5 C* `2 {% Y! V w! L1 S, z puta();
0 {* @4 x! J% Q getch();
. P/ g1 v* j+ y) S' l zcls(0,25,0,79);& n6 e7 q% q+ N5 B. `
getch();9 A9 Q# m4 Z2 e! v2 W4 a
}' _% L+ o* F$ |, q9 C
/*********center clear screen(中心清屏)***********/; z5 h3 T! m$ P/ J9 W7 Y( M
void zcls(int x1,int x2,int y1,int y2)
# ~2 I; Q8 p8 J: j1 C2 O {" _! N( u7 K; S- y8 N
int x00,y00,x0,y0,i,d;
- f. m9 t* D8 a if((y2-y1)>(x2-x1)){3 a/ }+ M8 V! _+ i7 @# I4 D
d=(x2-x1)/2;( }% t: D. W9 e4 g
x0=(x1+x2)/2;! }$ e0 M; f) m
y0=y1+d;
& R- M7 ~( H V9 }% b y00=y2-d;+ V& G% W* |# d8 W7 _! h1 C( q
for(i=0;i<(d+1);i++)
4 H& r( J3 ` B0 V* R recls((x0-i),(x00+i),(y0-i),(y00+i));1 S! e% v! d: f0 r3 M1 V% R$ O
delay(10);
) {+ `1 I8 {; F+ g) a6 X }
! b' j x& T5 z. |4 S7 m else{3 C5 ?$ Y1 Y4 p' C8 ^
d=(y2-y1)/2;
( H, {3 y0 a3 e9 }! @: p y0=(y1+y2)/2;. f2 N/ s+ M9 o/ g. T# J, t5 [
x0=x1+d;. l% J, l: f4 w6 q I3 M6 G) T. i3 X
x00=x2-d;5 s: U" [* H* F) h8 e# {; E
for(i=0;i<d+1;i++)
; C3 W/ w) \2 d recls(x0-i,x00+i,y0-i,y00+i);
' l0 p7 t' \" g8 W1 Y9 q3 H delay(10);
* |, u- p& D3 h$ r/ F4 L8 N. E2 x* I }
5 g# y( V" q, u& b4 p }
4 d$ O- Y7 f* L& f: h# v' l0 B6 z9 S& L! d* f( c, d/ M
/************* clear rectangle side(矩形边清屏)***********************/# J4 M6 g% e1 L; p6 C4 H" P
/ k' v# j0 p* {! Z& j void recls(int x1,int x2,int y1,int y2)- W9 g- G0 [& j
{
* |" }1 }6 J8 p0 ?, ~8 { int i,j;
' G( K: |9 B8 ~4 @( q5 v for(i=y1;i<y2;i++){2 ^0 k# E+ }9 |0 J
goto_xy(x1,i);
/ M% L3 ?# F' _- y( U* i putchar(' ');
- G- [2 q8 R/ D goto_xy(x2,i);
+ w# c* M6 d8 z& \! z9 T putchar(' ');6 |' L/ Y# i# ^/ y6 ~6 R+ p
delay(10);
8 p- B; M; L+ u& R3 v7 H }
4 |9 Z7 c/ Z6 t! { X for(j=x1;j<x2;j++){
0 V$ F- f2 U. Q* r goto_xy(i,y1);
$ k# O! i- p# |( u1 G! B putchar(' ');5 [5 K- E0 M4 g) m( f+ D- y; j: X$ L
goto_xy(j,y2);9 e( a0 L$ m5 u! q* h5 j& w
putchar(' ');* e' g, ]; L% ?$ L, u6 v% z
delay(10);
; R9 [8 [- Y- W$ l. Z l$ d }
- @" _/ A4 K+ n+ P }
* h8 h9 M, L! r5 o /******************open screen clear(开屏式清屏)*********************/
; j+ z/ S# P2 x/ i: l: G
4 k4 ]% g+ f4 T) O void kcls(int x1,int x2,int y1,int y2)
: K% r3 p! b0 v; [3 N {
! b. c b, j6 Q [ int t,s,i,j;7 [- {" G8 j+ {6 \+ i% J7 \
t=s=(y1+y2)/2;
8 t' v. `% S1 z$ P: s) I3 r for(;t<=y2;t++,s--)
+ c" z8 n+ Q7 E3 i for(j=x1;j<x2;j++){% z4 O$ q7 ?! N8 K+ ?1 @, E; m
goto_xy(j,t);9 Z7 [; i7 C& ^. {$ U
putchar(' ');
0 ^& p+ Z# v2 m goto_xy(j,s);% r/ l! M4 P! P) R1 L+ y. ]
putchar(' ');
% b* ]2 `4 ]" k: M; J" |( S2 _ delay(10);
# c- l; L. t/ S9 {+ r }
( _5 p& A2 d& R! W+ u }
; e# P! j5 q( x8 c+ n; ~2 Q3 [ /*****************close screen clear*****闭幕式清屏*******************/
- w) {, e4 m" M+ c3 l' o- c9 R+ q$ M# y* \
void bcls(int x1,int x2,int y1,int y2); f5 ~4 d( i4 C% h
{% ^% k7 M% c5 C" R# R5 f ?
int t,s,j;" V. R, T/ i6 w4 Z8 d0 V( c$ Z
t=y1; w1 _* u( r& B* u1 B# C
s=y2;* a! D$ j* m$ ~
for(t=y1;t<(y1+y2)/2;t++,s--)
' O0 f$ G( A' \ for(j=x1;j<x2;j++){
6 l# E2 h [. L' { goto_xy(j,t);
3 y# T9 [$ a* v3 H; x1 ]$ s( u' k putchar(' ');; u( E. \: j- c- p) i
goto_xy(j,s);
5 n& m J/ [; A- q/ q C4 s0 U m: |# R putchar(' ');/ `0 q) d$ S! E& W
delay(10);+ z# k# w* a* f
}. L& ^! U( X8 {7 L Y# n& \$ P' ~. H, F. \
}" R: n' i0 A4 l3 n
/******************bottom screen clear(自下清屏)********************/
% H l5 E+ V) g! E6 o) y; ~4 S. z, p% e( _+ ?$ j
void dcls(int x1,int x2,int y1,int y2)
" Y8 Y* t' f0 O: w+ _. v8 } {
9 ?+ k2 {4 g& z# Z& ?, u G: q int t,s,j,i;
% g+ Y- d: R7 o, h# q t=s=(y1+y2)/2;
0 \4 M$ J f- W$ W6 y$ A# ] for(j=x2;j>x1;j--)/ F" g R R5 A5 C- ^: B D
for(i=y1;i<y2;i++){0 z# m8 L% @ `* _, j K3 J5 t: s% r
goto_xy(j,i);
7 A) J$ P3 Q5 d/ ?# g) S( ] putchar(' ');
( s4 ]- T& }9 c: F9 V* y+ Z delay(10);
/ Q( ~- p! j8 u }
2 F& w( n7 {: E. z2 c. c }
0 R. ~1 v8 P: q+ S8 a /******************设置光标子函数******************/
% k- y X# W- b! ] \3 p' d0 X4 K+ R/ U& S6 f, w
void goto_xy(int x,int y)
( E4 n: S9 ]& Y' c4 I! E4 ^) T1 {& s5 T+ U {
: E" s8 u7 k( b# _9 }2 {1 B union REGS r;
1 _& T! |1 u) q# N* q r.h.ah=2;# ?4 L) F5 ^2 [/ H ?) |
r.h.dl=y;
/ }! Q* K! E) ], H" m/ L" m: [% p, u r.h.dh=x;7 h$ z: d3 h5 r6 }% s! W
r.h.bh=0;* Z+ T9 U2 A9 p' G) n, Z2 p5 r
int86(0x10,&r,&r);
4 }2 g3 x+ i; S, N u/ ?; }' p }; u. P- {. s- g, T% B1 M
$ D* V* e' t" ?# M. N /**********************在屏幕上打出一连串的a字母用于演示程序******************/" h8 x" k* W- d! @& E( I' c
p9 @' v. W% G/ ?4 i- K$ n void puta(void)8 P/ v# H& i. _0 n& ^" P; s& f
{3 ^4 V* g4 z U K
int i,j;
; j# i9 `0 a. e9 _/ v( P! M for(i=0;i<24;i++){
$ l- G' n1 M3 U6 w* a" U' s+ a: W for(j=0;j<79;j++){
' F5 S' z- M& Y. i a goto_xy(i,j);& o" ^5 ?/ r( L2 x
printf("a");
# u' h% e1 b+ ?% ^ }+ o! d6 A: ]9 m2 b7 i# c( N
}; A, e: L7 H+ p2 |" z2 {2 o
} |
|