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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; R' d+ U( N; ^* E
) X; s) J5 h( |1 }' m6 a: \) Y 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" G, X9 I/ s+ z1 e: W( @7 A
& V4 G! V4 ]$ Y" b& S0 Q* @, o 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! r0 Y5 m$ U. T. D1 ? 子函数及演示程序:8 Q) A- ]# z6 N. |
/ O8 W( U. C0 E$ I; Y: e+ k: g& } #include<stdio.h>6 w2 I) O, `7 b& N
#include<dos.h>) ]! P5 o! r q4 w; G% u) \" `' U% k
#include<conio.h>
) ?7 \8 r/ W% [6 L" {- B; U7 |$ V" W! d
void goto_xy(int x,int y);
( ?7 [9 y4 C9 [& R+ E void dcls(int x1,int x2,int y1,int y2);
) {' j8 U; a T" z7 J& `9 p1 ?1 G1 ]. [ void bcls(int x1,int x2,int y1,int y2);
, P' h8 E/ ]4 f! M' c: b void kcls(int x1,int x2,int y1,int y2);
6 L; t8 ^0 A- ]" u, k void recls(int x1,int x2,int y1,int y2);0 M9 z, g8 v( x$ `
void zcls(int x1,int x2,int y1,int y2);
: U; ^7 e k. W7 k& i+ w void puta(void);+ f7 C" {- I; T, L
9 Q6 K( ?5 J9 }! K3 ]' j& u' B) k% G; I, m: I' k7 O7 S
/*--------------演示程序---------------------*/9 @6 G* z7 @$ D# D
main()
0 c. Y4 v3 F( `9 c+ H1 F {
! |2 b8 P( t, G! z2 a puta();( c6 j( M% N7 P$ Y O# T
getch();7 E+ {" p% Q$ E; I
dcls(0,4,0,79);* P9 u) [1 L) K. B* q" g
getch();0 \6 F9 U* w f- L- [5 E( k. g$ M* A
puta();
0 t* Q4 G8 S) Y$ v getch();% J7 h) `0 P* E9 x+ P5 p' v: I9 f
bcls(0,25,0,79);
9 k. x8 O% V3 k! B getch(); ?% ^& \+ ?$ D: c' N; a
puta();8 M$ u' D0 d+ L& w `/ {9 L
getch();7 M$ E$ R5 y' y0 y2 ^, \
zcls(0,25,0,79);
" m; z0 N6 t/ A ~5 {/ I. J getch();
! C/ x" `& M5 O6 f% g H5 E }+ g$ U# U p. B8 I9 _
/*********center clear screen(中心清屏)***********/
' x. Q- K% y! T: |6 s void zcls(int x1,int x2,int y1,int y2)
m) M9 Q$ r. q# ]9 { {' o# K; R" E f ~3 f
int x00,y00,x0,y0,i,d;3 N7 P/ x* L) O5 _" G
if((y2-y1)>(x2-x1)){1 O% l" b3 q5 g
d=(x2-x1)/2;- u8 _7 ]8 @$ m' e- u' S# m
x0=(x1+x2)/2;
- L. y* j2 V! _" f# H% N* J8 g7 z* N y0=y1+d;5 H( O9 B& H. I4 Y" |
y00=y2-d;+ X4 Z7 K: @. h2 W: F7 e- ?1 l
for(i=0;i<(d+1);i++)
6 ]7 D/ {3 N. i$ O9 R& v recls((x0-i),(x00+i),(y0-i),(y00+i));
7 h. u' N" {3 W: J# [) P$ z9 i Z delay(10);
# D0 N* X' a& Y2 U8 n }: ~9 Q. G6 W. h% q# I7 e
else{) u. h3 g* r4 v2 @5 U# |
d=(y2-y1)/2;
/ o9 P( w O* F- H* U4 L y0=(y1+y2)/2;
7 Y9 C& j7 f. D, ?. E4 ?- A x0=x1+d;6 r" }* ^; T/ R0 Q9 A
x00=x2-d;
6 s3 n l" @# Q) ?. w) q' } for(i=0;i<d+1;i++)' R% z7 t' F- c8 g' X; p& j9 e
recls(x0-i,x00+i,y0-i,y00+i);3 ~2 P [, \& p6 F. p
delay(10);
6 Y5 K, J3 h6 E4 ~9 x }0 B0 e2 Z; w I3 k/ t# b
}
# ]; C2 m# v6 _* h2 L& o' u( A1 E- n2 }: F( n
/************* clear rectangle side(矩形边清屏)***********************/0 q+ i7 _& E. W5 V7 d
( T& ^; ~- E9 P9 A# {; w void recls(int x1,int x2,int y1,int y2)& M C7 T3 h6 c z* _5 \1 D* C
{
5 T3 @- K5 g$ C: Z$ l- I( B* T$ P int i,j;
$ W3 |& Z+ N; C. v$ i0 f for(i=y1;i<y2;i++){
; m$ p7 ]( i( M2 p7 z6 ^ goto_xy(x1,i);" m3 f& s6 W4 L: S
putchar(' ');# H) I# l! x: m8 `$ s. R2 P6 Z
goto_xy(x2,i);
7 s+ e5 ~( L+ x1 u% g8 n& ^$ o2 c putchar(' ');$ L# Z3 }' j3 H
delay(10);$ e! u& {" A7 I
}
3 k& R; |3 n. x7 F4 `" l for(j=x1;j<x2;j++){7 e' h& @; ~8 s* J M* O
goto_xy(i,y1);
% F% G$ y. U* n" a2 r$ Q5 Z putchar(' ');3 f ^& }% } Z- F# r9 j
goto_xy(j,y2);
! [/ X; I' V" n# J putchar(' ');
7 d: E9 s0 R# a0 O3 r delay(10);% q# u% E/ E6 h$ n, y* d
}, u$ b t G9 @5 f
}
$ o6 C& ~8 S5 ^) ^- S" v7 t% c) O$ F, h v /******************open screen clear(开屏式清屏)*********************/
/ Z( a* w) J4 o' W. k5 }$ @' a" v7 y" A
void kcls(int x1,int x2,int y1,int y2)4 z- @/ ?9 z4 r" v
{
: R# {/ Z, k& T/ \. C int t,s,i,j;
9 g: C+ D, x! m9 w1 o8 x: e t=s=(y1+y2)/2;' g, b" p% k1 b6 d
for(;t<=y2;t++,s--)- ]0 \4 S) s& N' f9 m
for(j=x1;j<x2;j++){( B+ k9 N3 G' E+ _ l7 P
goto_xy(j,t);' u6 r9 P$ R4 `8 \- `
putchar(' ');( g* W/ k7 d8 @
goto_xy(j,s);
6 B( D- |" ^1 R. c putchar(' ');
: y. \" w! V* {! Z$ B' a P delay(10);
2 O, g( A2 ?7 n$ }4 H! Z }
; B0 S! V6 \9 k }
a- `4 C/ M8 |' d$ g /*****************close screen clear*****闭幕式清屏*******************/
: Z: T3 Y; v- C# C+ x6 w- W
) q* b! o4 V' ]& Y& z. J5 D1 _ void bcls(int x1,int x2,int y1,int y2)
# _! g h, P( U, V- M! F* N {" C" a8 Y7 s- X& V3 o
int t,s,j;( t7 i! @% T' i6 N* l
t=y1;
0 A' I% j, l2 |3 V; q" S s=y2;8 O' W6 k: R3 F5 l: C; T7 {$ A; l
for(t=y1;t<(y1+y2)/2;t++,s--)8 Y9 D. {+ D7 E+ x
for(j=x1;j<x2;j++){
' o& U$ b& V4 K5 H" n5 }7 F) S goto_xy(j,t);$ t' a, X: g) G
putchar(' ');
8 L: X/ h; n- Z3 F" q: y, y% V goto_xy(j,s);( y, W+ W" e x1 L5 ^( O
putchar(' ');
8 V/ C1 _" S' q7 M$ k' d delay(10);
( F: E# D( a* U0 ^ }% P0 u$ e- o$ O! ~+ p; t
}' B* A4 b7 u$ z
/******************bottom screen clear(自下清屏)********************/' d3 y: f" j6 I' s& ~8 B
* M* X3 X# i/ w f+ m1 y void dcls(int x1,int x2,int y1,int y2)2 M: x T8 H& A t# ], S
{
, C* w2 G. E. m* _7 Y9 @ H# v/ m int t,s,j,i;
7 {! M( u. m( N4 w3 ]- }" i" ` \7 W, h t=s=(y1+y2)/2;
. m% _/ _9 h& ~0 Q/ I for(j=x2;j>x1;j--)& c. T, p0 ^6 `( Y, |
for(i=y1;i<y2;i++){
& { H2 ]6 Y2 a' j6 D; d' w6 o( Q goto_xy(j,i);
% L+ e" k5 W9 }$ E2 s putchar(' ');* J$ V/ C5 m& D
delay(10);
7 d4 h0 M' z! G( Z }$ D2 C# O- s, T3 D: b3 _# B
}9 P. Q# ?3 _! w$ R
/******************设置光标子函数******************/- D8 A- ~. C8 m& T9 q, n% l
% H3 k$ C- t+ ?* i' \ void goto_xy(int x,int y)# C/ ^, h. r7 O* X8 L7 B
{
2 I/ t, S7 ]# r6 j union REGS r;: j; X' _$ x( E5 |/ t! J
r.h.ah=2;
0 D1 l; e. }, c: M7 |; m8 `3 B5 E. x r.h.dl=y;$ p# I" F! r# f+ ?$ n( N8 r
r.h.dh=x;! O% c6 C6 z; k( q' ^' J! I5 q/ \
r.h.bh=0; u1 i/ Z+ q5 y s
int86(0x10,&r,&r);
9 y& Y1 E4 m2 x }1 J+ r7 U$ I1 y* |% K, ^6 x; h( @
/ ?$ N8 N9 C: r" g" I /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& F+ m0 k) |, J0 o, [0 k& v2 W" @& E0 V3 T7 Z3 D) d! D
void puta(void)( B; V( d! x# q
{
5 }. P$ V* W7 q6 y! r int i,j;
7 R, x# E0 Z2 l6 y7 p9 O% a for(i=0;i<24;i++){! D. R# b8 n8 ?7 P" P% t
for(j=0;j<79;j++){
, W: S# G2 H, t goto_xy(i,j);
% t7 p8 C) S5 Z/ [; s+ s printf("a");
) ^3 R+ J9 N* c, g; u7 R }) }0 ^/ e5 i4 q" j. A: I0 F8 x' q
}; t7 B# ?" v9 @) F9 d2 y% L
} |
|