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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,& |) h/ w# W" ~3 z9 r, e( { j
0 K. L8 u1 ?4 t, y& J5 p9 b' t$ D 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* f8 u6 m7 g1 B$ Y, O6 l# L+ L8 B+ l2 }+ f2 S
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% S3 G* u9 M" Q* }& _5 S 子函数及演示程序:# s5 T1 @ D% F) C6 A P
" A1 n- Q$ g8 S #include<stdio.h>
/ v7 B2 l% |5 A% w0 M1 D #include<dos.h>
- h3 u% G, G! x# M) J9 } #include<conio.h>4 v% _( W( \4 p" Q8 j P
. X/ g' V6 F3 x. r void goto_xy(int x,int y);
4 q4 G2 o) ]) P0 N) J9 w void dcls(int x1,int x2,int y1,int y2);
% r v( L! M2 _+ |4 M% j* z void bcls(int x1,int x2,int y1,int y2);2 {6 M) `0 T/ ? ` x2 p6 A4 J3 M% F
void kcls(int x1,int x2,int y1,int y2);
' B% j0 ]) ~# V8 p0 W/ Y% n void recls(int x1,int x2,int y1,int y2);
+ Z4 l. r- d' ` void zcls(int x1,int x2,int y1,int y2);4 R4 u2 ~3 h7 N! G! Q. b' N
void puta(void);
8 P( l3 x3 s! n9 L$ q% E/ ]( h" u5 U( x" R+ S! W
# S$ A6 {9 k% Z. {# t7 K7 a
/*--------------演示程序---------------------*/$ \2 ], c6 z6 E/ @
main()
3 {( C4 C# ?2 N8 z& A7 |$ ~ {" C; B% Q. f, e* p0 x
puta();3 v7 u8 m' o$ G3 I# @- M) ~* u
getch();+ h0 t8 J$ A! D) F, A
dcls(0,4,0,79);' [7 s; k$ B% U1 g/ d
getch();
( i# k, N$ {' v, Y" M puta();$ h. i% D9 X) P" O- r
getch();
8 ?1 H6 r3 t0 l# W bcls(0,25,0,79);
3 l# n/ C. V" i6 Q1 L1 s getch();4 N% H- Q4 t k% L
puta();
' p0 k$ B0 ?2 @6 A# |+ E5 n# \ getch();
# q @! Q, V3 y; \/ i& Z* g zcls(0,25,0,79);
- h6 ^3 @' [8 d1 z getch();5 D" [. m; q0 Y' Q3 [
}# {' i( N( K( {6 j
/*********center clear screen(中心清屏)***********/
6 S* b- s1 w- o void zcls(int x1,int x2,int y1,int y2)1 F5 t- g# N% `; ^' S7 L
{+ `% U+ b( x' ]
int x00,y00,x0,y0,i,d;
& u: R1 m' r1 `* f0 z$ y' T, _& j if((y2-y1)>(x2-x1)){$ y3 R% A# C; i: v# q4 U
d=(x2-x1)/2;
4 o% w- O O+ i; e1 _8 i x0=(x1+x2)/2;& G" i9 ^3 i% ^( L+ w
y0=y1+d;
8 J4 Q# D( z( B" m# Y" A) F y00=y2-d;
3 G2 ~) m! P9 N+ Y1 H# Y for(i=0;i<(d+1);i++)
% d" l* {2 `6 _+ c+ d% y+ l5 ` recls((x0-i),(x00+i),(y0-i),(y00+i));; q/ b2 w& {6 U2 O0 W( b( ^9 _
delay(10);3 H4 B: n" y, u4 o6 i
}
# T) [4 k i7 Q: n5 j# Y' V8 t else{
; U' |7 O0 h) h d=(y2-y1)/2;
8 n; i# p$ z1 ]; |5 u5 M' n! J y0=(y1+y2)/2;2 X; t, t# O+ P# i/ L
x0=x1+d;
3 m2 a+ `( q! u x00=x2-d;
0 {3 t3 o* n7 h) w. ]( G0 [3 k for(i=0;i<d+1;i++)
0 t; G9 j& T7 ]# Q% B recls(x0-i,x00+i,y0-i,y00+i);
! C; u, C9 U5 |! h9 z8 Y delay(10);& T: z, g1 k( L( J A C3 U' m: ~
}
8 N6 c1 @, _7 {$ r" R }( u) e# Y# e% j! H6 |, H
5 c/ E" v# z% @0 B* Q /************* clear rectangle side(矩形边清屏)***********************/
) W) Y& z2 p# E/ n1 J
& {; G* u& d) m; O, ^& s void recls(int x1,int x2,int y1,int y2)
5 A) b( y) s1 d* n. T: j' A* u3 T {
! O, |/ r7 Y% H+ S int i,j;
2 C1 ?9 ^& n9 E. M for(i=y1;i<y2;i++){. d9 W# b1 J9 C# E+ E9 x/ K
goto_xy(x1,i);* F' D& s& k. I5 `: p
putchar(' ');# u! _3 _: W0 G% y( m `0 U& [
goto_xy(x2,i); M! G: k5 h2 e
putchar(' ');8 g# g& _$ `$ X& X1 m
delay(10);
* b$ Q- a$ P. ?( {- B, u }- D- h3 Z- T4 Y3 {* G- q0 A! c
for(j=x1;j<x2;j++){
- ~/ c; r6 ?6 h: R" n" t2 ? ] goto_xy(i,y1);# Z9 i' f" f6 L3 m' @+ n
putchar(' ');3 A" }. D( r& N! v, c
goto_xy(j,y2);) o$ o5 D0 a) v* ?. S
putchar(' ');
`% G T4 B2 L delay(10);$ T+ D' @, W# g6 c Y7 [3 m
}6 a, W" v& e+ J
}+ Z' Q0 j, i" i) ]/ r* H
/******************open screen clear(开屏式清屏)*********************/0 M9 T( x( P( S& }
/ J: r9 ^" p8 L, ~- C
void kcls(int x1,int x2,int y1,int y2)6 {% [ I/ M0 ~4 t0 ~7 P0 R
{: N+ V# V9 z4 C, E- c2 I
int t,s,i,j;
* X; e2 ?( ?8 ~& h, u t=s=(y1+y2)/2;+ T0 s' W* D: ?" Z+ ^
for(;t<=y2;t++,s--)
" p* m$ u$ d1 |0 ~ h* ~" ]7 f for(j=x1;j<x2;j++){
7 e( W* X7 W* M* A- r6 [ goto_xy(j,t);& w+ s" ~+ }, g Q) R8 X) f
putchar(' ');: d* O; J- h N; I% I4 X
goto_xy(j,s);
& u: _2 O, N$ H, `: y! U, B putchar(' ');: q" X+ p0 r- B2 p# ^$ U4 Q% U/ D
delay(10);
3 J! q2 F* t) Q& x y% J }1 z. D9 B9 \; v
}+ y" m2 h0 \7 _" i
/*****************close screen clear*****闭幕式清屏*******************/
5 X) \1 J6 }6 k: `2 ^) a( D. ?: A' h7 X8 a2 t7 H3 h; l8 A% R* A7 T+ j
void bcls(int x1,int x2,int y1,int y2)
& |0 ^; o; ?1 P: \( E. Q- r! V {. y' t4 v7 p1 l7 g
int t,s,j;3 @; E8 a$ Q ?0 f" U; k5 M$ h# H* v% }+ ~
t=y1;( `# i1 v* M' ~8 |8 ?
s=y2;
/ r; F9 A8 D% L& S% N8 w h8 B f for(t=y1;t<(y1+y2)/2;t++,s--)
7 @( r) _# `6 \; i* b for(j=x1;j<x2;j++){1 B/ f* Z( ]3 q) ]4 V: h
goto_xy(j,t);5 p' `- t4 E* Y: ~5 I
putchar(' ');7 H$ g8 ^3 j' J9 R+ d: s" `
goto_xy(j,s);9 B$ N& y, R1 T* z5 A
putchar(' ');
8 U7 q) ^ @0 z delay(10);% v& C, X9 i" {2 p
}
. J: K8 W. t O8 d }
* k- B- |; D* p7 t7 Z1 N" H /******************bottom screen clear(自下清屏)********************/# U, n8 \' @* |8 m- c% E
y' O2 k% E8 F! ^9 v2 o
void dcls(int x1,int x2,int y1,int y2)
6 j/ E: k' B0 f9 \3 [: [ {
" _* O: q% ]+ ? int t,s,j,i;
0 z& l' x9 ]* m t=s=(y1+y2)/2;) W% c7 L3 b1 E: \
for(j=x2;j>x1;j--)
7 F. K+ k2 |9 z8 M0 H6 F. j for(i=y1;i<y2;i++){* V- C; Z& ]" F" m) n! t
goto_xy(j,i);+ h! w. p' @1 o6 L/ B: f+ O- M' F
putchar(' ');2 L- j0 F8 V+ W- O! |4 H, y
delay(10);
5 d; \1 R2 u V: }( g }
- z% \9 h. Y, O }. D: b0 Z& \# X: ~7 Y5 Y. h! W
/******************设置光标子函数******************/( {6 b; S' r' b. `5 `" X7 c7 Q6 o
+ k/ z9 u* f" v6 @2 f+ x3 R6 { void goto_xy(int x,int y)
1 v- }* ?# u# x) \- q {
, i- I$ a" p6 @, q: B% X union REGS r;% f/ \; T+ _. W4 S* i! N; x' e
r.h.ah=2;
( }6 R" l! u. J! X! K1 p, F8 P r.h.dl=y;
- r# q+ ~+ j) Z! ^6 A r.h.dh=x;- ^6 \# K P- K% _& w
r.h.bh=0;( u# C( v2 K V" \$ {7 F7 Q
int86(0x10,&r,&r);
& J* Q5 m8 R& @- }* _; N. W }
( Q5 n8 Q8 x$ u. K
: o. C4 E' z3 V! k* |; v" h# B /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 j( V1 o$ U* \0 K
5 _' Y- _. c6 e7 u8 L6 D2 F* J void puta(void)
( r8 p, z8 S$ `4 } {6 g" l, l( F: N8 G7 y6 {
int i,j;( N6 V8 k$ y* K9 b- `9 G2 B
for(i=0;i<24;i++){
: R& R- h) F/ J9 j- b0 g C" n for(j=0;j<79;j++){
+ _( y" K' v$ p; A2 @ h, \ goto_xy(i,j);
4 x! q: m) p$ {# P* Q' D printf("a");1 @+ u& k$ ]1 |$ R+ J( j
}5 {8 U3 r. R" ]. o! `# U
}
: Q2 W0 U, k8 x2 ^" Q9 W } |
|