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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 m$ O: {0 q g1 ?3 f+ _
1 X* Q& s9 d' ~: w) }$ L
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, K, w% H9 {- H+ }( N. a( A) I! S3 l
5 f4 p9 l7 Y+ {% {& G
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & B3 @* p ?: C, \) O
子函数及演示程序:
! {) |7 g& I8 m' M2 Y9 X9 o ?* t! s5 _1 e _+ F
#include<stdio.h>$ n, d4 |7 g9 t- @( L$ J& x
#include<dos.h># D I% \9 e1 p2 S1 U5 O. g" e
#include<conio.h>1 W$ a/ n- D# `; ]
& j+ A. I$ q0 y4 v8 d( ~. \8 J* w void goto_xy(int x,int y);2 c6 k( P; g' V+ D6 d+ f' S# v. B' Y
void dcls(int x1,int x2,int y1,int y2);
5 t! S- v8 ]# X4 U# M! q5 ]& J void bcls(int x1,int x2,int y1,int y2);
0 C; a7 @) A' v) G void kcls(int x1,int x2,int y1,int y2); t v0 L6 {9 o: j* B
void recls(int x1,int x2,int y1,int y2);% _6 \% {3 ] n" M& X% G. U( M
void zcls(int x1,int x2,int y1,int y2);
( I7 \5 u; [# w1 \0 o void puta(void);& y1 K/ {. O6 K% _5 _
" B W* D8 `: [" F s
) Q$ \8 i7 u; V& M9 [ /*--------------演示程序---------------------*/
1 _# |& h) ]4 {' ]4 ?, j% d main()8 @& t9 p- [8 [$ L6 g% a+ U
{
1 c( a1 M7 b8 ]/ H0 g puta();; i. y/ c" ?$ W4 U9 p. a- w
getch();
3 e, H5 C' y7 S" @ dcls(0,4,0,79);
( N9 X V" @: m3 Z) _: _: F" |; R5 e getch();
0 n# D; l7 K9 }( I puta();
7 s9 Y0 a; \4 ` getch();
2 I+ @* u5 b$ Q1 }) j) a bcls(0,25,0,79);# }9 ]3 _) e) M+ H9 [( T
getch();
+ V! b8 K1 w2 [; X$ ` puta();+ P4 R& [8 A& a7 ]/ s8 V1 u
getch();
4 z8 I) r/ T! M( v2 @ zcls(0,25,0,79);# e9 `. b4 }. |% l3 e7 k) t, P( z
getch();
) {1 M$ _- w7 l% S }
2 B$ C+ ~- b6 `. B Z6 Q /*********center clear screen(中心清屏)***********/
, `* f1 h! v/ x, z+ V3 I void zcls(int x1,int x2,int y1,int y2)
) A: }8 J0 W9 `' W( Y* ~8 o {! } M4 q; [* M) S# x
int x00,y00,x0,y0,i,d;
9 b- y% y3 m0 s* j if((y2-y1)>(x2-x1)){
" J! C3 u6 J m5 ^; ]" y; P d=(x2-x1)/2;3 F* ~- j' c( U, }
x0=(x1+x2)/2;3 a2 D& t( J: z" @. [
y0=y1+d;( U0 w$ G5 F2 x
y00=y2-d;
) K0 h- T$ u" _3 t4 Z; P for(i=0;i<(d+1);i++)
! x! L, ?+ l' n# w5 S" F. {5 ^ recls((x0-i),(x00+i),(y0-i),(y00+i));0 C5 y/ h2 h* A. I& b: j( n
delay(10);
/ I; B/ c' n9 @8 v; e+ e4 V }
" |5 j. Y) e3 i& W else{
4 d! E7 y& s: a. H d=(y2-y1)/2;2 A/ D1 L& S& B, i4 _" d
y0=(y1+y2)/2;
- n( z, Y" k/ r7 e2 ^ x0=x1+d;
: p% a+ V9 C9 g6 y6 y x00=x2-d;, ~" e4 Q3 u! [* N! L4 A+ n
for(i=0;i<d+1;i++)
& X7 M! s& d5 o6 H- B0 g recls(x0-i,x00+i,y0-i,y00+i);
4 f& `/ f& x* z. E' P. a n; ` delay(10);! i% K5 d5 X# [! _% {
}
7 x. Y8 m& Z% c0 z }, |% _) O+ V6 b' L( N. x: E
: e8 M2 L2 N6 z i5 O! [) Q0 F /************* clear rectangle side(矩形边清屏)***********************/
8 i6 l G7 ~1 Q5 P% m8 u, Q/ y7 h7 a( g4 N, a3 Z
void recls(int x1,int x2,int y1,int y2)) B7 ?7 w w' T* K) R( f: G
{. B' v8 f. z/ m( c W8 y
int i,j;7 ~: M" s# T, [9 }7 G
for(i=y1;i<y2;i++){
' N' r/ U' J/ D3 D, h. k goto_xy(x1,i);8 ^) R0 m! g$ `; u6 A
putchar(' ');
% e3 V5 n' ?$ T3 y$ B+ m( W; q goto_xy(x2,i);
. h8 r; t0 s/ n* {- O putchar(' ');
; c- o8 I# k) N! s1 ?! a delay(10);
) x" ~$ M. b- _1 r }$ B* Y$ e! c2 @5 p0 a
for(j=x1;j<x2;j++){
3 U5 e& F. V8 N6 b4 h goto_xy(i,y1);# W$ H2 J `( T! _
putchar(' ');
! \1 j2 ]' f2 Q goto_xy(j,y2);+ _9 ~) I! L0 x% X5 `; P/ M3 a- N
putchar(' ');+ t/ M7 {( j% S) Q# V, f$ A4 ]3 c
delay(10);$ a! M/ k) [. o
}
' {( l/ `& W& k' R }
' c. D# A& c, `* S' I$ K /******************open screen clear(开屏式清屏)*********************/
/ f% {* s0 }' X' N5 c0 q Z0 S- E2 p: ^: R
void kcls(int x1,int x2,int y1,int y2)8 ~2 \: b# O% l
{% w5 x$ _# Y( Q6 F5 l
int t,s,i,j;
9 s5 b& @( c& U, O7 [ t=s=(y1+y2)/2;
8 v% S2 U4 V6 `, d- W0 A for(;t<=y2;t++,s--)4 l% s% F: ?- X2 k
for(j=x1;j<x2;j++){
p, c3 ?) W- _7 |+ R' e# T goto_xy(j,t);5 v+ y8 C* } R |1 C
putchar(' ');
5 k2 c7 q' V1 z2 g6 O7 G goto_xy(j,s);
' [ M' i& ~; T, Q' x" C B putchar(' ');0 p% q, d- d8 c) I0 @( b
delay(10);
9 Y- H4 k# b* x; e, h' D }% d% f, r, d! p/ j9 _% a, u% I
}
! X7 j/ h8 J2 c /*****************close screen clear*****闭幕式清屏*******************/9 l5 L4 @5 H6 q
& A" e! D0 |7 k$ `8 x
void bcls(int x1,int x2,int y1,int y2)
$ v8 F+ }3 `7 Q7 y J {
; E& _1 W: ?8 ~+ g8 o/ l int t,s,j;
' l$ n7 v' t* M% v4 u t=y1;/ Q8 x5 L- q, Z
s=y2;
1 q& p) |3 K6 X$ J' I' Y% o for(t=y1;t<(y1+y2)/2;t++,s--) L7 _# j$ t" \1 m& i
for(j=x1;j<x2;j++){5 s; b4 y* Y9 Z9 Z' [
goto_xy(j,t);$ i, C( N& x1 G3 ]3 Y- X7 E1 q3 z
putchar(' ');
, R" Y) ]* o( P; Z goto_xy(j,s);5 j$ Q7 I( A. Z( q6 z
putchar(' ');( k6 w) o2 B7 [+ h- B2 F n' b* {
delay(10);4 h9 G( ]7 F# @2 Z2 w5 [
}. k; y8 f4 P$ `+ i
}
4 a B1 O [' I1 B* U /******************bottom screen clear(自下清屏)********************/7 l: ]* p' W# |) j
# ~7 C) W, x9 ]3 o void dcls(int x1,int x2,int y1,int y2)' m/ D! r% F1 q* m+ `
{0 s4 Z$ p5 y% y+ `8 _7 f! w
int t,s,j,i;
9 ^; `9 N: ^! G: j# m" v( U+ m& i t=s=(y1+y2)/2;' N. E0 Q8 _6 L2 M
for(j=x2;j>x1;j--)
* `0 a) I: t# S9 _: V, A4 f1 ]. j for(i=y1;i<y2;i++){ y3 Z: `8 |$ v, Y
goto_xy(j,i);. I( V; _7 P) W2 F
putchar(' ');
- _( M% W, M C! H% @" [ delay(10);4 P- G4 h/ v% Z+ N" P
}
q" V3 B: V$ ]/ q$ c }
4 f5 C2 `! A# @ M4 |) \& W /******************设置光标子函数******************// C5 J* D4 e, |2 p3 u
3 s( Q2 o6 x) A! j void goto_xy(int x,int y)9 u3 r/ Z% `9 T4 Y
{
) z" }- V" s( m7 W0 o8 R* m, ` union REGS r;
. F# k* u1 j* m1 q2 X' f R r.h.ah=2;
4 k9 ~4 [) R# v5 l5 I' q r.h.dl=y;! F$ Z5 T' ]) g$ w) J
r.h.dh=x;! H2 D/ W% t& m
r.h.bh=0;. K. h9 o# e' k) t1 S& ~ J! `4 E
int86(0x10,&r,&r);
`5 ? z) j! X+ f$ @6 x1 T }
& L6 ~# K" W! ?
0 N2 ^' K: z7 c6 Q! p' H /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& O9 e8 N- u2 u% a
3 x0 p8 f; u6 Y. u* X. R0 E6 Q; S void puta(void)
+ h+ A8 g4 O- O2 j* l {$ T8 k& e' Z$ l' b+ n
int i,j;
' \: V( }5 o5 g: }; D) t8 M for(i=0;i<24;i++){
* s- j6 O, `$ `3 s. B3 z( ?8 o8 H$ ~ for(j=0;j<79;j++){
# g5 B P2 S# T5 N goto_xy(i,j);
5 T+ X; |+ L5 m! y9 C5 E) I: g printf("a");
, ]8 h. i2 `7 W1 O1 E8 | }
, j* _+ Y% ]. g } X1 H, b+ g' u* h* C' `
} |
|