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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; z( w% m8 ]% |, z& F6 `2 x/ {0 l- v- c
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, W' x& o( p# ]% P7 F0 n( |. ?7 X
6 D" i& G0 o; R, D) K 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: f, Q2 u* l; l 子函数及演示程序:4 F( `/ }5 T: P! B2 i
. `1 G. j3 {1 o- e/ D& x9 ^
#include<stdio.h>
& o y8 o- i! W8 U) j #include<dos.h>( i- ^% A, Q E+ y% M$ _5 w
#include<conio.h>! Z7 \* n+ P/ Q9 w
$ c; I6 F0 H* ^4 G
void goto_xy(int x,int y);1 V/ |8 b0 s! s1 i# s9 E
void dcls(int x1,int x2,int y1,int y2);
" m. l, Q q/ e9 A. w void bcls(int x1,int x2,int y1,int y2);" B$ x+ S' P5 v2 _" z) F, l. S
void kcls(int x1,int x2,int y1,int y2);
+ F+ O) E: r' q( Y3 { void recls(int x1,int x2,int y1,int y2); O: y! b" b# ~1 K% i; I
void zcls(int x1,int x2,int y1,int y2);
0 w( |6 R( ~3 Y! o% K2 l. j: m+ c void puta(void);
% v% [; V3 `1 \; P# y
# L! V+ Q' f3 Z, B9 [8 L# z) E3 U' u( R; _9 K: U. q+ e
/*--------------演示程序---------------------*/
3 G) f0 M2 t- B. P main()9 n, ~1 l& V3 X3 o- C' e4 m
{4 b) M. ^8 T7 W+ W1 H
puta(); K# j$ `4 m' o
getch();* M; m# t, Y1 G7 x
dcls(0,4,0,79);/ ` A1 ^& C1 a r4 Y
getch();) c; ]/ T4 h. `; o2 h- ]
puta();
1 ]2 ]" j4 W6 {* _1 a5 a% e; @% q+ x getch();. ^: h* z: B: K; {% r/ P
bcls(0,25,0,79);( P2 o! l, d/ w! P" }6 N3 X: @
getch();1 \' Y$ d7 c: }% T, i& q( |7 B
puta();( W/ d% b$ F5 D; Z
getch();
, k4 S3 E: s- G& w zcls(0,25,0,79);
9 w/ G4 n' P- ~% l' W getch();! H1 q- k/ Q" E+ `
}! i5 N) W1 M, d5 D2 A
/*********center clear screen(中心清屏)***********/
L+ s7 C8 @" @$ U* s% Z void zcls(int x1,int x2,int y1,int y2) @0 b+ r1 q9 S7 b
{. k* O. t- o' |" x- y+ @$ h, K
int x00,y00,x0,y0,i,d;
- S, c8 C; v$ y: Z: ^3 ? if((y2-y1)>(x2-x1)){9 ~0 H4 s3 H8 _5 b& V- V
d=(x2-x1)/2;# X O2 t4 y2 l2 m7 ~5 E/ A
x0=(x1+x2)/2;
5 R) ]0 i3 O" F+ V4 P y0=y1+d;1 u+ P' G! z. I' `- h
y00=y2-d;. n/ ]" l( z0 _, s$ j2 S: ~& b
for(i=0;i<(d+1);i++)
3 W, f3 |. r- B* k, r2 ~ recls((x0-i),(x00+i),(y0-i),(y00+i));
, y% T4 n. R$ ^5 A) k, I4 \7 _ delay(10);0 ~2 ^% n( O, q( z+ p9 F
}
4 O0 f0 m: J0 z else{6 l2 Q O; Q+ P1 @4 ^; N
d=(y2-y1)/2;! A% ^& E7 ]1 U- D9 B8 w3 }4 O
y0=(y1+y2)/2;
( z$ k. |/ w$ ?# d7 A; }* B6 c# v; n: v x0=x1+d;
$ Q% r' J! W* E7 _6 \ x00=x2-d;
6 R F" g5 x- Q! w m% W for(i=0;i<d+1;i++)
& O4 q5 t. c/ r$ y+ G recls(x0-i,x00+i,y0-i,y00+i);
4 G" k# N+ g. \, A9 c+ O5 t0 c; V delay(10);% K- Z& e" c: R% e: \3 E
}* \, r% a. O; E8 I; o) i! g
}0 ~7 M5 A S- {5 S
) f) r! N9 p' _ /************* clear rectangle side(矩形边清屏)***********************/" t! b4 Q! _. C; [- s
* `1 [5 Z5 l$ X! r) _ void recls(int x1,int x2,int y1,int y2)6 ^: F! u; ]1 y, C" s! @
{
* M/ }) T$ |8 e, o5 m int i,j;
$ T* n% N$ p. m! \1 e$ g for(i=y1;i<y2;i++){9 b! S* \: ^4 u4 y0 J( R3 y w
goto_xy(x1,i);( k+ q8 I$ M# E8 s. |2 L
putchar(' ');
9 b! O" P9 k! ^ goto_xy(x2,i);
2 ?7 H+ E% v7 h7 d* ]3 | P& n8 v* e putchar(' ');+ j7 C k5 V# s. ^6 @ S6 x' P7 F2 u
delay(10);- |2 B2 X9 Q% W5 [( ?. ]+ Q, I
}
8 _8 J7 Y0 C- j' Y; y for(j=x1;j<x2;j++){
1 B g1 `( U# M7 b! r goto_xy(i,y1);5 B7 O5 {( ~ f+ i# [4 U4 B
putchar(' ');) F: _ K& u+ p0 p8 H! t
goto_xy(j,y2);
V. e1 ~, j# K6 o) n6 j/ f putchar(' ');0 i- d8 R8 Y+ I7 @6 {, F9 |0 A
delay(10);% @$ c3 P& C1 C+ ^; ^
}
: Z/ l# b- x6 b$ p }+ Z9 r4 a- b/ e3 m. X
/******************open screen clear(开屏式清屏)*********************/3 d, @& _1 \/ v# Z, X0 k2 b3 R T
2 v% I) C2 H$ {9 S
void kcls(int x1,int x2,int y1,int y2)
! a: {4 K8 a3 d/ ] {
, j- Q/ D$ m* B0 L: d! o% i8 @ int t,s,i,j;) y1 t& y- |* M- c! @ @
t=s=(y1+y2)/2;4 @5 p/ ^9 x2 {) P6 c
for(;t<=y2;t++,s--)
7 D7 v3 e, C: l- \ for(j=x1;j<x2;j++){3 R# I) w t( Z
goto_xy(j,t);: B+ W2 r' ]2 `6 P1 k0 E( v
putchar(' ');
! a2 D' F" s( u$ b* G4 @ goto_xy(j,s);) O" q# R; a0 G
putchar(' ');5 O' x+ y4 _- x# v
delay(10);" |6 M' x. B( {+ Z0 v
}, Z. t5 v+ r/ u# D8 a! @* X7 z7 \5 k
}
p @1 h5 q; \$ f5 D' @3 Z+ ? /*****************close screen clear*****闭幕式清屏*******************/" B( L5 o; j( h7 d: \7 Y
, v# C" N5 d4 ?- v6 Y7 [7 F2 ~$ E
void bcls(int x1,int x2,int y1,int y2)3 \5 G E9 j4 I4 `( `
{, V+ K" n4 d0 _0 @2 L/ U
int t,s,j;
! Z* q% X7 J, Z; T% g. r t=y1;4 D" ?* O) T7 d" r" g
s=y2;" e* N) b% l* `1 G/ q
for(t=y1;t<(y1+y2)/2;t++,s--)
) Y# k& u6 @6 L# x N# J/ j for(j=x1;j<x2;j++){
' _) o+ r6 U5 i5 A3 r goto_xy(j,t);, d- c3 N' u6 M+ q# \
putchar(' ');
# L7 _2 g2 W& r. w goto_xy(j,s);& N9 j) X1 S$ `: u' A
putchar(' ');" E5 S4 ~' f. [$ g; v6 F0 e$ [3 O3 Y! R
delay(10);
' o b2 C. j/ y+ J( l }
$ [8 J6 S# T2 L. Y3 n* q }; v( w* a; T! W$ x- t
/******************bottom screen clear(自下清屏)********************/
& q. V6 n. R- u/ y" _! O$ n4 k% V8 b, I3 F/ X3 r
void dcls(int x1,int x2,int y1,int y2)
+ v. k2 Q' |7 t {1 ~: h4 i7 i8 A, V$ n3 s, w: ]
int t,s,j,i;5 K9 ]" ]$ z8 s* v
t=s=(y1+y2)/2;
0 e, ~! v" v( l) @/ P/ K for(j=x2;j>x1;j--)
( y! b7 y( B) U8 \. Q for(i=y1;i<y2;i++){
! B2 S5 y) t. O goto_xy(j,i);9 M: S# k- e5 e: J! z
putchar(' ');
( e# ]4 @7 x H {0 U" m delay(10);+ p) n% x$ _- r* q
}
( M9 F! X2 E/ i& c2 u- Y T }1 ?: _6 b2 @; G+ U+ v) k7 m2 d
/******************设置光标子函数******************/
) i( _9 a' l% @2 U5 e6 j) n: B! x: [# P! U8 W) X1 x$ c
void goto_xy(int x,int y); L( S1 D/ C5 W" c2 o; o+ g! J5 O
{1 s" o4 Z7 {& p3 u. s1 F% s
union REGS r;) `0 G+ Q' @- w# K1 ~: P v
r.h.ah=2;3 T' a: ^5 |% l% c
r.h.dl=y;
0 _! b7 Z) M0 G9 T% ]0 g! N, ^ r.h.dh=x;
% u% e9 S# d/ \0 ^, Q r.h.bh=0;. ~" s; w: y0 _/ `
int86(0x10,&r,&r);9 m) k/ |( Q; K; B+ M" ^' s
}5 I( D$ o* ]8 T+ O0 Y
( w8 u1 r: Q8 i8 R
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
- c! [$ |1 }2 L* _+ {2 }4 A0 R k
* h2 W1 E0 b/ l* K q( s void puta(void)
, f. B. l% h- U/ y& s {* z9 o, B; p/ f1 r. H! n
int i,j;
' F9 ?' W e z' D8 o' y c+ K" t for(i=0;i<24;i++){
) O8 T/ W3 g1 k; @+ w0 s' e for(j=0;j<79;j++){9 H6 ?/ U; F# R: s+ t$ j
goto_xy(i,j);
9 [: r. v, s5 \2 o) O printf("a");
7 l/ V% i: c/ n( [ } ^' O5 Q) Z' H$ O# N
}
5 d1 ^7 F) ]7 a: S, |* v } |
|