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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 V; S1 z- V9 ~
2 _$ o3 k. t4 S; R 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
- a6 c, |6 [7 I
8 S8 D) t" @2 e- [! d1 q 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 Y+ A+ h7 n8 [9 f J! r8 @
子函数及演示程序:( U! V3 S' D @/ A; C; e
' a3 V' |7 v$ v. t$ J2 ~0 q
#include<stdio.h>
! D/ K% V) r6 L( K9 ~2 y& w5 ^( q1 h #include<dos.h>
3 D% I+ ]" T2 w #include<conio.h>
. b: G4 Y3 R+ Y X
' {' f3 g( R) b5 Y l void goto_xy(int x,int y);
& W( J% r4 d) ~! f void dcls(int x1,int x2,int y1,int y2);
4 r( N, y, t, o# o$ c( r3 c void bcls(int x1,int x2,int y1,int y2);
2 M: b0 Q, D6 F6 ? ^6 O; ~ void kcls(int x1,int x2,int y1,int y2);
0 N* ]! G( s! A/ F) L9 [6 } void recls(int x1,int x2,int y1,int y2);
4 F' f3 o8 I7 l7 \. o8 i, R3 j void zcls(int x1,int x2,int y1,int y2);
# g+ d7 [' e- j d0 P' A& l void puta(void);! S5 o8 B( h4 y1 N" `1 y i9 }2 B4 k
8 _: I' B) T2 G3 |
E# y( i4 E4 R0 J3 ?4 ? /*--------------演示程序---------------------*/
& B$ X7 {, ]* _# M: I! V main()
! K o% L" r( ~9 o {
( m* D% R5 G' r/ Z* | puta();
' |& ]9 Q$ E1 B7 ]0 Z. ? getch();4 C* O! [- h/ ~; r# M
dcls(0,4,0,79);
' `% c2 i( `$ o: Z, O, n# a5 D! ^4 j( { getch();7 n% y6 f1 t( `
puta();
7 _* [2 K, f, o& F2 L3 ~2 Q$ V) A getch();8 k+ p1 V6 D% s+ a/ z
bcls(0,25,0,79);) Y! k- f q8 U% s% F, ?. Z
getch();0 N: I, U( b8 g6 B" s+ |8 r9 L
puta();
; M( U) u( m0 b7 K" ` getch();4 w2 N! j& G$ I% B
zcls(0,25,0,79);% u! @6 ^' K$ o: J, k
getch();
0 i- o7 D) X0 z1 A, p9 @ } e* A: Z1 g0 d4 Z% h; P. V
/*********center clear screen(中心清屏)***********/
' O8 b& }' _9 O- Q* {, y6 b void zcls(int x1,int x2,int y1,int y2)
0 ]! ]/ @" F1 O1 ]& D {
5 |. g3 _9 ~- z( |: C# q! s int x00,y00,x0,y0,i,d;
. P0 `' ~3 m3 W4 j* D if((y2-y1)>(x2-x1)){
: j( l v! v- m' y: e3 p, F7 O' y d=(x2-x1)/2;
% G" I% }1 S7 ?3 Z4 x x0=(x1+x2)/2;+ }5 E9 y$ p+ J" d/ A
y0=y1+d;6 u# K7 n2 W: T4 y
y00=y2-d;7 ]* y/ F' \, a0 v5 G& }- H
for(i=0;i<(d+1);i++)
4 c. m6 u; k% g& F$ ? recls((x0-i),(x00+i),(y0-i),(y00+i));6 P; \+ X) T. b
delay(10);
9 Y: O: ]' F, g* U' Q6 B9 |3 K2 C. p }; s# @# R8 n0 u, {5 P) A9 Y( y
else{
( v7 W9 a8 [/ H* X d=(y2-y1)/2;
( J. U- i: L" D! o1 q y0=(y1+y2)/2;4 {" F/ }9 Y, D$ D# y4 N0 [
x0=x1+d;9 Q, T s. Z/ E' o' T
x00=x2-d;/ {5 p- w. K/ @8 m. C
for(i=0;i<d+1;i++)- R7 y4 z* {4 E9 s: t
recls(x0-i,x00+i,y0-i,y00+i);
1 P& M! O% Y% L delay(10);8 ^: [7 Z* K! w4 A
}
- Q( x" r' A) f& R& F# d/ S/ y# B }. Q* `- r' U9 J! |
+ w4 o9 o& J: Y /************* clear rectangle side(矩形边清屏)***********************/- `5 B$ b8 L5 E1 \; C8 i& Y/ l. d
, L- I- N! A: _3 r" u void recls(int x1,int x2,int y1,int y2); n( r C- x7 g4 R. w2 \
{4 d2 N; b$ ^3 f8 u) u7 k/ }
int i,j;
8 u, W4 P' b2 @$ @" M7 p for(i=y1;i<y2;i++){
. O3 @* B1 A% b! _7 H: y) x6 Q goto_xy(x1,i);
6 b+ l8 `! w! y Q& M/ h6 \ putchar(' ');
+ i. Z2 u ~: Z3 H goto_xy(x2,i);0 |1 j3 m1 I, G3 c: Q
putchar(' '); J! K. m7 m; i; h" \
delay(10);
, ^$ I8 N/ j7 x0 Y, | }% K9 ^0 _+ U/ @, N+ t0 {
for(j=x1;j<x2;j++){
! E; ]$ W; }% \2 h goto_xy(i,y1);/ R) A9 o g' @7 g: M6 V* f5 ^
putchar(' ');4 Z, u0 U; M- r
goto_xy(j,y2);
5 H" S: M% c: D" }3 _4 D putchar(' ');, [: r& [. T8 t p
delay(10);- @! [4 z7 o+ k' X
}7 |! \9 I T7 k) `2 L! U0 I
}: I: J$ r- g* V2 ^. \6 E% w
/******************open screen clear(开屏式清屏)*********************/- H- l9 i% M( n- r
9 V T% u" d) Z$ ^, P
void kcls(int x1,int x2,int y1,int y2)
: P2 v( Y& b9 ` {
|( \2 S; ~* I0 I" M( K int t,s,i,j;- w& Z2 g) _9 H
t=s=(y1+y2)/2;
5 R% a% C% K# D! b; x for(;t<=y2;t++,s--)
, L: ?$ ^ x+ m( A2 v for(j=x1;j<x2;j++){" {' M0 h/ S d; [; f
goto_xy(j,t);5 Y8 k. E& t4 i) D0 s4 W- _" z9 H
putchar(' ');
# m( M/ F/ a' J$ R( D! U. B8 m% ? goto_xy(j,s);
A# o# [4 _9 F+ C5 z" \% N. l putchar(' ');9 `" P% e% O- {
delay(10);
5 b w5 k0 t" ~3 f }
9 K; d. p' w( }- q }8 ~# r8 I2 k6 l' h* y% E
/*****************close screen clear*****闭幕式清屏*******************/
. e- ^/ @ i$ U" p5 Q \* y( {) Y5 P
void bcls(int x1,int x2,int y1,int y2)* q) r% _: R( j3 Y/ Q3 M/ V o
{
7 r( z* g6 [7 O* _6 n int t,s,j;
u; C6 h7 V5 x7 X) n t=y1;
, Y g u# O8 S9 O5 Y5 n5 N s=y2;, w q: \4 p9 d3 N7 Y+ Z, @
for(t=y1;t<(y1+y2)/2;t++,s--)
- M9 s) w7 I2 h for(j=x1;j<x2;j++){# [" ^8 Q. c* Z% D0 M9 M& O
goto_xy(j,t);+ c: g9 f7 k9 g0 h$ g
putchar(' ');
2 w: E2 t! C( A1 P goto_xy(j,s);3 l8 r$ P+ R/ s4 a( x0 h
putchar(' ');
9 Q, G- ?! m7 `# A8 q! g delay(10);6 j7 b" B: B L: X2 a4 Q. W8 ^
}
* a* J. K4 T9 J9 m }; R8 M; `( _0 O# I/ }5 I: S
/******************bottom screen clear(自下清屏)********************/
" r2 i9 `( b3 @* Y0 C0 O) h/ J+ Q( p. O8 `+ N- n- `: x
void dcls(int x1,int x2,int y1,int y2)
/ K0 j V! d1 ]7 m4 l {
! m% h' ]5 v2 q5 ?) F int t,s,j,i;0 Q" @+ J; r* I9 P, W
t=s=(y1+y2)/2;
# o$ S! S; e s+ v, [4 E1 L5 c$ N for(j=x2;j>x1;j--)' L, `: x7 y5 W7 ~# `
for(i=y1;i<y2;i++){
& x0 h6 C/ Y# T; W& Z! E3 A, [* i% y goto_xy(j,i);7 y s+ X7 O1 U
putchar(' ');
: N7 i6 v% H3 E- K$ x$ H delay(10);* O1 G' c4 {% y( L3 k* r( t. F! B P
}
: k* `: }( B! r6 k2 ^: c }1 s9 G* A7 b' \7 j6 O2 t
/******************设置光标子函数******************/; g* f, ^8 Q0 C/ g3 y, L% j
/ h7 }! \% V% Z$ A; N void goto_xy(int x,int y)
( X" a' J/ T2 ~0 O {
1 }4 c. S1 \, C* n0 [5 ]( n union REGS r;& b% c) r5 i0 E) Q3 V3 m
r.h.ah=2;( Z6 c2 m6 A$ _7 A0 E; j! }4 T
r.h.dl=y;
+ }& B4 h& ]8 M$ [% L+ g r.h.dh=x;( @/ V6 _0 I5 Q
r.h.bh=0;
W5 P5 h+ l3 I, g int86(0x10,&r,&r);; v- x* U" V; j( _
}
5 E$ N f8 }6 f" |! N6 T; G4 ?3 }3 `" J3 X7 u0 Q/ ?6 x: Y, ?5 h
/**********************在屏幕上打出一连串的a字母用于演示程序******************/, t" l- i2 {& w+ U' ]3 i$ U
/ k8 g5 o- F" u! v5 ^3 I! |+ h
void puta(void)
- X$ Z4 q Q9 C7 B1 h( {5 g# ^ {: ?0 x' q' h$ n8 r W
int i,j;( S* V) |% [+ ~! K9 s
for(i=0;i<24;i++){) }- D1 `3 k8 {( b5 H" ~
for(j=0;j<79;j++){
% o. G: ~) f2 H( d+ c1 K goto_xy(i,j);; Z& J! ^- m6 v) w |& Z( H" z
printf("a");0 U- F% V" j) p) ~$ z) C; Y9 ^
}" W7 X0 m2 Z9 u8 d( ?! z) }
}) ?5 p3 g+ u* U6 b! ~8 q
} |
|