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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, R! C' B/ |9 b8 {4 E3 P9 Y/ @0 s: L, _% E/ ^1 Y3 F# {
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 w4 _+ _( u; w% }6 Y) D" s# b9 u3 ?4 v- d1 a R/ s" e% D
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 y& {6 w& M( a, n 子函数及演示程序:5 F0 K' V, H2 y, a2 z# O2 U2 B
+ |& b I8 H6 Y1 L* ^! q% c
#include<stdio.h>
s: e* {. {) M, M. \. e #include<dos.h>
7 M: i' s2 B8 b4 e) Y. f8 c6 X #include<conio.h>
' I2 T3 g2 f/ ^: d) V, O" D! `4 M1 h
void goto_xy(int x,int y);- `+ t8 l& k2 I
void dcls(int x1,int x2,int y1,int y2);+ D: q* z7 S L! R( b$ i0 _
void bcls(int x1,int x2,int y1,int y2);* w- g. X6 S. @- ` \/ n% B
void kcls(int x1,int x2,int y1,int y2);. B8 w/ v5 [/ ]% g# a: Q" t; g
void recls(int x1,int x2,int y1,int y2);9 n0 |1 c% U+ w. T6 t e
void zcls(int x1,int x2,int y1,int y2);) E; p( }" A, [$ x+ N
void puta(void);1 ?7 [6 p5 M1 K: C! `, p# W
: _" B5 W9 S0 J8 f
[6 S3 ~) p6 Q7 K& q& ~
/*--------------演示程序---------------------*/
: e g5 v4 ?2 {8 G9 I9 S8 b main()
8 G- @$ @+ [$ E# I- H* v; J N& ?! ^( @ {( M' ^* s0 f6 D4 P: p$ V
puta();4 a" z2 R5 E4 U2 Q8 ]* |. H
getch();
5 g% t8 v, f2 {" N$ J dcls(0,4,0,79);$ V; j2 i1 z! D! i( g0 [ _
getch();
& ~- i# t1 G& l! u4 Z puta();' ?0 m2 b: @2 v$ W4 I3 N0 D" h) n
getch();* v0 Y6 p( Z2 V! O6 s8 S; \
bcls(0,25,0,79);
+ w4 D6 t, d8 h5 v/ j. D4 E getch();
8 B2 a6 c" \( x2 Q2 m$ [4 \ puta();9 H0 u0 D. q. M- w2 }
getch();0 B: V0 L/ i F3 W
zcls(0,25,0,79);7 B' z9 b! t* j2 U* v# \: b$ A6 b( C# L
getch();" Y- `, c1 M' ]3 S
}" e# H4 f' K. d0 {
/*********center clear screen(中心清屏)***********/
k4 e! Z4 _( b- b1 \ void zcls(int x1,int x2,int y1,int y2)
6 K# f# A% [ v* V1 t" W {
1 E. x$ I( u& M int x00,y00,x0,y0,i,d;+ V, n0 I, P" g [! f& C& M5 p
if((y2-y1)>(x2-x1)){) U: }% r7 x7 T, k1 s
d=(x2-x1)/2;
' k0 L1 E0 ^% e1 T0 P# P& G% p x0=(x1+x2)/2;
/ `9 e. i i% I: q4 v! u, p0 L: }5 c y0=y1+d;' ?8 v6 i4 B. n9 a0 Z. F& {
y00=y2-d;
5 o9 E! g5 Z1 x$ B for(i=0;i<(d+1);i++)
4 w) W2 m+ {& d( F4 p* S, J recls((x0-i),(x00+i),(y0-i),(y00+i));" ~* U3 x6 a5 W2 ]" n: N+ }
delay(10);+ D% ~6 c$ O! Q; y
}
; A8 g; x, a* S( d6 p. s b9 `8 z5 y else{9 x4 ^3 |) j' o% H% H* p$ c b: c2 Z
d=(y2-y1)/2;' `0 z) e6 x: c7 g
y0=(y1+y2)/2;8 t5 u# j1 M" D/ _ U
x0=x1+d;
2 s" H2 B. T5 C0 ]1 l3 ~ x00=x2-d;
. Y) H! }" G3 @. ] K3 V for(i=0;i<d+1;i++)
/ y: ?/ _3 ]# c) ^" m- F* X recls(x0-i,x00+i,y0-i,y00+i);
& h2 g1 m5 k5 p" \/ q+ M delay(10);* `4 O3 w8 f3 j' ?
}" @: k4 I1 v0 w' C
}
6 ~8 Z; }& Z9 L0 V$ h# H! C' v* Q$ m+ ?% @
/************* clear rectangle side(矩形边清屏)***********************/
) U: s: T( \) `1 l8 F% O
! p" I7 _: a2 {) X' | void recls(int x1,int x2,int y1,int y2)
8 x; p# b1 Q8 A: h- d {
3 N: [5 r5 w2 F% y- S3 P$ N5 s int i,j;
0 F" _4 W- f' b! L. y; H# i( B for(i=y1;i<y2;i++){
/ O0 S0 A: C" I+ W) e1 |# G% t+ v goto_xy(x1,i);
( U: k& P2 q0 Y) q- N6 l putchar(' ');
* l; J! m$ z2 ^: G) C1 W+ z goto_xy(x2,i);4 q0 g1 ?6 K/ C& ?( j) V
putchar(' ');5 m9 S5 R" f' }" r" X ?9 q
delay(10);
: l; l7 E8 U8 ^+ j% L }
5 x0 @4 N" D; x& P0 @ for(j=x1;j<x2;j++){% e {4 \% ^' h9 E
goto_xy(i,y1);
+ t: F8 U$ q" A; L9 Z putchar(' ');
; b8 [7 h0 H& k5 {/ Y goto_xy(j,y2);0 [. ~7 C) q) Z
putchar(' ');; S' O3 [, [5 }* t9 H/ h
delay(10);
0 E) I" \0 n& f4 m' b# ]1 T }' D1 e; T# ^. C
}
3 l0 r2 S1 @" o% x: y+ ~ /******************open screen clear(开屏式清屏)*********************/
) O5 ? m% G7 ]; }# G. a) t) i
" k- n' D% z7 G" ?* K void kcls(int x1,int x2,int y1,int y2)
1 i4 z/ n( S. o% {/ x# P! P: k5 z {3 G4 u6 z. R. o8 C6 ^! m+ a
int t,s,i,j;
; ]; v' N3 z5 c$ B9 x: M; ^ t=s=(y1+y2)/2;) N8 j; X) }$ [9 n/ m
for(;t<=y2;t++,s--)5 j& O2 l8 f7 g# A
for(j=x1;j<x2;j++){: ^2 W8 j+ c7 X$ t; [- r5 p# y
goto_xy(j,t);
$ |3 E y r9 [- } putchar(' ');
& _) V; m( {, w1 T4 \5 H9 n: z7 { goto_xy(j,s);
9 V5 U8 P$ p3 T# V putchar(' ');" b, e" X: m X8 r7 h8 o. s
delay(10);
$ [# R( D) X8 |% q }4 b$ d. N8 F* x: d7 O1 i5 l
}8 G$ T$ C; I; P0 Q E6 h/ |
/*****************close screen clear*****闭幕式清屏*******************/
: n* \% K( Z$ p3 G* B5 O% S% x( X3 U4 D
void bcls(int x1,int x2,int y1,int y2)
; Y1 \% z Y2 h- q- E ?% G- y {+ @4 R2 T- K- s! ^% n
int t,s,j;" y8 v2 r& u! U5 P- E# J
t=y1;
$ j) [1 x3 G9 C# {7 o. V8 Y2 ] s=y2;) K9 u8 k- F" W/ z
for(t=y1;t<(y1+y2)/2;t++,s--)
$ [$ {, d" m( e/ ]4 ^; z for(j=x1;j<x2;j++){9 s! z2 n8 K& ]* Y6 H
goto_xy(j,t);
k) f5 G( }% @3 k putchar(' ');6 C; n& R, L) K" j
goto_xy(j,s);
9 \) b- w; M; ^- O0 n5 \ putchar(' ');
. S8 o; L. L4 R) W delay(10);& W8 J4 s$ U1 d& l. V: R; B
}
' \: b! h/ P+ Q% v# O! E) i' M3 y. X9 E' E }
" Z A7 Z8 k7 I$ |. a) ]- l /******************bottom screen clear(自下清屏)********************/
5 L% q3 ~* I1 @6 U# _# q$ ]/ S2 S' m, ~: k$ S
void dcls(int x1,int x2,int y1,int y2)$ f$ ~3 b N+ k* C2 c# d
{0 y: l2 i5 j2 z# I j+ b7 X3 f9 B
int t,s,j,i;
1 I* m" c/ ^8 @; n t=s=(y1+y2)/2;; K9 d/ Q6 l& F, K4 t! A
for(j=x2;j>x1;j--); B" y1 n" ^# @/ t
for(i=y1;i<y2;i++){% N# H; m" f4 _6 H8 q; g
goto_xy(j,i);
% \+ \$ h0 t+ z0 o putchar(' ');2 |/ c( m% y8 R
delay(10);
7 J. V) P& J5 ?" w. S5 ` }
0 d# c3 u/ V" L2 v* i0 R }% y5 k# ]; y9 e1 h# a0 j
/******************设置光标子函数******************/
4 e1 j+ Q# {: \1 d* n% y E7 E
* x0 T. [; f9 u: X void goto_xy(int x,int y)0 G9 M: {5 ]' W+ \3 {; i1 ]' }
{( z/ _' d) P3 g/ _
union REGS r;
: H+ |* ^# g) i4 E r.h.ah=2;
4 y3 o# R: h7 p. r0 Y r.h.dl=y;0 A' K1 j6 p2 a( H1 x1 }
r.h.dh=x;
7 G) X' t# L( @2 [ r.h.bh=0;, ]& w8 O( T' m( R. r8 @
int86(0x10,&r,&r);+ r: R$ J- N3 h7 i/ H* a
}( G" Z* k$ [ Q9 O, s- J% X
" o+ k; C# `, @* f* d /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 N& A8 ?6 j1 ~' f3 d3 p0 d
/ ]$ {3 ?9 }8 E8 r7 a. z3 C, n void puta(void)4 P9 I2 x7 t, |: Z8 L
{
, g/ L8 z2 c( k, D$ r int i,j;
5 U* W1 v: B6 A8 D1 [ Y for(i=0;i<24;i++){
8 }! J ]5 j2 Q7 C/ h$ _ C0 d for(j=0;j<79;j++){5 v6 j; c; J- m
goto_xy(i,j);9 f L0 G, L0 n! D2 j
printf("a");
% S0 N' z1 r3 h5 g* ~# [ }1 {( T; r) V% x; @; [1 s# z
}
+ R4 ^, ~/ U5 {& f! ^) |) Y. b+ L } |
|