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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 N" y) x' S# ^/ d1 _; K
' i$ J$ d& P( g8 H: q7 N) b. Y7 S
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 y. T( W- ]& h" { y Y% h. y6 I, {" V* P4 P- F) H, A1 ?8 Q
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. % g! a p4 X/ J6 H' ` q2 I
子函数及演示程序:6 ?2 g' H; D( m! ^3 s
# T) q. H7 F. s# h
#include<stdio.h>
9 \3 J4 X# y7 @ J' @ #include<dos.h>6 U) q/ U4 `4 o7 b# ~: n# U$ ]
#include<conio.h>
1 _2 J5 {4 q: d3 Y D% K' F% B1 m! a% ]1 B% h. a3 ^
void goto_xy(int x,int y);
' h7 ?9 T5 z: H! g: Y void dcls(int x1,int x2,int y1,int y2);
0 K2 m+ q; Z/ C' P" W void bcls(int x1,int x2,int y1,int y2);
. U6 U1 ~, p: }; Y void kcls(int x1,int x2,int y1,int y2);) [& b* T( ` y$ R
void recls(int x1,int x2,int y1,int y2);; I: V$ o& ]0 g/ Q* l" L: C; t
void zcls(int x1,int x2,int y1,int y2);
# m. G8 D- N) [& }: S, `8 q+ ~ void puta(void);
" c( F# A3 B* p3 R' J4 \+ `; P: N! `/ u. y/ S6 \; O7 W$ |
5 @0 m; f" o7 ^, J L$ s* I
/*--------------演示程序---------------------*/6 G" U+ q9 k$ @& u7 k$ M
main()
) t( {) Y0 e" L `; f {" |7 [( ?: N3 y" x
puta();: a! v i1 s. d' c5 j' q9 i+ y9 J
getch();$ \/ }. R& h# Y {7 H1 x
dcls(0,4,0,79);2 F6 [. U/ S/ |# U9 j- o
getch();1 q- u. Z+ c* c9 `& a4 G
puta();7 e+ i, A: g( u3 Q0 I t
getch();! @; J s% q5 n* h' p' s
bcls(0,25,0,79);7 b/ V0 B+ U. f7 s6 l; o# [/ v8 v
getch();
# q! s0 X0 i# c, e3 N, | puta();' {# ~$ y3 z/ Z! v3 p
getch();
" i& h6 Q9 z# g0 c zcls(0,25,0,79);- L' D! N" N1 i
getch();; s& ]1 P( x5 f/ G; x
}4 A6 x9 o8 y1 v& W. J
/*********center clear screen(中心清屏)***********/
/ S8 x# g k8 a' [$ x void zcls(int x1,int x2,int y1,int y2)
, S( k' }% Z7 I V- |8 t$ P/ V {' M4 `* _( ~; ~8 a
int x00,y00,x0,y0,i,d;
- d9 P( v2 P- ]' Z& z if((y2-y1)>(x2-x1)){
% b ~$ A1 H @& I9 d- e d=(x2-x1)/2;
; C, G, H5 U) T3 H; R( z7 w x0=(x1+x2)/2;8 `& T# L* ?6 a: V+ v7 k' v; e
y0=y1+d;
& g4 c6 F, P8 e4 v1 l$ M y00=y2-d;
, x5 ^7 H' ?5 m+ e- x for(i=0;i<(d+1);i++)" N. g5 f6 q7 x- [8 x
recls((x0-i),(x00+i),(y0-i),(y00+i));
9 Y' `( _2 \ P! i: X# U. ? delay(10);
# r2 Q+ x h) r5 f4 Y# s }
2 s" N6 |9 W) p' A' ?% n else{
; U7 K: g' {" K' s d=(y2-y1)/2;; T0 C: b8 p* A9 N& O# s2 O
y0=(y1+y2)/2;
0 b# z8 a& @1 U! @8 L x0=x1+d;
1 ^5 U, O; K1 | x00=x2-d;- c9 Z4 L+ X0 i3 d- g6 q. S
for(i=0;i<d+1;i++)0 D' e" m; P( \; I
recls(x0-i,x00+i,y0-i,y00+i);; D, b' V! J: B! L
delay(10);1 N J7 y, V) R: w
}& N6 \' P* X) I7 t3 ?0 V6 Z
}
& |* b0 S' h% l+ W' }4 H: u+ j' ?8 k! J: m
/************* clear rectangle side(矩形边清屏)***********************/1 M# a# U# D! h9 T+ C
) D3 E8 O; S' e
void recls(int x1,int x2,int y1,int y2)2 `. a. o9 X) F4 Y% f/ _7 B7 U
{0 f" V0 K. Z8 Y! t x7 q, N3 ]# u% w
int i,j;
: a9 O) Z8 o. _8 J) M! S4 b for(i=y1;i<y2;i++){
. |5 a c9 y! w' G goto_xy(x1,i);
. }& ~! i- E" Z f putchar(' ');
* j* u D( h$ A3 _5 v goto_xy(x2,i);" X/ G% Y2 F8 }* F6 @1 N- K
putchar(' ');( n' F3 F4 H2 m
delay(10);
: ~! K1 @+ d( e: T& x }
: O% C! D( W; e for(j=x1;j<x2;j++){$ f8 S1 t! ] H; N. V" K
goto_xy(i,y1);
! G4 R. t3 y9 o putchar(' ');
& R; R5 }5 m* I9 l9 o* m goto_xy(j,y2);! C7 c7 [; O5 S* {& r* ~0 E o! a5 U3 ` u
putchar(' ');
% U3 B; e' Y& `5 ^# w delay(10);
" {& u7 { p- S& i7 I }# M6 c/ v6 z! J% C4 j2 h% S( A
}
3 i; ~$ p+ Q, k# r /******************open screen clear(开屏式清屏)*********************/' F$ t6 s( Z! M4 r1 s, p
# N. x9 X8 X( `% X8 h
void kcls(int x1,int x2,int y1,int y2)
: l9 P0 r, p5 o. h' e {
* R8 ]) ^- n/ q$ K! C# J+ D/ \ int t,s,i,j;
# a7 A* `/ s2 u1 ^ b' t t=s=(y1+y2)/2;
& U! P* H J% ~' b, I for(;t<=y2;t++,s--)
7 ] G+ R1 n/ n- t& h) _ for(j=x1;j<x2;j++){
/ J4 e. b2 G' @3 I" a4 w goto_xy(j,t);
- X0 y% I# H q5 B& @+ Z8 y; [& T putchar(' ');
9 w9 F+ ~6 M% z* H& F1 U goto_xy(j,s);
# l2 Y1 \6 \5 _1 r9 j; V0 L$ \ putchar(' ');
0 K, t! q) F) z/ E( p) |; f delay(10);
, M+ l) S, i7 F$ _( v2 M7 m+ B }
& R+ u5 t8 Z7 C- Y }3 X u2 t8 D' j- _
/*****************close screen clear*****闭幕式清屏*******************/
: Z* M7 S, i; }5 j1 x! @; z% K* s# N$ b
void bcls(int x1,int x2,int y1,int y2)& z) B: n0 [* u( g% \
{
; A/ U: b9 r( O; p int t,s,j;2 o1 B. g8 e8 K. P& t8 H# z+ n
t=y1;
, z* a7 w9 V. ] s=y2;/ }# o: @, @0 W3 ^1 c+ d
for(t=y1;t<(y1+y2)/2;t++,s--)# ~. ~5 w- F8 w
for(j=x1;j<x2;j++){* @8 j3 Z( m7 z# G/ z0 B
goto_xy(j,t);, j: S& j/ x" K& c2 Z- O
putchar(' ');- {( s0 `" \+ \, v
goto_xy(j,s);
1 {1 S `" B" y: E+ g9 |" d putchar(' ');8 J& e$ ?. D% ~1 m1 H
delay(10);) r# Q! J4 s, @, ?! Z; ?$ M
}) f8 ~0 S7 T7 {$ V& Q t
}
; h$ p- ? B6 ~' |! y /******************bottom screen clear(自下清屏)********************/
' @+ {) R! G7 y6 ]8 D3 v! [/ a! |# o7 @1 P- c# g
void dcls(int x1,int x2,int y1,int y2)
% L5 i& ?/ `. x* c& q" h7 @9 [ {
/ D/ _7 Q; f( \) U7 o( ~+ v int t,s,j,i;# T) [, B" J2 B# O4 W6 t2 |! w
t=s=(y1+y2)/2;# q$ u/ |! x. v- E
for(j=x2;j>x1;j--)7 D* ~0 S/ w$ C8 y, j% e, i
for(i=y1;i<y2;i++){
& D, X' U7 ~) S% f goto_xy(j,i);$ O0 w. g/ V: m( y+ F
putchar(' ');
6 u* M( n' X+ @6 ]2 A3 w delay(10);8 t( Q- S! Z' K7 Y2 k! Q
}
- y8 G3 m: S3 N7 r# Q8 M7 I }( j) k2 b) D* O1 W
/******************设置光标子函数******************/
) ~) P% U b# J. ^2 I0 \
L Y: Q _9 b# [2 {7 w void goto_xy(int x,int y)1 O' M% j1 k9 z; X; v
{8 G8 ` s3 B8 U: ^
union REGS r;
9 c- c, r7 ?: G' L r.h.ah=2;0 ]4 @8 w6 {; t4 F8 z) F
r.h.dl=y;
* M" d; Z \7 B) _' a" v r.h.dh=x;
: x$ p% G7 {2 S9 M r.h.bh=0; M( b6 S# ^* H, S) Q |
int86(0x10,&r,&r);* b% C# l: ^: ?$ G" R
}( n$ ]9 {' y2 }( B1 u3 \" P
$ N1 w) r& p2 G0 p; s: G /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 N( B0 J5 p8 m9 y( J+ Y3 G$ f$ ?
3 o0 j# K$ j' ^8 a; c! E
void puta(void)3 P0 Y. e r9 N
{
% a3 T0 b& }5 A% i$ H+ S int i,j;$ E8 J9 \/ t+ O5 X3 |9 y; s+ v3 ~# J
for(i=0;i<24;i++){
$ t& O( p4 ?: P$ d9 Z* R for(j=0;j<79;j++){
9 {8 w, D4 n3 n# D2 f0 a+ W: @$ k goto_xy(i,j);
: a/ u) J# M# s$ _: F s printf("a");. W& j0 h% j" O9 _$ Q
}
# u% x& o" z2 n: W$ Z4 y% F1 ~ }
$ u9 g9 x t- T! X7 n% h/ q } |
|