|
  
- UID
- 133
- 帖子
- 51
- 精华
- 1
- 积分
- 186
- 金币
- 55
- 威望
- 2
- 贡献
- 0

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 o* y4 q# V7 H9 R
~9 I2 o' f8 W( U
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) L# e0 e/ V) x2 {( l: T4 ?& z* k* S+ ]4 t- I$ @6 U0 V
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ o4 j* p: u" ^
子函数及演示程序:; p# l L& C1 H4 R5 y6 _% e* W" G
C+ X4 q: T1 f7 N$ w! G
#include<stdio.h>
+ ~$ `2 `* a; s* U! u' _+ p" p/ C #include<dos.h>
2 x" e$ c: C7 e+ Y' P4 m# g #include<conio.h>8 e! ^* k2 E+ j4 G, }+ A
$ `5 F3 @$ k- {" c7 S; X( ~ k void goto_xy(int x,int y);( a$ w0 Z, c- R
void dcls(int x1,int x2,int y1,int y2);
5 k: g. i# @8 Y R, h void bcls(int x1,int x2,int y1,int y2);. Z: Q: s T, h* u5 c: r
void kcls(int x1,int x2,int y1,int y2);
$ ~2 O. `2 T/ A7 r t void recls(int x1,int x2,int y1,int y2);
7 x0 A; h7 f/ F5 h& U5 U" B void zcls(int x1,int x2,int y1,int y2);
2 D7 f' @! F, [- S' ^# U void puta(void);1 i+ k! u7 ?; M F4 R
% v- R0 F5 {4 U2 w
- }, S% f. v5 z6 M /*--------------演示程序---------------------*/
. R& | U8 h8 O9 k# f+ s$ } main()
! a. N0 z7 Y2 B" J! x {
9 n2 `9 r; R0 R puta();8 m5 R3 D! V# D. {2 u# w
getch();4 }2 v9 {" X3 P- _
dcls(0,4,0,79);
! s, m9 q7 z: `$ J7 x getch();! B V# a+ r/ P" e; Q! K; F
puta();; Z5 F9 X, W k8 C
getch();
$ I7 f+ V% T; R0 i2 Z0 d0 s7 G bcls(0,25,0,79); m2 y* n8 B7 y. ~( ~2 S" ~
getch();
3 W: N# ^( d% Z/ v3 O* m1 q puta();
0 j1 [' u/ |9 @5 H7 H getch();
6 B5 A- T" D* v0 W! A zcls(0,25,0,79);( M; j) C Y7 F: F0 i ]
getch();
8 D( O2 l/ H9 u h: H6 o }8 }6 U8 X0 P9 [' x$ C
/*********center clear screen(中心清屏)***********/
" n% ~, s+ K5 b3 \ void zcls(int x1,int x2,int y1,int y2)
' V v# b) j d5 |. i {; }# s1 j* a5 M6 Z
int x00,y00,x0,y0,i,d;% }, U, Y l; @1 z
if((y2-y1)>(x2-x1)){
- B! V3 z0 ?3 r* V. c d=(x2-x1)/2;0 l& w. s c& E% k
x0=(x1+x2)/2;6 X, F& i0 }# M+ A A# l
y0=y1+d;
* w8 a; V! g: m' E6 P- | y00=y2-d;
) o1 z6 `% S* |6 ] for(i=0;i<(d+1);i++)2 }" \3 {5 g X8 F, I6 \
recls((x0-i),(x00+i),(y0-i),(y00+i));: N" D6 R5 T8 h$ \' z" c( ?& o
delay(10);2 `* e% r- b, z4 K$ |
}( E. B d ?0 }6 _. `
else{
' @8 G3 @6 l# |# I d=(y2-y1)/2;* d% \# U" b7 P% T, k1 r* ~1 n
y0=(y1+y2)/2;
0 z% r, U/ k) [0 ^ x0=x1+d;# m% c8 n* m% E+ K( r- q1 V
x00=x2-d;
/ F% k6 M# V/ L2 L" p6 p) U3 q9 u for(i=0;i<d+1;i++)6 t7 j, A0 T# U& F" F' U
recls(x0-i,x00+i,y0-i,y00+i);% E8 e# U) o, ]( n# o
delay(10);" L2 J9 ?7 {* {9 q
}
( M- Y8 n3 [" z5 Q6 {- _: P$ b }
& ]) v; a( @6 Y6 e: f9 q; l( }" P: V% F- f6 t. D9 I
/************* clear rectangle side(矩形边清屏)***********************/
* x5 e6 e, x6 W% j- y& k/ v. ?. z5 z6 s# n! P% J% I
void recls(int x1,int x2,int y1,int y2)
: m: e; y$ \: F" s: q: S# [ {2 |' F- `) X R% [0 E
int i,j;
& M0 i: k0 l& p2 s8 ] for(i=y1;i<y2;i++){4 H9 v0 C+ d, A' S! P% L; i- Q
goto_xy(x1,i);* w2 Z5 T- N4 s2 @- E( Y8 R( h
putchar(' ');
+ U3 z8 d( V6 F( ]" v4 S7 T goto_xy(x2,i);$ A9 c8 ? q+ B) E& B
putchar(' ');
3 S5 j/ T+ O- N" n6 R/ F$ u delay(10);7 w) f( T. d% w9 g5 m. m8 W
}. F2 E+ k9 P8 ]4 h$ p
for(j=x1;j<x2;j++){
, J8 U- Q9 L4 ^3 v. a goto_xy(i,y1);
_7 j$ t- \! J; k' r8 i% F putchar(' ');
5 }: f4 B# L+ G% V A goto_xy(j,y2);
2 [3 ?/ E C5 o% }5 k# _% Z putchar(' ');& j' N0 L. f6 Y! ]7 f
delay(10);% F6 a! P+ i6 W3 _4 Y+ e3 d
}* Z9 c# L+ D4 V2 r
}
- a& i" u( V5 ]8 a/ d /******************open screen clear(开屏式清屏)*********************/! b- Y8 p% Q1 y3 K0 _. g( o5 i6 W
$ P/ ]4 Y$ x" _" A
void kcls(int x1,int x2,int y1,int y2)# T5 }& u' n" u% c- d" e% U, B
{' f1 r V# `1 B' \) E) x4 r
int t,s,i,j;
) L9 | j* a. k, I1 K( [ t=s=(y1+y2)/2;5 q0 v. u% Y& r) j5 d9 }0 V
for(;t<=y2;t++,s--)
- L; D+ A! }0 q) a for(j=x1;j<x2;j++){) i: X6 C! {, n: m2 K- t) m
goto_xy(j,t);
. a3 L2 @* q" m2 j putchar(' ');! i. h0 K/ Q6 K# F5 X# u( g& ~
goto_xy(j,s);
4 M, L6 t7 p( p) U. i putchar(' ');0 j' o5 k1 A8 V6 b$ S5 X+ T; O
delay(10);% s2 A& A1 }$ h; E
}0 y& E7 U [+ _! o6 v9 f/ Z& }0 z( d
}+ w# F2 |( b2 X! R. z7 }9 l9 F
/*****************close screen clear*****闭幕式清屏*******************/+ b8 A, F, U5 n/ w7 y+ j
5 x. q& E+ r& J( I; ^ void bcls(int x1,int x2,int y1,int y2)3 o/ _* v# D) K6 s( D
{
2 w! m2 x& v! |) B: o( O int t,s,j;
+ r& D# C5 L. t" u/ G% i t=y1;
3 L% O* \' c/ o5 w s=y2;
+ z0 b7 y$ h; B8 o for(t=y1;t<(y1+y2)/2;t++,s--)2 S9 g+ d# V4 V8 k' d
for(j=x1;j<x2;j++){4 i1 i% v+ m6 _. V+ E
goto_xy(j,t);
5 ]$ U8 I+ a* C3 X putchar(' ');6 U( U; s7 e8 m
goto_xy(j,s);5 \! H7 P# [/ M4 Y
putchar(' ');
0 E2 b H) ?/ E9 v- W0 f delay(10);
5 j. `$ M' P& p! | }
, i5 D$ `" ?& i }# z% g7 W& E+ r- i
/******************bottom screen clear(自下清屏)********************/
1 P( \2 R/ b, m) Z m2 _* f: a* H! ` K0 y6 W0 D- W! Z1 F
void dcls(int x1,int x2,int y1,int y2)
2 Z$ Z6 y* K7 M: @0 h4 I) |! l) _! {) A8 H {# G, f* I& x& u6 Y5 o/ r( l
int t,s,j,i;( u- s9 @1 }, t* u4 R2 g) m
t=s=(y1+y2)/2;& r+ V: A: x8 K3 {1 u
for(j=x2;j>x1;j--) |8 ~ Y3 q8 }
for(i=y1;i<y2;i++){
6 H7 |8 S* ]6 C9 }0 Y; b4 y goto_xy(j,i);
! G+ b+ R9 g6 @' Q8 ]+ w: y putchar(' ');3 z7 ~' ^' d( Z; @
delay(10);+ r9 K! g s4 W5 A" A
}
( p8 s, J2 y8 p$ u! X2 n" ^ }
8 S t5 |+ P6 E# N) N /******************设置光标子函数******************/
# R2 u- L- e9 i% d6 g: z0 K4 \1 k* X6 V1 m& v" G6 ~3 k D- ]+ u
void goto_xy(int x,int y)% \( b* q \( D- t& C2 K1 h" u8 W
{$ J: |" p# I8 m& c W
union REGS r;# W. b4 N. c" J4 y2 t" Z
r.h.ah=2;
3 D" T7 q+ G/ x" ^ r.h.dl=y;
# M" I* C3 ?# `/ N7 i" {$ L! \ r.h.dh=x;& s3 ~1 q% ?7 Q1 y# M, S& S+ F: V
r.h.bh=0;
& O! G- h' p# P9 r3 X) y int86(0x10,&r,&r);4 i4 h2 u/ `; s2 F
}( d' ?# r) U4 S
0 h0 Y; C4 Z% [ /**********************在屏幕上打出一连串的a字母用于演示程序******************/( ?( i0 Z0 Y$ W2 U6 d( u8 {2 g
% A: o( g) D& I1 B1 j1 N6 z
void puta(void)
, ]9 x, k+ G. y# x {/ O, d. y6 |+ b9 x( f! s
int i,j; L! o& t7 O1 i! h0 P
for(i=0;i<24;i++){
" W9 f) u' J6 |: I( Z8 D& `3 g- `+ X for(j=0;j<79;j++){
7 V L6 G# Q) b8 q( ?' x goto_xy(i,j);1 I$ n8 G+ s8 T3 O1 D
printf("a");
" g2 V; P5 k6 y5 @ }) H/ M( i# r- z: t
}3 j; N# K8 p- K) @
} |
|