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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ J b3 r$ D* V- v; H8 l8 C6 g$ D% ?
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里4 s# g0 l! f) ^" S) R7 n
# j9 r. T% R" }3 ]9 z" E' T 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" p1 q. Z# y! b, Q% l N7 z 子函数及演示程序:
. c: z$ c# ~4 n% F& y1 m1 B1 y0 @ B( r; ]. I( u
#include<stdio.h>
1 r0 L e* h' J #include<dos.h>
8 V: K% N4 I7 c, i, }! |4 S% u$ g& y$ n* F #include<conio.h>. I3 q& t7 Q6 h, C! G& {0 f' x
/ [% ~& U- c- J$ R l
void goto_xy(int x,int y);! R: Y/ r9 B* Q l: A# G
void dcls(int x1,int x2,int y1,int y2);
0 ^) Z7 [1 o0 H1 n2 w. K7 n3 k void bcls(int x1,int x2,int y1,int y2);3 ^$ X/ h9 n5 l$ y
void kcls(int x1,int x2,int y1,int y2);1 _' {! c. o ^" ~$ k
void recls(int x1,int x2,int y1,int y2);
n0 ~* n, N2 U9 [7 }& k7 m void zcls(int x1,int x2,int y1,int y2);- S9 k% z- c) y8 ~2 J- ?
void puta(void);- J/ ~* y& B* b" l! y+ Z' T9 R& H% l' v
; \4 H* e& j& z
: f' @: v, |: X2 m% t" I9 e* V O /*--------------演示程序---------------------*/
6 q1 n6 E6 F u7 ^ main()8 K; ? ?1 ]6 V$ r% x, k5 w
{
% K X! a* a# n# t! F puta();, @+ I M- g3 U% L: h6 U; D2 M
getch();0 m0 N8 n8 ]* ^6 a
dcls(0,4,0,79);
8 W" q/ J$ U. q B. m9 @ getch();9 l i. L& i: H B6 S; P: w& _
puta();8 s. F% i$ `' h: H# Q. C
getch();
7 G- {( L. N. x" k) ?4 z ] bcls(0,25,0,79);& g3 B3 ]( d, c
getch();+ t" d1 h$ \/ u8 n! x: w Z) t
puta();' L7 T1 ~# f' l/ i& q8 u$ \
getch();2 j" y% `# n7 @2 W
zcls(0,25,0,79);
( {# J; @0 \/ ]; I0 L. _ getch();
( ^3 @ m6 J' D% {; N }/ d% y2 D; V2 U, _
/*********center clear screen(中心清屏)***********/( n/ J7 e/ s% a; ]% u! V/ U1 \
void zcls(int x1,int x2,int y1,int y2)5 @+ T3 }: Z X. y0 w# L
{
6 G2 h% D, d7 W0 k. l. i int x00,y00,x0,y0,i,d;2 h H6 A2 e9 Z( G
if((y2-y1)>(x2-x1)){
; U0 ^# o+ A7 V8 J! { d=(x2-x1)/2;
0 }0 l; W$ o' C1 s x0=(x1+x2)/2;) L2 n! k8 v% N2 {8 `
y0=y1+d;
% r6 o8 a: T6 B; u y00=y2-d;
7 d5 z& P4 ?( `: M' V( f' v for(i=0;i<(d+1);i++)
1 c+ K; Q% C. K1 A recls((x0-i),(x00+i),(y0-i),(y00+i));% v) R0 `5 W; y. l% l. }6 w" z2 {' M
delay(10);
o! J% V+ [2 d y6 E7 e }
6 P+ p p4 {! k) b+ b else{. I! [) ^) r% L' h, _+ w2 y; A
d=(y2-y1)/2;, c5 N6 L6 W7 i |
y0=(y1+y2)/2;
1 j; `4 f5 @% _* P3 [ x0=x1+d;
' D* l) F H) m I" l x00=x2-d;
( Z r+ N a' Y4 j for(i=0;i<d+1;i++)/ R/ U2 c+ d: P2 C* o, q
recls(x0-i,x00+i,y0-i,y00+i);
$ G; ^, g" F( ]1 Y delay(10);5 u4 y5 Q- \' K% p/ z
}
1 K. z8 N! c! ]7 d4 {8 |. h }
. r9 x; D" s; ]1 {
( S- v8 D( }; N; I+ ~ /************* clear rectangle side(矩形边清屏)***********************/
0 ~2 e3 K/ W3 O3 w+ _* W
( W) ^) t5 p; x0 _- W9 D1 [5 D# w void recls(int x1,int x2,int y1,int y2)1 |. T4 O9 `' r5 c
{4 n) y$ I0 Q" b4 `8 p! Y
int i,j;
( ]& k4 y1 H& G, h# N2 k for(i=y1;i<y2;i++){; a( S" g" R G5 g
goto_xy(x1,i);
% @& i/ A, y5 p' ?: F8 O6 w/ l putchar(' ');
! L8 s; a8 N# L7 m+ \2 T1 K6 Y goto_xy(x2,i);
' t( ?! F3 X4 y4 r putchar(' ');
+ B3 q) ? G8 A4 B delay(10);' t1 | ], c6 C- X& r7 `3 z" R
}) `# f! d$ @0 x0 j
for(j=x1;j<x2;j++){
8 K' J$ B5 b0 z7 R% T. ? E. U$ q _ goto_xy(i,y1);6 ?1 @7 D# G) H3 l7 b. O& P
putchar(' ');
% O/ I6 \5 m1 K6 c, N6 ^' F goto_xy(j,y2);
# z6 N- d! y2 d4 N putchar(' ');
4 \* A$ Z; F( W; v$ l" _, K delay(10);
7 y. K4 O* Y, Z1 D* v+ l9 q4 m% W" [ }
; z/ b2 N: g6 p: I3 y9 R/ g }
7 j# ?0 p' ~& |! ^0 T /******************open screen clear(开屏式清屏)*********************/! ^+ B# g4 r; X2 D5 e1 r
! u( V( A4 R8 S5 I+ | void kcls(int x1,int x2,int y1,int y2)1 I( y9 E, n+ O& \- e; S0 _
{
1 n5 C+ c; L9 x9 R! p int t,s,i,j;! y' U/ u1 G, u* J* `
t=s=(y1+y2)/2;
$ _0 m7 c* P1 U/ F: x# U% ^ for(;t<=y2;t++,s--)5 p8 S8 z5 I1 L5 Q( l/ ]- a) B
for(j=x1;j<x2;j++){
3 T- X/ B! t4 ~: ` Z& g goto_xy(j,t);
% y. w" v/ U4 o/ I0 j$ N putchar(' ');
* e8 X# g) R$ d goto_xy(j,s);
) l+ Y+ r2 W; P3 J( I+ q3 H; I putchar(' ');8 |: a8 {3 o: d- O
delay(10);
0 d. W, c) o/ m* n7 {& h4 F }
1 y6 V/ r$ a' _; `$ q }1 |: H) I+ j8 T3 G
/*****************close screen clear*****闭幕式清屏*******************/
; m5 K+ b% ~. H) t; p- W J9 P' }6 q K$ Z
void bcls(int x1,int x2,int y1,int y2)
& @4 }- V0 u/ S {
8 p1 C. U- J, _# Z7 Y8 Z8 U L int t,s,j;
; m x2 t6 q7 v7 A' M; V t=y1;
' N W6 g; Q( a5 p( D s=y2;% `5 {% A) ^; H4 m$ x+ b& _
for(t=y1;t<(y1+y2)/2;t++,s--)
! ]7 g8 e; T# q# J4 t) r for(j=x1;j<x2;j++){- p) {3 f8 E: Q
goto_xy(j,t);
. V. I8 L+ D6 f putchar(' ');" w, d' z, Q; r4 {! C+ b; f2 w: ~3 e
goto_xy(j,s);* @( y% e& ?% X* J3 }7 `4 i4 e
putchar(' ');
0 |" [# z: [( M( q1 t( _! o2 U! I delay(10);
. h3 E$ G! D% d5 ` }$ `+ i1 R& l P& x, {
}
& i, w; h/ k; x: X! n /******************bottom screen clear(自下清屏)********************/7 ]- l( U% z: F; Y0 g1 M
3 d4 R' W- ]4 e! E* Z( u
void dcls(int x1,int x2,int y1,int y2); p2 R i+ n7 t/ b- w. i2 d
{0 u- p. x- H, Z$ q7 o
int t,s,j,i;: o; X( Q! A* }& {
t=s=(y1+y2)/2;
" ^# @! @3 ]' C for(j=x2;j>x1;j--)
6 O; G/ q! {2 T4 w4 }: G% h' e' I for(i=y1;i<y2;i++){
l% R6 R. g! [" G! \. F# p0 z goto_xy(j,i); a: R- ~5 \/ ?; m% V- T1 b' l! [
putchar(' ');
* ?2 P2 h0 C. C! p( V delay(10);
. J6 |0 e, j2 K/ P' J: q# E }$ ]6 Q" f- L3 ^
}
$ k1 p, }. f Y& \0 r- Z) c# W /******************设置光标子函数******************/
3 A% n: R4 e! B4 b* c9 @& m% m- B4 r3 u- D, o( H; G f
void goto_xy(int x,int y)
% f+ d4 ?$ L l: I0 s. f; U7 f! r {% O z# o- C% ?+ C! s
union REGS r;
* t- J% L8 i0 \* S5 I r.h.ah=2;
5 D/ z6 s& M+ d r.h.dl=y;7 n; ~: D4 \* o; W" D! D7 g9 F, Z
r.h.dh=x;$ ? ^/ w8 V# b5 Z# ?7 x' M
r.h.bh=0;
6 C# S0 l& u9 K5 \2 o int86(0x10,&r,&r);
8 P: |( w9 `" B; t% \& z* T }3 |; M$ g$ {2 I- v7 S+ y) J+ [
# X' F5 J. z8 z8 j+ t+ Y
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
; N. g8 I' X2 J9 H6 \! X c6 ?4 T" T2 y* w$ u
void puta(void) n/ \9 X* e/ T; j6 Y! @4 f
{
1 \1 j, p+ c5 r w6 { int i,j;
7 K& F+ r- ~) s0 m for(i=0;i<24;i++){0 J; D; k$ Y% ]6 V
for(j=0;j<79;j++){# V8 a2 H, H, H, W7 T
goto_xy(i,j);, I! Q' g$ \5 P! [, s
printf("a");
' M( a2 e( o4 V y4 M. X6 H$ V }. r5 ]' B8 y" B9 c' E1 A
}. g& t7 `# g+ O- V3 ]2 `" o
} |
|