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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 Q! G: Y F# E' `2 W. k( S1 y
6 G( _8 B* i9 \. ]7 q6 G* J
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里$ q6 w6 ~2 o/ i) I4 S( e0 I/ \' L
4 {1 J U: v" d$ }/ f 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% Q# Z* ]! N9 J7 }$ S1 f 子函数及演示程序:8 k, ^( I6 X; D
. h V3 h3 V5 {' d5 P3 ]+ \7 P #include<stdio.h>
0 w0 }8 s5 m! l5 Y& F# J5 _ #include<dos.h>
" I" Q! P G0 t0 t* V. t% j #include<conio.h>; Z$ _9 c; [- L9 c$ p, a$ @
7 `* {# L- g: |6 [3 ^( V# N
void goto_xy(int x,int y);
- }9 l9 z, A2 ?# n% F9 o A void dcls(int x1,int x2,int y1,int y2);
1 W2 ?& S! @6 [- _ void bcls(int x1,int x2,int y1,int y2);
' j* g: J$ a# Y( `: d6 @ void kcls(int x1,int x2,int y1,int y2);
5 A5 ^$ c4 y* Z( G% J4 {8 m void recls(int x1,int x2,int y1,int y2);
. T0 G: |* e9 }# m void zcls(int x1,int x2,int y1,int y2);: k9 n! ^7 Q, ^
void puta(void);
, d$ ]+ s1 `; \
. e# x. C" W! b: B, \- r' S# I
# t& k) {5 I2 Y0 i: @- Z$ I /*--------------演示程序---------------------*/" x6 r% A% L" c# ]
main()2 ~8 p! B& a5 _2 A$ h6 o
{
8 ^$ _" @8 e! } Y puta();- }% b: _) r5 j7 z& ^8 | ]
getch();; Y( i7 d/ j3 U; q
dcls(0,4,0,79);
8 \7 ^+ [* J6 |6 c }3 J4 t getch();
6 z9 Y4 z0 {. g7 s0 ? w) c puta();
8 _/ f" v9 m" s0 k% R getch();
, L- b5 ?8 e' I& k# m# c bcls(0,25,0,79);! [0 K6 K, X# m7 {$ B0 Q
getch();
, X9 B3 _ W' v$ s" s% o puta();* x7 R$ X# X' _ n* L$ Z
getch();
1 e4 S; A) o5 d4 e8 w zcls(0,25,0,79);" X8 V& T3 `+ X8 n. x
getch();
# x9 L( u# P& \4 ^7 O8 Q, a }: R8 L) A, H( Z& w8 Z
/*********center clear screen(中心清屏)***********/" F) t& _4 M$ z( H
void zcls(int x1,int x2,int y1,int y2)) _$ i4 P; G: W/ K
{
5 s- K7 @( `8 `+ ~4 _. `5 z int x00,y00,x0,y0,i,d;) k- {- o! {- T- q+ m8 N C/ A
if((y2-y1)>(x2-x1)){0 j. [% e; T( b! A' C3 R( |
d=(x2-x1)/2;
& [. a: \4 o! H; |& p' E1 ^ x0=(x1+x2)/2;. {% N7 F3 x Z. m3 ~8 P
y0=y1+d;
% k6 [1 l$ M- A& M. P y00=y2-d;+ h6 I' b& N* M& [# E
for(i=0;i<(d+1);i++)
+ |* w2 S/ `: p$ v' ]7 l, s recls((x0-i),(x00+i),(y0-i),(y00+i));
( Z+ V) W; {: K: J0 K6 m s" M delay(10);
" f/ p6 O5 \* s% u1 r* }$ s }: D7 L- Y+ o$ @" _( i' v4 [. T
else{
( }% V) g. e" J5 D2 I3 h3 L: K+ ? p d=(y2-y1)/2;
4 }2 M4 Q- P: b2 I2 g: i y0=(y1+y2)/2;: z! S3 W( C: Q! r+ \& b8 r3 P
x0=x1+d;
! b. V# |) n& w4 N; Q8 \ x00=x2-d;
9 r* n6 F' s+ T1 f. n. E& C% n# v for(i=0;i<d+1;i++)
; C" @) I# e4 R/ ?' Y recls(x0-i,x00+i,y0-i,y00+i);
# Y* T8 a) U$ F: \ delay(10);
% v6 @ {1 K3 x- S' a) K3 r# ~, K }; [: [3 C6 ~! s. m
}8 c) A1 V9 V9 \5 h9 y2 x
8 i! ]" x8 v: c; N4 [
/************* clear rectangle side(矩形边清屏)***********************/
$ C# C9 s/ c7 s! o: y
8 N0 a" o$ @. F2 R) `' U; a void recls(int x1,int x2,int y1,int y2)
6 C( M5 U1 ~0 [6 h' D3 S {/ [, ^& _: q* Y/ H
int i,j;
% x# T5 `1 X0 T1 _) }! \ for(i=y1;i<y2;i++){; l+ H R9 C7 L3 z2 ~
goto_xy(x1,i);
3 J: P* b5 P& L" E! V putchar(' ');
% a& R9 I; r3 D" a/ L goto_xy(x2,i);
1 e) C% `* R8 @- Q1 D l" P6 `" t putchar(' ');; `1 K: \. X9 b& q+ R' l
delay(10);3 C( S: n" z- |+ N! I- Q' O
}+ ^% b; Y7 W5 y& R. I: x# z! O" {9 J! P
for(j=x1;j<x2;j++){
, S# ^/ Q% t! o; l goto_xy(i,y1);
9 M* C) V* f8 }# J7 O putchar(' ');% n+ M3 G* v. I/ H* H; C6 H
goto_xy(j,y2);4 b* u* f" l: R7 p2 {/ O* X
putchar(' ');
5 r/ Z9 i, `! i* r0 _; L delay(10);
( Z8 I! h6 h% l% E9 R' r; W$ s# ^% F }
; p2 W# {% X- i( ] }" T4 p4 W$ f- G ?1 e* w2 t
/******************open screen clear(开屏式清屏)*********************/
; E+ v1 E9 v4 ]3 R* N( j, j. ^6 h: X" v
void kcls(int x1,int x2,int y1,int y2)
+ p# f1 W! k, l. q$ O9 v {3 ^7 D; I+ Q* G
int t,s,i,j;3 f7 }7 R2 ?' S6 _; u p$ z
t=s=(y1+y2)/2;0 ~2 J9 t, G! {; R
for(;t<=y2;t++,s--)
. h$ P/ l( Z, b for(j=x1;j<x2;j++){
5 V/ ]- E' ?' t- i9 Z" b5 i goto_xy(j,t);
* V3 [. ?$ s. Q8 L putchar(' ');
; L: ^2 x: c) x6 N% b7 R goto_xy(j,s);/ Z! K( ~6 H! M5 b8 y3 A X5 q
putchar(' ');
# R0 E% [& o* j! z, t delay(10);
( q9 q2 ]. Q: }. J( {( e }+ K8 r' T% ~3 ?
}
8 W6 y5 c6 Y+ o /*****************close screen clear*****闭幕式清屏*******************/
1 A# R9 \" K2 Z. p6 ^
J8 f; Z& g, y# ?1 l# V void bcls(int x1,int x2,int y1,int y2)' \6 Y2 j* b6 r( M, r
{# V5 O9 D, u9 ]' g
int t,s,j;
2 B! T4 {. d& {' o( A$ ?$ `/ d% h t=y1;& ^6 C7 u& N: @. P' b) g* s ?0 j
s=y2;4 z+ k1 ~1 c O; Q( o) i' |
for(t=y1;t<(y1+y2)/2;t++,s--), [% \0 s6 B- n1 v4 {" @
for(j=x1;j<x2;j++){7 Q: i7 ^! t* t5 E3 a
goto_xy(j,t);4 Q, G- i7 e( L
putchar(' ');( _ F* y, m! ]
goto_xy(j,s);) \7 @" |5 D* Z# _- b+ j/ a* r
putchar(' ');" p3 b9 R; B! s- s# L) N0 Y
delay(10);
& f0 X2 ~; V+ h- ~ }
. X4 \4 ^5 {. Q2 X1 c }8 X/ I8 J8 Z a* q2 G K
/******************bottom screen clear(自下清屏)********************/+ B1 l# Y. W7 s/ C# t0 D
) u5 p0 A1 a \ void dcls(int x1,int x2,int y1,int y2)
/ n3 i9 u' @7 R* m {
1 K: k% x8 H% {! P3 c& X' P, s7 E int t,s,j,i;7 l+ e7 w; O! z, b8 J
t=s=(y1+y2)/2;( ^, M) W$ ?% r9 m6 g8 Y
for(j=x2;j>x1;j--)- h( P/ K! k" I7 o2 h
for(i=y1;i<y2;i++){& I6 ?) K) p) I# E
goto_xy(j,i);
- a2 d, h! t5 d putchar(' ');
r5 B9 ~3 ~* H6 Q delay(10);
# E8 J% ]- e3 j9 A' C$ R" P }" ]1 h2 Y, K# c7 n
}4 A0 L" Y! q* m) | a. ?, ^6 O
/******************设置光标子函数******************/
7 X: Z) M4 q Q4 q3 H
, k, p7 Q( _- i; d) s' X void goto_xy(int x,int y)
- J4 |+ E6 q/ i2 z1 q {
0 u0 F& e0 K; O' J, V- R union REGS r;
5 Z; c: C& H( ?+ O8 k5 \7 t& M3 m: s r.h.ah=2;, r! ?& S% z$ F2 ~" z
r.h.dl=y;, O& f" B2 V! Y7 Y
r.h.dh=x;7 j( k* l- M" b8 j" i9 \
r.h.bh=0;
9 u" x& }0 S2 Q! w9 O. v" }$ B. } L6 @ int86(0x10,&r,&r);
" H, q. d, D3 b$ w) R/ w }: S7 {+ O v P6 q4 ?% D/ c
2 D: g4 H4 H: l/ y2 n/ X; } /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* m: e$ Z7 d' p+ W/ G M
' j: b3 ?3 c' Y! I9 S/ P void puta(void)
; x4 d3 N, S. w0 C {
0 k0 |# e6 c. I, S int i,j;1 ^1 A" E7 c7 X# U0 f4 O
for(i=0;i<24;i++){% m8 B- q% ]3 Z7 W( Z: l# v, X5 }9 I
for(j=0;j<79;j++){
+ L' i! C A2 ]1 B4 f F goto_xy(i,j);
1 H' T3 {% O& L+ } y3 j1 `! U printf("a");
8 w( ^6 w+ d6 e& S/ Y8 ]! V }$ e6 J4 Y1 B! ]( B6 p, U& P( D
}' \% T. V5 U3 u- [ F& s
} |
|