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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# h7 L" u' n" X# z$ x0 t( m- u0 a
. h9 Q! G3 Y* @" H7 y/ R 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" H9 c+ u. f, Z0 \2 R( x3 f+ H# D; g2 m) m& E: h) ~
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! j/ S1 W& p. u: f 子函数及演示程序:
; O4 l4 s- F7 E5 i6 \) F9 I- d- M, Z' ^
#include<stdio.h>
! w8 f# a$ i; N6 y, J( j6 Z, J #include<dos.h>! I# x* n( ?- |( `8 u; Y5 Z8 g
#include<conio.h>3 F2 v' f& @5 g& Q5 b
; N! H3 s m+ W% x( m2 ?
void goto_xy(int x,int y);! W ~+ U& ]( |5 A
void dcls(int x1,int x2,int y1,int y2);
+ v3 }5 y( Y: Q# F) w- y, N void bcls(int x1,int x2,int y1,int y2);
8 |4 c B5 D0 H void kcls(int x1,int x2,int y1,int y2);
1 d/ |7 P0 M n, K7 }) d void recls(int x1,int x2,int y1,int y2);
( K, A) f) l. a/ A* ^5 h( A void zcls(int x1,int x2,int y1,int y2);
0 c) l3 ]) q. W& E$ p void puta(void);" X8 `3 G/ L/ r0 `' G1 w4 v
' |! Y8 h' [& z6 E8 m% y
! G) i- Z4 @6 n. A& _9 y/ c5 Q /*--------------演示程序---------------------*/3 n4 a! R1 C" _; s9 h( M9 |
main()& |: C5 Z* y8 W5 m } m+ ~
{
# B3 d i3 e# y: d I/ J puta();8 P) t5 P& Z4 c K
getch();
8 A* t: V. v8 S dcls(0,4,0,79);5 B- f5 l% u1 F, ^) B; G2 r5 V: T
getch();1 _% G. ~9 Y9 ]) ]
puta();& i* [; B& U$ D
getch();$ j7 [( p4 x& E/ Q7 n0 E
bcls(0,25,0,79);0 e8 x$ H$ h: T7 V1 y
getch();0 l, b* Z2 e% v- T D# x U4 N
puta();0 K. T4 m6 v# c' U, Q5 _- B
getch();
( V7 q W- b: O/ \% m5 e F zcls(0,25,0,79);
2 g, s0 F2 G1 I5 [; r9 F/ M Q getch();
. w _6 h) h9 D! E }# @/ ^6 a2 R3 J- f0 K3 c# L5 a- Q
/*********center clear screen(中心清屏)***********/# i. n+ `6 v# q& P+ F
void zcls(int x1,int x2,int y1,int y2). U0 O. q7 c4 u) X, L& g' n
{
5 k4 {. F' Q2 l/ w3 p int x00,y00,x0,y0,i,d;" U2 l9 D% i* J- ^
if((y2-y1)>(x2-x1)){
8 c u& ?0 q" ]% U" @ O0 O. \ d=(x2-x1)/2;* [- B' h! x2 H) R5 `9 o
x0=(x1+x2)/2;
. {1 z) `$ s/ @8 z s y0=y1+d;" O! ^+ S% j( x4 \
y00=y2-d;
# c- v, x5 X' q# [3 w for(i=0;i<(d+1);i++)
4 o: C1 A' N+ t& a recls((x0-i),(x00+i),(y0-i),(y00+i));
: U# S& k( b3 _8 A0 S- Q delay(10);
& q! r- U! N( M }# \. C# U+ \) x- x- Q8 I/ u
else{
. o" L. E8 D- S* ` d=(y2-y1)/2;
. h5 q, H a4 |$ m+ z# e; | y0=(y1+y2)/2;
( ^1 k f/ b0 G% U5 z9 Y x0=x1+d;5 |# o0 B2 M& a6 T% r+ M& v( @
x00=x2-d;
- l2 a& z. W9 q9 Q H0 w& \* Q) { for(i=0;i<d+1;i++)
- H9 A3 M1 D9 X& B recls(x0-i,x00+i,y0-i,y00+i);( d% Z' X" W! ^
delay(10);9 T. |4 _% p8 s$ F) c, j+ C
}
7 J/ X- A y% l }. K* ^2 I# [* @! Y4 Z6 P! d6 A' V; ]
+ x) h9 \# u& t# E& c1 y) ^
/************* clear rectangle side(矩形边清屏)***********************/
; U g4 H. H( [4 `& M, |* ]
1 T. Q, ?3 w3 b/ Q& A void recls(int x1,int x2,int y1,int y2)* W- U* \: |1 W7 J
{0 W- [* [6 R' a" i
int i,j;# a# w9 w5 a0 }- ?/ f4 Q% ~) O# g
for(i=y1;i<y2;i++){
1 U) M, r1 D: G) q goto_xy(x1,i);5 l3 C/ ]/ ^; c+ n. }
putchar(' ');
1 T/ C0 _' C6 P- P goto_xy(x2,i);
% h2 ~) s' e | e1 i, \& D4 z9 { putchar(' ');
8 _8 D6 N' C' g. j/ J delay(10);
- {) |$ C4 d4 u3 l! M% v }
$ V- g8 w8 H9 ^7 {8 V& _1 d for(j=x1;j<x2;j++){. G2 c; w9 u6 m& Y
goto_xy(i,y1);0 f% x- ]0 V5 N" n9 K
putchar(' ');( j' T# U/ D' w$ L, I5 ?
goto_xy(j,y2);6 [! q6 k$ u* d+ d" \: x
putchar(' ');* r2 X4 K% e. |$ ^. }- _( u
delay(10);9 ~: M' T+ j0 ~+ A+ p0 m( O9 A
}) N) ]" w7 Q0 U0 t& w7 } C
}
. b+ a/ n$ Y' M) y9 b0 a0 F /******************open screen clear(开屏式清屏)*********************/
% a- a8 y1 @; X, ]4 R* ~# C3 j$ Y( U& N/ q" `' A% P- K. t
void kcls(int x1,int x2,int y1,int y2)
( P9 n' n9 I$ t {
; F& p% o% p$ u- O- M int t,s,i,j;
% x1 n2 c: V! V; d' Y, i t=s=(y1+y2)/2;4 Y9 t4 q5 F) q
for(;t<=y2;t++,s--)( b* O. s+ q" z% z) I. e
for(j=x1;j<x2;j++){
9 p7 C; S4 [% h" Z goto_xy(j,t);
( Y/ p* ^. V- ^ J putchar(' ');
* u$ ^1 p7 {) g& S& E1 \ goto_xy(j,s);: _; \" D* A- g$ q3 A! n
putchar(' ');
% u2 m+ V! |5 U% `5 v( e' ~8 o delay(10);$ @( J1 o0 P( L5 X% m: u+ p. N
}, Y) p0 K1 i" T* ~6 L! }! q; }1 q3 }
}- ]% `6 |6 t" v! X+ T- D! L, D
/*****************close screen clear*****闭幕式清屏*******************/
: Y: L( c0 O. I" U9 m9 B
, F {9 X% j0 b8 m! ]" g: q void bcls(int x1,int x2,int y1,int y2)
2 J- k2 Q A* N {! [( z) ` q& {1 p
int t,s,j;
* n' X' l3 t) b+ g( V f6 L t=y1;
6 ?0 s0 B7 l* ]% ~" z9 z' u; P s=y2;
X7 ^7 w! x) X2 c- K for(t=y1;t<(y1+y2)/2;t++,s--)
2 r; D' P! n& ^+ y5 \. z for(j=x1;j<x2;j++){
" M" h7 Y9 P( i8 h( R goto_xy(j,t);! K" h {1 c; d
putchar(' ');
* h4 S/ ]# `; F: k goto_xy(j,s);! Z0 \# H; L ?' [
putchar(' ');, T [& q$ ]) n- J. E' l/ l
delay(10);. u) _. G) W# ]
}* Z o0 }7 c! V5 U% P
}. Y! P9 F: u# Z: j+ o- t3 g
/******************bottom screen clear(自下清屏)********************/
! ?6 {) o) T" k! I! V, x0 f7 i
: }! |* }( t3 N1 m9 ~6 H B void dcls(int x1,int x2,int y1,int y2), K- o+ f+ S3 h
{' \/ g) N" K. a5 R' U
int t,s,j,i;* }8 q% ?- x) Z
t=s=(y1+y2)/2;! ~6 s& X% s' R. l) V3 g- h' D
for(j=x2;j>x1;j--): N" e3 }( ~6 {& J1 v
for(i=y1;i<y2;i++){
6 w) y" e# d! ?- P" t goto_xy(j,i);( O( D0 e- }" k5 z
putchar(' ');: Z0 Y' \$ P! @( _
delay(10);
- J2 A0 S, T' H5 N }
* ?5 H' { R7 V3 h* S3 ` }5 R* F3 ]; M" Z2 T* I1 V- _
/******************设置光标子函数******************/
9 N" g5 ~$ d- y$ d+ f+ t" N$ @6 n' \& R2 E: j" ?$ ^' Q1 o
void goto_xy(int x,int y)2 P2 U8 e, K; p" Z+ y0 c
{; R/ Y4 r+ r/ h$ w& D- h4 y
union REGS r;5 X. P- e5 U: M) X4 E
r.h.ah=2;
' F+ y( z* I) t6 o# \ r.h.dl=y;7 O1 `7 J4 L& t1 N( ^
r.h.dh=x;# s6 V1 y; J, S$ U8 F
r.h.bh=0;
2 Z4 t; d# o# k# _ int86(0x10,&r,&r);
- D; |5 a! a" | }) q' g; Y' k" c8 _' i
- d' U& }* w# y3 S6 `0 T
/**********************在屏幕上打出一连串的a字母用于演示程序******************/6 d J4 k; g, N( c% |$ Q
c8 G8 }& T# B7 Q- a5 w T void puta(void)
9 D2 v" _8 Z3 M* r" i7 { {
; w/ q+ i( m# F* E, z( s int i,j;" ~0 h% K" T! N% ?
for(i=0;i<24;i++){: j! v7 Q5 C# u9 p; Y; Z
for(j=0;j<79;j++){& H3 J* O% i N c" A8 B
goto_xy(i,j);/ x; c4 a) K; h% E7 y+ P7 V: @
printf("a");
. X8 y$ h& i1 _4 R) f; Q: g }5 M- \8 W4 F& r- p
}$ t# u" q8 v. _: j8 H" X
} |
|