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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ ^. r! b+ j! k: K) `
8 d8 t/ i& h3 p- |9 M' `: H 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" M, U* }1 i7 @% X( L7 v
5 Z+ V$ G, u" M" \: [( m
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- t) Y" t6 c4 z/ v2 {: ^" K# l! | 子函数及演示程序:
/ y1 _$ b7 Z" E0 h6 A/ j2 v
, w4 f1 ?! G/ A. d O/ n #include<stdio.h>
8 D' Z5 R; b! a% t- x #include<dos.h>
, K' g& c* V6 `9 [ #include<conio.h>
% u! Y' T3 {2 p+ u; _& m U. v+ T! |* S Y' \/ R, p/ F/ j0 h
void goto_xy(int x,int y);
2 H0 i: v9 j& Y& A. j( P void dcls(int x1,int x2,int y1,int y2);
. Q) ]; t* x3 V1 s( \/ v void bcls(int x1,int x2,int y1,int y2);- ]% |( M: }8 P2 F+ l5 [
void kcls(int x1,int x2,int y1,int y2);; y+ ]4 a8 C) S- q5 f
void recls(int x1,int x2,int y1,int y2);
; B& I+ j2 D, V( `2 e void zcls(int x1,int x2,int y1,int y2);8 C1 u. g3 y. T& D* I3 ?
void puta(void);
& A: s4 J2 [ Y# |# \" `# Y" c% Q1 Z
# `. w- }) [& m5 l: M
1 o; Y4 L* u9 @# N- r /*--------------演示程序---------------------*/5 b+ P) H' ^3 S7 O' j# j
main(): t. G4 u) R, {) P0 C$ e, {
{
& V8 q' N5 m4 F2 A- e/ s. U puta();
+ D) W: Z4 f* q' G" s7 ^' e2 C getch();0 g2 J9 p+ k; Y- m, e, L$ P
dcls(0,4,0,79);3 p& U5 V" N2 d2 ?) W! v
getch(); {& t: r( N- k; z8 G' w
puta();
: ~+ Q! p' a" e4 }+ @( `+ V" z getch();
8 V! d' ?! E) G% {) }0 z1 o/ D, ] bcls(0,25,0,79);1 O ^% s5 c6 l
getch();5 w2 c8 |6 U' ?4 T, x5 z
puta();' l( }/ H3 t- K+ X7 O; K
getch(); M: b6 L& A& f0 e* y: d( _& y0 Y
zcls(0,25,0,79);
% m7 z6 C$ Z" O. T! f getch();
! Q& A* N, A5 Y9 T p, H8 i7 Y }
3 y0 K, {2 w9 R! S; z/ ^" w9 ? /*********center clear screen(中心清屏)***********/
5 x- S1 h% J3 j1 n* \0 F void zcls(int x1,int x2,int y1,int y2). z' K2 H5 a- x2 ^
{
% {0 Z) y% c m( n/ S, @6 u x int x00,y00,x0,y0,i,d;# ^) h: U% k+ K% n7 k# I
if((y2-y1)>(x2-x1)){+ r& d. H# c, C% q
d=(x2-x1)/2;
$ B0 t5 j- `# a2 a x0=(x1+x2)/2;/ x" X( l3 X, g' V
y0=y1+d;( p7 f! {4 Z0 S! l: \3 p2 t- L
y00=y2-d;
/ }3 u7 b1 W" J { for(i=0;i<(d+1);i++)7 P: h! a" I6 R5 w
recls((x0-i),(x00+i),(y0-i),(y00+i));
$ ]. T& C6 H9 E M9 c: H# C delay(10);
; D2 k! u- H0 y, ^9 ~, ]+ p' Q H }
7 C% K! Y1 x: G! W4 W* C else{
0 E; z3 `) F" ^% G5 H) Y8 n7 i: D/ ] d=(y2-y1)/2;
z: x9 x3 b4 U* x: ^- F3 t2 T y0=(y1+y2)/2;) W# Y7 d$ ~0 g5 z1 z6 L% X% T4 A
x0=x1+d;
; ^) K7 z2 g/ B( @4 @# v x00=x2-d;% {# _6 E* s4 }+ S
for(i=0;i<d+1;i++)
% s4 R0 \4 r/ B; [8 ^# m recls(x0-i,x00+i,y0-i,y00+i);
- I; G6 C1 C- U% g4 n delay(10); K6 T$ E! w+ H3 S! j1 M1 Z
}
6 ]9 x# s9 O+ V& t) i y' ` }, L/ H& @) j6 y
% S! Z6 A5 ]: @2 r$ }
/************* clear rectangle side(矩形边清屏)***********************/
! K0 b; Y: d9 ~8 Z
' P9 Y: B8 f2 m- \ A; I* h void recls(int x1,int x2,int y1,int y2)
" \0 }. {- y/ {, ]! R {4 L' |( o: w: {
int i,j;. O N( b, i$ e ]- Z- @6 Q7 H" ]6 F+ n
for(i=y1;i<y2;i++){
4 ?! H, t& L- T- D goto_xy(x1,i);0 `- p9 A! t/ P2 d* z7 l4 c
putchar(' ');/ X* U3 R% X8 z/ O/ I) c7 l0 F
goto_xy(x2,i);% W- y& {0 T+ [ k) Z7 \: Q/ n% u
putchar(' ');
8 `( U% n5 `( }: L8 k delay(10);/ d. U$ b- |* [: o- h! T
}
9 U* a v7 Y! h for(j=x1;j<x2;j++){
( g, O* F: @" ~ P: D, |6 ]% W- K* }+ U goto_xy(i,y1);) g" Q$ n9 m E, K- ?% C
putchar(' ');) v9 t8 m' K, _" d
goto_xy(j,y2);
" p1 V( i+ v2 f3 I5 P/ ^9 G putchar(' ');) M$ r0 x6 o+ Y( ], c$ [
delay(10);
0 j) @# M u6 U! D5 H2 @2 z; O }
/ N2 v' t; l n4 D7 I2 S }
0 Y/ N" i3 \. S/ [& @6 _ /******************open screen clear(开屏式清屏)*********************/' q! F v, X3 H" p x; X
( W1 Z4 a5 v. x2 [) A1 i& v
void kcls(int x1,int x2,int y1,int y2)
: L( c0 e$ l6 q9 i# M2 }/ {: } {# _% F% `9 A: k
int t,s,i,j;
) ?9 u$ |$ y/ u/ D5 W4 i1 @ t=s=(y1+y2)/2;
& D3 X, f! k* V5 B" \ for(;t<=y2;t++,s--)
% I- @' C) Z+ k5 w' r for(j=x1;j<x2;j++){* h7 _6 t: }( D! Z! T3 M
goto_xy(j,t);" O$ H7 w. t: l2 q
putchar(' ');
: }* z- o9 P/ v6 ^( N4 h2 m goto_xy(j,s);
$ J3 y# [" T% `: v putchar(' ');
% _( Y+ f3 D- ]' A delay(10);) H; `2 g7 O1 o8 V8 K% l/ C3 I
}
g; Y1 `7 F7 \( g0 \, d }6 K/ g# N( u- b0 ?* z
/*****************close screen clear*****闭幕式清屏*******************/, _4 a7 E# g$ F
! Q0 H- u: C* t$ Y2 r! t* p void bcls(int x1,int x2,int y1,int y2)/ x- k6 J: h& A9 M+ e2 }1 M; s1 _
{3 F# w9 a( B1 a
int t,s,j;1 N2 ]) S( X. B( Y; E! z
t=y1;
$ y- Y% `2 ^* P! W3 Y s=y2;
. }! r8 o! t/ _4 Z for(t=y1;t<(y1+y2)/2;t++,s--)
, V# P$ h& M" ^ for(j=x1;j<x2;j++){$ d b, i' q) D# A% w3 ^" A; ~
goto_xy(j,t);
! ^: J" w& n6 i ^. z putchar(' ');" H( b, M0 C u2 d
goto_xy(j,s);
% \6 {: t5 L- n' F4 p6 S. z) I9 Q putchar(' ');
* X: F# c" Q7 Z' _3 X delay(10);& D t, g# j( S, @ v$ `# H! q
}
" M: |1 F1 }: _5 u- n/ `1 d }
/ G# W! c# \7 p2 Q' J' f0 b /******************bottom screen clear(自下清屏)********************/& i% X; _% E+ v1 L0 }
( ^! f1 d$ D6 \+ | h- ]5 u void dcls(int x1,int x2,int y1,int y2)( G# N+ q0 B0 [4 n; ~' D
{
; h5 K Y) k' P6 y7 f0 r$ v! Y# ?- O int t,s,j,i;
. h$ N0 Q9 @. W t=s=(y1+y2)/2;
) u: F3 I1 |, e' _: ?% b M for(j=x2;j>x1;j--)( f8 j0 N" Z/ ? g, V* s: v& t
for(i=y1;i<y2;i++){
# v2 P R; a" \0 q goto_xy(j,i);
' k6 _. I2 N: H4 i& c/ x/ C, V putchar(' ');0 u/ J, @8 O1 g+ X1 G( E' Q8 x% O* y
delay(10);" |- z* r3 ?- m) L% }, _# i: o( l
}. F/ M: ?! e' p
}
?, p( H+ I6 t2 w2 Q! p1 I /******************设置光标子函数******************/: c: {1 j ~1 B* {; p
/ |) N+ o% ^* b. f. O
void goto_xy(int x,int y)
3 Z/ G( f- g9 b! u {
$ s1 p8 D& q6 F/ G- I union REGS r;
. ~4 m0 Z1 G$ ]* ? r.h.ah=2;
, u# d- Z; n* w6 f. z! Q" C2 M# A5 j; z r.h.dl=y;
% n; T' O- j9 z r.h.dh=x;
/ q! J+ s" Z' v2 l! T5 r r.h.bh=0;. v' [! ^3 W, U" r, l: y
int86(0x10,&r,&r);
2 K k1 P9 s/ V- C, D: J }$ ~7 O F* q. b6 }" a! A6 H
3 R ]0 O$ k" {& W! X
/**********************在屏幕上打出一连串的a字母用于演示程序******************/% |( T7 c% K x$ K( ?6 N
' e- _. W- H; q" ?0 \* x# f
void puta(void)/ C2 A2 W! V6 Z3 h# V2 U/ d
{
! X: j5 X9 I7 r. N5 M% g; g3 [$ P- y int i,j;8 J' B& _* { T5 d: `
for(i=0;i<24;i++){
7 m& z2 r% z( T: v6 c for(j=0;j<79;j++){! f; T2 u' }3 Q; i: N2 \! H" |
goto_xy(i,j);; H5 c8 f$ {2 E* K' {& T) j
printf("a");( _! K6 q* S6 [" D2 `
}, i! q; z2 h8 \8 O/ ?! l
}
|4 w. [: P' D6 M } |
|