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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
1 B6 o4 K" | Z4 \2 K+ u5 i
3 W a1 ^3 Z0 |- N* u8 G/ I 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 e2 R5 y5 A% k" z1 U: D8 b6 C! e' N$ a0 E! s% y
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
$ X6 L2 r- B" m- M+ g! e% y+ b 子函数及演示程序:6 Y T" G% J2 }2 C. |
# z) i* A% L( |# J5 ^/ Q
#include<stdio.h>3 O) K6 ?1 z4 V1 Z
#include<dos.h>2 R0 `1 T: c* N' B6 S9 t6 @
#include<conio.h>
1 K0 P; v/ r1 m! {
+ a4 Q, b; i1 U/ |6 x void goto_xy(int x,int y);
" O( W+ O2 i4 I4 N, A void dcls(int x1,int x2,int y1,int y2);* B3 g: A U! R
void bcls(int x1,int x2,int y1,int y2);. Z4 D* P( T* j& S$ ~* q; u' n8 O! E
void kcls(int x1,int x2,int y1,int y2);2 b4 u) e0 D, h [
void recls(int x1,int x2,int y1,int y2);
9 I5 K, |: W( J: }& e( R void zcls(int x1,int x2,int y1,int y2);5 s0 z1 I) W* d4 y, ?0 W
void puta(void); {- f/ r D! A. j6 M
4 s0 j e+ V" B! c4 N( c, W: B! D
0 d2 }+ `# F) v /*--------------演示程序---------------------*/
, y0 F3 B X' c3 T3 Q1 T5 g7 | main()/ S$ K5 X4 _+ j& A- ?1 q+ [0 U
{( O/ |) u: x2 U% a; X5 e( u
puta();
& E1 E, R( G' e7 _9 ? getch();
$ E4 F$ X: W5 Z- J dcls(0,4,0,79);
4 v K1 Y1 j3 x2 n- X getch();" d& r1 S0 J3 f
puta();
5 q% N& g# t* y. q; }6 z getch();
- O' h8 v! i3 } M9 U1 C7 W bcls(0,25,0,79);
; L8 B3 R- h9 {% f. {$ L getch();# n: u' A9 Y! I" l1 D, L
puta();$ @6 J# X9 {5 U% t8 y# u1 n$ ]3 z
getch();+ G; h: N: M T. }% C* Z* |
zcls(0,25,0,79);
& @/ T1 j6 r6 l1 g2 u getch();$ f7 p# E7 K+ A' x- K4 i
}! r: r( `9 a/ k
/*********center clear screen(中心清屏)***********/* D6 h' f0 i8 c! i; w
void zcls(int x1,int x2,int y1,int y2); C) o& P, E3 Q# x- N5 t Q
{/ B* y+ _/ u5 ?* K0 F
int x00,y00,x0,y0,i,d;
3 W4 s6 L6 b6 r% n. V% A0 @' E. H if((y2-y1)>(x2-x1)){# x$ R1 s* q0 k) Q! j; p
d=(x2-x1)/2;& E# C0 k3 J5 M; }
x0=(x1+x2)/2;
! H- G8 h: ^0 Q7 ]4 y! s4 d4 S y0=y1+d;
' Q( u# }: G3 ^1 }- F# ?' F y00=y2-d;
! c! M0 [: Y5 n. H0 Q7 M ^ for(i=0;i<(d+1);i++)
" m4 C. h# q: O3 q2 }- ^' E& ]3 H recls((x0-i),(x00+i),(y0-i),(y00+i));
$ Z% A1 O; M7 g" B6 M9 R delay(10);" ]5 b0 H! H4 o( f
}' @/ ?2 \- _1 a' j$ i; `2 I
else{
0 u; ]# v4 r9 q7 J" k d=(y2-y1)/2;
& F3 [0 n7 Y% B6 x/ p y0=(y1+y2)/2;
4 G p$ s/ ~% ~ x0=x1+d;
) t9 k' m4 E3 a3 ^7 ~0 Y x00=x2-d;
8 _3 E% J4 Q5 N6 x for(i=0;i<d+1;i++)
1 p* u, Y4 ]3 |' b" X0 n recls(x0-i,x00+i,y0-i,y00+i);
5 r- i3 d1 o/ \ m delay(10);
6 p) U; S f3 {. X' w9 O+ A8 ] }
7 A4 J }2 C9 }' f }
6 g2 e1 N5 j, E7 b
6 _' b: p$ [3 f- y) Y6 M" i /************* clear rectangle side(矩形边清屏)***********************// }( |- m, b W# Y9 M& _. D
1 Q( g% x' A9 o( V" U; O void recls(int x1,int x2,int y1,int y2)% ]1 f% S6 w7 J- l% R( \: Z! D
{( `. d: O1 N# r$ P% l7 g4 ?8 ?
int i,j;
5 N# \& T5 F6 H0 v4 H for(i=y1;i<y2;i++){
9 n6 ]% j; q T( t1 ~1 f goto_xy(x1,i);' ~ O& ?$ D, ~/ S7 [2 u- V
putchar(' ');" |& I0 w" y% b4 [% Z) q) d
goto_xy(x2,i);
8 r( v& q' V9 i0 B# r( @7 O! z putchar(' ');* b; i* I: P. {2 H, h, g
delay(10);, k! M4 ]2 J" V' ~0 O/ Q" o1 A
}' E) r, r4 L1 b- w6 ]2 \
for(j=x1;j<x2;j++){& u; ~$ O) @0 \# \; T8 |# D
goto_xy(i,y1);
7 U k( r* b6 }+ B* w# t5 l putchar(' ');
, ]; Y. g3 }2 W8 A' a" V( w goto_xy(j,y2);
$ L1 `/ C6 W. p' O3 U+ l7 [ putchar(' ');3 p9 t$ a/ Q/ U# K9 m( t
delay(10);
1 N( \. V' q7 `$ D9 ?3 G }
3 i& X0 n1 D; ]$ c* h1 { }
) Z$ A! }" }/ Y7 O /******************open screen clear(开屏式清屏)*********************/+ x5 B" k9 _1 s2 C
0 P, \' G3 d% O F9 q/ ]2 F+ J
void kcls(int x1,int x2,int y1,int y2)+ [- m0 _2 h! G* t* k4 z
{
5 w3 y8 R. k0 f. s1 {, M int t,s,i,j;; U8 I+ R& j4 \" ?& |
t=s=(y1+y2)/2;
# D+ Y$ ^9 p4 E3 }% } for(;t<=y2;t++,s--)
- z$ ?6 f- L$ Q2 g* b2 V; Y) { for(j=x1;j<x2;j++){
3 y: y% I9 A e% v: O: f goto_xy(j,t);
8 R0 N4 _( {& n- m& W putchar(' ');
5 c+ a, U4 V9 P% u goto_xy(j,s);1 i' a& P6 \$ I2 T* W( m
putchar(' ');
4 q2 ]2 K2 \. R6 M6 b0 H delay(10);
) M7 B9 T b" M4 d8 p }
3 Q1 A5 l; N7 E }: Y. m5 h9 b9 M# f" J1 \+ G" V: [
/*****************close screen clear*****闭幕式清屏*******************/
# A- ^; [" a0 p/ X) T: I4 `
8 H8 Z) w! i$ Y$ F( z% K void bcls(int x1,int x2,int y1,int y2)
|/ o' G3 S# q1 p) A f# h1 U {: D% N0 N/ j+ `1 y8 Y1 b1 ~4 T! U6 Z
int t,s,j;
/ W! Q4 t( ^4 @3 m. j* S t=y1;
4 q0 R9 n/ W' ~: p( [ s=y2;0 D1 ^& H% N& H D0 _4 Q
for(t=y1;t<(y1+y2)/2;t++,s--)
& ?4 L" C' f8 D/ q for(j=x1;j<x2;j++){
& j6 l/ W& \# o7 v- ]! u/ A/ H goto_xy(j,t);! T& \* W8 y% ?3 `0 Y& L
putchar(' ');; `* p+ x. ~3 |, _: d" S0 Y; p+ u
goto_xy(j,s);
% X5 m5 l. p* G2 [ putchar(' ');2 a! g% a( i1 g& q" b! A
delay(10);
/ T" s' ~, c" U1 r# K" r: A }
1 M* a$ X+ Z/ q3 _, V: R }) K/ w4 a8 p3 ~, P) Z+ ~0 I
/******************bottom screen clear(自下清屏)********************/' p, m; X7 \: `3 L2 H2 G
2 }2 \" Y5 B1 G6 h" G void dcls(int x1,int x2,int y1,int y2)+ {; ?* }8 l5 d3 T% j) |4 _
{
- Q. a$ E( [6 P! d int t,s,j,i;
* k( i; ?5 h! W t=s=(y1+y2)/2;- T: ?4 p! u1 c7 o) I+ V
for(j=x2;j>x1;j--)4 p2 c/ t) N9 ~" T5 Q
for(i=y1;i<y2;i++){0 u/ z% N& z7 l
goto_xy(j,i);
& |" Q" ?2 g8 R* C; _2 Y putchar(' ');' _* }# U3 @* A7 {/ f5 ?! }
delay(10);( E0 f" v0 E! R
}
6 p0 B! a: M( e3 t }
8 W) Y! t9 V, F /******************设置光标子函数******************/) K7 A4 w' ?$ ~3 n9 G
' q2 z5 O {5 F5 a
void goto_xy(int x,int y)
2 j+ @; P$ ^+ Y' w. ]" a' r' G {! ?2 k0 ^! B" I# n" b2 ^
union REGS r;1 _; s; D" G9 A5 X( U6 ?) d
r.h.ah=2;
5 V& o3 w/ L, [. W7 z8 | r.h.dl=y;! ~1 ?, Z. S) d$ [0 E
r.h.dh=x;: z" ]0 l3 W2 w! M. l3 T# E
r.h.bh=0;
+ O0 T: E. M2 g0 z5 J% ? int86(0x10,&r,&r);
- v2 H% u+ r8 t* b4 e }6 ^7 y5 v+ ^8 a
9 J1 D4 u2 e/ y3 W
/**********************在屏幕上打出一连串的a字母用于演示程序******************/$ f" m* g( B6 \# v2 e7 d9 d
u2 n. m/ b! f) F) L2 K6 p
void puta(void), {- X5 u; n7 f& c9 R
{
! f O& _! D0 N+ ~& z" k* A" ~* D int i,j;
' x) V0 Z8 C$ W- o3 f for(i=0;i<24;i++){
# b+ z1 c, t& _# @8 B/ Y& Y. ~! d for(j=0;j<79;j++){
! X6 \+ `8 I. S) J! W5 r2 G5 _! ` goto_xy(i,j);% y1 a* T4 j5 @! f6 ?) _
printf("a");
# w ` O4 P9 Z7 Q }
e, O: g2 y4 ~ }
; H7 _& R- g/ w8 Z" s } |
|