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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' E- P6 U# \; _( A0 \+ P( f
$ X6 x: d+ X. e4 @9 t+ c 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" Y3 X3 N; V; `( W. K% U p: u3 S& m# f6 h. M% @0 d
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # i$ k! B- p9 R
子函数及演示程序:* o& e) c, l; t0 P [2 l |* L- {; z
" V+ x6 X9 ~. m# j9 Y& | D( A
#include<stdio.h>
1 K8 t6 `5 n7 k9 v) K7 ? #include<dos.h>9 ~0 h4 e% A: L* N
#include<conio.h>5 h2 h' \6 h: Y* x% L' I# J
& V+ Z) Y% t6 I void goto_xy(int x,int y);: ^- Z4 g) J+ S; l$ _) r9 p( A: i( i
void dcls(int x1,int x2,int y1,int y2);2 o8 M) E$ z1 w1 @4 g
void bcls(int x1,int x2,int y1,int y2);
9 {2 e. `2 |2 S( m% u void kcls(int x1,int x2,int y1,int y2);
; u+ x7 o: R3 L, n* w4 ~/ y: Y void recls(int x1,int x2,int y1,int y2);2 G% B2 d& n% R# t8 D
void zcls(int x1,int x2,int y1,int y2);0 c; z/ Y X; l- y+ L) N# y! ?! A
void puta(void);
) u) \( N. e* B& J- y: S2 w& q* M* ]: B% I9 |+ c+ A1 i; S9 I
% p c- Y5 C! F- {& J1 A+ A6 _) s
/*--------------演示程序---------------------*/
1 J. K% O0 u! }" a8 e9 N/ y main()
- S# ]1 J4 q) h2 @ S& ^ {
( H5 O- U o$ ^( Y" | puta();9 v5 I& m: o7 _/ K7 C0 Z; O! a, h
getch();
! u0 S) s8 T5 c! w t" ~$ l" Q: w dcls(0,4,0,79);
/ t1 h: }9 ^7 ]- l getch();
' g* I& V: g; i5 s, T9 { puta();
# E& g0 H, k) V8 O getch();
- C( ?; v" O4 }4 U- @; w. T bcls(0,25,0,79);
& A2 J% n" }3 l2 L3 r, e8 o getch();
# K# I1 M. C7 z1 h8 J: W( n" { puta();
9 F K5 N' l/ h1 ]9 M getch();5 {) d3 B* H S3 K; j- u
zcls(0,25,0,79);
$ B; [2 C M' I9 n" a getch();, J( t: T ~9 G7 ~/ D( q$ f6 y
}
! C+ h5 {! j) S9 Y- S /*********center clear screen(中心清屏)***********/
% ]6 @) D) w9 I8 m2 Y) {" l0 Q void zcls(int x1,int x2,int y1,int y2)
9 }8 R, y8 q/ Z" Z7 Z {7 v0 M; F7 P+ t8 N
int x00,y00,x0,y0,i,d;
" D2 R! x; r# v& z) T8 h, U$ n# D2 Z if((y2-y1)>(x2-x1)){
! m$ d: z! @4 p* k7 k! m# |6 I d=(x2-x1)/2;& t. x# I( C5 M
x0=(x1+x2)/2;
% \5 S- Q, D& Q M) H7 s0 H* }( E y0=y1+d;0 h2 \$ V) U% A4 O% {7 M
y00=y2-d;
6 B* f$ T$ Z0 p: q+ p5 D6 X for(i=0;i<(d+1);i++)
$ r% t1 C X; Q) B* g7 f9 c recls((x0-i),(x00+i),(y0-i),(y00+i));3 a) t9 R' z5 e$ O, j3 Z
delay(10);
6 Y6 J. G9 \! [0 |# L+ a# `9 i- k' r }6 | W4 ]1 ^ v/ a
else{7 V3 ~+ d. P$ q; F9 o* n7 Q
d=(y2-y1)/2;
- Z# k0 m9 e2 {) I$ t- ^ y0=(y1+y2)/2;$ r2 t- G" U) `& i/ V6 J
x0=x1+d;; H3 h/ d& s5 E% S% m2 d6 S
x00=x2-d;
c1 m% N* b' n3 y2 } for(i=0;i<d+1;i++)
* X- G4 n5 Z; [ recls(x0-i,x00+i,y0-i,y00+i);0 B6 s' _4 |! n+ s) g7 P* L
delay(10);; i" a) x' a. t% [$ @3 y( k
}
1 Y& p a% b2 d0 E }
+ u+ X. E2 L9 Y. Y) g$ U. {
& x' { z) ?" w2 I /************* clear rectangle side(矩形边清屏)***********************/
+ c. o# i/ ~2 F! Z3 {+ {0 z7 v/ ?8 B
void recls(int x1,int x2,int y1,int y2)4 i6 E- ] s3 U" j% I
{
- P7 Y0 g/ z" K+ J$ |* L int i,j;
0 X# q9 a$ A3 s. O# z for(i=y1;i<y2;i++){, t: {, z/ B9 S4 D
goto_xy(x1,i);
; B$ X f/ e0 e7 U& i- R" d. r; O putchar(' ');$ ?( ^, Z& ~2 d/ [1 Y |2 \
goto_xy(x2,i);
& _5 ^" e7 o4 `- I, a. ^ putchar(' ');
! B, v1 Z0 { v- v5 y& z. @ delay(10);
$ Y( m2 x9 N) |; s) G }
; s! H8 Y+ T# B for(j=x1;j<x2;j++){
^# J/ T+ Z/ @* { goto_xy(i,y1);& Y( J5 P7 ]6 D9 C! \! F
putchar(' ');
0 D' S8 I8 \+ o; f9 } goto_xy(j,y2);) Z* D1 M2 D0 ^4 A9 n+ F$ m( t! K
putchar(' ');
$ P2 G* h' c' l( h' Q ] delay(10);
8 v+ R: g9 r0 H7 {& e. H/ o }
4 L: p# K& J9 [( }* V }
4 j) I, y9 b5 ]1 ~ /******************open screen clear(开屏式清屏)*********************/
8 J. K; P s, X- p# y+ w! t
& |) J- F2 g* o+ ~2 l void kcls(int x1,int x2,int y1,int y2)4 u! C6 R# D6 A) }7 q) A
{+ e. }3 v- g) ?
int t,s,i,j;( f6 O _+ m7 I+ M S# s
t=s=(y1+y2)/2;0 v- u/ z2 P$ Y: @/ A
for(;t<=y2;t++,s--)
. c. o* Z& i9 r, d( L for(j=x1;j<x2;j++){
2 g; l9 Z/ ]3 j) _ goto_xy(j,t);; |# ^: K5 \, Y9 a& ?
putchar(' ');
+ o( W) n" t* j" k! F; B$ F goto_xy(j,s);
: I: U" B8 c3 z- ^, H) W putchar(' ');3 e3 D0 i- E- }7 ~
delay(10);
" H5 P( _: U2 O) @7 a$ p0 p& _( Z }: q" _0 c; i; f3 q5 a! A6 {0 Y
}
, M5 ]" [" G( v9 _7 [ /*****************close screen clear*****闭幕式清屏*******************/
2 V1 @- w2 R; q. M4 ? M9 V
/ P& z, }" Z: p Z" X* j void bcls(int x1,int x2,int y1,int y2)' ~4 ]! \7 ~, S' n
{
+ d, D) c4 f' \ int t,s,j;0 L; p9 f5 u1 u) E2 k- G8 [
t=y1;
! u) j; O# N- B) V7 _! J) }$ P Z4 \, Z# S s=y2;
' Z9 P* I2 r, H7 `$ L; Z+ e for(t=y1;t<(y1+y2)/2;t++,s--)
0 d1 p$ O8 l. D/ I$ U$ Q for(j=x1;j<x2;j++){4 y h7 e+ s) M0 z6 a) N$ U
goto_xy(j,t);1 ]% f+ N# R1 k: |9 \
putchar(' ');! A& D& h+ I) T' r* u0 ^
goto_xy(j,s);
/ m! n/ a/ w+ Q( }+ v putchar(' ');9 C, N( v6 v& h3 [* i% p- B
delay(10);
" u7 `* _- U% t; N }% i. D1 {, O" w$ s/ H5 c6 u# Z
}
2 e+ f" M0 @' e /******************bottom screen clear(自下清屏)********************/
# ]8 v5 ~& r0 g3 t$ S; v1 {
$ A2 e0 h& R; z1 j# I# d1 s* z void dcls(int x1,int x2,int y1,int y2)) [- p, p5 ^8 z
{! ^2 B! h' k% Z1 W! r
int t,s,j,i;6 m5 o; t0 |5 F' {$ z/ d
t=s=(y1+y2)/2;
4 Q" N; n: L+ j+ ^ for(j=x2;j>x1;j--)4 S0 `+ v2 l0 |3 h; `) ]. u
for(i=y1;i<y2;i++){& H/ W3 j& F) b! G
goto_xy(j,i);
' n2 o; V+ X6 V' s- t( R/ `9 l putchar(' ');; P7 ?% S0 W1 i
delay(10);
- n% d/ n) n9 t! ^ }
: _) h" X) m, G0 R }5 V" i$ T. O' l Y* b d* M8 k- e
/******************设置光标子函数******************/
3 \5 O* P9 c* i5 D' c
7 K) c* ]4 T1 {6 F, M void goto_xy(int x,int y)8 {! \. `. A0 ^( a* f
{* t& o5 }4 V( p6 F% s! e( L: v) j
union REGS r;# V; [0 h: e; b+ W4 g
r.h.ah=2;
! [, P6 T1 K# P6 b r.h.dl=y;$ M/ w8 E# B# q! _
r.h.dh=x;
2 _* F, o# V3 q+ o7 ? r.h.bh=0;
! G+ f" d+ \* O' r n/ l( l int86(0x10,&r,&r);
5 y9 S B2 y6 h7 E6 T6 ?- s* J' \ }
+ g+ N! G, t8 X7 Q. z0 a3 g F/ p- @, L4 |) n
/**********************在屏幕上打出一连串的a字母用于演示程序******************/# U2 P/ F/ ?/ p
5 H0 q) G2 Y+ W' R& j6 \' N
void puta(void)
3 A' c1 v1 N: I, K0 A$ A {
$ n8 p- r& m9 d8 f5 f$ \ int i,j;5 F" U) P }' X) v
for(i=0;i<24;i++){. t. E; f8 G4 P/ m* l( S
for(j=0;j<79;j++){' |+ G- \5 i8 ^, a- v% w
goto_xy(i,j);
1 T0 u$ y& t/ `" Q printf("a");5 Q3 W# r' O2 O# M: M
}3 r% Y N& m8 Y% E
}, C. o$ ?5 N: [' N& `
} |
|