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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( Z; u! B7 c* K$ F s7 D8 l/ Y9 S! Q6 T0 Q; J0 \4 J2 l2 q" {0 K+ U" c, F
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 x( Z! _& D ]8 V, W, ?0 r
0 n; _' c. A) d; n6 D' G) Y3 ^ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 6 f. X6 w# h B- c& t
子函数及演示程序:
6 s X, E3 N7 Y# F$ k, f
; |. @) F$ l. H) b) S #include<stdio.h>+ B6 Y7 [+ y5 i4 h2 e9 K, }
#include<dos.h>* b& k9 o! h, H" |/ g4 v: f' X
#include<conio.h>) `9 j2 Y% O, y/ h- g2 W& X
" d9 E& c+ n$ x, M" C" m8 g
void goto_xy(int x,int y);
* X1 \/ S; E" v' L5 E0 C void dcls(int x1,int x2,int y1,int y2);& U8 v6 [2 U$ i3 g1 r6 T! _& A3 t" {1 o
void bcls(int x1,int x2,int y1,int y2);' b" F! Z0 F- M$ c5 c+ p X
void kcls(int x1,int x2,int y1,int y2);
, Q: r1 l7 v# P9 u9 ^" P void recls(int x1,int x2,int y1,int y2);
6 I9 \, Z9 R% [/ b! G' Z void zcls(int x1,int x2,int y1,int y2);
* P% ^* n' p% i: l5 Q N# g void puta(void);
3 A8 Z' ?! q/ C6 n- W
' b* f3 J# C) o$ Z, P+ u/ V: c$ E' m
7 ~8 m& w3 N8 y3 @ /*--------------演示程序---------------------*/
2 b8 T* M7 E2 S9 |; z3 C main()
8 o$ N; M# H9 g, m5 A4 E& Q {
1 i( M$ G& H% {- B& T puta();& A& Z& h) {4 g2 Y
getch();' ?! Z& w# z$ Q- _, N: b: w2 y' m1 g
dcls(0,4,0,79);
+ I2 S' B% ^% x8 q getch();
. W1 e. c1 ?2 l( Q# U$ G/ F puta();
$ w, ]3 s0 o! l6 L% o; b; A b getch();
]5 u+ G+ e7 F% l Q8 x+ G* w5 f bcls(0,25,0,79);) C4 g6 b# J6 @: f4 n
getch();: ^0 R- D* w m' o8 F. V8 C8 @8 E
puta();/ `+ C* {% X' {; n/ o* y; J
getch();! b. n! W( K+ T
zcls(0,25,0,79);
; T6 {: E0 }. H1 ^7 v" ] getch();
; |1 F. k1 P0 U4 h }
6 R* S3 l* j5 G* h6 M /*********center clear screen(中心清屏)***********// _( I6 t* c- y2 D0 d6 D" k
void zcls(int x1,int x2,int y1,int y2)
$ ^0 K# o. `% Q4 | {) n4 p, W. E# n4 e
int x00,y00,x0,y0,i,d;
- ^/ v* U; M4 ~2 j6 T/ Y if((y2-y1)>(x2-x1)){+ G) E1 z" f/ p' ?' I
d=(x2-x1)/2;; J. G" l8 B/ [; P* Y$ l# F
x0=(x1+x2)/2;
" |4 |, h. u% M% b! u | y0=y1+d;( p2 h0 W1 U5 Y) X& h( x0 W7 N7 t
y00=y2-d;' b5 [6 h5 u# @4 |& e( K
for(i=0;i<(d+1);i++)4 @ N9 @ s( {/ Q! K u& G) T
recls((x0-i),(x00+i),(y0-i),(y00+i));
! H, @% z- P' U0 {( z delay(10);
9 U% z8 B3 J# ^& {: M+ F7 E) s }- |1 h5 V# I4 z$ ~5 [( P
else{
# m4 g' Y+ t- K R8 V d=(y2-y1)/2;
, m* z0 u- ^3 H, Y$ R y0=(y1+y2)/2;9 `% g9 p& s& Y/ E. u0 X6 U: a
x0=x1+d;9 {" q J8 |7 s
x00=x2-d;! v1 C3 W$ I. W& I! X. P
for(i=0;i<d+1;i++)& r w9 s4 D( Y' a
recls(x0-i,x00+i,y0-i,y00+i);
) Y' S5 g! O1 F. ^. s9 R2 J6 P5 C$ X delay(10);/ x1 [8 r0 X- g. V3 U! a5 {/ S. r
}
" z: Q! b M2 c- N0 s0 O" b+ c- n b }
1 C6 q" ^- |, C) a5 x2 E$ p# L9 E. l7 D' K, @2 ? z. G$ X
/************* clear rectangle side(矩形边清屏)***********************/) Z" N: o' ^* ~2 o: W# M
! K2 E `' B1 n' r+ f" \" e8 [ void recls(int x1,int x2,int y1,int y2)# J5 E" Q' q3 ?* o
{0 ?) R; y8 j0 O* q# f1 @$ P: O
int i,j; z1 }1 T; T. A4 B- w P# w
for(i=y1;i<y2;i++){7 t; ?) O, \$ B4 F
goto_xy(x1,i);* }1 v8 ~% s* g' w" J F( C: e
putchar(' ');2 X1 C+ F5 H7 v# l
goto_xy(x2,i);
% w. o" m9 [+ G2 [ putchar(' ');6 J2 n: v' V: j" \& K' g6 |
delay(10);" Q ]8 q3 w5 s1 |1 @- f
}* D: W2 e3 X G
for(j=x1;j<x2;j++){
' C( s5 C6 A6 H1 Q9 t0 w# p( o* v- Q goto_xy(i,y1);
9 V% |' l7 n9 s putchar(' ');
- k% w1 B8 y$ d1 {6 N0 L4 l) Z goto_xy(j,y2); A3 x- \# J# r& M+ u2 e5 Y
putchar(' ');
( P( Y) y6 e* y/ P delay(10);0 ` p- y; @) ~2 g$ c' l! b2 I8 k
}
% Y6 F4 z3 }: n* u0 j3 w% L3 H7 S3 Q }5 A/ y: \9 K6 D. J
/******************open screen clear(开屏式清屏)*********************/
* e$ w8 }! o! K+ w1 O
0 @& f _! C5 I! V* u! m0 ~: j void kcls(int x1,int x2,int y1,int y2)' x9 K/ G. H8 b$ ~
{: J; k7 B4 R6 a' _% N
int t,s,i,j;
' o4 `/ a$ ?4 Q" F# I6 Z t=s=(y1+y2)/2;
; A/ x9 U& K( {5 Q: X* z5 {0 s for(;t<=y2;t++,s--)
: O; |; K8 r+ i( d2 s; z for(j=x1;j<x2;j++){' e+ G: s" g' Y+ t3 O3 G
goto_xy(j,t);$ l# i/ R, @/ _$ o! D. v
putchar(' ');4 L% ?* a5 M5 {
goto_xy(j,s);
; w# ?: W: Q& N! `+ P' b4 e# n6 ? putchar(' ');" [' C$ r, D5 Z+ k( d! Q
delay(10);3 O [/ X9 R- y
}& n3 g3 |9 j3 v4 a( F
}+ E( m; `7 R1 N: _" z
/*****************close screen clear*****闭幕式清屏*******************/
3 J4 ]( h$ H s. D% Q) O* K, d) S" u" T$ L) Q
void bcls(int x1,int x2,int y1,int y2)
7 y; I6 }3 K6 q( x {
7 z, \1 O/ {( ?8 b2 n3 [ int t,s,j;1 D* V. k, b5 ]
t=y1;
7 p' r& p7 T' d: v% X& p s=y2;
$ }0 {( G# D0 |8 } for(t=y1;t<(y1+y2)/2;t++,s--)
8 n, l* h) k, U: s4 \ for(j=x1;j<x2;j++){# g+ @- [- A2 k% e
goto_xy(j,t);
9 z+ R' M$ u* X. x putchar(' ');; v$ X. m* K5 c
goto_xy(j,s);# r7 C: K4 j0 f4 n9 X/ U' {* W
putchar(' ');* s2 [" R7 ]6 p4 E& y7 p
delay(10);
8 g8 O, D- M) M; d }
' ?! b: e8 g; E# a( z7 @5 S }& S! ?- e: s& m5 Q" N+ e$ E4 d
/******************bottom screen clear(自下清屏)********************/
9 ~+ @) w. F- K4 V- F" c
' l# D7 V- J/ a3 m" C' y void dcls(int x1,int x2,int y1,int y2)) m4 [! B4 }% Z2 p# Q2 s* T6 i
{( [/ d& z# Y0 ^# z, r& L8 d) [0 i6 x3 r
int t,s,j,i;/ R) D$ p+ Q) E+ D" e! K T @
t=s=(y1+y2)/2;
4 q- k3 k7 Y1 J! p9 S, C, i/ z for(j=x2;j>x1;j--)9 D" ?; Z0 `/ `
for(i=y1;i<y2;i++){. e3 K2 [- K! s: m/ O2 C
goto_xy(j,i);' A1 }1 A- M* T' H
putchar(' ');
, e3 ~) Y3 p7 P delay(10);
. G9 t# I% ~; I# k/ Q }, ?3 A5 T( m* y* |! i `
}
8 ]) W( j' t- j3 ]/ y /******************设置光标子函数******************/
) x: E: \3 w0 Z9 d" `. ]
, K2 U k. q2 o void goto_xy(int x,int y)! s& ?7 B1 P" l) h# Y2 @
{
/ R3 Y6 s7 w6 M4 F* x union REGS r;
2 j! c1 ?9 f6 j5 u r.h.ah=2;
7 n" E, \- A. I7 v r.h.dl=y;
5 M- j" |9 S, n3 D! Z6 ~ q8 S9 ? r.h.dh=x;& V& J, j9 V/ h L7 q
r.h.bh=0;
; _1 `% d, R; H int86(0x10,&r,&r);
! Q: q( s+ l! h5 B }5 O( \3 C8 j' r
; e! ^2 |/ y+ r! X8 l. n1 g2 Y7 Q4 |9 S
/**********************在屏幕上打出一连串的a字母用于演示程序******************/* D$ w% _- h4 r
' g) [0 O# w2 Y J% }# L void puta(void)
& _: `# W/ B& Z# K# H {
" B. P- h6 r6 A, r2 u' _! u int i,j;3 B+ u& t C0 @/ r
for(i=0;i<24;i++){
3 W5 j4 |" u( t+ S4 w; }" G for(j=0;j<79;j++){
% }% q. O6 Y$ @( a' V: `3 H* `% f goto_xy(i,j);; @) N) z' a+ g4 m, k' r8 j
printf("a");- R7 [: D8 b7 ^# d1 {$ ^ v) T: H. \
}% `2 E4 j0 _: F$ Q1 _: e
}* @$ { Y" h6 J& b! k
} |
|