标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 Q1 p' W/ k+ r! M' ?7 @
8 Z8 X3 X) t" Y3 P- B" Y9 Z
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 l9 y" K8 f! p5 B
: s% W; W7 ?1 s2 x5 Q5 V+ H
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 O7 L3 T6 L& C$ g% ^: U, J4 Q8 t
子函数及演示程序:
' c! r% }4 d4 d" Q4 V, X
& y+ D8 ]9 Q4 m) c% u! [
#include<stdio.h>
. u" L2 u8 x1 R& f# L( [
#include<dos.h>
! D4 N% Q. @, R4 }+ @- J! T
#include<conio.h>
* V7 U' b( O5 Y0 k! q; {( K/ d9 t, _
/ p; r5 q9 O. B! e9 G) J5 _
void goto_xy(int x,int y);
# a$ p, ^3 p6 n! l3 c
void dcls(int x1,int x2,int y1,int y2);
+ U8 F, C( J( R l1 ~* X
void bcls(int x1,int x2,int y1,int y2);
% Q P- u1 g, l: N+ I
void kcls(int x1,int x2,int y1,int y2);
, b9 D$ ?- i0 P3 A2 o$ N' B
void recls(int x1,int x2,int y1,int y2);
7 ^% p. i, m% h+ x
void zcls(int x1,int x2,int y1,int y2);
' L! \3 w$ }8 v. h6 T4 }
void puta(void);
) m- D( l" u% f" ]( N8 E0 ?
5 {* M# t9 N2 `( a- j0 @# k
7 z) i1 \6 g) K% {) ?
/*--------------演示程序---------------------*/
# P2 c7 @' J8 ^: B* O1 p
main()
6 _1 Q" \# \$ n, N" C1 B
{
6 e R- A4 F9 ^* G2 M. O' M
puta();
( p& G0 r4 @* ]% n& k
getch();
; u! N N" F, w' K
dcls(0,4,0,79);
$ D P% R! s' S2 U
getch();
2 u6 `8 {( d( M- x. m a
puta();
" [) _7 w, P% J+ e8 D# I. L# E1 U
getch();
% W1 P; ~* E9 Y2 u$ i0 O
bcls(0,25,0,79);
2 @, i5 n3 Y8 z$ ^. b9 f7 E, Y, Y
getch();
9 L3 F4 m* A7 m4 ?4 H0 _9 f
puta();
) `* n4 p5 A, y
getch();
, [6 K+ r& t. ]5 z7 P: |
zcls(0,25,0,79);
# v+ x( n( e; [! y# C( e
getch();
% f ~$ d& B! w1 k# k; ?
}
$ w4 S+ }' v5 n6 |" u
/*********center clear screen(中心清屏)***********/
0 B c3 n" Z+ x" O* |$ `: \+ J
void zcls(int x1,int x2,int y1,int y2)
1 ]- b2 R7 `7 \
{
: c0 y6 j" w. S2 J* o- T% K1 W
int x00,y00,x0,y0,i,d;
/ Q) B1 {' L$ r/ V) G
if((y2-y1)>(x2-x1)){
' i- [/ _4 A. s" R+ Q5 _ _/ y
d=(x2-x1)/2;
- y& e' _! z1 k: |$ E) ]9 I6 Z
x0=(x1+x2)/2;
% Z# _ s4 q6 l! w/ s; T9 q
y0=y1+d;
$ y* ]+ @$ T- D+ I- p1 c* u
y00=y2-d;
1 B( y( u4 g1 K! Q8 @
for(i=0;i<(d+1);i++)
% U; H! Y; W K4 }# W3 C
recls((x0-i),(x00+i),(y0-i),(y00+i));
' R6 q8 m- \- P1 d/ G/ ]
delay(10);
% x* h- g$ Q9 D2 `9 W) }$ M
}
$ c2 S9 F3 @* G7 G8 H e0 w8 @
else{
7 W4 x# `4 a" t9 ~ c' U
d=(y2-y1)/2;
5 q4 u) y/ b" L8 K, z
y0=(y1+y2)/2;
3 w/ I) |( N3 g! @- m% J0 ]' f
x0=x1+d;
+ f2 |/ X8 q, c; a# I) f
x00=x2-d;
+ Q" d# l3 y: J" O5 z
for(i=0;i<d+1;i++)
. K, t3 u2 J9 N; f2 s$ b# C
recls(x0-i,x00+i,y0-i,y00+i);
9 L8 B6 g4 Z& F/ E4 x! Y
delay(10);
$ h# R- k$ Q- m K/ @( U; P
}
) M2 H% C# {: C8 d1 {5 d
}
8 P/ O' i7 _3 L7 m1 X' r7 w
) L4 I+ T; s" b$ F* `3 j3 `: x% G
/************* clear rectangle side(矩形边清屏)***********************/
; ~6 g1 q2 f5 S8 B O7 j( @
2 L) K+ ?" E- g9 w7 Z( e
void recls(int x1,int x2,int y1,int y2)
3 a: H8 D$ {* D# M5 `" p% T
{
5 H! m1 F$ r' Y+ Y- f
int i,j;
7 _2 B( b) _2 f" l: d& ^4 q+ e2 o: @
for(i=y1;i<y2;i++){
b' ^8 @4 b1 I
goto_xy(x1,i);
: _0 C; e$ a+ M: n" a3 s3 p
putchar(' ');
1 ^: G4 v& |+ U% I
goto_xy(x2,i);
& _, y7 |8 Z& w
putchar(' ');
, l6 v( I$ g' G0 @8 D# S
delay(10);
8 e6 S' n% p$ R
}
' u, }; a+ D/ _# ]: U
for(j=x1;j<x2;j++){
' V& ^+ ^ `$ ~! o+ {8 R: L
goto_xy(i,y1);
2 }. ?# L! h( \- f8 b' }, [
putchar(' ');
6 Y" R2 [$ O" M" F9 r- l
goto_xy(j,y2);
, V4 Q5 v: R' h7 @
putchar(' ');
) v' q- q) M$ h7 k- r: q+ a1 V
delay(10);
' Z. P) [$ A! Y6 r4 l
}
1 ?; }6 N$ z2 E1 p
}
8 c9 D2 @; ^ j# g- ]6 p
/******************open screen clear(开屏式清屏)*********************/
0 Z+ t# G- g% @ @, l
! u$ R% k e! Z0 Y8 ^4 S I" V
void kcls(int x1,int x2,int y1,int y2)
9 s1 g2 P. H( M
{
7 W% [$ G4 `" D* P' O4 ^3 ~
int t,s,i,j;
( j* }4 D7 J: D6 d6 W( {
t=s=(y1+y2)/2;
0 ~: B% q! @, Y; T" ^, o2 z
for(;t<=y2;t++,s--)
4 C' a; F' w0 X4 a8 j) X
for(j=x1;j<x2;j++){
; ^# B: w+ C5 H' j1 a# J: v' {: M7 ^
goto_xy(j,t);
& W+ i* p2 `" L* J3 _
putchar(' ');
& x7 J# K5 G, O4 P# ` {, C
goto_xy(j,s);
8 d2 g7 d: q6 M$ k1 \% ?0 E
putchar(' ');
4 Y& G& \' y. s
delay(10);
2 o( |( a" D- `) f2 ?9 f& ~( w
}
6 D5 I$ @3 u" f) P
}
# }3 p- X: w0 ^1 d- Y
/*****************close screen clear*****闭幕式清屏*******************/
2 t( g$ k: O7 X3 y: D
$ i3 {& U5 Q8 @. i
void bcls(int x1,int x2,int y1,int y2)
* s/ w2 t* Z' q3 ?6 \/ H- t5 s P
{
. y6 Q- F0 X8 T1 U
int t,s,j;
( |" g* N- F' l9 C% E, ~
t=y1;
z$ k5 Q9 l5 I, x
s=y2;
" e7 S- B! L8 E$ B3 ~# P0 L+ X& d A
for(t=y1;t<(y1+y2)/2;t++,s--)
- K9 x8 V: S6 \: u+ p* Z5 H9 c4 K/ a
for(j=x1;j<x2;j++){
( Z) y, ^# l/ p! H
goto_xy(j,t);
8 _7 d- s; Z9 M: Z8 w8 v; p* e& @
putchar(' ');
) b0 R3 [2 m8 @: x: C4 F2 a
goto_xy(j,s);
1 ?0 t* [; j: Z+ S4 b* F: ^
putchar(' ');
8 Z! v- F/ ^2 ]- n* M1 O( v
delay(10);
& o6 l5 q# B8 K
}
# [" w9 ~9 H! B: M! _
}
) r; \2 }; c& R/ i2 Y) A3 m1 c
/******************bottom screen clear(自下清屏)********************/
% l3 R* j# ~1 b8 H& j
5 b4 m% | u8 ?! z, X
void dcls(int x1,int x2,int y1,int y2)
/ @; A1 i9 R5 N( d* i" {* J
{
/ `: Y( I: H( O
int t,s,j,i;
% q0 X, j- M5 K7 y; V
t=s=(y1+y2)/2;
2 @" `$ O- o) M! o$ S6 t
for(j=x2;j>x1;j--)
2 I: m- S+ ]% ?7 j/ r
for(i=y1;i<y2;i++){
: ?4 M$ w! {! `8 [' J
goto_xy(j,i);
" F3 c( I% q7 y' g- V
putchar(' ');
+ E: k, Z8 X. p# Q! D
delay(10);
1 e, s% S: n9 s
}
$ [9 l* g, S; U- R2 J- j
}
8 \* G, }& ?, a0 r; _
/******************设置光标子函数******************/
& D8 h2 N4 b) N; u* g8 L' v* i4 M
6 @' P7 G9 f: k3 E! h
void goto_xy(int x,int y)
' c( G! [) v! G
{
! Z) [3 X1 g; |$ Z
union REGS r;
1 H4 f5 u6 e/ E* z
r.h.ah=2;
1 P, F+ K' r) v: ^, J
r.h.dl=y;
$ f$ q7 t i! G7 c
r.h.dh=x;
: r. k/ t7 A" A. o
r.h.bh=0;
+ ~) v' B& }! r: N- \, n, R; O
int86(0x10,&r,&r);
. e; r. n% C4 _" t
}
N" b( }$ P# G
$ O& P% [. E; f
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
' I1 ]+ ^+ k _. z. f
# H: g; f; l, A6 t# M) Y( k
void puta(void)
! {8 H' G! g7 H# x. p# S% M2 w+ p% S
{
; m2 W- k5 T2 _- V7 Y+ v' K
int i,j;
/ Q/ p( {" X! W3 G
for(i=0;i<24;i++){
6 x; @4 ~$ R" f0 ?7 C9 p$ m
for(j=0;j<79;j++){
) M2 Q4 b' j2 K6 g# l7 v3 h$ M
goto_xy(i,j);
7 @- k! a9 }( d# N
printf("a");
% [" i0 p1 ~% q3 C( Y
}
; _ `3 S( U# q) ]7 N# \
}
8 `( I2 z1 x1 ~, O" c
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2