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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ s3 o; [1 C1 v/ g+ q- z. t$ {) F
% g! f1 O2 ^) A# O' o9 \9 J- d
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
e' R" x- ^; E* r! l
3 F, V0 u& Y3 M* }& W0 I 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . G0 B; K: d& c9 B
子函数及演示程序:
e0 [3 V* z7 g$ Y& T. f
# \9 U0 |4 c( P' |' g p+ \ #include<stdio.h>( m# U8 \* K. T; Q6 n
#include<dos.h>
+ s( V8 J, {+ W# ?. H$ p' F0 Z! E7 l #include<conio.h> |1 D5 T. K: L3 M" W$ j
2 u% [; }+ `6 N- x; j7 C void goto_xy(int x,int y);6 O1 x" _" W8 Z% k8 v
void dcls(int x1,int x2,int y1,int y2);
6 D' n3 t* q2 H. Q0 q void bcls(int x1,int x2,int y1,int y2);8 H# ^' c: V" S0 F
void kcls(int x1,int x2,int y1,int y2);
& _' M$ s5 S/ s% Y7 E& k( d void recls(int x1,int x2,int y1,int y2);
5 u4 i1 y- i# c void zcls(int x1,int x2,int y1,int y2);
$ e9 @. P# I }# h6 T void puta(void);
7 l, a4 p0 L; ^4 f( M2 T( z/ {% n. R6 U J
# w2 a- |6 F3 N ^ /*--------------演示程序---------------------*/9 k) V7 s+ A7 c
main()0 G& t! n' n: z$ U
{3 \' Q9 Y( ~( m
puta();
+ C/ ?! t! ]. h* L getch();
8 f4 n: p3 g; K, |9 a, e dcls(0,4,0,79);
& m8 t4 C& t3 f) n getch();
6 g7 X% S3 ^) j3 ^: f$ a puta();+ ]. x/ [ _) U |: |; U2 P! P2 b" G
getch();6 U: c+ f: ^, p* `# }! D
bcls(0,25,0,79);5 s! t# e9 u8 R+ G5 K
getch();: p, ]& a( g( u
puta(); h0 Z8 c, n, b: {/ J7 H8 F
getch();; A2 J K8 m2 C) f- `
zcls(0,25,0,79);, g, ]9 p2 l Z, `+ s
getch();% [7 {) C( d6 [7 |* T% l: k
}
! q2 k6 i8 B, `8 g% z /*********center clear screen(中心清屏)***********/
, O0 w( `, D. ?: H, @& F, u2 B void zcls(int x1,int x2,int y1,int y2)1 c: ^' i2 r a+ a. c7 X( y
{& j1 X- a* W; n8 |- _- Y
int x00,y00,x0,y0,i,d;
! }, k" b4 [" b5 T' s6 \ if((y2-y1)>(x2-x1)){
. }+ z5 e! L/ }+ M) n! S( B" R- t d=(x2-x1)/2;. I. a1 e; L4 Z" x
x0=(x1+x2)/2;% @& @+ N+ Z1 s
y0=y1+d;
# M# _0 T. s3 o7 Y1 _( C y00=y2-d;
5 N. L# A& a$ V, \ for(i=0;i<(d+1);i++)
) Q0 ?8 K5 s/ t; h' b/ t2 u3 f6 ?$ S recls((x0-i),(x00+i),(y0-i),(y00+i));1 j1 S$ b1 C# {) j0 o. {, F
delay(10);% |7 Z2 |8 I1 _
} {1 I: T3 }2 g' G
else{' a+ E! g/ m5 e0 F
d=(y2-y1)/2;/ E1 q$ v/ A! r
y0=(y1+y2)/2;
- n5 C4 k$ z6 z9 T$ c. f- m x0=x1+d;
7 [; X( k( v! ~* k) e5 w1 D$ a x00=x2-d;+ G3 [: b$ S: p6 e
for(i=0;i<d+1;i++)
- k/ [8 \) _, `) Y2 Z9 P8 f( [: w recls(x0-i,x00+i,y0-i,y00+i);
! t) j" `0 H# T; r0 ` delay(10);
0 [$ i6 L" R. n( r) v" s }
2 ]+ E# C7 s( V5 t( Q( G }5 W' _$ K- R# u: y
4 v7 x# M# }" O( T- ]" r
/************* clear rectangle side(矩形边清屏)***********************/
0 @7 k6 e4 Y- X% H
" f/ X, _4 s) H' K0 C void recls(int x1,int x2,int y1,int y2)
0 `) d0 h* ]- v! ~( f* T {
5 ^! g2 J) p' M: ` int i,j;% r/ p) a( {& E" c0 a
for(i=y1;i<y2;i++){
9 d. D# e6 F4 R9 v goto_xy(x1,i);1 n& h, P0 Z7 E/ m; z
putchar(' ');
' R& z' m' C* x, b goto_xy(x2,i);8 k Y1 c. l1 r0 Y& c( ~5 E3 b
putchar(' ');
/ r( M# c' ?5 s delay(10);
$ a( `2 ~% J5 ]/ k- F" ^ }7 g/ M; x2 L% S
for(j=x1;j<x2;j++){
) e& S4 Z7 @" z goto_xy(i,y1);/ v, j0 Y2 b/ m3 ]1 j2 Y
putchar(' ');) `3 d: M3 B4 q3 Z
goto_xy(j,y2);0 H* l0 ]7 _4 {/ s3 {
putchar(' ');, L/ }5 I7 M% J6 Y/ U9 S
delay(10);
( {2 _3 X7 L0 L9 {/ ?5 t }7 H3 H; p K, j( S
}
( _1 H" \7 C6 Q x% k /******************open screen clear(开屏式清屏)*********************/
) a! T* ~# g# _5 z9 x$ ?+ o$ I$ q6 f. y; ~; g
void kcls(int x1,int x2,int y1,int y2)- c) Y0 e3 A$ q& Y$ ~7 O8 W# A
{- a# O- Y1 c1 h& _
int t,s,i,j;
6 I: T: H3 r+ Y+ [ t=s=(y1+y2)/2;, p3 Q ^3 P+ t [7 y7 U! u
for(;t<=y2;t++,s--)+ g' ]% N1 u( b8 p- I
for(j=x1;j<x2;j++){
3 l3 O1 {2 d$ ] goto_xy(j,t);% g) c+ C& q' C
putchar(' ');. e. q# D2 ?6 m- z2 \/ h1 Y; |
goto_xy(j,s);# @! m- F/ K7 ?" _0 L
putchar(' ');$ k; T/ z% w3 \5 `4 e# h. Q+ O; e& n q
delay(10);+ } |/ N. ^. n1 L( S \, q/ J
}5 u; ?9 P" y8 h) s0 |
}
( r- `; ?4 d4 q( }; d: e1 D /*****************close screen clear*****闭幕式清屏*******************/# o7 H7 u& e2 |0 _2 v
m, E4 D. @: z
void bcls(int x1,int x2,int y1,int y2)' B& X t' o K J& M
{
& U, j# [. b2 W9 T! T+ N j& t6 z int t,s,j;
0 |4 |3 i8 \8 F2 Q t=y1;; x. Q- U( s( s
s=y2;
7 P. r _& y) y& `8 A: R for(t=y1;t<(y1+y2)/2;t++,s--)& m* c* ^7 w' g. |2 B# [
for(j=x1;j<x2;j++){" y: d, F" W8 m+ W9 ~
goto_xy(j,t);& U; B* K" a* y- m0 Q. D' t. R
putchar(' ');
- @1 i' A4 h/ `" s goto_xy(j,s);
6 x: u7 |, g0 F% F$ X5 r putchar(' ');+ O7 r+ X& G+ J4 y
delay(10);6 @; _+ K# i/ X1 I- u7 F7 R& a
}
- R: P6 i$ ?/ F9 ~6 A+ G& E }3 w* }- g: \; F2 Y& H0 ]
/******************bottom screen clear(自下清屏)********************/- I$ w/ l/ Y( t( c2 U
2 P% ^$ l& r2 M3 x- G& ]5 L void dcls(int x1,int x2,int y1,int y2)+ x, S' Q% R# v4 _9 n
{
7 [/ b8 M$ j5 S8 z( k+ c int t,s,j,i;9 f& E( p/ t# d- m& g# F
t=s=(y1+y2)/2;
9 y6 W- g; K; L( ]% X for(j=x2;j>x1;j--)' Q! s, V8 v7 Q; F( R4 ^, |4 k
for(i=y1;i<y2;i++){) ^9 w' E# b. S, j) U- h0 D6 F* U
goto_xy(j,i);1 ]/ c7 A; l3 r
putchar(' ');
; c4 B. t8 B) n9 S+ ~ delay(10);5 e- ^0 T; I9 h3 o' W/ v0 ?
}, D/ r) t+ D2 D8 N1 w
}
4 E* o# U& P) C /******************设置光标子函数******************/
) [1 A) Q" [) u( H' o7 a3 L7 a) n. d- X v; o
void goto_xy(int x,int y)5 t6 ]; G3 g; ?) C! J
{
3 @5 c: l3 S/ y4 ~. z1 m, u. f union REGS r;
: C' {+ h5 `/ G, `2 q r.h.ah=2;
* M1 X& X6 `: o+ Q5 _ r.h.dl=y;
2 [- L/ r2 ]0 S* g! E- R r.h.dh=x;, _+ y. b0 ]; |: H, ?! U1 S6 T
r.h.bh=0;; m, f, Q2 q n4 F6 m- l4 O$ U1 ~" c
int86(0x10,&r,&r);
z B' X9 B0 U }
) {/ z- N" ^3 g# R* b
+ H6 I: N) x; [" W |; I- H3 t0 V /**********************在屏幕上打出一连串的a字母用于演示程序******************/7 j) S) N }( \
: e" P1 G( r3 @/ w1 ^
void puta(void)
+ D0 |0 D7 Z$ }# r" \7 {0 s, T {
( B( a. w5 G* H% v+ w4 O5 ~ int i,j;
1 ] i/ R4 y5 s3 s" N& @ for(i=0;i<24;i++){: g- J" y5 \4 { x! e
for(j=0;j<79;j++){
! i v* u8 X# P1 s c+ e! M0 q goto_xy(i,j);
; G# x0 I8 T! v printf("a");( l! O. s+ U+ G
}2 S* N+ x. D4 N' V0 G- n
}
- m' g" H+ M+ e* V5 k1 o. q4 O } |
|