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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 Y$ P& q9 a5 }* H
6 u I6 R, k4 v5 j; I 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" L P6 H3 T. V1 T; Q% x
) }/ u0 J2 W4 B
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 I" B6 p) \ [+ k 子函数及演示程序:
0 a( p: ~) @ a. g. `" z- T6 y# Z( m% U' o8 A; Y F
#include<stdio.h>
4 N, z% O3 }& a/ m9 \6 d* A4 P7 t #include<dos.h>
/ A7 _) `. o0 G U. D #include<conio.h>
* m3 `' o) P8 @! U) N+ e0 C* t
void goto_xy(int x,int y);" w _4 V. Q, @7 U4 }* [" j
void dcls(int x1,int x2,int y1,int y2);: B- ^/ X* z4 H0 V K9 J
void bcls(int x1,int x2,int y1,int y2);) z+ y* a5 W6 V S. G
void kcls(int x1,int x2,int y1,int y2);
9 ~( \8 c6 T# a: u r" h' T void recls(int x1,int x2,int y1,int y2);' d& N |1 h! h* e a! i0 C3 }/ o
void zcls(int x1,int x2,int y1,int y2);" d+ E! @3 D' X. b; P8 G
void puta(void);
- O7 ]2 D: `2 L5 t! q3 @+ o# t) h j* `% `+ D
. e# H6 s1 y2 f! S6 B- H
/*--------------演示程序---------------------*/* ?) `: b3 J. m& o
main()
: W) i5 F3 o* @3 B& E {
+ e, i3 m( p1 C' `1 D6 X puta();# K0 c, F' T2 h4 J
getch();
; s# E* j# s1 G( o) L, X! c dcls(0,4,0,79);
# L7 y, K8 p3 D getch();
) h' z% z% N) f, O6 }& ~( J$ ? puta();- _( N/ X0 A; @' D
getch();, Z* F' b+ `+ i0 Q
bcls(0,25,0,79);
' o2 u$ g4 C4 n' K9 |9 S getch();
Y2 i+ F, K- z+ J$ f# q( ^, x3 f/ c4 X puta();
5 M. a* n8 E5 U; W+ c getch();
9 d* R. S( w m) ^( p zcls(0,25,0,79);
( g _/ N7 m; x* p1 K: W) X- X getch();; H3 ]! Q* |7 z
}
+ \7 A/ D f6 r. g /*********center clear screen(中心清屏)***********/
1 P5 h3 `$ N- m+ V1 t void zcls(int x1,int x2,int y1,int y2)" P+ }5 X: _" v! b& f2 E% l
{
2 m; v5 ^$ X$ X, g int x00,y00,x0,y0,i,d;
0 i# b$ U Q* L: z8 j1 Z6 L. V if((y2-y1)>(x2-x1)){9 t4 h) X( N ^1 n
d=(x2-x1)/2;
/ g) a) i1 n, n3 R: N7 g x0=(x1+x2)/2;5 G+ T1 L* Z) ]- L
y0=y1+d;) j% i* x3 x$ f3 Y3 e
y00=y2-d;
! B4 P! U6 ~$ b. @ for(i=0;i<(d+1);i++). l6 q, J9 g: C8 ]! S
recls((x0-i),(x00+i),(y0-i),(y00+i));
/ [ C) ?4 @* q3 w" r delay(10);+ y% @9 Q' |) [
}7 u( U, [. j I M* p- }
else{
6 ]" o0 R: @5 u( E. \+ H# y d=(y2-y1)/2;% m8 S' ^+ j# {; B$ A) T4 w/ h
y0=(y1+y2)/2;! X" b+ r6 g5 J; v
x0=x1+d;* i- ^0 M, E% |) x& O9 \7 U8 O
x00=x2-d;
2 O' p4 X: v; N, P* y/ Y% M for(i=0;i<d+1;i++)! `3 l: @" e, I+ }2 E0 { M
recls(x0-i,x00+i,y0-i,y00+i);
- t( p3 b( y' P/ g3 G! ` delay(10);
/ g8 ?' L& S1 \* ^: W. y) V }! Z! _7 Q9 p& ~! Z0 r) R
}1 A. c4 E7 ~. p
5 E0 p5 n5 c) Q: J' J, z& `4 g /************* clear rectangle side(矩形边清屏)***********************/
0 n8 B# C g8 S9 }. r n, S4 d. G( m" R9 @8 ~2 u
void recls(int x1,int x2,int y1,int y2)
5 n) p: H B6 {% s {
) q* N o% k# k& m. C9 n0 j int i,j;
/ M' X$ @; t- G1 ?9 L2 Y1 P for(i=y1;i<y2;i++){
7 V; L3 \* p1 H/ Z6 n goto_xy(x1,i);
+ A7 g. {# }- s) P putchar(' ');
' R# k0 R& b$ y9 w+ P; X4 w( T goto_xy(x2,i);
M+ T3 N; `& K9 w putchar(' ');3 i1 m+ @/ \ {) ^
delay(10);
4 F% J2 b( A. R0 f; ? }
9 k9 r w5 y. x x2 ^ for(j=x1;j<x2;j++){0 O. s1 Z, Y7 \- ?
goto_xy(i,y1);
' ~) p+ n/ M& \; `" J+ g( u1 S putchar(' ');/ T3 Q/ ^( e0 y
goto_xy(j,y2);! z1 }( Z, m! y: f r- D
putchar(' ');! _8 J& L* D0 { a: U; G8 v
delay(10);. @3 C" H3 M# s* A; \
}
! q2 g& v8 g7 b4 S2 ~' L4 U }( S9 W" Q5 ]+ @5 \9 ~
/******************open screen clear(开屏式清屏)*********************/ h8 K: }* c3 M" H7 x; p
" M" a; S* {1 g( e5 x! V9 F$ | void kcls(int x1,int x2,int y1,int y2)" b! ] M' p6 F; P0 x' P- c2 Y
{
& G: c. J/ s2 g$ g. V- l int t,s,i,j;
$ c/ x. Q$ c3 u8 B7 z t=s=(y1+y2)/2;( j0 g8 q) _0 @, e! w8 u( z
for(;t<=y2;t++,s--)
* A4 ~5 _; J |9 I for(j=x1;j<x2;j++){
0 ?$ W+ l, _ [ goto_xy(j,t);6 l; @2 J1 [* a$ O1 H: e
putchar(' ');
5 F3 o9 u9 b6 }" C. P goto_xy(j,s);
5 A# O0 ]9 q% Y M0 S( S& [ putchar(' ');
6 [" e$ Y5 s) T2 P delay(10);/ x& Y. p l; f4 B$ v" O
}. s/ h, O s% h
}/ X" b; Z& @( ]$ k; P7 V
/*****************close screen clear*****闭幕式清屏*******************/
9 B$ D# ]+ E4 d$ z; S
% J: H$ u# q. n5 L/ Q# @ void bcls(int x1,int x2,int y1,int y2)
. X2 t4 K8 {" _9 i+ |2 q6 v% X/ d {* |% h. D5 b2 ]8 w6 }
int t,s,j;
* `5 M) D6 H+ |+ J" m t=y1;0 P# R0 U* s! k3 c% _5 J7 B
s=y2;: _* B' t" Z& U. i; D
for(t=y1;t<(y1+y2)/2;t++,s--), r, B; M! }! S, R; s3 O
for(j=x1;j<x2;j++){2 Q1 |7 m, Q q$ P
goto_xy(j,t);
+ {/ P% R. V y' [* {, } putchar(' ');* m/ E6 Q. H: y3 H
goto_xy(j,s);
9 X& }6 V8 y, s! _8 p* I2 ~ putchar(' ');
, |: e7 }, M8 | delay(10);
1 g+ `2 j+ S& b# V& H }
" i* |! l: U. v }3 S* U1 Y/ g/ u: ]% @5 p5 H
/******************bottom screen clear(自下清屏)********************/7 f! w7 G. W/ P/ J2 p! R3 m
1 c* M6 d. F: R2 W& o( }) d1 A void dcls(int x1,int x2,int y1,int y2)
$ u# g8 P2 g$ e2 T1 E- a {
' G' T: d* Q; J) j1 d9 J int t,s,j,i;* J! K9 n* k, u7 \
t=s=(y1+y2)/2;, w& b& b3 J7 J$ l8 `
for(j=x2;j>x1;j--)
7 t3 q$ G5 A. s for(i=y1;i<y2;i++){- c! Y, X) V5 o' j) g
goto_xy(j,i);
# s3 j" l( B- O" V$ @ putchar(' ');
* d1 y+ r' ~) m( n( x2 { delay(10);
( U( q+ C' O, P9 Y- |% H }2 D4 ]) b* j" k) o& W v
}
: r1 q, k# v# Z2 ~! R' `1 X6 D* {6 \ /******************设置光标子函数******************/
$ L4 N* { p# ?' y; J' W( L: F5 N2 f( N" p+ Z1 h: ]: u* L
void goto_xy(int x,int y)+ X, D. w( s( I' ^, d2 o% j
{
3 {' I' M" J0 a+ ?5 Y7 L$ K union REGS r;
" z1 q1 w9 i( v- m% a: P' U r.h.ah=2;
3 p3 U: g7 [2 I& U$ t- S r.h.dl=y;5 F4 ~& l! ^% ^) |: _- t% I
r.h.dh=x;0 d% c$ j" |1 e* `/ y; A, n; C5 o
r.h.bh=0;
2 z- S3 S3 t1 F( }! L( J int86(0x10,&r,&r);. ^" \" E; L4 @8 e/ V5 _
}/ z7 Z4 v6 K3 M) h$ l, v, l
4 S6 n9 T, g, Q9 [ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% O+ F( R+ Q( T2 k( w$ W' t4 G
; K" T6 M# Y. b h$ {7 S void puta(void)
5 h. P$ m) f G$ y2 H* Y {
% t9 k4 k+ P. R$ M0 W* X1 R int i,j;9 ]% N; I0 U8 D* N
for(i=0;i<24;i++){: P5 e7 {+ l& y. T( R, O& H( `
for(j=0;j<79;j++){
* O- h/ n }8 _+ N4 n4 H9 r goto_xy(i,j);( w2 A) _7 d6 j- @/ u; W4 N
printf("a");
2 h( N: g- m! k4 u }
+ V% L. a+ E7 O }
: ~4 D% w1 d' E& ? } |
|