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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 o. b$ G+ I @$ H. l- m+ ^1 g1 v# m' w+ X
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 q- D) V) p9 _
; d8 C. n. F3 D, \/ m 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 q) n$ {! n: j/ s/ U, D8 c0 t3 K& Z 子函数及演示程序:
1 `7 I' ^: W/ S& s
, P$ ~" E! q, Z g5 V0 g #include<stdio.h>
& n$ R# j) o, P2 c% X2 c j b #include<dos.h>( f/ M$ F; j( t! k3 J
#include<conio.h>
' o2 f; l; H: i5 o8 b/ e# f* j: U
" h4 j9 \* W$ ^% c4 o8 _! E$ y void goto_xy(int x,int y);
. C6 H/ [* x8 t void dcls(int x1,int x2,int y1,int y2);9 s. I m2 T5 M
void bcls(int x1,int x2,int y1,int y2);; _0 f8 d0 u: ]7 @* K
void kcls(int x1,int x2,int y1,int y2);
& @2 d5 m& R( I$ w void recls(int x1,int x2,int y1,int y2);
- L- a8 G) Q% n void zcls(int x1,int x2,int y1,int y2);8 s! t |( z4 g4 L/ ~6 h% a% v6 N. {
void puta(void);
f; y. E1 [* {7 B
: H8 h* J. Z1 X; o8 q; V0 Y0 I& _, u" a$ _
/*--------------演示程序---------------------*/7 j6 c5 ~ v5 y2 n$ p
main()1 N `# A* p/ u9 e% Y9 O0 \2 i: _. {
{
0 |1 _: H3 n4 k: N: \ puta(); N9 M: q0 H( J$ D; u
getch();2 [$ X9 j* B7 f( L# |
dcls(0,4,0,79);
0 ~7 ~* K9 z4 S' e$ _ getch(); L. _" n6 P4 Q. F
puta();
/ L+ I R1 \! t- S- R2 o% ~ getch();2 x9 ~8 g* k5 Q
bcls(0,25,0,79);
2 T% I* }5 \' l1 I6 F/ o getch();; \, {* v g' r' t; Z- e$ I
puta();+ |' z% q8 Q$ p2 L
getch();
* N9 g i& G1 D; a" y zcls(0,25,0,79);# Q4 r+ R3 A$ [# A- H
getch();
. H8 ~/ h4 E! E5 z2 _- b }
0 t' ^& Q; i1 K /*********center clear screen(中心清屏)***********/( O# {) I/ A' V; ]5 c+ g; i# x
void zcls(int x1,int x2,int y1,int y2)
. A& C. q0 c/ [: p1 ]2 D {
5 v- h& s5 n2 Q int x00,y00,x0,y0,i,d;: w9 I* k c% x. p# C* j2 I
if((y2-y1)>(x2-x1)){6 S6 T8 W1 D4 p/ w5 K
d=(x2-x1)/2;
8 n0 J0 o6 I M x0=(x1+x2)/2;6 @& b2 N# B4 {$ M
y0=y1+d;
. Y' |) o$ f0 }7 q y00=y2-d;
1 e8 L7 G$ A7 u8 L2 r- @- O6 ^ for(i=0;i<(d+1);i++)
* U- ^1 l2 ^/ `: @9 ?" B recls((x0-i),(x00+i),(y0-i),(y00+i));5 M" O9 x7 ~: {% B- j: W
delay(10);6 [& u5 }5 t9 H! h2 J& T$ W) Y
}2 I( a8 o' |$ ^3 M9 u
else{+ U; w( q3 Q/ h" R6 Y- Y
d=(y2-y1)/2;
' l3 y- s& k1 v( j8 T y0=(y1+y2)/2;5 V" m6 x& o2 N* W6 f
x0=x1+d;
# H, M+ b: k+ F x00=x2-d;
, y& r5 |! q& _9 k$ ^9 i( t for(i=0;i<d+1;i++)
9 H, I' Z. G' X |5 [7 R, Y recls(x0-i,x00+i,y0-i,y00+i);5 `5 k R& P* u( C
delay(10);# V# a3 j$ L% E( r, R) }! `5 i' U
}
0 V5 ^7 K: ] C, p6 c }- J& d+ C: E/ r# D0 a
# G' P3 L3 S/ x; J% M% l* [
/************* clear rectangle side(矩形边清屏)***********************/
) W- R9 h" b% [3 w3 \
' Z$ P: G- }% R2 z! x; @1 u void recls(int x1,int x2,int y1,int y2)4 y, }9 @% \7 `! s: o+ B
{* A% W* y$ R2 [0 R' g. @0 T
int i,j; t/ p" F j% `$ C
for(i=y1;i<y2;i++){4 B2 t" J" M" I* o" F
goto_xy(x1,i);
( c' v9 q8 |) R- U; U! l putchar(' ');! G2 w# {# h: K6 y) o* g# A1 ^" e
goto_xy(x2,i);2 a4 s: T9 B, \, S6 O
putchar(' ');
8 e) d" ?, l4 `2 Y delay(10);
- E" k$ A' X' @; p& D }
# B) T- z' j% a for(j=x1;j<x2;j++){
3 Y6 S* {1 [. G# `( `+ m W goto_xy(i,y1);
- \8 q6 I: p D8 _! h0 I putchar(' ');; v+ v0 N" K0 q. w v
goto_xy(j,y2);
" K0 c! k8 X0 }6 h putchar(' ');5 M9 f, Y1 n' x; Z n( F
delay(10); U: A- A1 D6 P
}0 b* p) {1 \! k( u+ t6 C+ `. V* {1 N; u p
}" _3 {! M2 G9 C5 N( w
/******************open screen clear(开屏式清屏)*********************/5 a" k) L% K3 [& Q) H |
7 J) e$ A J- d! W9 H
void kcls(int x1,int x2,int y1,int y2)
/ C* w* e! }5 z. } {
4 L- [0 K4 |# m int t,s,i,j;9 ~3 \0 a+ {1 S% s" W ^; {
t=s=(y1+y2)/2;3 i. v" R v- M( ]9 w
for(;t<=y2;t++,s--)
- ]$ G) O5 A7 \2 ~" l for(j=x1;j<x2;j++){* n' e# c4 `7 H) Y1 r
goto_xy(j,t);. X4 b9 E8 m; w* C" t4 F
putchar(' ');
5 R& o& v$ b! ^5 [6 H6 L9 D goto_xy(j,s);/ r% \4 B ?7 w e# K
putchar(' ');
9 ]+ S% Y' ~+ `0 z I& ] delay(10);
! \+ {" D5 A" @( Y, ~0 @ }
9 j$ g* \& |" D1 y2 o( V }
$ p) C- O9 B: ?# w6 v' Q /*****************close screen clear*****闭幕式清屏*******************/
1 l$ G! t. T8 M8 g) @: I' I5 a1 I7 s0 L
void bcls(int x1,int x2,int y1,int y2)
. v! T" `6 }# R+ j7 F {
' f) O$ R3 z1 [7 V; C9 O: D int t,s,j;
8 w# t l# B1 k1 [5 B t=y1;& \, ^; C! E. r" A' t, b: q' }/ ]
s=y2;
. w3 [6 ?1 v) C8 v/ g. ` for(t=y1;t<(y1+y2)/2;t++,s--)6 H! R! c* g: L* l G
for(j=x1;j<x2;j++){3 |& \! k0 T, W8 N) y. F
goto_xy(j,t);
2 V- J/ r! B4 X, ~8 U9 ^' T" ` putchar(' ');
% z2 ` X/ j" P$ n; F% C5 R- V$ I goto_xy(j,s);
' Q3 _3 \; z$ Q V putchar(' ');
) S! P7 M9 M$ Y: V' _7 J( C delay(10);
) F4 [ V% V' h5 b" m& ^9 y; r3 J }
% Z& `4 }' F/ a) X- N* g# o, Z }
3 `; f4 l- A" L6 [ /******************bottom screen clear(自下清屏)********************/
4 Q7 P8 X: m7 ~3 x) _" x5 c. Y/ ^# p
void dcls(int x1,int x2,int y1,int y2)3 Z3 v9 V, L S
{
# i7 ~8 p4 n) S7 j) _ int t,s,j,i;. ^# G& Q$ I% N/ c6 O2 ~, L! e
t=s=(y1+y2)/2;
# W& k$ |7 K% f6 m0 m/ n for(j=x2;j>x1;j--)
/ }& A, q" ~ ` for(i=y1;i<y2;i++){
1 Z8 y, T3 `& y goto_xy(j,i);
$ ~: \8 l" Z8 o# P putchar(' ');/ @2 Z- |, ]- C I; C
delay(10);, e; _! p( h- ^3 Y# O. v0 `
}
, L. B$ y+ h) j }8 |! Q d4 @; d" ^, `& ^% n
/******************设置光标子函数******************/
' k0 C( E e" B- k$ C, v9 U2 `& V# Z' _# h$ g A7 ^
void goto_xy(int x,int y)
0 x% D6 c8 d' n/ x$ t/ M {# Z6 }: u( q0 t: R# q
union REGS r;% n1 @0 P+ K9 H) u: D( n
r.h.ah=2;
W- N. k* D; W& \6 x, L/ G r.h.dl=y;- S. A; `# \1 V/ ]( f, w1 {
r.h.dh=x;3 k: F0 b; L# P7 D, Y
r.h.bh=0;' Y( `5 W7 E. S7 E3 z
int86(0x10,&r,&r);
1 y0 g) X, q7 I" J9 K0 z; t }; V0 C& t# d- {0 m& ^: ^+ }* r
# J% Z+ v5 u+ @ ` [- Q$ y& e
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* N5 O. K1 P- a6 O; T! a- L9 B+ r
void puta(void)0 N9 Q5 h s3 L: D
{
. y+ T c3 Z- Y9 }; d1 x6 v int i,j;2 O0 _3 i h* U) _4 J
for(i=0;i<24;i++){2 U _9 N8 x# a
for(j=0;j<79;j++){
; j9 @. I2 ~6 j# h5 }8 ]0 q% P goto_xy(i,j);
! b9 R+ Q- [ e' _6 Y printf("a");
+ Y$ h ]& O- Q }
, P; c9 W$ u( Z. {) b3 X$ n: C/ w }
% o: A6 [& L; j6 q/ _$ W } |
|