标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ^ k- G5 Y L4 I X. ~5 Y! k
. C! a/ T' s+ ~$ R+ l
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 x( [4 x4 r! p; ~* t
+ E4 h- ^4 V4 W& @$ t; B6 w
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- w ? c s3 u
子函数及演示程序:
- M! V; k- S4 Q+ m! ]
3 m( |# K( A$ {6 k+ T
#include<stdio.h>
r+ t; Z$ B- M( ?% g
#include<dos.h>
- o3 s3 v6 h; }1 e- V! v$ m
#include<conio.h>
. s4 ]( x" ^- E' i
4 U& e& y5 g, A$ ?; q' O# N
void goto_xy(int x,int y);
& c7 h, p! v" O4 s( f) }
void dcls(int x1,int x2,int y1,int y2);
$ P2 c- _. R+ m( x
void bcls(int x1,int x2,int y1,int y2);
% ?/ o1 t5 x0 O
void kcls(int x1,int x2,int y1,int y2);
2 }" i1 F7 F5 X; d
void recls(int x1,int x2,int y1,int y2);
8 H5 A5 a3 O5 K5 v4 {6 J p
void zcls(int x1,int x2,int y1,int y2);
: v4 |1 ?2 c5 v* R
void puta(void);
! _& R' w9 c; D
- E+ H% p* G0 w
* P9 j B/ a$ p; I
/*--------------演示程序---------------------*/
3 ^2 X/ T; t2 l% h' k5 S3 \
main()
8 n# K$ [" ~' Z) ^) U% T
{
8 `0 U4 K% M0 x% T0 L7 B& q
puta();
! v' J& D# b% Q8 t
getch();
9 D) T4 L m$ }6 Q2 B
dcls(0,4,0,79);
- U% E j8 q0 m% i X' v. e i
getch();
7 M' Q& ]5 Z- K; s S( U$ X
puta();
* A, x4 l; ]. Q& D& W' H
getch();
3 ~) V" j! U9 u* g/ X
bcls(0,25,0,79);
* m5 T' A! J: \8 v/ `; V
getch();
- N; F! P; {9 w6 b* ]* Q7 {
puta();
/ c8 M0 y$ D( [; n% q; Q. E* C/ f
getch();
# @1 X* f5 `0 J1 L" W1 P& J' y
zcls(0,25,0,79);
{3 K. P2 S) c
getch();
! a( Y% ~; U% a% ^* r: Y
}
1 c0 N- _; D3 r4 \
/*********center clear screen(中心清屏)***********/
* i+ M% j9 m# n5 T. J$ `
void zcls(int x1,int x2,int y1,int y2)
9 @9 F F$ R) ? `
{
3 }! q# S! t/ Z
int x00,y00,x0,y0,i,d;
% x) k4 h1 P/ ^* W5 G# \6 T( @
if((y2-y1)>(x2-x1)){
) `6 m0 E5 e2 {- j) X& u4 E) J
d=(x2-x1)/2;
Z0 O2 u9 |* D1 C3 o3 s
x0=(x1+x2)/2;
& k% Q4 \- A* s) x: u8 p
y0=y1+d;
: _5 b5 W4 `5 ?9 m
y00=y2-d;
1 ]+ ~/ a2 H1 z) O
for(i=0;i<(d+1);i++)
! i5 k e9 w3 [ j% n1 t
recls((x0-i),(x00+i),(y0-i),(y00+i));
. x, P+ ^: S8 X: P' K" c* L3 ~6 R
delay(10);
+ X: k; N! L) e, |! u2 ~. d, w
}
# _* M5 c" p5 E3 D
else{
& Z: O" x0 w0 p5 ^! W5 O
d=(y2-y1)/2;
9 [" R# g3 o2 [; h* H$ E; M- W
y0=(y1+y2)/2;
! m( b& f# ]* w/ @. w/ M
x0=x1+d;
5 t$ W& \3 k$ d
x00=x2-d;
! Y, v+ p" e* W* R- E& m7 `& K- e
for(i=0;i<d+1;i++)
' H- n) b ]. |4 Y9 K( E
recls(x0-i,x00+i,y0-i,y00+i);
. c7 s G/ n( s9 E, y) j
delay(10);
9 R: Z8 |# A2 u/ h& P% z" R
}
, J. k& @; I8 z7 }' n1 {
}
4 Q, p9 N6 z: z# r
: o2 Y: Z6 M, j i. Y
/************* clear rectangle side(矩形边清屏)***********************/
' i6 v% z4 ?0 K: m" [' [- |/ ?
9 S5 M! ?5 i' r# [1 K$ @
void recls(int x1,int x2,int y1,int y2)
% {( Q1 O* Q7 R: ]
{
/ c# V5 o! m" G6 U- i' i: j
int i,j;
: |5 u3 g' J: l! z2 Y/ Y
for(i=y1;i<y2;i++){
+ ]$ I& I; H- g4 l
goto_xy(x1,i);
1 z& M9 g e% r- R/ r. o R
putchar(' ');
S9 r! ]4 v" S5 q
goto_xy(x2,i);
9 \' n, F7 ]6 H: c% Q! q
putchar(' ');
, s* W+ {7 \' o9 J
delay(10);
3 g+ ~ s" H. ^% c; }- O
}
! J7 W* a6 ]% B, A+ }/ L) H
for(j=x1;j<x2;j++){
[, g1 ~6 S Y! b. K7 X! g6 Q
goto_xy(i,y1);
: R! v2 D# c. m3 v5 x9 ^% F
putchar(' ');
( D$ m$ W* H+ c0 K% k( M0 R, |
goto_xy(j,y2);
2 C; q2 N" ]5 v' @0 q
putchar(' ');
f4 b5 {+ L# T3 }7 q
delay(10);
, { ^! o$ o, u* Q# j; U
}
7 j+ m, L0 x+ p
}
+ v4 c+ N* o/ g- U; f+ y
/******************open screen clear(开屏式清屏)*********************/
5 _: N2 w) E1 f# H* W z
/ k. o* `: h- i% _7 P* y" E" x6 c
void kcls(int x1,int x2,int y1,int y2)
! I( x9 @$ ?$ n j4 D
{
9 g* F0 Q3 m; p! Y# V+ j
int t,s,i,j;
7 S# u8 a9 N2 b- U7 _+ @0 c0 y! N
t=s=(y1+y2)/2;
: r$ b% I/ d5 Z9 m7 }) w
for(;t<=y2;t++,s--)
& A W1 O6 T; z4 z' `, ]+ E3 e
for(j=x1;j<x2;j++){
0 S# q2 G: ~% P5 R
goto_xy(j,t);
M2 j0 O8 ]6 B5 m- R
putchar(' ');
n3 _" G, h9 c7 j6 L5 l" d+ [ W
goto_xy(j,s);
# H/ X. d6 |6 @. x$ ?
putchar(' ');
# o: W8 T( l! s7 Y" s0 X+ S; a
delay(10);
& J* q( _+ n9 v# U
}
' ?1 w2 h& g8 l8 g
}
) I/ y0 o' N- a+ P' }
/*****************close screen clear*****闭幕式清屏*******************/
+ w; E$ d% N1 R5 J9 |
; M; T- S2 b) m$ w+ K5 U$ E' L
void bcls(int x1,int x2,int y1,int y2)
1 \; H( W2 Y% l" F1 H
{
) R, p8 e8 H" w
int t,s,j;
6 ^2 x c6 ^+ A/ ?2 \ i8 w3 G: U" x) V
t=y1;
# ^1 l* U* U4 N& f( p* @. ~7 e5 Y
s=y2;
, s+ m" _: |' a
for(t=y1;t<(y1+y2)/2;t++,s--)
# m& n$ T/ |: {7 d- F
for(j=x1;j<x2;j++){
1 ]9 X( e# ?7 z* b; h
goto_xy(j,t);
' Y+ x7 z+ m6 S, h9 m+ h
putchar(' ');
5 u* K/ s1 A$ n( O% ]
goto_xy(j,s);
& G. `0 `2 n; z3 Q; N
putchar(' ');
1 ~5 D3 k- U9 v6 o, q% r
delay(10);
& T! P: G. M2 ?! z, b5 |
}
1 L& M* j" Z3 A+ J8 n" w! D2 Z
}
8 r E& f0 Y- t+ p+ L9 K3 X5 L
/******************bottom screen clear(自下清屏)********************/
# R1 D: R' D- S p7 h( D% N
) {6 P% q; U! X- k+ {
void dcls(int x1,int x2,int y1,int y2)
& p! ]# k+ o7 @2 a }" {9 X
{
3 e# P, _4 @1 j* ^% i
int t,s,j,i;
2 K, ~3 C5 }1 j- u4 k+ k
t=s=(y1+y2)/2;
7 E9 i. k0 P ]: s: ^. t
for(j=x2;j>x1;j--)
2 |7 j& R5 Y4 d- c
for(i=y1;i<y2;i++){
/ ^ t# {7 a9 U& h. P- f( k
goto_xy(j,i);
i( c9 [9 B+ X8 K, g
putchar(' ');
2 M/ x6 X' M" |- O
delay(10);
1 w% C: S1 Z) @; f, B
}
' ~% N4 t) V @9 r5 n* X
}
" v4 h, y1 s& @2 L' s' Y
/******************设置光标子函数******************/
3 S0 {3 _$ ~: P% C! ]0 g
9 W& C1 x2 q8 l7 a1 g$ J
void goto_xy(int x,int y)
( p6 O$ S. B: O0 ^
{
3 w7 G' [" P. g) \ K9 G) b/ ?
union REGS r;
$ H x* H# n# @* A+ u
r.h.ah=2;
$ y0 d, Q. ?. V5 E
r.h.dl=y;
, {8 _6 O% |3 I( S; g
r.h.dh=x;
" I6 g1 ?8 f7 F% M* h' l+ t
r.h.bh=0;
3 Z9 s! h- n8 v, i
int86(0x10,&r,&r);
9 V# L* c' t2 j0 f
}
0 T# [8 n8 q) i8 o/ M6 H) a C5 Z. V
+ N4 k2 D7 S! Z3 I3 o' O/ [
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
: d- P' n/ H4 e' ?4 ? X+ [( @2 I
& S1 ^5 \+ Y( ^. @
void puta(void)
: P8 _8 A* f& T* N) l1 r5 k; o
{
, \0 K9 M5 E5 t1 q* a# a
int i,j;
. ]% s2 O. M# b8 @3 L' R
for(i=0;i<24;i++){
3 Y4 ?- {4 h' u$ f; W
for(j=0;j<79;j++){
, ?- f' a9 H' r0 y( X1 p
goto_xy(i,j);
& U) @; T6 D! _6 b+ l) c
printf("a");
' w: y D& _/ R9 g" K4 V0 s
}
% d3 T( _- c1 H; v1 T0 G" }
}
9 n4 g& b* {7 i) ^- @1 u- d/ W
}
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2