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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ X! J' w' ?0 ~4 o) y1 Y1 [
0 j) m# x+ @7 F5 v/ R$ D, S
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( V" g* H" q! H9 b* W
* s0 u6 R" w7 ] 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 G# g- d. g* a9 [/ @8 @
子函数及演示程序:, A8 v, j2 Y8 H3 R4 R- p! n
% J; C& L' p+ f" G M: l9 p #include<stdio.h>0 \8 g% y1 B& o
#include<dos.h>
! G+ ?5 G: @* }5 g7 Y9 C0 ? #include<conio.h>' U' _7 N# e! m1 ^ k- F8 p- F3 I
! c/ H* L$ K8 }: z$ D k void goto_xy(int x,int y);3 l# a; `; ?) v( x- a5 M; v' O
void dcls(int x1,int x2,int y1,int y2);# k& ]/ {7 S* x, L \4 T# {
void bcls(int x1,int x2,int y1,int y2);
2 |2 M3 e8 q& T4 l1 ] void kcls(int x1,int x2,int y1,int y2);
" e$ b6 A+ K7 K' _ K& o/ [ void recls(int x1,int x2,int y1,int y2);
; @ G- u8 l4 [3 S, E void zcls(int x1,int x2,int y1,int y2);( Z' c& I2 |4 H) C F4 g
void puta(void);
0 S `2 z5 B K _5 b/ A- D" _7 t
O. {; ]$ n* C2 c
0 H2 [8 M u9 f /*--------------演示程序---------------------*/9 A/ a _+ l( j1 o6 Z
main()
3 c+ [6 a1 ?# ~) r9 \( @ {6 |+ X. }( o1 B% n2 \
puta();
7 A! z v) j* j+ s4 T" i/ i getch();, e8 \) J, x5 Y5 F( y3 I7 T( R
dcls(0,4,0,79);9 o* V* ^- b$ y- d- V
getch();' |. ?" z( O/ n0 s9 q$ e
puta();
2 X- ]2 {5 {# M8 H! v) i+ B: l0 x getch();
) }# L" f3 Y8 F bcls(0,25,0,79);
6 S" J- C# H$ ? ]( }2 X$ ~ getch();$ Z0 B, k+ [" V/ {9 o
puta();6 t( |) X% s, O2 J) j6 f% [
getch();7 m, I# U5 ^ o6 P
zcls(0,25,0,79);2 Q3 B w. t$ P0 t+ b
getch();+ ?6 s0 E8 [- x4 A- x
}
. b9 j' J& m5 C( ^1 z- ~ /*********center clear screen(中心清屏)***********/. \4 ]7 v. p4 n
void zcls(int x1,int x2,int y1,int y2)
* y2 V% F- i; p H {6 t$ ]" v: ?% Z3 b7 a; `
int x00,y00,x0,y0,i,d; K* n$ _7 l( @, {* K$ w5 e' p3 o
if((y2-y1)>(x2-x1)){* [: y6 u5 `% w7 q
d=(x2-x1)/2;' J) D' I) ~. b/ ]* s$ `
x0=(x1+x2)/2;0 A& T1 `* q* R( l1 O8 n
y0=y1+d;
0 |7 X$ y1 c5 m0 _( l, G y00=y2-d;
" `2 b) k$ q- \2 ^+ s( A7 }4 Y for(i=0;i<(d+1);i++); R3 i# n- @- ~3 h1 v% d# i
recls((x0-i),(x00+i),(y0-i),(y00+i));
6 M+ p# [# B( J6 d delay(10);& u/ X& a1 }- D% o: [/ t5 d
}& Z+ C, B. t1 y) J6 B
else{
" M s+ w2 Q% k% s" s, K" { d=(y2-y1)/2;. l1 J3 Z* ?. c
y0=(y1+y2)/2;9 e2 g. U, K. O6 g- Q* D/ f
x0=x1+d;
( e1 `( W- I7 v" Z0 T$ [ x00=x2-d;: X- v% P; P9 u' [
for(i=0;i<d+1;i++)
/ \9 {5 R# t1 u* n0 f& L recls(x0-i,x00+i,y0-i,y00+i);) [7 q# o, G( P. k9 @
delay(10);! K+ e1 w& w5 h; o: `) D5 ]2 z
}2 }' p7 j' ?4 G. J3 E
} ~, F" Z. k5 v& C( K M3 N
' {( ~4 S+ h2 u. Y) X
/************* clear rectangle side(矩形边清屏)***********************/; v* L% b8 i; K7 x; Z9 m; j% `
+ c* d" p0 d1 p8 A$ N5 C void recls(int x1,int x2,int y1,int y2)
3 m# s. `4 J# @0 H0 U {
4 \, P8 D; q M4 w* A* s int i,j;% S+ g, F, h. V( J, k9 y
for(i=y1;i<y2;i++){
2 Z* m1 z; N/ F! I/ U4 M goto_xy(x1,i);7 Z6 `2 w N) n; ^
putchar(' ');! f* {. J' g/ [( I' h
goto_xy(x2,i);
E$ w+ c6 m' q" {/ D putchar(' ');% A& R: w' E% R9 Y8 F! t4 q$ E1 w
delay(10);" {* h1 ^( v% J. N; ?2 F) u
}3 H: ~/ B& ?5 h
for(j=x1;j<x2;j++){" G6 ` G, J; m- B
goto_xy(i,y1);. \# F1 t% w% h- T( ~
putchar(' ');' S" y* r3 N+ m6 E# \3 Y
goto_xy(j,y2);
' ?6 E A. E) y6 n# e5 K putchar(' '); o9 G$ p, p9 E1 }7 J, A
delay(10);
4 \5 U5 ?* O% N- F }* J5 P( P8 a# Z9 d
}. j. u$ x2 z; D' t p. L8 o
/******************open screen clear(开屏式清屏)*********************/
+ }) l; _. `2 A+ e1 i% K, O2 `
- ^& K% Y9 ]8 ~9 o. S% }; a# R2 N/ W$ ` void kcls(int x1,int x2,int y1,int y2)
( u7 _' O- n- p3 V% N$ Q# w {* d9 Y, k4 P% h7 O/ L
int t,s,i,j;" \$ f! T: |1 D5 W1 \- E# `+ G, a( `3 O
t=s=(y1+y2)/2;
( c( l, J6 A( s) U* U" i for(;t<=y2;t++,s--)
" r# u- Z( Q; t) N% M7 J7 j for(j=x1;j<x2;j++){7 Y& j Q+ c3 q
goto_xy(j,t);
8 @: O3 p8 x2 P" a, `( h, f putchar(' ');
$ E* y! m4 z1 F/ m" l) V goto_xy(j,s);4 R5 U: S0 h7 U6 _ }
putchar(' ');2 X4 R0 I& j3 _
delay(10);8 F0 M* d% B* Q1 y
}7 \% a+ N1 v) W) w2 \
}
1 |% H" j: j/ ] ]: e /*****************close screen clear*****闭幕式清屏*******************/% r: m3 L$ k$ J+ ?" x
" j' @. {# o ^5 `3 S! J void bcls(int x1,int x2,int y1,int y2)) H# l, K# @0 E) _
{9 {) p( h, a% b3 z$ c7 [
int t,s,j;
5 W3 `- B; M7 j7 J* C t=y1;3 H; a# V- Q/ u$ V$ g* K
s=y2;# [. _6 o5 }& i# t, _
for(t=y1;t<(y1+y2)/2;t++,s--)
8 T, a8 K6 K1 {( J8 y. z for(j=x1;j<x2;j++){2 r: Q% ~ o: p6 I- n* K; k: _% @) p
goto_xy(j,t);
/ S) B0 I( G( D% D# n; k ~ putchar(' ');9 x+ M/ v! i2 L9 t
goto_xy(j,s);
, L( @0 a& L0 b. [9 G! Z: r { putchar(' ');# q4 c. { m5 E$ B( T3 r! \* D, m
delay(10);
6 u3 z) C( `7 t- d }
* X4 R4 x" [ W6 `7 k5 W }
) r* \$ c3 `+ V. { /******************bottom screen clear(自下清屏)********************/
3 N9 S3 i/ F7 c5 s5 V: M% I% F7 K' u' C$ e6 R# n) D
void dcls(int x1,int x2,int y1,int y2)
2 s& a6 Z% w4 k0 V {! Q( z3 r/ n! T" W) x A
int t,s,j,i;! L; v# t& X$ \9 P- G7 g
t=s=(y1+y2)/2;0 w! A+ P4 o* D
for(j=x2;j>x1;j--)
: D1 L& ]: Z) j7 ^7 ^; w \9 s. ?/ U' j for(i=y1;i<y2;i++){
* q: k8 d' r' a9 B h& ? goto_xy(j,i);8 ]9 S/ _2 y8 b# E- x) C
putchar(' ');3 \$ @# f% W! I# x7 v$ @
delay(10); w8 v: I% J5 Y7 g
}( T( q4 z' P! {0 g' E
}
/ L1 q% V7 ]6 {9 r /******************设置光标子函数******************/8 i; r7 H% |- k. s& Y
& g5 D( ]2 Y' A/ z+ V
void goto_xy(int x,int y). {' n3 I) ^. n5 p
{- D! X8 A: D* Q6 s- d% P
union REGS r;
; D! k' L9 C8 x r.h.ah=2;
! D1 W' L1 C/ B- s6 W r.h.dl=y;
; R8 a# c9 q" H r.h.dh=x;
3 n% D1 b0 j: [* b3 W: T: i: f r.h.bh=0;
8 }6 n; w% ?9 F int86(0x10,&r,&r);) t9 S" l. X' |: T: K+ m
}
/ y" x* |; U9 D4 g+ M0 {+ F9 Z
+ x+ R0 p; Y4 t: F /**********************在屏幕上打出一连串的a字母用于演示程序******************/( S: f* e& }6 k+ ]: f
6 y6 W' m/ G5 T void puta(void)
4 C, O* e. N. O1 d# x {
& y* z6 u4 k7 }) B' ` int i,j;
6 q5 F/ x& V& b8 W. ^! p5 u$ R5 U c- Q for(i=0;i<24;i++){
1 E; `" B0 G+ r) h for(j=0;j<79;j++){
8 Q& x6 N) M9 v: i" q goto_xy(i,j);
' e( S" J, O2 U8 `0 e! v printf("a");( s1 z, z, n: t% Z3 R$ ?
}
4 V9 ~" ^ \* c- S }! t1 R0 y+ I! ^5 g' n
} |
|