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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" p: o4 K, K- X' B1 f/ Q& g
1 I3 }2 o; F" x9 T$ Z 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
6 T/ L, R, K! R
8 J* d) U0 P5 C 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 ~4 Y3 s, H: g; W
子函数及演示程序:
, Z B0 o |' b0 F( n1 |$ _$ ? A' n
#include<stdio.h>) J0 A3 ? K" J. V* }% [1 |2 O0 z
#include<dos.h>
; _0 M, Z/ G. t! v" _/ w6 b #include<conio.h># p6 d8 M9 r8 c( G2 ]: b1 a7 {" A& L: Y
- ~% B6 J0 s0 A7 ]& x. O void goto_xy(int x,int y);
5 s, b( H" g+ K+ w0 j void dcls(int x1,int x2,int y1,int y2);
3 C1 ^% g7 g; w0 Q1 o void bcls(int x1,int x2,int y1,int y2);
8 O/ B& S: I+ V& b$ D" ? void kcls(int x1,int x2,int y1,int y2);
% Z# n" X8 g# n! s2 h void recls(int x1,int x2,int y1,int y2);
$ e( S. O8 m: Q+ I void zcls(int x1,int x2,int y1,int y2);" n* U2 w* h L7 b! S9 b
void puta(void);) ?7 `5 F* R! k9 |
3 G& z3 y! t5 @! l1 ]
: O$ X- d+ M( o
/*--------------演示程序---------------------*/
; ~2 o9 ?. H1 `1 O main()! G3 f6 D: g6 ]* c/ Q# m3 r
{: d+ J2 f! T, X! p) Z" P$ Q) Y
puta();
) c9 r. h0 P" ~# r getch();8 ^: @. [5 u3 N9 ?
dcls(0,4,0,79);3 J1 B* J; _- q6 Z. n
getch();
6 ^, F! T9 }6 J, K% J7 y7 n* O6 E puta();4 E, @) H! M- q
getch();1 P3 \+ M* G4 K' y- @- K% J" }
bcls(0,25,0,79);+ H9 l+ w, C3 @9 C- r" [: ?% U2 g
getch();* a, a: {& N5 l0 b1 \2 D; t- d
puta();/ o* Y- f4 s o/ E
getch();1 M9 y5 l1 N K& R
zcls(0,25,0,79);- ~/ T; d; c" K2 K/ p$ |
getch();9 r, g( d0 s! g- b3 w3 T
}
x+ N+ d* m( \+ j0 _$ d; _ /*********center clear screen(中心清屏)***********/
/ o3 O& j3 Q. I! z void zcls(int x1,int x2,int y1,int y2)
1 \. f) b; _! F/ T1 a3 N8 c! X7 K {! ?' m5 o' f+ W5 `
int x00,y00,x0,y0,i,d;
: N. d) j" E- C" U( q3 [( n if((y2-y1)>(x2-x1)){
8 ~+ a% N6 ?7 u o5 l d=(x2-x1)/2;3 y9 a$ F- r5 Z" z
x0=(x1+x2)/2;
$ R5 X3 c/ @0 X% k' b* Z3 E! l y0=y1+d;; X C$ m4 m9 G4 }) \6 t/ B( E- ]
y00=y2-d;5 F$ I$ {# z( u) T) f; G; F) N2 ?
for(i=0;i<(d+1);i++)! Y( j/ |& F, C {2 V1 t
recls((x0-i),(x00+i),(y0-i),(y00+i));" x. G A, Y/ z8 A3 }- X# M1 a
delay(10);
6 D/ a& x& ` ?7 J$ V }) D! v9 Q5 |1 T h
else{
9 x5 w+ j2 F, o$ \6 q% N2 n. a: l/ ]; ~ d=(y2-y1)/2;( w' y, N' x3 f9 H( o* {" \
y0=(y1+y2)/2;
) x- k* W- q1 p* @ x0=x1+d;) p! a# J6 u( l8 l4 m- K5 p2 G% [+ q
x00=x2-d;
( ^! q- v7 i8 b: N9 ~9 g4 J! Z3 z( A for(i=0;i<d+1;i++)' t" P9 y8 \0 N
recls(x0-i,x00+i,y0-i,y00+i);
; f; G1 e w. o0 T0 g delay(10);) S, L8 r- f% S( T3 N& O
}# i( D8 m, C! u2 s" I3 l
}
2 k. n1 b8 @" }% i- ]% |
, L. j7 g& L% C8 Y8 @ P. R /************* clear rectangle side(矩形边清屏)***********************/
. Z# A1 h- O* H
4 k3 P" h0 ?' ^ void recls(int x1,int x2,int y1,int y2)
7 q9 t G: ^! E1 f$ a# d {
6 W( f3 x1 Y7 V int i,j;
. v0 M) V' t9 O. l for(i=y1;i<y2;i++){
0 G& k- L; ~7 {- h9 l B goto_xy(x1,i);+ _2 s. F! d, D- [ S
putchar(' ');5 W3 s# l# n7 L, W* l0 {7 W+ }
goto_xy(x2,i);" y# ?6 i/ R( Q) p; S
putchar(' ');
, E& l4 M0 N1 e# v; d1 `- R delay(10);) s. p# E" {- _0 [5 W
}
$ e* D; g8 z0 T2 P' O& { j* r9 ? for(j=x1;j<x2;j++){1 e1 P/ u. Z; ?/ I V1 m* ]
goto_xy(i,y1);
! P: t& K) G( s' f* T' n2 c6 a putchar(' ');
. H, h0 {' _% v& } goto_xy(j,y2);
9 B( c+ l* S h F putchar(' ');
0 s+ q$ }9 ?" L7 f2 B( [ delay(10);7 `- C$ E: a' m2 Q8 e
}, l& D2 l/ b: q% V- Z0 E
}
$ U" [# t" M$ F /******************open screen clear(开屏式清屏)*********************// ]5 n# Z$ \( j5 k/ K8 y% T; [7 S
8 S+ z3 Y9 s/ f } void kcls(int x1,int x2,int y1,int y2)+ {% ~) ?3 |# Z6 k
{
/ M' |! D7 }! \' H int t,s,i,j; k! l E/ `9 r: b
t=s=(y1+y2)/2;
4 E' k; I& ?2 x8 `0 w for(;t<=y2;t++,s--)3 d$ |* A; S* b) P
for(j=x1;j<x2;j++){6 ~; X4 @7 H3 }9 Z. ^* S
goto_xy(j,t);' m' f0 ~- Z8 c0 S; \- N4 y
putchar(' ');5 U) z4 p1 A- t
goto_xy(j,s);) b" y- Z. ^% c: d5 N5 X
putchar(' ');
& G8 A+ _5 A* o" p D k. o delay(10);
2 ?2 ~8 r4 B& t9 N( A }
: `1 ?- g5 F; c# s, t }) P/ B0 L/ ~6 Y& Z: \
/*****************close screen clear*****闭幕式清屏*******************/0 U& d2 e+ j3 a3 Z3 W ?; p# l& d( ?) [
3 {0 C) s3 O( A( I4 M* S void bcls(int x1,int x2,int y1,int y2)
|* m% A+ b) @' W: W {
t2 P9 Z8 L# y$ u: b J int t,s,j;+ p- A3 N, O0 Y; [( [
t=y1;' ?# W& I6 B1 Z
s=y2;
$ \: H( q( u( S for(t=y1;t<(y1+y2)/2;t++,s--)/ J$ h8 g/ b7 v
for(j=x1;j<x2;j++){
7 Y. ]( ^% @: ~5 E# C& K goto_xy(j,t);/ E( M. W3 P9 j+ G) E! ?6 V0 @
putchar(' ');8 ^1 A( w5 U! m
goto_xy(j,s);
9 t4 z" S4 A4 `! `6 ? putchar(' ');: R5 G! k2 O1 l
delay(10);
( ?. Y1 K5 k6 T6 A+ C0 h# Q }
I2 K/ N: C8 C/ s }
- Z8 S6 k0 j; p! I. f% X /******************bottom screen clear(自下清屏)********************/$ K* D9 y+ U5 P
% y l: E, V- i3 @! P/ q, C
void dcls(int x1,int x2,int y1,int y2)
5 ^' ~% }1 s! U) `3 f, V" C {2 }9 `2 c/ Y+ v. h1 r
int t,s,j,i;$ D+ X+ [$ ]; | `! P8 O# F
t=s=(y1+y2)/2;, t* {7 x5 G& _2 z2 _ m
for(j=x2;j>x1;j--)
9 K1 ]% ]* R1 d ^ for(i=y1;i<y2;i++){! x& o# h* _) @/ D# P( i# R, v
goto_xy(j,i);5 v' x* w5 ]8 I" V; |
putchar(' ');
7 |: c# e" b! P3 u3 U delay(10);
; z3 S# x- {5 y( K8 E }$ ]! E) m8 v0 u# F! T6 \" w
}
9 u$ w- v; l! J! L& n /******************设置光标子函数******************/
7 M5 w# l5 `5 M% s2 s+ `7 z0 z- \5 D9 X# T
void goto_xy(int x,int y)4 r/ |3 g% N- T$ | I
{
! S, Q% G* b+ @ union REGS r;$ H, t. O2 A5 B0 ~+ _
r.h.ah=2;5 R9 u* C$ G5 N/ ]% B
r.h.dl=y;' U# E# c# W4 z& \& `
r.h.dh=x;
* R, v, H" | R r.h.bh=0;
1 p3 A" y' H7 E: a# A int86(0x10,&r,&r);
- x6 H9 z5 D4 U' a0 w }
" G; ]/ s8 c, c/ i6 i: ~# S0 p% j; H) ~1 _/ Q! r0 t9 {2 l" ~
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
0 q5 V B0 ~0 R4 j3 I1 Y: l) n0 p
void puta(void)6 d) [* R0 v0 E# u: X
{
3 y! ]/ X! ^, [& z9 l2 F# Z- O int i,j;0 D) Q/ ]4 y+ u5 b; D' `& g: d8 N
for(i=0;i<24;i++){) m f- I5 q8 @# t8 `
for(j=0;j<79;j++){
0 C1 \+ S1 k0 n goto_xy(i,j);
" a4 c* d" q4 | p) W# s" h6 B printf("a");
( i' S+ Q2 d; G9 ^ }
( O! [5 B$ J$ D, \6 N6 a/ [ }
" m0 q/ V n8 K* N, b: ?" S } |
|