标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
. D7 n: N. R, x& V1 R
! X! \: I) W; y
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" g. \8 p1 ^/ N+ @5 b2 b: d! N& T3 X# M
9 w8 ~! \2 e- t2 O
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 s3 [: ]# r) e* s$ H! Z; @, c
子函数及演示程序:
3 ^, z4 e6 N& B$ m# y9 P
$ K9 R& o2 j2 \, J" ~
#include<stdio.h>
! y) q. T0 C/ s* }) g- n
#include<dos.h>
5 j8 n" c; E6 v$ ~6 P
#include<conio.h>
" x) C2 t$ x+ J' ^3 \
F' m8 b5 {0 ~: n9 q+ i) `9 Y
void goto_xy(int x,int y);
# P. S/ H1 h" c
void dcls(int x1,int x2,int y1,int y2);
& `8 ]0 z- k4 z9 [+ }
void bcls(int x1,int x2,int y1,int y2);
1 m7 T9 E. r; y/ O8 N8 ]3 I6 n. @' |' l" j
void kcls(int x1,int x2,int y1,int y2);
% f3 p# v4 ~7 [! M3 j( o
void recls(int x1,int x2,int y1,int y2);
2 v8 w; E* S/ ], P o7 v
void zcls(int x1,int x2,int y1,int y2);
! ^& }) z; n) x3 A Y5 C
void puta(void);
% S8 ]* H7 R! l" m1 h6 i0 @& y
; U* i7 B: n) Y
/ C1 R% _6 S. j/ p( F& `/ d: i: y
/*--------------演示程序---------------------*/
0 y2 x/ K8 f! s. U2 f2 \( r
main()
# _7 E2 s! Y Q, L
{
# a! ^. C% k0 U' N: ?: N* k
puta();
7 C9 ~3 c+ W: H; U0 ^" J2 |
getch();
% h# T; t5 e o% |$ C) X2 n
dcls(0,4,0,79);
- K) R. `9 M6 S# g
getch();
; ]' X6 x1 h5 `3 n) r* v0 X# M, x
puta();
- S( k$ l. {$ O: Y" l$ l- v
getch();
/ u6 b9 P* p( i& O% G
bcls(0,25,0,79);
! O5 w! d m1 ~3 `
getch();
: o8 a1 q: G& \' J. D5 J
puta();
5 R8 e4 M$ B' V, C+ _% I
getch();
1 ?" @/ \* f# Q( H/ V, ^
zcls(0,25,0,79);
$ ^4 Q3 T- m$ Q4 q& v
getch();
6 {9 P9 C% a2 B7 U$ R
}
^ n5 z3 ?: Y% I5 a
/*********center clear screen(中心清屏)***********/
- a+ E3 C$ m! n* Y& h) w
void zcls(int x1,int x2,int y1,int y2)
' R5 ]0 t# t2 @6 z3 B$ j
{
! ~% K: t' l, c5 f, W
int x00,y00,x0,y0,i,d;
# f& g# Z% g7 }, @4 q( X
if((y2-y1)>(x2-x1)){
. s+ s9 B2 I, E
d=(x2-x1)/2;
; u9 R$ m/ g0 G3 C. q7 K
x0=(x1+x2)/2;
5 b; b. ]: p3 W3 i" k# y! N: T2 w5 E
y0=y1+d;
5 i6 I' X, n( ]; ]4 X7 k+ D
y00=y2-d;
% [/ q! s+ E" q& I
for(i=0;i<(d+1);i++)
% w) j9 L# _7 \6 X7 D9 m" z# I
recls((x0-i),(x00+i),(y0-i),(y00+i));
8 a- |, n; U# U1 a3 ~; W' d! Y
delay(10);
! n& t! F$ i0 W
}
" x5 v" F! ~# r I: Y
else{
3 g0 f9 }0 R g. w4 g- T
d=(y2-y1)/2;
) X6 u8 [7 X0 g
y0=(y1+y2)/2;
, P n- w7 F2 r7 t
x0=x1+d;
, o/ {- ]. B! L% g
x00=x2-d;
% n& N7 B/ d9 U) x$ S- ^8 Q1 N
for(i=0;i<d+1;i++)
0 H5 h6 ~# ?( |- T) c
recls(x0-i,x00+i,y0-i,y00+i);
9 y' r. O3 W* M: y4 Q- J# `# m
delay(10);
7 o/ c4 t% n. |& F ]. c/ Q9 T
}
; w& d9 a4 t6 u1 N
}
3 K" n+ ?( @6 |% T
% W5 R- C' y, l
/************* clear rectangle side(矩形边清屏)***********************/
0 \- \- }( ^9 t' p8 `
, E0 w8 P0 _& _2 M% f/ A( z. a
void recls(int x1,int x2,int y1,int y2)
5 i7 z# r2 x* R& s. R
{
7 Z9 [9 w1 U1 G! o6 v
int i,j;
, N1 Z& m4 A, W- J4 z
for(i=y1;i<y2;i++){
( j+ L; t6 [ J( V" t q/ B3 ] Y6 w
goto_xy(x1,i);
D3 k3 x; }% `5 w! F' X
putchar(' ');
( ]6 }8 B; H0 y0 Y" Q/ F# S
goto_xy(x2,i);
* t" q, x6 W; g9 D# A
putchar(' ');
+ t4 b1 H8 n. }6 l# V5 E
delay(10);
0 u( j# D7 @9 M4 u
}
" C7 I6 }( v5 |. C& M( Q* _
for(j=x1;j<x2;j++){
$ |9 i6 v% F& ~$ g# T
goto_xy(i,y1);
- j5 {1 T$ I% z
putchar(' ');
$ |) o( |6 z# A' {
goto_xy(j,y2);
! O* t, O# C. a4 S! Y
putchar(' ');
4 N5 k" ]6 }) q9 J/ e4 O, f
delay(10);
$ `; M" B7 Y8 u1 R! w! R
}
9 D+ T( u C& D5 C9 y
}
& D0 o' ^$ g; f4 }- W, Q) Z3 ]) Y
/******************open screen clear(开屏式清屏)*********************/
* j; x7 ~1 F# J, M) ?' Q0 I& a0 e
1 ^- w6 J w" u- H' A
void kcls(int x1,int x2,int y1,int y2)
: }" j e# o; T$ k f1 Q" V4 \
{
, w2 K0 U( N! N! x+ l
int t,s,i,j;
2 g2 K# @: B" ?+ i/ T1 F
t=s=(y1+y2)/2;
# s; n( ]! F- U6 E! v6 S4 J4 k
for(;t<=y2;t++,s--)
; Y( P. c4 r5 G6 j" D8 T9 C- {( y- Z
for(j=x1;j<x2;j++){
: d6 @4 {4 y: \$ ]! B6 U
goto_xy(j,t);
: b. @. C6 W& B5 S* K: S! S h% t2 i
putchar(' ');
( _1 S! J. k3 ^- h g3 K {/ u
goto_xy(j,s);
& Q1 ~$ }1 I, [( b" N
putchar(' ');
$ P1 a. p& E$ [. z, @% Z6 b7 a- ^
delay(10);
* b9 K8 U, F) q
}
0 m7 F& w% w) T, p8 e$ B# ?. |8 J
}
! \& U+ w8 m+ F1 G; s! }
/*****************close screen clear*****闭幕式清屏*******************/
9 m& y& D2 V% n8 s7 Q& F! ]
3 F0 N( U; S. y) B! f$ b( s# P3 J ]
void bcls(int x1,int x2,int y1,int y2)
0 ^$ n# B; S% T
{
2 }2 d0 @2 n0 S2 ^9 n1 R
int t,s,j;
% w$ f1 U8 n, Z$ T5 q
t=y1;
- s, r- q7 |6 a
s=y2;
; l9 J. T8 F% U, s
for(t=y1;t<(y1+y2)/2;t++,s--)
- Z3 o5 d0 u( U/ f6 V0 c
for(j=x1;j<x2;j++){
: m5 j1 ` D. s7 v' o+ f. y
goto_xy(j,t);
: D2 J' A4 l! x( [% y0 l
putchar(' ');
$ Z5 Q/ O1 y2 f- a! d
goto_xy(j,s);
) B5 S5 h0 P |& l
putchar(' ');
z. u8 f% |7 n6 G' U
delay(10);
$ J- k! a! c; d3 D- r
}
4 E( j" t$ _! g: j8 d) {: Z
}
( `" K, n3 f- q, L
/******************bottom screen clear(自下清屏)********************/
1 y( [0 D0 ?0 w }, t' F+ C
4 [ D1 g1 k& G- t. r" E" S
void dcls(int x1,int x2,int y1,int y2)
3 Y9 f& B! K; M4 D. o. E7 f
{
7 p! c. H# U! A6 q
int t,s,j,i;
R' _9 h0 f0 G6 D
t=s=(y1+y2)/2;
% x, Y1 l& ~* s; {
for(j=x2;j>x1;j--)
; v/ T, r7 k: X& q" \ @# l- z6 e2 P
for(i=y1;i<y2;i++){
+ o1 F3 b( Y' f8 W7 v5 P7 P* {
goto_xy(j,i);
) p3 f; F G* l. o% m" ~
putchar(' ');
& Z* M* i8 N' p. y z! H* g
delay(10);
, {5 u8 y) o4 b. g3 V% g$ E7 V* P/ z
}
: ]) |4 u$ q1 Q; @5 p
}
% [. O( [, c- q* x4 {
/******************设置光标子函数******************/
2 U% M) i1 R' U8 X$ t5 P
5 J# Q- e6 l1 b
void goto_xy(int x,int y)
3 }% c$ u% Z9 j0 R+ R3 C
{
8 k6 Q/ W' B* Y
union REGS r;
3 j8 a; ?$ t6 B6 a+ c$ S- K
r.h.ah=2;
, y4 ?! v1 ~6 b, W3 w* P( P
r.h.dl=y;
- f/ L5 O3 P, Y
r.h.dh=x;
/ x4 O3 ]7 f/ U) X6 Z( I p0 E! C
r.h.bh=0;
# t' G" Z5 {9 a' @1 y) ^% F
int86(0x10,&r,&r);
$ _% `% }6 ?8 ~& m; H4 p( i, ?
}
" P: I0 a. P: t7 ^. f7 U
9 t0 u" B+ `8 w n
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
' r' Q; R% }5 h! E/ g8 {2 ^
1 T7 `- u" Z4 M
void puta(void)
- `# N0 ~$ o$ X0 x% G+ H2 d
{
9 f O; j9 _0 g" Z+ ~+ G5 n
int i,j;
5 O2 ~' V0 e" L4 ^2 d, b4 j5 ^
for(i=0;i<24;i++){
# d, ~8 E/ m! w& P
for(j=0;j<79;j++){
4 @4 _' R" H- I) r: K$ w
goto_xy(i,j);
$ n, W% \' _1 B# q$ M2 G
printf("a");
# G1 C; z3 n6 N% F- i a
}
/ F" t8 | g# X& K
}
* F( Q. P( M, x# t% ?* e
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2