标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 i+ f4 Y" n0 M% P
1 h* y; K1 R- E9 `% b& j
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# G7 @$ @/ ?' n: j. I8 w+ z* X
4 J' H/ q3 L0 o, s% O3 H! L( Y
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ f9 x2 U* z8 a
子函数及演示程序:
, n% ^' e5 H6 l
3 X5 \5 {' y& k& W
#include<stdio.h>
/ e R2 X* D/ w5 l' P) `- @, y
#include<dos.h>
2 l; v% K* _% @9 d& V" [: ?
#include<conio.h>
5 Q! e! m2 ` G- D
; _5 M6 S [* z# |
void goto_xy(int x,int y);
' A+ N' q, m, V: W4 h0 r* n3 O. U
void dcls(int x1,int x2,int y1,int y2);
5 f9 Y6 ?" a% V$ o+ {
void bcls(int x1,int x2,int y1,int y2);
; v$ p4 |5 x, g# M" p, H
void kcls(int x1,int x2,int y1,int y2);
; ?( c1 S' `% u7 j( o
void recls(int x1,int x2,int y1,int y2);
+ t" U# O9 \( C" }. a
void zcls(int x1,int x2,int y1,int y2);
0 p* v/ e: d+ [; u" e( _: c
void puta(void);
' H. V* Y% `# C6 A' x5 w
: I# M: s8 U0 X& K
3 j/ i4 d6 l7 s' s/ [8 M# c
/*--------------演示程序---------------------*/
& C, P% l& {: J/ V
main()
8 A1 S. {$ J. T) F
{
' D4 p* u6 c5 [
puta();
: E/ K9 `- h4 n) H
getch();
% r! [3 w5 @9 [% U
dcls(0,4,0,79);
' a- S' T% w4 ]
getch();
) Q5 c. |7 M+ B& e, L3 T0 V: s' _: U
puta();
# W0 B2 u1 m! f" ^8 X, @0 _; M
getch();
& j- m! O- E, J' _4 k
bcls(0,25,0,79);
" _$ D9 q6 A( R# c/ U" O. m
getch();
! p) f; \: M# \4 Q1 x. U
puta();
' p+ {4 c9 ~1 Q" Q5 a2 s* @
getch();
2 r6 b4 t6 L2 J. M1 L
zcls(0,25,0,79);
0 p- Z" z: s( v, V; y( i
getch();
2 Y4 e4 ]4 o7 Z' y2 K. K: z4 d L
}
2 Q" a/ K! I* Q; K2 u+ \' f; ^
/*********center clear screen(中心清屏)***********/
# e& h& ~" X5 x$ P* y5 f
void zcls(int x1,int x2,int y1,int y2)
4 `6 }& l2 @/ |: {
{
" u* M" R3 @/ @; a
int x00,y00,x0,y0,i,d;
. q( w0 D/ k/ Y* V0 K
if((y2-y1)>(x2-x1)){
& B% W9 ^7 V" C" J: D# Y
d=(x2-x1)/2;
; ?/ w0 X; Z) A8 D
x0=(x1+x2)/2;
7 R& ^4 Y9 j9 C3 O, W+ R
y0=y1+d;
, ~+ u; Q' {+ M8 e+ F, g
y00=y2-d;
4 B2 m f* I4 l0 g' `- C3 k
for(i=0;i<(d+1);i++)
$ \7 P9 q9 D2 S+ p. z3 G
recls((x0-i),(x00+i),(y0-i),(y00+i));
3 w2 _$ U0 E+ g) j9 L2 Y" B
delay(10);
/ X' g3 r# c! d6 y$ {/ J5 g
}
% p4 Q w# h5 V6 {! P+ @6 ^4 t9 B/ ]; q
else{
: d% Z) H# J/ M. @, W) s9 y6 o4 w
d=(y2-y1)/2;
0 F- |3 K2 _% B, R5 [% H
y0=(y1+y2)/2;
& P \+ @! F! H; f8 w) c0 T* }* g* M
x0=x1+d;
4 A7 C9 i- \/ R4 |" a
x00=x2-d;
, ]/ v- X' i# |9 p9 p/ A1 ~" V2 X
for(i=0;i<d+1;i++)
# ~7 X+ S. a) n. @
recls(x0-i,x00+i,y0-i,y00+i);
& P+ l% n' N% b' t) ~1 L1 `
delay(10);
' ^- ]" j* m; M z3 u
}
. k2 `7 t* L+ _ h" i( r0 e' h6 j
}
: y" @. q( ?3 [2 r" ]
# H; o0 l$ v% ^8 W/ c0 s
/************* clear rectangle side(矩形边清屏)***********************/
/ N0 }) v! C7 o9 v
1 [4 g8 K( O* Y$ b- F5 A. p
void recls(int x1,int x2,int y1,int y2)
8 J" K0 ]! F, G8 y1 E( m$ ^
{
% I" [' f/ l, o9 J0 N0 J/ `$ }8 u
int i,j;
, p* a+ _; o# P8 A
for(i=y1;i<y2;i++){
6 x3 [4 o3 \; S
goto_xy(x1,i);
! v; U3 U5 R" s0 U% A
putchar(' ');
& y2 }$ ]6 D/ @- q/ ~! V
goto_xy(x2,i);
# L9 p5 M' @8 g. i) Y! A
putchar(' ');
; X" o9 `4 l3 C1 |( V
delay(10);
! S5 J% c$ e( j- ^/ U- f
}
0 n5 ]* r9 ~" i1 M; t/ a8 Y
for(j=x1;j<x2;j++){
G2 S) y2 H0 y+ `- ~6 R8 L0 Z; F
goto_xy(i,y1);
: U' V' H+ X5 o1 e7 J
putchar(' ');
$ ]) W4 V' _" m8 O: _
goto_xy(j,y2);
+ w* |, T8 I. E- l: T+ G8 W
putchar(' ');
. @ |( k1 i. h
delay(10);
% o8 _/ P7 i$ \: P- R
}
$ Z, \' y+ E+ N$ m, A# O6 P
}
* r' c% _9 E8 D& T9 O
/******************open screen clear(开屏式清屏)*********************/
: P) j4 L6 y8 ^4 y
$ M- F8 h/ y9 g% z2 l/ x) Q
void kcls(int x1,int x2,int y1,int y2)
* _2 o x3 p5 f, R
{
# l. `1 l. _( O4 ^' S r5 ?
int t,s,i,j;
( L# c: M$ n9 F6 d+ {
t=s=(y1+y2)/2;
. g7 }; ?. F" S! H8 J1 b% r
for(;t<=y2;t++,s--)
. S8 p0 ?- ?# A- F' d: N. Z
for(j=x1;j<x2;j++){
% {5 k! u6 m2 @' }* m
goto_xy(j,t);
+ B9 `) i) Y0 N+ j" d
putchar(' ');
: i% t+ i* L1 k& s
goto_xy(j,s);
/ Y" U: v3 X2 b6 c& n9 z
putchar(' ');
1 {( V# P5 `3 J( T5 n* C
delay(10);
+ I& |9 V) b% B
}
& Y3 r4 M6 A' T/ R. f3 I
}
- G$ ^# J+ J! f# H
/*****************close screen clear*****闭幕式清屏*******************/
C9 N8 [2 [, ^, B
$ N9 K" X/ `1 C {3 j) T; d
void bcls(int x1,int x2,int y1,int y2)
5 Z% q# C* }' V) `2 {
{
8 o1 r o+ P1 c% _
int t,s,j;
5 W+ I( f" k' p! G- ^
t=y1;
# B, d6 j; h5 U' |5 k, K
s=y2;
) S( U9 K# K" O
for(t=y1;t<(y1+y2)/2;t++,s--)
# q r! U7 \9 _; \8 C) \
for(j=x1;j<x2;j++){
+ a/ q# j- w2 ~; U6 t6 J
goto_xy(j,t);
g& T4 `4 i9 y0 }
putchar(' ');
1 X0 e5 c0 E t( |
goto_xy(j,s);
2 M& R' \; v6 H$ x* O
putchar(' ');
; n' R- S. Y* X1 P' L5 c2 A. d
delay(10);
. f" I% f! Z$ D
}
" k) H' t3 \- k/ y/ @% m( N ]: J# Q
}
( M3 m: \% d/ K" O& s& @8 n
/******************bottom screen clear(自下清屏)********************/
: |9 z. C$ A! i1 S+ \. ?& F1 ^
) ], Z" m1 ?8 [, u& i
void dcls(int x1,int x2,int y1,int y2)
3 ]: Y# S2 c% M! o; `
{
% J+ m" z7 x4 t7 H2 e5 @5 ]
int t,s,j,i;
: z+ ~$ ~+ R6 Q7 F1 N
t=s=(y1+y2)/2;
, B$ U8 \ l' M
for(j=x2;j>x1;j--)
: J" k7 y6 ?2 X- h
for(i=y1;i<y2;i++){
) g. r8 }# q, A1 e
goto_xy(j,i);
/ T' p( y. U3 S, d
putchar(' ');
' s; b! g7 O2 w/ t! ]8 s
delay(10);
" S: i# M9 C! j. v3 }
}
( G) v1 a- D9 R3 U/ D& p2 v
}
0 [2 ]1 R$ C2 b& }- B
/******************设置光标子函数******************/
. [) h, j9 M% u* z6 ?- _) a
( ^4 Y$ O& F, Z: T8 m9 [3 P
void goto_xy(int x,int y)
- x1 |$ d5 H0 ?/ h) K% f/ Q- G
{
! X# G) a" L% S; o
union REGS r;
8 }; V- D( L r J
r.h.ah=2;
0 N, }% T. V" V8 w$ j
r.h.dl=y;
: W5 R; Y1 P" E) R/ S# ^7 L9 y
r.h.dh=x;
/ O! a4 L& N; R; }% ?9 |
r.h.bh=0;
& d7 ]0 i9 O( \3 J# T& Z( h) t; \
int86(0x10,&r,&r);
" d# ^2 Q6 @' ?5 P8 P: k, a
}
5 l6 Q( A& K8 q$ S
! ~8 l( _( e1 O8 i
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 s5 S1 {3 s2 Q
/ p8 I7 [, }0 _4 Y4 f: \/ v
void puta(void)
* j4 y, q3 e- `7 O& n
{
& s5 S; G& c3 t! X% E5 H) t2 X! E. ~
int i,j;
6 R8 k7 o, R0 B: } }
for(i=0;i<24;i++){
! m V/ h( F" m+ m0 T5 t
for(j=0;j<79;j++){
/ O1 Y& \% h' O/ [% m3 x
goto_xy(i,j);
0 e- y; q) Y a# e9 t) @
printf("a");
5 t, @" L% h R( `1 f
}
l) q" ^8 x1 a" m7 g
}
K) V4 @+ h4 y+ Y, \0 B* R
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2