标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, [ h; {2 y* n* O
. l0 T: t0 r1 u1 D. N8 e! t @' w& Q& h
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
/ o* `$ Y' Q0 x% X. r% W, R
% L6 Z$ G/ U6 r& I3 u* _5 E
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# D! L. p" h- Q! x y8 N0 a
子函数及演示程序:
, o' S! k4 u' ?
) ?6 H' A d4 r% D) X0 R
#include<stdio.h>
. C4 @# r8 q/ Q* v; X7 o( W u
#include<dos.h>
5 r* l% X7 g; Z/ I+ I! M
#include<conio.h>
4 W& W2 `/ Q2 f% w
4 y: [. m- ?; L
void goto_xy(int x,int y);
) @. [2 I7 G: s' h4 c
void dcls(int x1,int x2,int y1,int y2);
+ O! B* U$ R$ e( n% `0 a
void bcls(int x1,int x2,int y1,int y2);
5 K) c& {" V2 a; {6 O8 _
void kcls(int x1,int x2,int y1,int y2);
5 e6 a' y. _0 i# J4 L9 T
void recls(int x1,int x2,int y1,int y2);
9 ^5 B7 m. m; J( i
void zcls(int x1,int x2,int y1,int y2);
9 |7 f" v* v3 O8 y- u* B
void puta(void);
0 P3 ~: q; }2 H1 b" L: n, R/ b; u( n
7 C! m& h7 M+ e6 k4 n3 m6 G8 y2 R
' T8 d, U8 s; b& X; B
/*--------------演示程序---------------------*/
1 B& D6 G( F1 \) U0 S9 N8 G
main()
. G& ]0 I6 `4 \! I3 _ |! E/ l
{
I8 j. w" f) [) K5 V6 O8 Z
puta();
* L3 U! L% L2 i& u
getch();
5 }7 t. @- P+ E) P+ t; t- e: H) {
dcls(0,4,0,79);
1 H1 S9 d! a8 t2 Q: N7 [# H
getch();
4 a" Q j2 `: I3 G' V( b! {
puta();
* F ]8 W: L) U; \% W) X0 U: T* W: H
getch();
8 I# r% j5 A- P3 I
bcls(0,25,0,79);
+ Z$ o5 ^/ i* t; K: P
getch();
4 U3 O3 S- V" H
puta();
) f P2 D- v N' D2 J& _
getch();
A9 j7 w x+ L; x/ W6 H, R1 S3 y
zcls(0,25,0,79);
7 F& k P5 k' Y$ B2 t+ U
getch();
6 ~6 a t8 p5 J3 m% Y9 ?
}
" M; ~! L$ Z/ y% Y0 N& E. f: |9 j
/*********center clear screen(中心清屏)***********/
0 c. T1 [* g3 K& r5 _; f+ n9 N
void zcls(int x1,int x2,int y1,int y2)
% ?& G, C; T- t; F' v A$ k% B
{
2 J$ Q2 c1 q) |1 L, Q) K4 T
int x00,y00,x0,y0,i,d;
( |8 v& h$ y; C5 U* r" O) ~
if((y2-y1)>(x2-x1)){
3 t% P# M! N3 c( b# G8 N# _
d=(x2-x1)/2;
( }5 P) A- e: [4 W# P8 ]8 Q
x0=(x1+x2)/2;
* e; ^% I; `' R/ h# I
y0=y1+d;
0 O3 p7 Z4 Z- B( ^( L8 g1 o4 \
y00=y2-d;
. e) h v K9 L, j5 a
for(i=0;i<(d+1);i++)
' g2 I0 o5 ^% x, I9 v
recls((x0-i),(x00+i),(y0-i),(y00+i));
) j* o2 B) N( q& Y- G
delay(10);
+ f/ e% U3 Q9 K, b& E
}
7 t8 v! \6 Q. R7 ?. a4 Q/ v
else{
, F# w% ^$ ~& [/ t1 b# H' O
d=(y2-y1)/2;
Z" B K" j# u" F5 A
y0=(y1+y2)/2;
, D9 j) [; U9 ]' F% D3 F
x0=x1+d;
' y& `$ O- @7 r; V9 L' k! r
x00=x2-d;
9 P# X# [7 Z6 U. m3 s
for(i=0;i<d+1;i++)
* {" e# X2 K' A% M: n% W q4 b
recls(x0-i,x00+i,y0-i,y00+i);
' [/ A! q5 i2 ?$ S# `
delay(10);
5 r; O4 g6 j. X8 Y# F/ g
}
8 p# v8 b' M- A& F
}
# {, C4 b: i: M2 o6 d
% ?+ Z: f, K- G( ]. f) V
/************* clear rectangle side(矩形边清屏)***********************/
+ H0 j6 a9 i+ i9 e7 E* e, \8 X
+ }; ~# |6 P# C( D4 P5 A8 J9 Y; d
void recls(int x1,int x2,int y1,int y2)
. P2 [- n9 V7 g: M, Y
{
/ m( _% e8 }$ v, @5 l& N+ J1 f
int i,j;
o' \# \7 W$ E5 ]
for(i=y1;i<y2;i++){
/ c# e" X4 a: l( b
goto_xy(x1,i);
: ~. }! P( k8 q. Z0 h
putchar(' ');
# P8 w2 h# i' C" U+ J5 |0 L
goto_xy(x2,i);
3 z" i0 Y4 p6 ?( s) Q
putchar(' ');
) d+ Z" b# b7 ~# t. G/ K
delay(10);
. @$ D5 L5 ~2 \ I5 U
}
' P. V) v5 C% s7 L$ l
for(j=x1;j<x2;j++){
# [( |- N0 o4 @0 H# v! O: F
goto_xy(i,y1);
' q; r: r" m! i0 F8 w
putchar(' ');
* |# u# ^3 \( X
goto_xy(j,y2);
# C9 e' M' C* D
putchar(' ');
5 L* O+ b, r9 Q: @0 [
delay(10);
1 v" d. b v; u$ \* c" J1 N
}
2 e3 N7 K1 m5 O
}
) c3 y/ }' Q! D: M i$ ?' |5 d
/******************open screen clear(开屏式清屏)*********************/
- S8 }" \6 n4 H" D* ^% C1 X0 A
3 w7 V Q& r- Z& T" v
void kcls(int x1,int x2,int y1,int y2)
( T: Q3 u3 _& j; s! |& {/ U
{
2 j- [3 q! X: l7 e% x+ |3 t
int t,s,i,j;
+ U" [ _+ d7 `5 ^( O
t=s=(y1+y2)/2;
; d, J4 y& A- Z
for(;t<=y2;t++,s--)
& ?9 ?: e" e! y
for(j=x1;j<x2;j++){
" K1 a0 r3 A+ L% _" Z
goto_xy(j,t);
- o8 A* Z4 S/ A% P7 ~( [
putchar(' ');
: r% f) u! a6 w
goto_xy(j,s);
: v1 h! p. d8 {! Z
putchar(' ');
! Y+ g6 V& E. S* ]) a6 `( O. V5 c
delay(10);
# X+ a# [. e% X: H# w$ E+ W
}
; ~$ ?' @1 q3 w5 _7 j6 W6 u
}
" [* ]. ?, G: |- t
/*****************close screen clear*****闭幕式清屏*******************/
4 f# q; V' i9 F. d5 T l
. n: ]" M3 { O8 K
void bcls(int x1,int x2,int y1,int y2)
. `0 z$ R. I4 N4 V5 g, m
{
6 V& `9 u; j/ \2 q, w8 O
int t,s,j;
& G3 r/ D, N! y H' j# D. x' I( Z3 n
t=y1;
A6 B+ Y' t$ @5 g, ?
s=y2;
# c j0 {. O2 o9 O
for(t=y1;t<(y1+y2)/2;t++,s--)
. h3 E' y: U* s' m" w) ^, l4 Z# ^
for(j=x1;j<x2;j++){
4 V `" `# }8 w& a& J! L% C
goto_xy(j,t);
g& g( D* w' K1 K4 g
putchar(' ');
# s" R5 u( i) O9 R' W; t
goto_xy(j,s);
# W; ?; b3 i; Q5 {5 X0 _
putchar(' ');
" k, Z. |# f9 B: f) w
delay(10);
/ J2 E, }& B6 ]1 F
}
# f$ \ x A% C
}
( |2 H/ j* \6 i$ O' e, k% C
/******************bottom screen clear(自下清屏)********************/
. s: S( d8 n( q; ^& b
: E" u, e1 P' ^! @$ J; c3 l
void dcls(int x1,int x2,int y1,int y2)
, t7 a: S. {6 X
{
( K4 {; y% z) K+ ~
int t,s,j,i;
! h1 y# B+ ? g' f
t=s=(y1+y2)/2;
8 m/ C* ]1 w; i4 A. ~5 v: z: S
for(j=x2;j>x1;j--)
9 P% E; C2 O/ g- `( t9 ^6 _
for(i=y1;i<y2;i++){
; b2 D3 f8 N% t, A
goto_xy(j,i);
: A5 t: [( S7 c+ P
putchar(' ');
- O1 h4 A/ C4 O- A; P, e+ d1 ^ o
delay(10);
_" u+ x" Z, K4 i$ x }) a/ v
}
, l- X2 C4 R3 l: K
}
: i1 R; b* x# k+ c, T. c
/******************设置光标子函数******************/
5 d$ u4 r% J3 l# U
" V5 l8 p$ I1 D$ N$ f8 p: P) g
void goto_xy(int x,int y)
% {6 `6 c2 o( q- _; [1 L
{
f6 t3 ]! Q; f+ w
union REGS r;
" s) C5 @8 S7 D6 {, w: u# ?' l
r.h.ah=2;
+ X e5 B2 P! F
r.h.dl=y;
" r9 T: A( f9 ]( Y% T6 H: W
r.h.dh=x;
& {( R5 _1 ` M8 U: o
r.h.bh=0;
: Y7 ^; @; p% c; @0 v. I
int86(0x10,&r,&r);
5 ]. T& d% K7 {$ p: K
}
" O5 _4 k% B7 ?8 h7 L( r
3 I/ h" w. C" x, p( b" z6 P
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ \/ r& g* x0 F9 v
$ D _2 ~, E7 d3 P) y$ i$ R
void puta(void)
1 E4 s' v ^: |" C
{
# V; q4 ?$ L: T5 }
int i,j;
" X! p( W& `* M2 l% o
for(i=0;i<24;i++){
# y+ f5 T9 T# D6 B% K5 W
for(j=0;j<79;j++){
; n+ |4 f4 R. Y. {- p& A- Q
goto_xy(i,j);
6 ^1 z% u! ]6 k
printf("a");
( X( N6 u R M/ p K9 D* ^
}
$ Q' P0 n- B# C3 C" p4 i' S9 f. d- D
}
- ?# ?) G4 h9 N
}
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2