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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 Q9 e8 Q. u# `! u8 r* w9 j) B$ S8 h- _
5 l- W5 U* W, P, @ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里) h9 x; c W5 C% F1 q( v
$ K, i- L- n& u# R* W y4 Y; ?
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 m/ y( } z9 ^& F
子函数及演示程序:
/ Y1 b ]+ k- d8 P7 h7 u' t3 |2 Y2 i* d+ h m
#include<stdio.h>
$ g% p' \+ i% q8 s9 W/ \4 o #include<dos.h>* J8 O4 |( M* c" I. L% ?
#include<conio.h>3 d& j1 `1 O- _, B
9 P8 X) }- f! C( Y, ~) E# K void goto_xy(int x,int y);5 a5 G8 N1 A6 u9 I$ {5 N9 y7 O
void dcls(int x1,int x2,int y1,int y2);
8 ?, r7 g( g8 M2 i" C$ D: e2 X void bcls(int x1,int x2,int y1,int y2);/ s7 \, Z& h% E, T2 j( T
void kcls(int x1,int x2,int y1,int y2);
1 Z9 Q) u+ [4 [# q% G- A void recls(int x1,int x2,int y1,int y2);
5 R) P) c4 S9 s5 Z7 J void zcls(int x1,int x2,int y1,int y2);
! e+ ^9 w# F+ \- v j' x/ K void puta(void);
* R' P& N6 ^- H7 ^; [- Y; ^* G; [5 k& g* I" ]
- ^4 _4 o" m* c: h+ C2 Z" Z* \ /*--------------演示程序---------------------*/
5 ~5 F `" Y: Q1 j( z; h main()' x& [+ x, e3 Z+ q- k7 g
{
2 \, I% y- Y9 b: ] puta();
" J6 [5 K( ~0 ~) t getch();
$ E1 d, c% H- B" h dcls(0,4,0,79);
R( H X, P& T$ K getch();" R( ?; b9 i; w. H
puta();
5 a6 o, R; }0 L5 B# @7 m+ z getch();
1 Y; d8 Y4 M3 i3 [' |) |9 b bcls(0,25,0,79);+ k- E1 o7 d. n8 b
getch();
( P$ J( F* p! d4 ] puta();+ D# ?! l% J, u+ }1 A# H0 b* a* X
getch();
" w2 M% g0 _, A zcls(0,25,0,79);
: ^- c8 S% c9 _ | getch();& ? @; S+ d1 _) F' R- R5 p
}
6 V& T$ m. D6 {2 W- f- V /*********center clear screen(中心清屏)***********/- \; V5 o& N$ X$ k7 f- d( K6 F8 u
void zcls(int x1,int x2,int y1,int y2)8 S. x9 C% S# ^4 T2 k- I: c- Y) Q
{
1 y4 s6 _# U& O$ s& M int x00,y00,x0,y0,i,d;
( w' ~3 L3 d, a4 ~/ ` if((y2-y1)>(x2-x1)){7 A, P, B1 G0 |- e5 V
d=(x2-x1)/2;$ Z3 w- M# A6 Q- s @8 }3 z
x0=(x1+x2)/2;
( S0 [( _2 f" ?9 P y0=y1+d;
$ Q; @, _1 c' T) c' M y00=y2-d;
$ n5 ~; |0 c3 P. P( \2 E3 X, |6 f for(i=0;i<(d+1);i++)
% E6 D. A* J0 V5 q s+ H recls((x0-i),(x00+i),(y0-i),(y00+i));4 i2 W1 }) T- F5 p( m: y [
delay(10);4 }7 o3 a3 Z7 I9 R4 R
}
! @7 i7 ?# e6 w+ R else{5 D, @2 A; \4 a! k$ S) h% |6 ]3 D
d=(y2-y1)/2;9 ]( }8 ]1 q- m3 ^+ i" A: o' M
y0=(y1+y2)/2;' r! }) n3 e/ [& L
x0=x1+d;' B/ h$ q1 a; a c( ~
x00=x2-d;
: u: y" O2 h$ z7 c/ u5 K& U8 o for(i=0;i<d+1;i++)
1 U/ e6 i4 G2 n) ]+ x( F7 a$ i r recls(x0-i,x00+i,y0-i,y00+i);3 y9 ~- H: E: a% m. s
delay(10);
3 P' `- @- v' z/ S" o } f3 u" y! J$ Y4 C' r! ^
}
x) {' ?9 m1 r9 ]1 [8 h
8 Y' i K* ^6 `4 Z' l /************* clear rectangle side(矩形边清屏)***********************// H( P1 r9 j9 q# D$ e8 K
& T o+ d1 V: W% B
void recls(int x1,int x2,int y1,int y2)( m; s9 k2 \5 B$ y
{
/ f* {7 h9 q* A# |6 b/ m int i,j;
: j F6 o3 L; f/ V8 i for(i=y1;i<y2;i++){
; D8 H$ A: ?/ G' H+ \+ w' N goto_xy(x1,i);
) Q. B& d) U3 C% [; p3 b* w putchar(' ');" ]- r9 a3 l( B2 b8 t
goto_xy(x2,i);4 |! V* g( Y9 B: w; ?% W4 [7 u5 @
putchar(' ');
: O: i k! k9 A" l! L2 \8 u/ O delay(10);0 |+ Z8 r1 S+ t+ f7 {/ z5 g' W7 ~
}, O3 p% r- g' Q4 B2 R
for(j=x1;j<x2;j++){
0 I& P) \! H1 o goto_xy(i,y1);
9 _8 O8 J& L0 g# Y9 { putchar(' ');
& Y0 T) H3 A$ }& c/ x goto_xy(j,y2);
4 M' O! l& a4 _; ]( L putchar(' ');
+ H" l9 @8 i+ r9 M6 [3 X4 ]3 r+ o1 ]& F4 [ delay(10);$ @. N1 l" }" X/ R: ^: H( v
}
- n2 |% j9 f1 |9 p }
, ^* V: l4 p$ G1 r" c /******************open screen clear(开屏式清屏)*********************/, m- X; N2 q5 A/ p
6 K4 R0 q; b% o, S* a$ z* B% E
void kcls(int x1,int x2,int y1,int y2)7 |7 a( E. ^% e) Q4 ?1 }) K8 f
{
Q! [3 Q# X" B7 F int t,s,i,j;
: F/ b+ \3 I. r/ |; F. _ t=s=(y1+y2)/2;
- Z/ \% E# e$ p: E for(;t<=y2;t++,s--)
# u( W; J: r% U# L, R for(j=x1;j<x2;j++){
/ T1 O. l% a2 i1 C goto_xy(j,t);" M- v0 v. `& s7 y2 o( X
putchar(' ');
; B: @4 ?8 g7 Z9 J goto_xy(j,s);
% h: p1 A2 {7 _; w5 c1 d putchar(' ');
$ H1 R, ?1 Z+ x$ W4 w1 { delay(10);/ i) W# Q5 _. G9 J% f; p
}
h: k4 X% \: T4 l2 l }% X( B" j2 r$ _+ R! o
/*****************close screen clear*****闭幕式清屏*******************/2 l: W0 j' i" o: D- {( f
$ t; G5 X3 M4 i- q void bcls(int x1,int x2,int y1,int y2)! Z! _: x) I! ^( _2 X
{+ x, G, k; r" }) V& }3 k; Y/ ~
int t,s,j;6 V6 B8 ?: u6 ]2 K. m9 t5 F t
t=y1;
; L, S: {9 M1 E7 P; K s=y2;, V( D+ s3 H! h5 t6 |
for(t=y1;t<(y1+y2)/2;t++,s--)# h, Z) a0 u% K& U$ [# f
for(j=x1;j<x2;j++){/ X6 G: Q: {* B4 q+ O4 r# I! x
goto_xy(j,t);+ F0 P" d" b! P6 h
putchar(' ');
: P9 n9 R! L. N* w" p goto_xy(j,s);
9 D: n4 j' Q2 p! m' P6 N6 m putchar(' ');" M: v: i$ T8 ?7 T( f9 F
delay(10);
7 ?% T. v4 f9 ] W: t9 } }
- x2 J0 F5 D. z% B" V }9 F2 @# c5 e& D" A( V
/******************bottom screen clear(自下清屏)********************/- f/ h4 ^* [3 I. k; t5 |; J- v
/ A/ W4 Y0 B' L1 R& U void dcls(int x1,int x2,int y1,int y2)
1 h* Z p! B* B4 I2 ` {6 | X, E3 g, k& \
int t,s,j,i;% ~. m0 `+ n% q
t=s=(y1+y2)/2;
6 o& z/ d9 W( w& [; S for(j=x2;j>x1;j--)
E( K5 y0 s/ ]. H4 x! g% a for(i=y1;i<y2;i++){
3 }' x8 ~: `3 L) R8 T0 @ goto_xy(j,i);1 d, |+ h% X3 z/ z2 k
putchar(' ');
& p$ }! C. q% L! D; p1 l6 ^ delay(10);
! G6 y0 E8 A v* i( `3 N }
3 n: l9 w1 i/ I6 Q }
- b6 ?. L7 e; u- l$ X1 U( ?8 V /******************设置光标子函数******************/" ?* [: |3 j K3 ~7 e
1 _2 u0 g; S$ l0 @. E9 R" i, ~5 ? void goto_xy(int x,int y)
4 Y9 N7 X/ d: i {7 V/ z! R- Z: F, o( ]& ~+ n
union REGS r;8 \7 r! p# e1 q, ?
r.h.ah=2;6 M* M' W, f) }7 s4 d
r.h.dl=y;
0 [7 q: [0 _3 { r.h.dh=x;, i& r& @' v5 u2 k' b% ~$ T
r.h.bh=0;3 n1 h% ~- k2 E% O- A! H# n& @ W% C
int86(0x10,&r,&r);0 o3 x: H2 c! l5 c2 }& s
}
5 A% g, {9 ]9 i* ?" I4 w( l
- Z$ n2 }5 u6 |& j /**********************在屏幕上打出一连串的a字母用于演示程序******************/
) N- \) n& \( C& A2 F5 R- z' F1 K1 y
+ \! \7 H- Y+ u' ^ void puta(void)
/ h, h9 A M L% k$ x3 y {: F* `6 X# ]$ O) Z, `- y; f5 Q
int i,j;" r6 E- c3 y$ O ~
for(i=0;i<24;i++){) J g( _, W) @
for(j=0;j<79;j++){
" t' b1 _2 U# [ goto_xy(i,j);
% w' w3 ?* r% R2 L5 N printf("a");6 A" ?& W" X* D- b" t
}- [7 `# x2 w1 f' x, t
}% u; W! U( o8 v$ `
} |
|