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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,* l1 g$ j' A7 q$ _" O H
* p ^* d4 _% ^5 u, h: z 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里; x7 |0 }9 m7 w1 f
, y( Z2 l% ? N g
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 e, D, L% N" J0 {/ g3 P
子函数及演示程序:
$ f; D; O& U6 W4 N' v" W6 m4 G5 i( U7 x: e' q" w* G
#include<stdio.h>
) u# c3 t6 ?( D% b. P! Z #include<dos.h>" @" b2 e' v7 C, j8 k
#include<conio.h>+ S0 U! b9 P- ?3 [4 D. G& f
* @# N Z0 F' j" ?/ O9 j
void goto_xy(int x,int y);
2 A( }: f5 }9 V void dcls(int x1,int x2,int y1,int y2);0 c1 r, ?- N b
void bcls(int x1,int x2,int y1,int y2);
( }7 s0 ]0 u+ I& p7 @! V void kcls(int x1,int x2,int y1,int y2);
% K4 W/ H$ I# Q8 o( s* P void recls(int x1,int x2,int y1,int y2);2 V/ M5 ?3 k# G/ \4 {! Q) I
void zcls(int x1,int x2,int y1,int y2);
, \& B" y: ~9 P. T' o$ Z void puta(void);$ n. w/ O( S& M% U$ H
2 `& @. b6 F g2 C) N
) I. Y# b, d6 R$ X3 H' _. k9 [. d* t2 f /*--------------演示程序---------------------*/
* \$ D ?& _$ d1 ]1 ~7 W9 { main()
4 n% x6 ^) J* I9 I* F {
' q/ Y! n$ J3 U8 x" q; ` puta();$ m5 z) x% e2 b5 n' \
getch();
7 q$ z' C/ O1 k/ Q3 A! r dcls(0,4,0,79);6 j+ M" y% t7 }. G+ o
getch();, n" V5 S' m/ M9 h, T; K$ J& L: i
puta();
- s$ V! U8 m- U getch();2 f+ m- k3 e) u6 T! v* ]" r6 N
bcls(0,25,0,79);
0 U5 T9 {& ~. j# b6 t# _ getch();- v8 j; G, D y
puta();" ?) O/ {$ `1 g( y5 q" d( K, Y
getch();
9 P. R2 ^8 l( F) h zcls(0,25,0,79);
% a$ Y& _2 c; L5 x+ g2 P getch();' h$ H% F, \' x. L) U. m, l2 P
}+ y6 E, P- p+ k# {$ z
/*********center clear screen(中心清屏)***********/$ n0 Q5 K1 j W9 {; Z
void zcls(int x1,int x2,int y1,int y2)
2 ]3 d: w& X" F8 i7 V2 f! g) B/ F: Q" O {: m6 q& W+ I. J. C
int x00,y00,x0,y0,i,d;+ V6 R9 `) N4 X1 g# k# O6 D
if((y2-y1)>(x2-x1)){. o3 Y1 x1 w q& ~8 r, n2 Y
d=(x2-x1)/2;
1 e w9 n& C2 d2 d x0=(x1+x2)/2;- N( P, w, \. N3 K2 m' l. N3 B+ I3 C) a* p
y0=y1+d;* Y4 }8 k! J+ u, H5 R/ @
y00=y2-d;( l! l2 C7 K! K0 o4 `
for(i=0;i<(d+1);i++)
5 J2 Y3 z9 Z# E7 C5 h: @) h9 B recls((x0-i),(x00+i),(y0-i),(y00+i));
8 N% A. s0 k/ w" N$ M delay(10);
! E. @" Y* Y% b/ @/ T( o }9 f3 z- Z" G9 X
else{
) N, _9 h0 F/ p- s' z% x L d=(y2-y1)/2;; s$ G, E. X& ~/ u: _
y0=(y1+y2)/2;9 P. g% d9 U+ F
x0=x1+d;7 Z8 ]6 X& p9 G7 u6 k
x00=x2-d;
4 ?" H' D; S3 ]) Z" Z! @# Q for(i=0;i<d+1;i++)' g0 }. L7 `; h4 t: _) N7 X
recls(x0-i,x00+i,y0-i,y00+i);
* B1 P6 B9 c3 }& [ I! v: s delay(10);
7 m `! C+ U- O! Z }
. W! |3 M- ]3 N+ J. J! v. D }
$ e; a# [4 L S5 i% p( m+ G: i
+ P* ?! O# ~0 e |; N /************* clear rectangle side(矩形边清屏)***********************/
- ~5 b' X. S; Z) L# P
% h7 z9 s* X+ Z; X void recls(int x1,int x2,int y1,int y2)
# D, n- ?$ }2 b% T9 |0 N {4 y6 @- z- `3 S, p# n3 L. B6 c
int i,j;" B" P$ Q" w. f2 M/ k; b U
for(i=y1;i<y2;i++){% V- P& x4 o! i: d1 l* h
goto_xy(x1,i);
) i; g( V6 K/ n$ W$ k6 X+ {2 M/ P putchar(' ');4 H; N h) X( }( B) o
goto_xy(x2,i);3 k$ p% S3 C9 @1 r0 {
putchar(' ');
3 s! z, O2 i4 U$ a9 Q* M delay(10);
% D' F1 R& k0 G8 G } Q, @- O* {( P! Z K
for(j=x1;j<x2;j++){
/ I8 f; X: o& a, u$ Y goto_xy(i,y1);
' q* m5 G s% U0 c4 p putchar(' ');
+ a1 \% H' ~8 k0 P9 e2 {5 `2 \ goto_xy(j,y2);! F' w3 R! I( K6 b% r a# s( x8 A; \
putchar(' ');2 R' B' B$ T2 J8 }6 a @
delay(10);
& b& c3 q3 ^9 L9 v/ o; H0 \# m% E }
+ @; H( k- }/ Q% m* ^& [2 ? }1 M! u0 B, ~6 y; j- ~
/******************open screen clear(开屏式清屏)*********************/6 p: Q0 _* U% O
3 J9 U2 |0 Y! ]9 C( f
void kcls(int x1,int x2,int y1,int y2)
9 E. ?& ~- ^1 h2 k6 O7 \3 q* E {, C# o P* [( e+ w3 u+ C( J6 U
int t,s,i,j;% _& F. z% z: ^4 \( p% Y/ }
t=s=(y1+y2)/2;5 I3 M0 ]) K( p0 O$ L8 K
for(;t<=y2;t++,s--)
6 R# x$ i8 o1 q for(j=x1;j<x2;j++){) M- b9 F8 k8 O, y
goto_xy(j,t);
f/ O7 S; u) H putchar(' ');
. z4 a9 S, n" F" y7 k0 I goto_xy(j,s);
# f: v# Y! ~. l5 j% E s" Y, I putchar(' ');# \ H5 o! `# q' N) A* X+ `
delay(10);- D7 T, D5 w$ t k! U: G; |- d
}5 T) y- |2 Z. U" k9 B0 D
}. L9 N* `! L4 G, P9 B
/*****************close screen clear*****闭幕式清屏*******************/% g6 ~# g/ B( v1 c2 Q t
5 `1 S, d2 S: q
void bcls(int x1,int x2,int y1,int y2)
* ~2 v! z5 n" j6 M" ~) I {
5 C' t, F1 \! ?0 u0 C- t' k: }) t4 J int t,s,j;& K" l& `2 ?. w5 [1 k. T
t=y1;- U- l n4 b t8 q$ k- b
s=y2;
! p5 M2 ]% i) R; @/ h for(t=y1;t<(y1+y2)/2;t++,s--)
5 T- j+ e0 A! W! j W3 ]; p1 o for(j=x1;j<x2;j++){' Y) i. K4 k2 U5 e
goto_xy(j,t);9 V3 f/ H- A4 q8 b" d
putchar(' ');
3 k' v5 Q' e" i/ l: ? goto_xy(j,s);. F9 E3 y5 n8 p3 L- j# ~
putchar(' ');
$ N8 Z1 n" ~* a delay(10);/ @6 u: s: d1 T# [; y/ M2 J
}
+ g7 g: Q q! ]' d$ k- G }
0 S, K: [- c# A5 w4 D0 B% D* Q /******************bottom screen clear(自下清屏)********************/
: {. q2 B( P2 N, C4 _7 f0 M5 }6 J% j
void dcls(int x1,int x2,int y1,int y2)
" _/ Q5 m# B H7 P {
; u5 O% ~) S4 V" x% m; i" O int t,s,j,i;# V; h6 U! m/ e
t=s=(y1+y2)/2;
2 j0 t3 B: E! u6 u for(j=x2;j>x1;j--)! U8 c1 a! \) a$ r4 V- `
for(i=y1;i<y2;i++){0 B1 ?, S- F# P8 P/ |4 w* j: L
goto_xy(j,i);5 k d& ^% C6 X/ ~7 i5 g
putchar(' ');
, t& ?1 L; d, {- C; t: q6 u5 S, G5 z delay(10);
7 R( W4 i$ L% z8 h2 v: L. F/ z( N }
8 w5 F! x3 ]: j1 {9 g& i }
7 P3 M1 F k" B: @$ }+ X' q /******************设置光标子函数******************/+ u7 B, x2 T! G1 o, J. W
- j& {4 R1 g1 W+ U# P) n+ h! Z
void goto_xy(int x,int y)1 X5 g9 M y" f
{" T `6 |8 {/ p
union REGS r;5 h* q7 Y4 b6 Y7 G$ n
r.h.ah=2;
5 E/ R) E! \+ ]6 G r.h.dl=y;
5 F: |/ ?6 ? I! x( G, {) F; D r.h.dh=x;
" u& N) ^1 }) K5 ?7 U r.h.bh=0;
6 }* p- l. o6 M" _ int86(0x10,&r,&r);
% ?4 }8 m" O( t" z }
7 I; q' Z0 ~1 g$ X3 o
( }2 V- |' W( g/ T% ~ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ \7 D# T0 d/ G; M% \; H' t9 F4 D* b+ Y
void puta(void)$ |+ `4 V$ l9 m
{ J* h6 \: \* g
int i,j;( \- N2 S( e) w
for(i=0;i<24;i++){7 y5 V% G% u; y$ U$ u% c: ^
for(j=0;j<79;j++){
+ E7 U2 L4 W8 M9 B( t' ~ goto_xy(i,j);
' W; ~! p1 w8 X2 y printf("a");
8 `0 C6 d) _2 r/ v! O2 V) {& ~$ V0 m }
9 G) {- j7 j, h8 N9 d }) }4 `/ y; K4 C! e
} |
|