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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 @ {' M* R: O) }- D5 R/ Y7 F* y- V0 o
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. D9 g$ L9 x( \8 L# V& r% v+ R' f1 B
% s5 M3 S3 k4 x' s/ `3 K 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# l, ?, g# [9 Y; W+ `! C; D9 n 子函数及演示程序:
) P0 F X9 | C' B% y1 ?1 @+ [: h7 z# R. h" ?- @4 K
#include<stdio.h>
8 M3 X% Z- s& w6 e #include<dos.h>, G3 d, j4 H d: B' d
#include<conio.h>
1 E5 E8 |; t- Q1 W% e8 y; W$ x( ?$ U* a& G
void goto_xy(int x,int y);# g: f: c, _8 G. i
void dcls(int x1,int x2,int y1,int y2);; `1 j9 p, r8 M. s5 S' L* t
void bcls(int x1,int x2,int y1,int y2);, ]* v3 o3 F/ r9 u5 R$ i1 z6 S$ r
void kcls(int x1,int x2,int y1,int y2);+ I) `& D2 g, Y
void recls(int x1,int x2,int y1,int y2);
' @+ S# y- m% Y3 ?& _/ k void zcls(int x1,int x2,int y1,int y2);
" X/ H& j9 l1 U void puta(void);( {& C+ ?/ E6 R( y0 S
' B% E# j8 V N) Y% C i
h/ ^* V( O% D/ K2 I /*--------------演示程序---------------------*/' l4 P* L$ h- q6 m- J9 h
main()" b$ ^ J0 j1 b# i8 a8 l/ a; Y5 X
{
! g+ b' {: J( W; X- W: ~) F# [ puta();( W: J# y4 x7 ^+ t2 ^6 g# E
getch();' l& C& r& d" F+ H' o
dcls(0,4,0,79);
4 t2 u$ Z* p) z0 w) y0 \5 f' y' @ getch();7 T8 K" u6 y# b1 p6 q
puta();& J- T; T9 n! \1 r
getch();3 M) P+ v# P6 ^8 [* O/ ^
bcls(0,25,0,79);4 E$ e# e" W3 K: e) S6 N5 J/ U
getch();
# D$ A7 Z$ L2 p! e; u2 g) P* U( r puta(); Q6 n* N( B. t _
getch();6 k& y* K7 r. v* R
zcls(0,25,0,79);
( i. y ~( H+ @' J getch();/ T, \2 o) y, S$ N
}5 g0 z2 t( y( G: B5 f
/*********center clear screen(中心清屏)***********/9 P- [: K$ l( n p2 M% g
void zcls(int x1,int x2,int y1,int y2)0 s9 n2 j3 S" g% |
{2 K/ ?) m* B/ p7 l$ q8 j- \
int x00,y00,x0,y0,i,d;
' V- G' Y9 y: R( Z; q( {% r if((y2-y1)>(x2-x1)){
0 f' j- Z( ]4 b! o' f2 B6 d k d=(x2-x1)/2;
% G9 `7 F3 ^! Y+ R5 b x0=(x1+x2)/2;
; g3 T' R! ~0 a0 u0 F& v* E, d y0=y1+d;
2 X* S* z% n+ z y00=y2-d;8 K- G! O+ Q* I0 s2 \( d
for(i=0;i<(d+1);i++)
- q; N5 x) ~" j5 r* z& m5 ` recls((x0-i),(x00+i),(y0-i),(y00+i));+ I; G. \5 j- z1 x0 g
delay(10);
! I& ~5 O: x4 k" [1 K& P, X }
; d+ t. {; J3 z& a, R1 ] else{
$ y1 r E8 D4 q7 c: L x8 W1 c d=(y2-y1)/2;# L8 z, ?: ]2 E
y0=(y1+y2)/2; ^: r. q9 [3 L! F4 O( J q' M* p8 [
x0=x1+d;2 b% ~" b& q0 k% O$ G
x00=x2-d;
$ x0 x2 G, f+ W) c; R1 X4 R for(i=0;i<d+1;i++)9 Z! {% d# f9 r4 D5 `6 z# f
recls(x0-i,x00+i,y0-i,y00+i);
/ r. {; G5 Z/ f9 e$ O1 h+ @" y delay(10);
8 d& T0 h& t! F# Y9 K; X9 \/ ? }
, f+ ^; t. v9 m }% f6 ]3 x0 I6 n! E+ |4 m
' {! a4 l$ u" j# O. D
/************* clear rectangle side(矩形边清屏)***********************/
# Y' B! C' f) c5 }8 c3 f' H5 j
( l$ g- D: w4 h1 |- _; K1 G void recls(int x1,int x2,int y1,int y2)" O1 K) m+ L* p. G- @" B: F/ }( B
{- |9 m8 i) Z' `/ I; m
int i,j;
0 v* c7 Q( M# O# m( K for(i=y1;i<y2;i++){
" p; p/ w, J1 ]+ d A# Z* d6 W) u) r, m goto_xy(x1,i);
% ?- r5 K4 ?' Q. u, C4 d putchar(' ');0 s4 \& T: \; p4 p0 h- R2 x
goto_xy(x2,i);. I. `9 S8 G3 I9 v3 g2 T6 B1 h
putchar(' ');: @7 j. a, ^+ ^( f& n4 N: ?) H
delay(10);
$ B2 E, \) K: d. y* g }
% _/ y: j0 w# S7 D, l, Y for(j=x1;j<x2;j++){1 E9 Z x+ O. C Q9 ^$ X
goto_xy(i,y1);( B4 B* x7 }. p% x- X; l
putchar(' ');
3 R0 h& J( K" R+ [: a3 P goto_xy(j,y2);$ d3 n) ~) x7 I
putchar(' ');7 A, H- X2 J% n& N( J6 j: c
delay(10);
1 J6 N8 d4 @# S3 }& | }
6 g- m. J+ I; a/ W }! p Y' {# E: y. K3 p+ ?9 a' J p
/******************open screen clear(开屏式清屏)*********************/( h3 s5 G( l/ `: v f
4 }6 o! p) `2 v" P
void kcls(int x1,int x2,int y1,int y2) p2 R, L2 S0 F! \- t D) j
{7 e4 q8 q4 o0 \
int t,s,i,j;" [7 ?) A, u2 D: m. T+ @( y
t=s=(y1+y2)/2;
( M: U% c. e* G* M G, m: N for(;t<=y2;t++,s--)
& P5 [4 ]# f# g5 Y for(j=x1;j<x2;j++){9 U3 r$ A3 R5 V$ S- S. n4 |
goto_xy(j,t);' d" s- X# F8 a& D& H0 }
putchar(' ');
" y% a/ w6 }+ Q) Y* d" E* Y+ ^ n+ } goto_xy(j,s);
" Y; d0 J' ^ |4 u7 |6 R putchar(' ');2 V& a" b* X: @3 U) r! ^
delay(10);' `3 [0 |5 B( @: G' ~9 S0 T) Q
}* e" o5 s/ T6 j& r9 ~6 y ~
}! a) ]3 o7 y0 W7 ]& A. |& x) X
/*****************close screen clear*****闭幕式清屏*******************/3 O+ d- |& R( e. |% D) ]! D/ q/ N- S: k
' @* }/ z1 Y+ p( L% x( y
void bcls(int x1,int x2,int y1,int y2)
- S- {& z' u: |# Z# C+ C {
8 K' R6 d7 z/ Y! e int t,s,j;
/ M+ _9 c% c, t5 q% {2 L t=y1;) }" Q; h$ H. i% ^0 x
s=y2;
, |. k! {% R& C( u9 s' I3 Z* D6 y for(t=y1;t<(y1+y2)/2;t++,s--)
' n, s3 Y( l/ w+ H8 }, s' H for(j=x1;j<x2;j++){2 m; R% I, D( o( u; j! Y3 p
goto_xy(j,t);! N! Z' t/ \( C7 t* ]
putchar(' ');7 w# [/ c& r, v. o9 o% V; l: i
goto_xy(j,s);
3 t5 f l' T6 M2 j! Q putchar(' ');% y5 K# u1 J# Y* e" {8 a6 e
delay(10);
5 l7 C5 S+ Z( i/ y& |0 b6 K' j! ` }5 H& B. M( ?& S! U2 M9 |
}- K7 h5 Y, D5 W a) o1 V) l
/******************bottom screen clear(自下清屏)********************/
! _! [' P- b0 @8 R
8 s* v6 e- w( U' m void dcls(int x1,int x2,int y1,int y2)9 c n' t: o5 W1 s( J! z" `
{
; V B2 _' ]' V/ B8 q* o. O: ] int t,s,j,i;
9 V8 [0 z* q1 B2 g+ }4 Z { t=s=(y1+y2)/2;
* W+ w8 v0 f5 e, ]' R5 C. V* j5 T for(j=x2;j>x1;j--)
: }* b# ]+ t/ Y( m+ l4 N for(i=y1;i<y2;i++){
) [/ r. W5 k! L7 U8 b goto_xy(j,i);. @0 n+ C8 A4 i% v3 x# V- \
putchar(' ');
; k/ V' d! X8 M/ z; G$ J delay(10);8 q& I& `( J! s) g8 a8 m# m& T; K
}
& x( ]9 q0 {6 U1 ~- {4 V }
. c/ i! z( U0 h- N( S /******************设置光标子函数******************/
% \6 @! J' ]9 D4 L& J q
. E2 r/ g c+ b void goto_xy(int x,int y)) [+ y1 q# v; Q3 u! H9 Q# l
{
5 F- ?$ M* @! Y8 W9 G& C union REGS r;1 o! I% @# E: S7 j3 Q
r.h.ah=2;
2 C+ i6 }- r$ |1 C3 k! X$ f r.h.dl=y;9 C! `! `, I* L4 e7 V. c
r.h.dh=x;
7 Q# \, G3 q; G/ {+ w+ G' c1 p) U r.h.bh=0;. O4 j( o) ~" w" q
int86(0x10,&r,&r);
1 h# S( I2 O$ }/ d/ r; [! c }) B+ C# v$ h$ \1 y: I/ _
1 k; z7 q% ]# _/ C6 n3 C. x: V v /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 N U1 x0 t& z& V# K
2 l9 N& F, @8 H) Y: Y7 z# o* y5 _ void puta(void)
6 N$ a+ Q5 t. _5 x. X) q: q4 M' p% C {5 }! {8 Q3 c9 \% G. t
int i,j;) ]2 Y2 ^- R- ]2 d5 R2 u
for(i=0;i<24;i++){
4 t$ K$ Y! _& K+ G! V) ]7 M for(j=0;j<79;j++){' |3 K$ Z3 V) m5 c0 H* Y/ Y2 l
goto_xy(i,j);+ n4 [8 D' v9 B# r7 A+ m
printf("a");! e, j9 n7 ^2 Q' y
}% p- e K2 `4 X! ]' e/ D1 M' e1 Z: u
}
% Z7 Q% ^ H- l% f1 O } |
|