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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ Z& V) Q9 J% W) |( d; R, R0 c6 a" r
5 @$ J4 i6 n% b3 {9 T
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( |: _- f4 @9 j& ]
+ m8 V( H' r- D1 w+ J% y5 [2 @ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. I2 r% _2 b7 [/ y' ? 子函数及演示程序:
8 @5 Z1 V0 T- E5 L; k3 Z
/ u; D4 o+ B* l3 W& d #include<stdio.h>( q8 W" W2 S4 I# N
#include<dos.h>
# E- S: h# r6 u5 q/ i* F& s% ~ #include<conio.h>
2 q) t4 L3 Z# I2 S
. X$ H K* i. b2 b& S. \ void goto_xy(int x,int y);3 }. Z4 P9 p% h9 ?5 C' s
void dcls(int x1,int x2,int y1,int y2);
- ?* F( }5 n* \7 \( y- n! k2 K void bcls(int x1,int x2,int y1,int y2);$ {- q: J' r5 A( e/ v! D
void kcls(int x1,int x2,int y1,int y2);; K9 e4 a) e$ t0 W* z$ @- g: K
void recls(int x1,int x2,int y1,int y2);
% x3 ~. A' R* p; ~' O. E/ T void zcls(int x1,int x2,int y1,int y2);1 h7 z- m5 b. ]) P
void puta(void);6 {2 L" d3 L* R7 o4 h8 }; K+ {
$ l$ ^9 Z+ j3 a! p0 a6 u0 d$ p& w
7 X+ ~: e S2 Z7 {) G& I' M V2 [ /*--------------演示程序---------------------*/& [. k1 }/ o) P0 ?0 T
main()
* x% ~8 n$ ]# R) {: a; p" I r {
" }8 \$ n9 t d puta();( B6 p* @$ T7 ]/ D1 x( \; v4 B( v. S
getch();
+ _7 _! X1 U8 w# F6 f! g2 c dcls(0,4,0,79);( i* m" g* X. t8 t
getch();/ B" x* R! q2 ^1 z0 U
puta();
7 s7 I4 J- G4 M" k/ h% b getch();( v( r b0 B! t( ^
bcls(0,25,0,79);
( c# G7 H$ d6 o K; y) Y getch();
0 A4 S$ O" X$ `' ^: @9 R2 x% W puta();9 U2 Q4 b7 \) ^& Y- \- {/ Q
getch();
7 H* a! G# L* @ zcls(0,25,0,79);
, L7 u0 D6 e* Q% Y3 Z- P getch();
# o U& f7 n5 D }
/ |+ b8 u" R! x6 ^ /*********center clear screen(中心清屏)***********/
* k' h" a" s) z! |0 h2 Y; r void zcls(int x1,int x2,int y1,int y2)/ y( q# a5 e8 k0 O! K
{: m( L( V9 i1 w' Y, P/ t
int x00,y00,x0,y0,i,d;
* `- J Q9 U- Y7 H l if((y2-y1)>(x2-x1)){
) k7 _$ i. v3 r d=(x2-x1)/2; ]) z5 ?7 I/ R. }! Y. r
x0=(x1+x2)/2;: A7 ^0 ?5 N/ d* }) W- h/ \. p
y0=y1+d;$ h& a6 P& a9 [+ m1 I. D
y00=y2-d;/ B) _5 A) y( t0 i5 z9 j
for(i=0;i<(d+1);i++)1 G! D, Z2 \) e& }7 b @# `6 H) k
recls((x0-i),(x00+i),(y0-i),(y00+i));
0 y3 w( p; c; o, A9 r delay(10);0 G1 B# D8 `: h4 `- v, I
}1 R4 Z! u+ c" @
else{
U$ V- \3 D5 R% A5 f! |( W* w d=(y2-y1)/2;
. _' a9 t @5 T& ^3 } y0=(y1+y2)/2;
, N* ?: W% N, @2 w) i0 P/ P( r* h x0=x1+d;
' Y" i' C! U% |" \8 ~ x00=x2-d;
: |5 Q$ c/ w0 R& D% t+ O, C for(i=0;i<d+1;i++)# s; h* ~4 P0 G; K$ J% w( b
recls(x0-i,x00+i,y0-i,y00+i);
5 H# s9 y Q3 v; c+ p delay(10);
1 F; f: r( v- A! y) \ }
& ^" T% ^0 ?; a+ Z$ h& c% w }
; a) y, ^ d8 |7 h# Y, \1 J, [& x9 l
. [4 {$ e I9 Q/ P9 [" h7 R5 A /************* clear rectangle side(矩形边清屏)***********************/
0 u9 n, h/ f# h+ P7 `' M; a
, g9 a! q+ G: A( [# ` void recls(int x1,int x2,int y1,int y2)7 G. p; C- Q3 o& \& [- B0 P& D0 Z
{
2 J0 y. S/ r1 o; F int i,j;, I# z9 c0 {6 [+ i2 m9 X1 E( n8 e" \
for(i=y1;i<y2;i++){7 y7 J' {& `; D! ?6 H
goto_xy(x1,i);
: F# h7 m: p* u0 U' e/ _1 G putchar(' ');
^ [) R% N+ S; {" P goto_xy(x2,i);
' v0 X$ ^ y4 k* v: q- ^7 x putchar(' ');
. O7 r9 L$ V& S5 w1 j9 W. i5 Q8 M { delay(10);
, Z5 l6 e% j% d& p0 T0 y; D8 E, M1 A }
) X2 p6 R: G% H3 i m4 c3 Q for(j=x1;j<x2;j++){
6 v/ |. Y, D; N4 R, | goto_xy(i,y1);
i+ N) y3 W% I$ I# s. v putchar(' ');0 Z' l; a. ?1 Z/ x1 M$ L' Y
goto_xy(j,y2);
9 \5 r3 d0 E$ O putchar(' ');: _, `3 G4 a C) R) ~( d; h
delay(10);
, y2 ?: }& ~. E6 ` }
2 Q4 {! d2 ^; L/ ^+ r9 X3 l }
; V6 j: D6 P6 ^3 y5 @: v /******************open screen clear(开屏式清屏)*********************/1 @4 f) Y; ?# T
3 G6 ]5 }' |% Q void kcls(int x1,int x2,int y1,int y2)
4 S8 u L0 _9 e0 u. O. C {
+ n L" @6 ?+ Q& L( u4 t: r int t,s,i,j;
/ K( c. \% ~2 i- ?' A t=s=(y1+y2)/2;
1 w, Q2 J& d8 L( Z& \& R for(;t<=y2;t++,s--)7 `& f+ y+ I1 s# j, t- E+ j
for(j=x1;j<x2;j++){! G4 D9 p, b; T% n3 j+ d
goto_xy(j,t);
& X" l- g. ^, m9 U, G ^ putchar(' ');5 o4 N) D f0 c
goto_xy(j,s);% R: ^+ m I+ ^ L" M# }& m
putchar(' ');
( B6 z5 S/ M- d! F, ^, S8 a8 }# z delay(10);
0 A3 E1 D" \ g7 H) `/ C }7 F# S" J9 J& t
}
% L S* S9 B3 p) i3 f /*****************close screen clear*****闭幕式清屏*******************/" }. K6 P0 F0 ]7 }5 f/ y
$ y/ g3 Q( a. [+ J void bcls(int x1,int x2,int y1,int y2)
2 V( w$ V; G/ q1 j h {
0 T: t f% l& K2 J. X( a int t,s,j;6 Z8 b: Q9 u+ ^% c+ X j
t=y1;7 ~* M" u: O% _- U& z
s=y2;
. [( x# B+ Q( S) E% O; Q for(t=y1;t<(y1+y2)/2;t++,s--)
' b- ~; z8 U/ x* F for(j=x1;j<x2;j++){
% c" [( Y* d1 m goto_xy(j,t);
: O* l+ {4 V+ Z& M0 q7 V3 H* ~ putchar(' ');
* X/ s2 m( R7 \* l goto_xy(j,s);: T, ]4 i+ ]6 A6 C$ f
putchar(' ');
+ f7 G3 h2 w0 \% A6 u9 g delay(10);% E9 w% a! q5 D( G. B1 s9 [* \$ A6 D
}% x' p8 l: ?" R& o. N; D
}
% k, I. X& P0 m9 }/ f /******************bottom screen clear(自下清屏)********************/
* ^% v5 ]: p' B* K
" A! G% ~- Z9 s+ b5 r0 ? void dcls(int x1,int x2,int y1,int y2)
6 m* k) C. ^" J H) y) n% \ {
. H3 |( \0 z h( W int t,s,j,i;
! L# W$ O' L' S. j6 r4 a t=s=(y1+y2)/2;
& e4 A" G3 Q1 H3 [% a for(j=x2;j>x1;j--)* ?* u- R5 s. Y" k1 ^8 X
for(i=y1;i<y2;i++){
( b6 {' c' Q. g, y0 w& r goto_xy(j,i);
, v; i3 R6 L7 V. [$ ~& D putchar(' ');6 W" M2 g w) m) _
delay(10);
" V, `3 N/ k# t5 c2 y }
2 @8 q3 H: j! x1 y9 S# ? }
: b8 |; H+ s9 [! d) l4 E. ^ /******************设置光标子函数******************/; k3 K/ a& _5 W. u/ a. ^; A' C
1 K0 e/ O2 U4 Q2 a9 \2 ^$ g* A void goto_xy(int x,int y)
a, I! j, r& w* ^9 s {
' I% h& i( @" E* Y! m N5 K union REGS r;1 x& B' W! S! q6 i7 s: ~1 U) x& l
r.h.ah=2;
, K, j& R8 m3 o& X) W( A1 G& z r.h.dl=y;3 I5 f0 f4 ?% L$ K7 ]6 l
r.h.dh=x;
7 b! }/ D) h4 W" e% O, G3 T) a* | r.h.bh=0;0 \% N' k5 R. W+ v! q
int86(0x10,&r,&r);2 z, i" J9 d7 y- ?8 l
}$ f5 i7 m/ B6 T9 y' H/ t7 p
/ M8 }2 e: R2 |3 { O" G1 m6 p2 U
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 F( a& r; }/ ^! P
( J. i2 B6 j5 u( k+ _4 Z' I8 l void puta(void)
( |% U S, Q$ p* ^7 S2 A {
g$ y* p; X9 M. j int i,j;9 @0 `: }8 M" u5 M% V
for(i=0;i<24;i++){+ R C) l0 ^4 Y0 c; P$ g; \! O5 P
for(j=0;j<79;j++){8 w* J% f0 P4 F& l( @5 g
goto_xy(i,j);1 U& r1 S* \. T6 X' S ?4 s& X( l
printf("a");! H8 x$ T8 U6 a
}# g. f" U1 n& C) w
}
L* B e) X0 o: Q, t } |
|