标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 M- [6 Q* m4 j# R- I' e7 O1 d
6 y7 k/ o: c5 f+ x
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& N) H! }0 q3 I k+ h2 q
1 A5 `: ]# |: ~! w- C
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
N6 _6 y1 C! p9 S- w
子函数及演示程序:
0 s. M1 J- {! ]" B
. w; b0 k+ c/ n/ V
#include<stdio.h>
9 }2 Q6 p+ l1 J2 m& D
#include<dos.h>
. R) p, t" H0 ]' w' o9 J M( {
#include<conio.h>
8 {5 E' q) @9 a" d
$ S) l; ~5 s3 s- D, N# V9 U/ K5 Z
void goto_xy(int x,int y);
; s- R. g; j3 U/ `( N& A
void dcls(int x1,int x2,int y1,int y2);
( V5 a, t: m* m5 H, P5 _
void bcls(int x1,int x2,int y1,int y2);
% t9 r$ l& y! j+ K7 x& g+ j
void kcls(int x1,int x2,int y1,int y2);
3 c. {, c U( t$ V1 B( f
void recls(int x1,int x2,int y1,int y2);
, G* S, c7 M$ T ?
void zcls(int x1,int x2,int y1,int y2);
+ r9 K8 [4 b+ E3 ? W6 k8 {8 X
void puta(void);
4 {6 |4 @/ I3 q! L/ I
5 [9 D0 ^7 C/ O. v1 A1 u
t3 p$ W3 y7 f) V; V* A% E
/*--------------演示程序---------------------*/
* p# `* h, W( N8 j, G: K+ I# o$ b
main()
$ C3 q0 P2 z( @4 `9 |) R/ E
{
3 i" q" w3 Y* g1 H0 C$ k
puta();
- l% P' e/ U( h, k: r* N/ N
getch();
5 P" v/ R8 g: C- S* W3 E3 T. W, c
dcls(0,4,0,79);
* z7 c7 `% w/ \# @- Q
getch();
& m3 w% c# f6 q. z9 J7 F
puta();
( r6 ^. e8 u% O# j
getch();
7 Q# K1 b6 L) l8 ?. W) _
bcls(0,25,0,79);
N, G+ U m& ~4 d. a+ O
getch();
; l: f0 R6 |. I( k5 ~8 i
puta();
$ j' Q6 B, [4 }# r
getch();
. @" o* X+ g; K6 r
zcls(0,25,0,79);
( o% p0 k/ ~4 J) \6 l/ [
getch();
% J2 T* `( s( ~
}
! v' p- Q. ?5 k1 C3 b! S0 T
/*********center clear screen(中心清屏)***********/
' Y# G2 x5 P0 U+ x
void zcls(int x1,int x2,int y1,int y2)
3 _ N4 z' n. z
{
+ T% a$ b o: ]0 k* |2 T
int x00,y00,x0,y0,i,d;
& ?0 e: W; g* ~+ x8 Y$ @* Q: M
if((y2-y1)>(x2-x1)){
" L4 V4 C/ d$ j# Z
d=(x2-x1)/2;
% E W: D" u) R; h+ m. z0 r6 [/ D
x0=(x1+x2)/2;
( H. Z+ X9 ^( S+ W& [
y0=y1+d;
2 Q+ a% q& _. k0 |. R
y00=y2-d;
7 b( o6 U9 U' J3 t$ V% f0 b
for(i=0;i<(d+1);i++)
( P1 u: w7 b$ m r
recls((x0-i),(x00+i),(y0-i),(y00+i));
3 G. ^( i, L0 _3 O( X& Q3 S! s
delay(10);
' v$ t) y _. r: |
}
) s8 \, z D. `" T/ L2 C
else{
+ p5 P' }9 L5 A
d=(y2-y1)/2;
8 e4 U4 G, U3 v
y0=(y1+y2)/2;
1 y$ p7 v, @; g, n/ g' v
x0=x1+d;
) ~! E" u/ k. M, I% n
x00=x2-d;
5 y$ ^$ W# q |: a! R4 L
for(i=0;i<d+1;i++)
5 F9 x$ j3 b# T& Z! G; u+ e% M7 d
recls(x0-i,x00+i,y0-i,y00+i);
) H9 ~8 g! X% T. I* Z6 Z v
delay(10);
& g' s' P$ Z$ I/ _4 e7 Q5 R" ~
}
4 O$ _7 h3 ]) A2 \4 r" D
}
4 `, h5 ~5 I0 b$ M" `
% ^" W: ^1 \) a* S q. W
/************* clear rectangle side(矩形边清屏)***********************/
$ V% g. [7 t* ~3 i
: z. g2 m) o3 ^. A2 H
void recls(int x1,int x2,int y1,int y2)
8 }& `9 ]1 \; V- Q& l+ C
{
% U7 }$ H& I: \ z
int i,j;
3 ~1 i# ?% l. G) x8 ~5 W y5 k
for(i=y1;i<y2;i++){
% Q) R4 f5 @+ X4 c; m' J2 s3 Z" x, `
goto_xy(x1,i);
" }6 M% @- `3 E9 N9 `
putchar(' ');
/ X$ z" G( a/ F
goto_xy(x2,i);
: G+ c$ b+ S/ ~' @2 M* X. d& U5 {) Y
putchar(' ');
0 A# W$ b6 U8 I' m8 c
delay(10);
5 y M. O# H, ~
}
+ X) M: t. t( o/ Q1 B; L
for(j=x1;j<x2;j++){
+ j" k8 f" J9 ~0 J7 m
goto_xy(i,y1);
" Y0 A$ w/ N/ F9 m
putchar(' ');
8 T. c# [4 } y: I% H
goto_xy(j,y2);
" @; L: u9 x# q" K# ?. T/ z: L) q
putchar(' ');
4 n. U2 M' M) O2 i, K, `
delay(10);
1 ^) f0 Q) I9 [, f7 z- W6 l' W
}
1 g2 Q9 R1 V9 H. A( i
}
, f. {; U( ?! G
/******************open screen clear(开屏式清屏)*********************/
5 [* |! V+ Z. U$ I, c( o( k+ d% e
* i7 v* C- a$ M$ D
void kcls(int x1,int x2,int y1,int y2)
2 g4 W% q' O1 j' t
{
5 n4 _6 G+ u! N l
int t,s,i,j;
. }6 ]7 l. q e$ R
t=s=(y1+y2)/2;
]9 i) Z, A9 R8 \
for(;t<=y2;t++,s--)
f: R/ l1 x z) j/ s5 Y. U1 A
for(j=x1;j<x2;j++){
; V/ `: B9 n) m: \
goto_xy(j,t);
Y7 g. ]; V8 |6 d$ K- b' U1 x2 x6 O
putchar(' ');
, h2 O( B0 g" c9 h4 e0 l
goto_xy(j,s);
# y+ x- J) ~6 R# l* u& k
putchar(' ');
4 o8 ~9 Y+ V$ g3 C
delay(10);
/ Z, s" G7 |4 h0 ^2 w5 t f$ L
}
6 V9 R/ p1 S5 }; h l$ _9 ~% R
}
* Y. K0 a% c9 D. ^. O5 g, R# |
/*****************close screen clear*****闭幕式清屏*******************/
" i& i" p: E7 F" e
% R+ Q8 Z$ p) X) `% q2 w0 J3 h
void bcls(int x1,int x2,int y1,int y2)
/ v `7 U' L+ U$ V4 b
{
; d9 }: D' X# F, \5 T# e. T* |: j( C
int t,s,j;
% s, \. A: v; m* l# l
t=y1;
( N; R0 C; |' [- B* N* }
s=y2;
$ I2 u! P1 I$ w3 i
for(t=y1;t<(y1+y2)/2;t++,s--)
% B7 D- `; k- H0 C' a! O+ G
for(j=x1;j<x2;j++){
/ u& {( ?/ N+ Z- t, T% p! j+ I4 e
goto_xy(j,t);
5 O1 b3 y% b! d. \1 u% h
putchar(' ');
7 d3 v% [; ?8 ?% h' ~7 _
goto_xy(j,s);
+ V [, C6 ?& U$ Y& n
putchar(' ');
4 e/ T2 ^1 F2 V) d( ]
delay(10);
% B; `# C, e9 R
}
; G! u6 ?; s) ^. Z
}
& R# N% W; U- Z7 V% ?* A0 G) q# H
/******************bottom screen clear(自下清屏)********************/
5 o3 R. P: [( d' X+ I/ r6 s
, ~' X; Q5 f% D$ o e. K) S
void dcls(int x1,int x2,int y1,int y2)
3 J) R) {# N# n! ?
{
$ o+ p5 a2 P/ r' j
int t,s,j,i;
t( x: z |3 G- ~
t=s=(y1+y2)/2;
/ Q/ Z+ l9 y9 y- d* Y H- i3 g
for(j=x2;j>x1;j--)
. J! g0 {& K! u( H, E' X4 o# t
for(i=y1;i<y2;i++){
, S% C3 B8 j' ]. y& W5 }
goto_xy(j,i);
) {+ J1 O% O% Q" Q
putchar(' ');
$ B C5 g9 }0 Y; [4 h g. q& P8 X6 c, R
delay(10);
5 y; v! Z* _1 q' [: e- j
}
: |9 D* V6 B. x3 V7 g! @# |
}
* @4 Q% h* Q n0 R+ _% e
/******************设置光标子函数******************/
! b; z: R& C( s: U `& H
1 ?% p0 Y0 z8 \- c' x
void goto_xy(int x,int y)
9 p( [; w% q% r( Q5 S3 a
{
' v( f- g1 j) P! b0 l+ d
union REGS r;
: }& U" }* D6 w z
r.h.ah=2;
; P. H( M. m5 @7 Q. v9 X T
r.h.dl=y;
7 t! R% w+ N: a. j" r* F" a
r.h.dh=x;
+ V" W3 X. Y; y9 S
r.h.bh=0;
8 ~' Z* d8 p! h5 U9 ]2 c2 V7 @
int86(0x10,&r,&r);
6 k5 Q1 p8 s2 W" U
}
* X" B) g' C* G6 l4 F0 Z
1 C: [" ^/ G2 J
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 i0 p- [, c) ?5 G9 Q' w( P% e0 j
1 _8 z& K. l, z; u8 n( R* v
void puta(void)
1 `) V- }' r) P: \$ v
{
( I& _: B) C) q( x+ t' j( y
int i,j;
) N) F$ T! i1 l
for(i=0;i<24;i++){
$ k& s% j! }- a2 w4 u2 ]: H* N
for(j=0;j<79;j++){
% t5 }/ w6 r h" S8 m" h; _
goto_xy(i,j);
& k4 ?# N8 F2 N' K2 o
printf("a");
0 F H- Y. E P8 R( g- K! g" d
}
. D2 w& \' r# f) o7 s
}
$ W) D) a- H6 _: V' o; D
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2