标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
. X: @8 V5 b7 m0 p- l
( s$ E9 @5 a, e# W1 N7 o* L
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
6 c* F! A7 ^2 u0 c
% d5 j1 E! _. a
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 G$ N0 g- e* h6 U0 e- X8 G
子函数及演示程序:
+ q/ A/ A! b( i- t" z, ~
8 Q5 p( z/ y2 d
#include<stdio.h>
' I2 q% S! d$ \) f" W w8 ~
#include<dos.h>
7 s" z8 Q0 P* n4 l, F( j& @3 d
#include<conio.h>
@; p1 S0 n# t/ z1 n
' e' a3 ?% d7 O" I) b2 }3 c
void goto_xy(int x,int y);
9 V0 e; N* V" v0 v; T) c$ M
void dcls(int x1,int x2,int y1,int y2);
; W4 @" S+ {3 t/ W
void bcls(int x1,int x2,int y1,int y2);
1 O. W: G/ I+ Z- P) \* e
void kcls(int x1,int x2,int y1,int y2);
; e, j7 A3 ]& N& L. ~6 G
void recls(int x1,int x2,int y1,int y2);
8 ?- Y( m% o/ o7 ?
void zcls(int x1,int x2,int y1,int y2);
& [3 J: \. `6 V+ M( U( |: }% D
void puta(void);
1 t* V2 |% X8 K6 ^" z' h: a+ s
2 c4 y/ C1 C% z
4 C9 u" D' I2 i% {$ ?+ g. l% [, |
/*--------------演示程序---------------------*/
4 \* A8 e2 ?9 q Q' w; W( P
main()
! c0 U/ v2 i/ m3 W$ a
{
( v2 C/ y' H8 ^
puta();
+ b1 @$ b) w) }0 T+ V. o, c. E
getch();
8 h2 o, P T. B; [! Q5 p6 e
dcls(0,4,0,79);
* P! Z; P0 \& \
getch();
1 l5 D! b) E+ a9 }
puta();
, i8 X: `. e) x/ @ C, q% t! F
getch();
8 s2 Q3 f# a9 a7 S2 u% J
bcls(0,25,0,79);
( z( B9 q3 d- R$ Z& D2 q
getch();
7 G i7 q) E4 B
puta();
+ z; T# K& ~% O5 P8 g# w# p7 T# D; x( {
getch();
: Q1 ~% e7 O S$ H. L8 U: O
zcls(0,25,0,79);
1 P, V9 b" @/ E% L
getch();
, H1 F! m0 i% P2 H8 g* d5 ]! P
}
& l" V- w0 r( q
/*********center clear screen(中心清屏)***********/
& T1 |, l: ^2 k8 n0 {
void zcls(int x1,int x2,int y1,int y2)
+ E/ E s6 b* v
{
3 k7 F2 x: o1 M/ l2 v# Q( d0 T) ~
int x00,y00,x0,y0,i,d;
: w1 s$ t1 J9 t$ R- x, ^ {
if((y2-y1)>(x2-x1)){
, C" n' h4 M# u4 K: L+ `
d=(x2-x1)/2;
3 T0 @ p& \( g+ \
x0=(x1+x2)/2;
9 V* u% t- s9 t: i/ d+ U4 M9 |3 C
y0=y1+d;
5 M+ m6 y5 N/ B! ~3 e
y00=y2-d;
" n: \4 N" F8 l& i$ Y6 U! r* u3 b
for(i=0;i<(d+1);i++)
- ?0 Z5 ^" T3 T# b$ e; w1 j6 |
recls((x0-i),(x00+i),(y0-i),(y00+i));
+ z3 R- Q9 A2 `! C/ E+ j- q, o8 B& W
delay(10);
* |, s5 j N) ~( N/ [0 b3 o6 ]
}
9 B' n M0 C7 m7 Y; o
else{
% Q3 m. u: E, W; x
d=(y2-y1)/2;
( N1 V0 ^) }' g# L1 A6 n; I! t7 J' D
y0=(y1+y2)/2;
, x8 y, M$ _/ ?( P) ?5 P" Q
x0=x1+d;
: r1 `6 l% ?, M5 Y" k
x00=x2-d;
- a! b/ s$ f+ N" j: u& W9 e) a
for(i=0;i<d+1;i++)
l) J: t/ J. ?5 X; B% B c% i/ y
recls(x0-i,x00+i,y0-i,y00+i);
& d: m. m. C9 B7 v4 E: o
delay(10);
( a2 O4 S) _5 c
}
/ o) f% }) V; Z# g4 x, l" \- @% ?& w
}
3 Q: T# E' Z/ Z7 e+ ~/ h
' u( x6 y; j' O- e* \: D# d1 A( ]
/************* clear rectangle side(矩形边清屏)***********************/
# o5 Y% _% K# R/ @& M
' N7 Z: {% `6 ^
void recls(int x1,int x2,int y1,int y2)
# l5 o5 b r: I- T
{
# @" } B }( x$ u5 C" E: `6 ^
int i,j;
# @1 b- i ^, K6 F
for(i=y1;i<y2;i++){
$ ?" J( ?+ Y8 j, e; u
goto_xy(x1,i);
9 |- r( q( _+ t( g
putchar(' ');
+ _: }0 D0 C4 c( q" I$ a
goto_xy(x2,i);
' z4 x" q2 P9 \; v7 ]0 J# i/ y
putchar(' ');
2 z; F" ?7 M8 i3 o) `8 v
delay(10);
$ R5 ^' i2 f( j# ^* n! C
}
: ]# J3 I2 l7 Y. S
for(j=x1;j<x2;j++){
9 P6 K* u9 n) E5 S% e* z
goto_xy(i,y1);
& b5 W9 q n% Q
putchar(' ');
8 p0 y; G8 X, V9 t: X
goto_xy(j,y2);
; I1 q: |& J3 Y, t; r" ^
putchar(' ');
, J8 Q% P" K# ?1 I: C. q9 F
delay(10);
/ j$ n! x) C2 D# g" S" n
}
$ H1 P7 v( @1 J# X1 t
}
( B/ J4 S# F0 |. Z4 Q
/******************open screen clear(开屏式清屏)*********************/
: N6 s- O5 N H6 S; W! O* k5 o2 Z
% K4 x8 o' }+ [& ?4 ]
void kcls(int x1,int x2,int y1,int y2)
% Y9 Q. P3 Z1 M2 ]: ?8 g% B
{
: h; R3 V; I1 }
int t,s,i,j;
5 e" K' d! T$ M- _" Y. o
t=s=(y1+y2)/2;
?8 M# ?0 L% ~8 O; U+ a
for(;t<=y2;t++,s--)
* T. I1 ?, r: P5 ?3 `( [; M9 I" n
for(j=x1;j<x2;j++){
: b9 h# a A$ `& P; }9 U. d
goto_xy(j,t);
1 x& x) L) s; v8 F( ~1 S: }
putchar(' ');
. d4 e- _# B" s3 ~$ `8 z) g; o
goto_xy(j,s);
- t' G4 T3 v- s* F, A C
putchar(' ');
$ {: h' y+ x) {% {) v' `: r
delay(10);
" y, N( l& A7 M
}
( v1 @4 D8 F3 @- D
}
6 K' h$ \# R5 k
/*****************close screen clear*****闭幕式清屏*******************/
1 s$ z M/ ~. F0 G/ X3 w
6 o% S$ \' ?* ]) D- e* R
void bcls(int x1,int x2,int y1,int y2)
) C, y' b6 [! A/ m
{
# n, r4 T( S E
int t,s,j;
O# P. k L( O" n- ?& X
t=y1;
( a4 c* E( R. r) N0 O
s=y2;
8 [' j8 P' r8 `; j: G3 g' i
for(t=y1;t<(y1+y2)/2;t++,s--)
) p% s; \9 k" H; q
for(j=x1;j<x2;j++){
, P8 u- ?. \4 d" r5 A: F- z
goto_xy(j,t);
- K& X; g/ z" Q6 j9 d& I
putchar(' ');
Q1 t' ^1 C6 `# i1 W
goto_xy(j,s);
9 b' T& s4 p0 d' K
putchar(' ');
* F; {1 [% k8 P
delay(10);
% ]6 u' w/ I& k1 q% y* K
}
4 e4 Z6 G* T; ?% R
}
* y+ B1 ^* A2 R
/******************bottom screen clear(自下清屏)********************/
( N% T1 w3 r" n
9 k, M8 C+ D3 `6 u
void dcls(int x1,int x2,int y1,int y2)
$ I% H" h' Y, t- ~+ Y3 U' O
{
X$ z. ]: N+ ^2 E0 f
int t,s,j,i;
+ z' y$ x, ?0 |
t=s=(y1+y2)/2;
: ^! U; o% z* u7 G# v
for(j=x2;j>x1;j--)
" x6 x% X7 m8 H r2 j& a
for(i=y1;i<y2;i++){
" @- P! b6 T3 @
goto_xy(j,i);
0 `( [ {: w0 w/ l
putchar(' ');
; e- S1 X( k2 p& B. v
delay(10);
' X( g! P8 x; ~+ X
}
* x8 C5 X* ~7 J0 i/ [# K. e
}
" D% H7 s1 c% W0 t
/******************设置光标子函数******************/
4 X8 @, B, h" y+ k- |0 D6 M
% q; r' c( Y v6 }" G& o: ]
void goto_xy(int x,int y)
" T# H- j/ c7 l A% ^8 M1 z+ w; I& B
{
6 ^: h0 H: w3 |
union REGS r;
& x. k2 h* D# O
r.h.ah=2;
, }( e1 p5 Q4 `; L
r.h.dl=y;
# M( w5 a4 h) C* I+ {9 }8 W
r.h.dh=x;
3 J8 g- I2 s z7 a1 i* M8 l& v/ s- {1 c% a
r.h.bh=0;
. ?. t; e0 t( K4 ]* L0 N( i
int86(0x10,&r,&r);
( P1 w: m% ]% S. K9 N( h1 o
}
/ D" @+ t7 b2 X
i" G4 r5 O; z% \5 ]
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
8 u) r" n- G: [& e. A; U
: `* O/ Q) P) a. q, z; t" n* v
void puta(void)
/ g/ N0 B z! Q) U4 `% S8 q
{
- K$ [. R+ B z. Q; F
int i,j;
9 y/ B7 l( E/ I6 Y
for(i=0;i<24;i++){
6 Q# F# s1 F# j3 D' F3 v, m( s
for(j=0;j<79;j++){
: ~- |% H' W6 C4 d5 F
goto_xy(i,j);
+ D& M/ d2 t- s( w9 C+ g5 x
printf("a");
& w6 w; n; Y" |; m# o
}
: R( G2 p j4 @ g2 T# `. x
}
4 U/ W# v5 B! x# }" O" {
}
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2