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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 d. t- `8 T; f- ]; |" x/ |/ y
8 F3 h$ }+ r! B% |$ t) ] 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
; O, F( w8 E3 Y1 C# d5 g) q
( `- B, H; v- s- \7 X 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * y3 f0 z2 }" I' S
子函数及演示程序:' e7 H" U/ J! N1 @
. Q* n2 ~& B! `6 s8 f! m #include<stdio.h>( B k% H; c- w# O& _% d a
#include<dos.h>
. g; x6 T5 H- s+ }5 {; \ #include<conio.h>
* t" C- l _$ P
) F& V& N1 q+ X' R void goto_xy(int x,int y);
& u7 H* D7 A, t, K: e {' q Q, { void dcls(int x1,int x2,int y1,int y2);6 ?& a8 D, |3 d' m: ?
void bcls(int x1,int x2,int y1,int y2);
" f9 j: }* b+ D1 T! _ void kcls(int x1,int x2,int y1,int y2);5 z8 \1 a/ \, u/ {- d8 X1 L! h5 Y
void recls(int x1,int x2,int y1,int y2);
* X; _% i% ?# |. |7 y2 M void zcls(int x1,int x2,int y1,int y2);
- Q5 ]; g2 `+ _ void puta(void);5 ~. v+ n5 K/ @ I$ E
: c1 p6 {+ R \8 ?& _
8 S: c d; m# h$ X/ o /*--------------演示程序---------------------*/
0 _8 E, k! E0 U) t main()
$ w5 j9 @' s! G {& [& `5 w, _. j. M: Z
puta();* I$ F# ~# i. r! P
getch();
, G. x/ y% a' c; Q, N, s% q8 o dcls(0,4,0,79);
/ G( r1 e$ n; j1 _: ^' _$ q getch();+ `* l s0 r2 q. W6 C8 [
puta();* A9 g+ P8 h7 M
getch();! q5 I6 ^, \7 b% b
bcls(0,25,0,79);
' j4 |1 S: y& ]4 a* y: z getch();) {" b) ?" ~ I# X8 j" U& Y
puta();5 p9 H" z. j' {# z/ ]4 X. p4 v
getch();6 C$ u0 z% |. ?# o( ^
zcls(0,25,0,79);' R" C3 Q# E7 i4 `: H6 y
getch();
) M: q0 X- b& r; `' F1 H$ e. O$ |6 I }
# B$ B; L3 p+ {) U8 S /*********center clear screen(中心清屏)***********/
; N; i1 u: r8 ^" x2 ? void zcls(int x1,int x2,int y1,int y2)( p, J' K8 F1 e; z d( \0 B
{
6 N6 s' g/ u' p int x00,y00,x0,y0,i,d;. |. x: A# c/ s# f
if((y2-y1)>(x2-x1)){. C' `7 ?' }# V( z
d=(x2-x1)/2;
" O5 w5 L) w/ _: V; U x0=(x1+x2)/2;5 I! f) k0 w6 H! z ^: c( `1 D j
y0=y1+d;. D4 v5 |3 D2 F1 T+ Z
y00=y2-d;7 R; r' ?0 Y; |
for(i=0;i<(d+1);i++)1 I* G L% i- A7 O
recls((x0-i),(x00+i),(y0-i),(y00+i));
, S" ^9 _! _) @1 i; p1 O delay(10);( ~" V* \/ N7 z4 S
}
# D0 x8 W# K: Z1 G, B/ T else{- u7 [( m& ~# `, U3 y. q
d=(y2-y1)/2;
. h$ q# D" S8 D( o9 G y0=(y1+y2)/2;
6 E& A# w8 u; O x0=x1+d;8 g% @; G2 F8 M: J9 d
x00=x2-d;* [ N: m- ~% w% \! L9 V/ B: {
for(i=0;i<d+1;i++)
; a( v: u# v w% f R( [8 U4 o recls(x0-i,x00+i,y0-i,y00+i);
2 }, u# k* i# |3 _. A M+ Y! o9 U delay(10);, U5 D0 Z" _: J, u' e* K
}
% W0 ]2 ?, ^/ { }; d1 X- Y& w7 l- c# I9 J2 D% X5 t
9 `* o; K4 Z* z: @2 F# H3 ] /************* clear rectangle side(矩形边清屏)***********************/
5 |# L& k* m3 \8 w# T- f' e1 q
R: O [ w$ ^! [9 e( w# u void recls(int x1,int x2,int y1,int y2)5 M& [& i% n- O9 v1 E: I- K% Y& O
{" D% i3 x1 e8 i Y4 j1 V6 x
int i,j;
9 ~+ b- H4 u- I0 I/ n6 D- Y, ? for(i=y1;i<y2;i++){
9 [! x$ J1 Z+ K+ v4 o goto_xy(x1,i);8 V7 _4 ?0 u2 Q2 y) a
putchar(' ');- j7 }2 H% r7 w4 |9 W/ Y9 e0 c
goto_xy(x2,i);
; P! @$ o0 R8 R5 B1 v putchar(' ');7 b+ x1 z1 ~$ d+ T: H, Z6 s! J; l4 D
delay(10);
- p" I+ C) {* S4 K( J! |- p/ A3 \ }' m3 ~' W: l7 A
for(j=x1;j<x2;j++){- v/ x0 f3 e5 m8 P! K
goto_xy(i,y1);
; ~6 Z! w3 Z: r6 A! Q% a putchar(' ');
% m3 \ [! {2 l6 _9 g$ ~ goto_xy(j,y2);. d8 L% }4 v( u4 e7 Q0 `
putchar(' ');
( u% w/ S' I/ x( K4 B' `* T delay(10);! a+ ]0 W$ D; n2 v% w# R+ M4 N
}
. E5 A! ^& \6 v2 Y. h+ z }
# \$ [: u6 w$ O4 J( s2 j" s8 e4 w /******************open screen clear(开屏式清屏)*********************/' _# {1 S- M% C1 y* Q; F8 R
5 @( v* Z& ^& {
void kcls(int x1,int x2,int y1,int y2)
+ R& f" ^0 h- D8 q \/ Z+ u {. p! `$ ?! p' t* ^* h! i
int t,s,i,j;# e; D) W; X% y
t=s=(y1+y2)/2;
5 i2 j- q- c6 ?' S, S2 R" l for(;t<=y2;t++,s--)
- W" d' u8 h! q& y4 t for(j=x1;j<x2;j++){
/ ~: f6 T; }3 C- |! \6 k& } goto_xy(j,t);7 a( x& o. T' V0 B
putchar(' ');
( j) M) k( l1 g/ N goto_xy(j,s);
. ~: N0 U5 @$ N putchar(' ');8 d! f8 n: w- Z u& ~# `( P; U
delay(10);+ U+ o4 D; a: i) W2 @* O) H2 c
}
; n4 y1 \: t$ H! D- }" a/ ]0 L7 o/ O }0 c5 o5 p* H0 s% \, X j! @
/*****************close screen clear*****闭幕式清屏*******************// g6 R" q4 d m9 [9 A1 k- e
/ J) y' o7 f( \3 k5 ]" p void bcls(int x1,int x2,int y1,int y2)
# d* n; f5 j/ `1 w8 `- L* K {2 @6 ?! F8 L. a/ R9 p0 |% l# o
int t,s,j;
2 p& g9 r2 f( K. A. _ t=y1;0 T% Z, K- T0 q$ o9 D( p* z
s=y2;
) Q7 ]% e4 l( M o3 y for(t=y1;t<(y1+y2)/2;t++,s--)+ A+ j: G k& N. A# e
for(j=x1;j<x2;j++){% r: @; C0 ]( D" {- R* o
goto_xy(j,t);
' o9 `, Z$ ?9 ?, n! w) z* r+ x putchar(' ');( J1 R2 k: f0 y; m
goto_xy(j,s);, G( n$ ?# n* Z
putchar(' ');
3 \7 N3 s' N2 Y9 _- i+ C2 o delay(10); @* s+ f" s- j+ ^+ W8 b
}
x1 C3 H; u; l' m1 r }
8 g d& ~+ C8 a" ` /******************bottom screen clear(自下清屏)********************/ h+ v: G M# ^, e
& ^: n% n& J0 K( f2 n0 L6 V4 z1 y
void dcls(int x1,int x2,int y1,int y2)
3 T# ^& `" k' r1 Z0 R* o( f$ {- {. O& e {
- C* o+ C, o1 p! a2 C int t,s,j,i;
4 Y5 j, }% W( U) t' Y! B f t=s=(y1+y2)/2;( }8 Y; X% H; B# N* z
for(j=x2;j>x1;j--)
( f) H, r& v! R N for(i=y1;i<y2;i++){ A+ j8 C2 S7 C+ z! \9 c9 [
goto_xy(j,i);5 [- c, T% p& x" C/ K) S7 K+ e
putchar(' ');
6 h% J' a2 X. N/ G" q0 H& q delay(10); Z; \3 I5 m6 I3 L& E( Y
}. A4 L4 B6 b) m- F9 `" ~
}- i3 k( k. ]9 [9 d
/******************设置光标子函数******************/9 G- r N; ]. t. c6 S5 F1 A
3 c: k/ ]; f7 t+ A
void goto_xy(int x,int y)) M8 E% {% D) a, ]" k. p
{
8 A. `( i, h) Z) t union REGS r;$ K8 L; J- W, P; T, ] s* G
r.h.ah=2;
1 v2 ^- }( `/ _" `/ y3 o+ y4 `: d, c r.h.dl=y;( j" m. v' B* n
r.h.dh=x;: |% C- N8 _! l @8 d
r.h.bh=0;/ `" M( w5 c) R
int86(0x10,&r,&r);7 p& G L+ G* l* u
}/ a) N9 p# J) N7 J
+ L2 t3 k! V# j8 ? /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" q6 v* j+ t `, b9 J& `2 D3 }, T1 s. x9 w0 Y5 h
void puta(void)* d4 t# @& K1 |+ X5 \: P
{* p1 ~2 r( p; x7 U; D8 {( W8 J' i
int i,j;' v5 r2 x5 ^ s' y
for(i=0;i<24;i++){. [5 d- i% J: @/ X% R) ?
for(j=0;j<79;j++){! y( ?, w, _( d5 w
goto_xy(i,j);
( b# n4 a( p$ v3 Q( Y6 {6 \4 P4 ] printf("a");* a' Z- S: ^$ ~
}
9 c" K* ?" P8 n% l A }- a5 w3 Z2 o6 x3 j/ p1 r9 E
} |
|