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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," v7 F w5 p0 N' T# O
$ g i$ B3 n- Z- E 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 L' c/ c; h7 q$ @. o) U
; U0 B! m! H$ j. ?
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 }4 V/ n0 D9 q+ Q" u
子函数及演示程序:
; R3 M9 W6 Q3 f9 U( t9 _
# {( I9 Z8 m! y6 Z #include<stdio.h>
4 y( [! m4 U& Z2 X- j! ? #include<dos.h>" I( \+ m. h; p% m
#include<conio.h>
' [1 M' P8 N& h5 f& c& o+ p0 I8 O' t6 ?+ Y3 N Q4 l( d
void goto_xy(int x,int y);; C1 O, K! N/ a$ J( h7 ?
void dcls(int x1,int x2,int y1,int y2);
0 A( s* C2 M: M7 C void bcls(int x1,int x2,int y1,int y2);
2 h0 ?- T5 K! n. k! j! R( z9 ]/ n5 l void kcls(int x1,int x2,int y1,int y2);1 j9 X0 o9 I* p! s5 r
void recls(int x1,int x2,int y1,int y2);; w0 V/ f3 b" v% \
void zcls(int x1,int x2,int y1,int y2);, W7 i. G# a' ^: I
void puta(void);( C* a- X' I4 U$ I h. v
. p' ]4 o' D: I; Z6 I' z } O# Q
: K! {, d8 z: t$ b! O- m9 f /*--------------演示程序---------------------*/. J$ C1 O6 q0 _6 l* S% P
main()
& p7 u6 g3 l/ M0 B/ M! ~ {& l7 l9 y; V4 t" P+ p6 \! `! F# v
puta();$ B4 k1 G. V3 e5 Z
getch();- A( D# o0 Q7 `0 _
dcls(0,4,0,79);
: r. p$ |1 T7 R! E getch();) { I8 \$ ~7 M2 ~+ Q. e5 W7 q# ?
puta();
8 l- ]9 N7 {0 r" u& D( y* w getch();
6 K/ a( }: w6 R$ k) h- l bcls(0,25,0,79);
8 k0 h* O9 y: W; l/ P- B: o0 f% } getch();% I: K- F0 _3 C8 o) K" E
puta();
8 f& ?9 t$ D. d0 m5 I getch();
! B" J) W2 x' t( h* W/ V zcls(0,25,0,79);( O$ R1 `1 c: A4 B
getch();
; h$ ^( q' }. K/ c* o% o1 D0 ? }
5 [3 r7 ` ]) J3 [% } /*********center clear screen(中心清屏)***********/' L- _5 X' X8 ~ f) t3 [6 j$ @5 R7 E
void zcls(int x1,int x2,int y1,int y2)
- I8 G }, ^' s# U) p2 E3 J6 m {
- |# I5 S5 I6 }4 f int x00,y00,x0,y0,i,d;
, B; s5 K% ?, | if((y2-y1)>(x2-x1)){- o; r/ ~5 [$ w2 J5 n0 a
d=(x2-x1)/2;" H% K- G d5 n o. b" y
x0=(x1+x2)/2;- X: Y( k" ~$ I, a0 O8 t5 K/ r) E
y0=y1+d;
5 I9 Y( [+ @5 K; z2 x% e+ ~. f y00=y2-d;
4 O0 Z' ~, \: Q( [- S4 G for(i=0;i<(d+1);i++)2 G! R5 Y! D# p5 G! q
recls((x0-i),(x00+i),(y0-i),(y00+i));) K, n$ t* q% S9 N( j) x
delay(10);
4 _4 P( T) |. k4 F2 ^0 P' E }
# u: V6 K! V& K5 h) { else{8 c( Q. A6 K' s* D4 u: j
d=(y2-y1)/2;
; T; h6 q& }; y% n6 d( ? y0=(y1+y2)/2;
8 N2 a: Z( m A3 @, S+ o5 Z/ i# A x0=x1+d;6 k% Z5 g$ N. P6 j6 g1 S
x00=x2-d;! h B3 {# [. N3 x; M
for(i=0;i<d+1;i++)
- r: K& n, [) t' B! u0 L+ l' p recls(x0-i,x00+i,y0-i,y00+i);
3 Z" m; J/ V& t" B/ n8 F2 d5 r3 X# W delay(10);
+ p: e, k0 N+ ^0 Y8 ^ }# [$ q4 L2 g) y- o, Z5 l# h: u
}
2 @- A$ J4 Q1 g2 @3 F9 T4 V
& M, F# e: ?4 A' L /************* clear rectangle side(矩形边清屏)***********************/
# Y3 R) B9 m% |. d$ N9 a }. T( J6 B) B) C3 V+ U; z: g+ O* x% G
void recls(int x1,int x2,int y1,int y2)
) X; k/ A5 G O: y+ ~4 U {
5 y3 C6 W. z" i2 x int i,j;! d# N2 @$ P+ w; I% x$ G* p
for(i=y1;i<y2;i++){
0 w& M+ w9 d" [# O4 \7 a goto_xy(x1,i);
/ C; b6 `" ^) ]# H8 A% m putchar(' ');
9 V k& ~: {- `' a goto_xy(x2,i);3 l2 G* Y/ g7 V C# W
putchar(' ');3 F3 q. W ` e: _6 c
delay(10);+ [* @7 _: P( d) h
}
0 f, k. V: [6 B; E: b8 N for(j=x1;j<x2;j++){
7 U. O+ b6 Z5 g' Y, C% k goto_xy(i,y1);
. Z8 e! U( ? ~ putchar(' ');* {" J% P6 {! Z" J5 p: |; D
goto_xy(j,y2);
6 h X; b) z+ @" | putchar(' ');' F' C! ]+ y) {" X3 F
delay(10);3 U; c% t+ [; |, _
}$ f$ j7 K' B& g
}
* x$ _; h6 B! K9 B% i2 @4 j /******************open screen clear(开屏式清屏)*********************/
3 Z9 z! T/ D/ P2 ^- M! g4 _% f0 U; t1 n4 C7 o# C
void kcls(int x1,int x2,int y1,int y2)3 \ x: ~+ q2 H" d- f2 H6 z2 S
{
/ Z$ b1 C- H$ \0 a2 G7 }2 q int t,s,i,j;
2 {3 @0 j2 {' {" u% G4 z t=s=(y1+y2)/2;5 `8 J2 g* s9 n. Z* B# i l
for(;t<=y2;t++,s--)
2 w/ n+ E) Y# `! F5 @ for(j=x1;j<x2;j++){
( b3 [( A9 {: h goto_xy(j,t);
$ z5 s6 j$ V% s8 r0 A) R1 e+ f putchar(' ');& c" ^5 M1 r: S; ?0 f7 G" X9 g
goto_xy(j,s);9 f% Z2 r) t+ P3 Y+ v* l
putchar(' ');
$ {1 w" _! A% w# K7 B, H delay(10);1 u, e0 ]) ~! b* | d$ v- J; H
}
" z7 T) t" e9 [ B }
c0 {: @# |1 G4 R/ [7 a0 V4 n /*****************close screen clear*****闭幕式清屏*******************/) I0 S- m t k+ V6 q
9 U$ d; Y& ]1 [, S6 F. D- f void bcls(int x1,int x2,int y1,int y2)
4 M$ W* C4 I* q# R" p. K/ B {
) N! N; M4 y* s: v+ E/ n s# v int t,s,j;
5 e( p; B! Q6 d. `: ?) M t=y1;2 M; B0 q; q$ a4 Y% b X2 D
s=y2;/ e8 z( G5 j' \! P6 X3 O3 v. P
for(t=y1;t<(y1+y2)/2;t++,s--)
. {2 z" Z( @$ i" M! y6 } for(j=x1;j<x2;j++){
1 {) x- e- c/ E/ w goto_xy(j,t);
/ x* x5 z& R# ]! n( d" z2 S) R putchar(' ');
9 l8 [/ w, a7 v0 m) i# q) ? R8 M goto_xy(j,s);
. Y* T9 n' o! U) @6 | putchar(' ');& v9 ]. L# V2 ~
delay(10);
+ s# x5 V/ h( M: r- [5 X1 ]# Y% L }
/ L0 T s, v5 y: [* g }
z1 ]; G' K! d# S /******************bottom screen clear(自下清屏)********************/1 s+ M0 j% ~& s+ F( K8 j6 ~
@3 P( ~* j1 Y, V, J void dcls(int x1,int x2,int y1,int y2)
' B; m* V1 J; ?6 Q$ L6 \& e {* O9 c) b$ u* }- {4 Z. W
int t,s,j,i;; N0 E8 E+ {" S- D* n* m1 m
t=s=(y1+y2)/2;% |) l* a9 k+ f n
for(j=x2;j>x1;j--)
' E2 _6 P9 }# o2 Z0 V T* X for(i=y1;i<y2;i++){
4 h0 i3 S+ n v# T* t0 Z goto_xy(j,i);+ X; x/ o" U( Y( J4 K! l
putchar(' ');
! l/ d9 G* b/ V* V! m+ ^% ` delay(10);* \' m& H; S$ s
}$ |9 y6 c/ C" A/ V6 W/ `) T4 j0 n
}
( C' R2 I* P" K+ ~* r( k /******************设置光标子函数******************/
& r j J. X( z* l) S3 g; d- M5 c
void goto_xy(int x,int y)# O( U8 O; |, s
{$ H0 @3 \, C% Z3 i# n
union REGS r;/ Z$ _5 T; G8 X' K+ m
r.h.ah=2;$ O4 Y- K/ H }7 N8 R, _% j7 B
r.h.dl=y;( Z, W/ k& H2 N5 U; T& M& D8 g. h4 }
r.h.dh=x;5 o4 a U4 ]# F1 j S1 l
r.h.bh=0;$ L) ]' t- e! J7 \. k3 u
int86(0x10,&r,&r);9 e$ O% {4 c, n- _7 [) l* H1 B. b
}6 j1 g: L2 p6 w! X
$ v% n: U1 ~, s( J z" `
/**********************在屏幕上打出一连串的a字母用于演示程序******************/6 u* n' o4 \+ N4 f9 G4 ^0 n6 U
# |8 i: D5 q% S6 k7 ^ void puta(void)# _) c: ~4 |, l6 \8 v
{
: x( B) D- d7 e, P, E int i,j;
9 ?1 I' G" z2 U0 N for(i=0;i<24;i++){
2 U% ]/ A+ X& p. O for(j=0;j<79;j++){" m l7 m( s( }, P; }
goto_xy(i,j);
( ~* u: b& y% c printf("a");
7 I, [- D ^; _' I: ]- s |! N; I }
Z8 S0 [* X. |. Q9 L }
$ ?5 T$ W- D5 |2 F1 g } |
|