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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ A5 c, [& c8 r0 W' v7 _& w9 H6 ~, j
\+ n6 M' ?/ C& }. N( M; V6 L
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
- {6 k! c7 y* P; T5 S% N/ K( R
- @1 |0 g& ?5 q8 i 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - U7 f, ]% J1 U, P& s
子函数及演示程序:
6 ~( F$ ?5 P* O: z% u( o' q1 F+ L4 {7 Q6 B5 p
#include<stdio.h>0 t, R U8 ]7 S- n; J i
#include<dos.h>0 a) T' [( N0 I2 k7 ?, R" L* v* d. `
#include<conio.h>( D# U7 G. C% s, P* E0 t4 o
1 Y) @0 X0 i" {! Y+ Z) q' a! y' x- K* ` void goto_xy(int x,int y);
* G6 F( `8 `" d4 m( K5 G* A void dcls(int x1,int x2,int y1,int y2);
- s3 n+ s: S4 z6 H void bcls(int x1,int x2,int y1,int y2);
4 F0 _- T8 N) W5 u void kcls(int x1,int x2,int y1,int y2);( {1 N4 `% D- [3 W( d
void recls(int x1,int x2,int y1,int y2);# \# b+ t8 z9 G1 Q4 I' B
void zcls(int x1,int x2,int y1,int y2);2 G" f7 h) G0 a7 l( ^4 L# U
void puta(void);0 R( c1 }/ b. V8 y# k+ v" q' ^
! o0 }, G/ x1 A% H# d1 u
3 Q% Y! n6 G* c) v5 s
/*--------------演示程序---------------------*/
! m! }" t: c# e4 ?3 g7 t main()2 Z4 B' L0 n E! A! E5 u: a
{
# z3 `- I/ T" ?/ e% N puta();
2 ^4 @# K9 L9 p. B getch();" t8 c+ ?/ x4 D' h! {0 z
dcls(0,4,0,79);
. y b5 e) E6 |! A7 X/ v getch();
' z2 {: J3 }& Y; O+ v/ N3 N. } puta();
/ Z3 t ^ ?/ ` getch();
" {2 u9 P; |9 n" |8 N$ r bcls(0,25,0,79);
: V! t2 L; E8 v' m8 ^ getch(); ~& p% u* a& s
puta();
5 ^4 B% ^3 x' ?3 E, Z getch();
8 x5 X7 j4 s" O7 ^ zcls(0,25,0,79);6 S% l9 t5 N, y& N* |6 K p1 t. Y
getch();4 J2 [* h1 ^, X
}: a# W( [3 M; O9 g; g
/*********center clear screen(中心清屏)***********/
% Q5 f8 ^5 h+ N O void zcls(int x1,int x2,int y1,int y2)& S% Y9 b5 `5 @4 W; [
{
4 C9 ?) a" S5 v/ y. [ int x00,y00,x0,y0,i,d;3 U7 X8 e3 j& O7 [9 D
if((y2-y1)>(x2-x1)){
' |, k o1 G) @* O d=(x2-x1)/2;0 g( I& b3 e9 Y, Z- w9 f
x0=(x1+x2)/2;9 H% o. E/ K! [7 j0 n
y0=y1+d;0 o l+ ` m+ V v5 C. I6 ?
y00=y2-d;
' V: D. [. }" q4 V" o for(i=0;i<(d+1);i++)
6 e& p8 z% w! s" u recls((x0-i),(x00+i),(y0-i),(y00+i));
" \: S, o# B; C2 K" V8 p( V* n delay(10);6 D' z4 ^" H; F8 e: A* C: G4 k
}; K1 g% h4 W. ]- o
else{
4 {% @8 _2 a$ \' H$ K/ _ d=(y2-y1)/2;. m# x3 @7 u2 w3 f9 \; a% H
y0=(y1+y2)/2;
/ p9 N6 k6 {9 W/ Q; N+ x x0=x1+d;
8 o* G) I- @" p% I: v x00=x2-d;
6 T& w9 f1 s& p' Z) o, u+ r& D1 \( b for(i=0;i<d+1;i++)
1 P( ?* I8 Y7 x7 F0 u& `" r recls(x0-i,x00+i,y0-i,y00+i);
; h9 r* i. A' |! ? delay(10);
; U, `- W+ @2 A! w }
2 R( ]( s$ Y4 [( h @9 E }* C. ?' q R" K8 |2 F
$ `7 Q! T" |8 x9 k) @" t /************* clear rectangle side(矩形边清屏)***********************/ b9 S* q, U/ y: j, C/ ?
6 y+ B4 V0 z" K- f; ^" B% m0 a3 ~ o/ I
void recls(int x1,int x2,int y1,int y2)
8 v r4 P+ q$ |+ ]- w( _ {" \7 m' u; p. s z0 B9 Z6 Z
int i,j;
- o5 E2 g. x. [/ |( n for(i=y1;i<y2;i++){( ?+ I! {3 L8 a- R
goto_xy(x1,i);
3 [3 \6 q( x3 q5 f6 ]6 P* ? putchar(' ');
) S. ^9 c2 z9 F- K1 Y/ Y: B$ ~6 Z& h goto_xy(x2,i);, ]# K6 J$ b1 ?$ x# |; ^3 Y
putchar(' ');
2 A6 s; m# X- B* m! P6 V delay(10);
. a: k9 W; ~/ o* b# @* u }/ H+ ]5 U: Q9 b5 w4 D! C2 h
for(j=x1;j<x2;j++){8 L% b) b: X* l* @2 W
goto_xy(i,y1);9 E3 V8 a5 w/ [0 z% Y& |
putchar(' ');3 {& H N% C5 {$ m) b; u- K
goto_xy(j,y2);
6 p8 J3 a: N: W5 @$ Q3 u! r putchar(' ');
! ^. N ]5 H1 {$ j: c6 F+ b delay(10);; `% ^: X, X; n; ^# B% k" l
}5 H" D- P& \' M7 B
}
0 f9 [) E; e2 L2 ^ /******************open screen clear(开屏式清屏)*********************/" L0 @9 ^- {; {' r. u* k. m. n5 F, w
* `/ t5 W4 {* ^ U: k void kcls(int x1,int x2,int y1,int y2)3 l- K1 p. w# e
{! x) g7 k. _% i1 U( |0 e
int t,s,i,j;# N6 l3 L' b4 r
t=s=(y1+y2)/2;& B1 l3 C$ H# J. P/ O
for(;t<=y2;t++,s--)# I$ r+ g% H$ V
for(j=x1;j<x2;j++){
- }& w" a0 Y7 D; k/ J4 a goto_xy(j,t);
p( t; f, `; q7 Z. h- E3 Y; b putchar(' ');5 h% z2 _% _9 \' U3 E2 B1 \
goto_xy(j,s);" w6 s* u; q) P
putchar(' ');7 x& Y; l) Y( Q) q @
delay(10);
4 u0 g% w5 g! t% D9 w( G' V% U1 k' j }
K3 i* {. ^: V! H }2 I z) |- v; G; N ]* o) W
/*****************close screen clear*****闭幕式清屏*******************/
% q P. f( F" s8 U" q* W, ? d. U6 |
void bcls(int x1,int x2,int y1,int y2)) x7 B. B# {0 _! F" f" Z& _
{
, v! L7 Z% i, o& [* \ int t,s,j; I9 T; W* g+ B) [; K( Z
t=y1;3 W4 Q e6 N6 L* f; q" K
s=y2;
9 y% ^7 [6 r0 S5 f for(t=y1;t<(y1+y2)/2;t++,s--)0 Q8 b% `) \- a( b* D
for(j=x1;j<x2;j++){
0 [ s1 `: f" F5 }8 S ~8 T" m goto_xy(j,t);
; q. i' `& ^ z5 v, G; O! t7 K) Y putchar(' ');
6 v8 D- Y; \( Z! B$ Q5 B) k goto_xy(j,s);
) E" \; I: c& ]! ~- N% X putchar(' ');
% s( Q9 N2 H/ Z2 c delay(10);
* S4 O3 K4 k: r0 @. v }, ^8 h/ d* F: k M, A! I9 c
}
+ S2 W# T3 \: ?+ u# p /******************bottom screen clear(自下清屏)********************/& u+ V+ O, C6 V! ?+ R$ m, ~
( @9 w* G5 y( ^( p void dcls(int x1,int x2,int y1,int y2)4 D( u1 G; T& m J
{: X3 z; R' w/ `: w1 m
int t,s,j,i;- g B9 C' H; D8 j; z+ h: W# L6 x
t=s=(y1+y2)/2;
. }* a! E* W8 U- t' p: f for(j=x2;j>x1;j--)% N3 m6 i3 k) ]6 W8 s# j" p
for(i=y1;i<y2;i++){# s, w8 |1 h* O
goto_xy(j,i);
c" u& x* x* g putchar(' ');/ `4 e6 |- G# W6 O( j5 ?) ~- z
delay(10);7 D, H/ i! @ ]# d3 a
}
) d) C" F( S* i, G }0 s; H |9 b. r! b
/******************设置光标子函数******************/6 b# e) ^1 g% C# N" r
6 Q7 {$ h& h. G+ y' I
void goto_xy(int x,int y)
. g$ d2 q3 d! C4 r! F9 S {1 i& ?3 M) Z* o8 m
union REGS r;; |7 X" Z1 i) w% Z, ~
r.h.ah=2;
5 J+ g( f% [' Q0 x r.h.dl=y;4 N, A1 ~3 W* |
r.h.dh=x;6 {0 [2 n0 \, ?/ A) M! ~5 i
r.h.bh=0;
. g) \3 ]* r( T' X, p& W int86(0x10,&r,&r);
9 B) T; o& ^2 C, y: G& M+ d/ e }; E2 k3 g8 Y' |
# L5 c# o/ b0 | /**********************在屏幕上打出一连串的a字母用于演示程序******************/+ H* P* g* T; g; c `- g! P- o
3 }8 q4 Z" T0 { void puta(void)
% g& z3 v) j6 t% S {
0 W- t7 N; C2 k+ u% k' D2 V int i,j;
' O& t1 T* D& S% D+ \; H, | for(i=0;i<24;i++){) `% J2 A. G. H* H2 l
for(j=0;j<79;j++){3 A/ b6 i6 \) D' X8 X- U7 W" f
goto_xy(i,j);5 q# N/ }, y# U
printf("a");
2 K3 C8 u, N5 O8 I, a S }
; I! m3 X, f( t* J+ l }! F w: B, k& G
} |
|