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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 |6 f" s3 z6 q
" Q$ ^. t3 W, Z* w" N 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 {1 D& `; F1 V8 x* j2 d" u, L! A7 T7 j5 {3 S2 Z, O; K
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 v' b) g* K& I+ Y; c5 `: z9 J
子函数及演示程序:
8 N- H' n3 \0 }9 c+ [5 h# P/ h0 W+ b
+ R, g* J; k4 H6 Q2 m: B #include<stdio.h>
' a: {8 W2 B+ h# t; M #include<dos.h>/ {5 i5 d! f- r5 b- N
#include<conio.h>) l( P. j, b) A) g
/ x' h8 y9 f5 }* A1 e+ f4 N void goto_xy(int x,int y);
% Q% }& v# a: ?% _, b void dcls(int x1,int x2,int y1,int y2);) [/ _5 M# t' P0 E. G
void bcls(int x1,int x2,int y1,int y2);& G3 |/ }# d: K) {% t9 G; r: }
void kcls(int x1,int x2,int y1,int y2);' s6 Q1 r1 E- v2 f
void recls(int x1,int x2,int y1,int y2);
" X5 a$ X# |9 M- w: k% g void zcls(int x1,int x2,int y1,int y2);* l: E6 ~- l9 [' |
void puta(void);
/ U* h, @. s, `) B
1 v( E" D) e. w7 _4 ^9 l( r, S1 \4 Z. @5 d" [% F/ [
/*--------------演示程序---------------------*/
3 R8 }8 m1 i4 E- } main()6 x9 N/ }/ n I% z/ n. T
{
7 O/ y7 f- @" ?, j puta();- ?- X# ^- | I- C
getch();
; ~1 @3 ]5 Q k( C, [# X dcls(0,4,0,79);. d/ S: z! @$ H* |
getch();. x) g, m; T' o9 W; `1 _( Y3 j
puta();4 a3 t' G7 \+ v
getch();
9 }# g8 U9 b% v; v+ ~& a bcls(0,25,0,79);
1 Z {3 P2 H/ p. n& x0 D3 {3 G getch();5 h2 _! N9 V% c% K. Q, X* J0 i( x
puta();
' w) D; A' A) ]$ {, F5 D+ P( f getch();9 t: e( H) ?5 Y- W! g' P1 L! N
zcls(0,25,0,79);+ I" [4 Q) o3 o+ {$ [9 v6 q
getch();! Q4 o- N0 d6 G" @. {1 {4 O
}7 {2 s, s4 F8 X& [9 J
/*********center clear screen(中心清屏)***********/
5 W( U8 P( H2 b void zcls(int x1,int x2,int y1,int y2)4 w$ s8 S. ]- L$ ^
{% `& Q8 f/ j! `
int x00,y00,x0,y0,i,d;. z5 q \$ G+ i: l
if((y2-y1)>(x2-x1)){% B$ p6 S) I5 q: ~3 b
d=(x2-x1)/2;
# H0 i$ g* h% w2 a7 f, P, n4 y5 x# ~ x0=(x1+x2)/2;) |, }$ b" q$ C+ M2 F3 j! G7 H. b
y0=y1+d;
U! q* |& ~$ n& @+ S9 M y00=y2-d;
3 O0 P& P! T" a' @% J; g4 k for(i=0;i<(d+1);i++)3 ?. y6 F7 h2 W& B; M6 Q8 s
recls((x0-i),(x00+i),(y0-i),(y00+i));8 ^* c! }6 X5 y
delay(10);
) G% C, h. k7 \: s }6 G- O0 a% g! W7 f0 m8 g- h) L
else{+ z# x% k: v! b+ L
d=(y2-y1)/2;
9 Z$ B" p+ o' }: } y0=(y1+y2)/2;
4 v" ]( d, N# A; L+ S x0=x1+d;
6 y# e( U' Q, e: n+ M% W1 l x00=x2-d;4 E/ S: o5 k( w
for(i=0;i<d+1;i++)" Q. r2 }) l; n3 ` G8 K
recls(x0-i,x00+i,y0-i,y00+i);; k0 M$ f6 D; o( v: ^& e! z
delay(10);
& Y6 V5 L. r- O- R, U' F& d9 A3 W$ }/ v }
2 t7 _2 L8 z( X. U$ E }
& u' c% q: E9 m0 p5 h- _6 m9 U2 w! z1 |$ o' b, K7 [9 v0 T$ N
/************* clear rectangle side(矩形边清屏)***********************/
; M/ s( l0 g, l6 r b* D5 V9 q Q( @1 c8 |5 U3 c9 A4 O
void recls(int x1,int x2,int y1,int y2)! |# z1 }& q7 i4 M% o; @6 i/ R
{
! N$ U3 s( j3 Y0 l int i,j;
) S) F) @! @, [* N9 w, {1 K, X: l for(i=y1;i<y2;i++){* B$ Q) Y. j4 o
goto_xy(x1,i);
0 n( l1 z2 L: q$ B" g! l- c putchar(' ');% t* \; G3 A7 U U# M2 s, W
goto_xy(x2,i);
( H h, o; C$ k# T% J g putchar(' ');: O, z) g% q# q) U, u) H
delay(10);
3 v' o- W- N% E. C; z }
' W7 Y( }3 n* n( B7 k for(j=x1;j<x2;j++){
- o- b% Q4 R( K) J9 Z goto_xy(i,y1);
, H% Q, r/ ~3 J( T putchar(' ');0 p8 j, @/ q- u6 E4 s/ k
goto_xy(j,y2);
; B2 F0 y/ b0 k" o/ O putchar(' ');
' x M+ r$ n( T' W; [: v delay(10);: W/ |* Z( v2 l. h& P9 q' ^
}; ^$ \3 ]% ^. H) V0 M; Y
}# V3 y3 K2 ^. ~3 [. b) S0 f
/******************open screen clear(开屏式清屏)*********************/
8 t% e) e: p, ]9 I8 X5 D) V2 @3 O7 c: ~
void kcls(int x1,int x2,int y1,int y2)4 r7 S5 }3 g3 E/ y' g* z! O- L
{
" N4 \8 K! W. E int t,s,i,j;
+ B4 w5 i- l7 S t=s=(y1+y2)/2;7 O. h6 r$ ^8 M2 x4 p: b% C M
for(;t<=y2;t++,s--), b1 ^* `; ^+ z2 ]! f
for(j=x1;j<x2;j++){
3 U9 u8 i% }" ? goto_xy(j,t);$ z9 A6 M: {1 A0 K
putchar(' ');3 E2 H( s2 K: a/ [& C
goto_xy(j,s);' U; a: h* p8 C8 d3 w* W& ]; l5 ?6 U/ X
putchar(' ');
2 X: e& E$ b; k delay(10);
6 [* w# _$ @9 U3 p5 Y }
7 w! E X3 d: g% k: E, A, Y1 A }' ^' |: g1 f5 y* b; K$ q
/*****************close screen clear*****闭幕式清屏*******************/
/ |9 _4 n9 @* {4 j% }, ^7 ?
/ C6 |# X. A# y& _' i1 g void bcls(int x1,int x2,int y1,int y2)% V' o8 s' o) c8 H2 ]: ^
{+ R2 r" H V3 h2 [% x a
int t,s,j;
4 B4 r+ ^) ]+ q; \! O3 S# B0 M4 }# n5 k t=y1;! A# W# D8 Y# V' F+ f
s=y2;
w/ k* J' J. x# | for(t=y1;t<(y1+y2)/2;t++,s--)9 c1 Y' y6 }& {7 p9 S
for(j=x1;j<x2;j++){
+ O9 Y0 h' M- a7 z. V goto_xy(j,t);
1 V) O' J1 s& ` putchar(' ');
/ D7 u0 a- }+ F; { goto_xy(j,s);) G) R% M( v5 l# R
putchar(' ');
6 w0 u' L/ ?4 |6 ^ V: s6 x delay(10);
2 Y- l$ m6 F9 {/ n- F) C }% n4 e4 l. m( g: w6 I0 w! {
}) s6 ~9 \( m& W! A
/******************bottom screen clear(自下清屏)********************/
! K4 R# e+ s0 G6 i0 ? z+ j1 d1 I0 o: G8 g* Y) s
void dcls(int x1,int x2,int y1,int y2)2 H0 V% r6 U# l* @* s9 d
{0 h) S" C' |& R ~
int t,s,j,i;
: z1 k# F! k; u3 A3 G k# I( f6 X t=s=(y1+y2)/2;: }% D" r7 A+ S3 a
for(j=x2;j>x1;j--)( {6 u* f: @# k- N( F7 H. F( f
for(i=y1;i<y2;i++){8 g: m9 K& I5 ?! E" L; A C
goto_xy(j,i);; q. R- |& N: d3 |& y/ t: l+ S
putchar(' ');
k! j) r/ ]9 S delay(10);
0 B/ q6 Y) L6 g# }. p; a( r }
. N: Z7 E, c: C }
& G+ `0 w: a9 r" e8 T+ Q( q /******************设置光标子函数******************/9 e$ k7 F3 L% U+ J. o5 `1 g, N
5 }" q9 O( r2 ^! @+ `' b O% B
void goto_xy(int x,int y)
' }8 ?/ u" b( y {
( r8 U# U% v+ U7 Y union REGS r;
8 R& R0 Y7 [& M' X4 l r.h.ah=2;& T" ^2 H; y6 e
r.h.dl=y;
0 b7 Z4 f/ N& S r.h.dh=x;# ^, x4 _, ~) b( |8 X- ]
r.h.bh=0;9 U6 ~8 B2 e# Z& E$ F4 F0 e
int86(0x10,&r,&r);
! H, w/ R0 r9 m2 n% ? }
- t/ }# S# S( x* Z. L4 n# {# L* A% X- S# }4 K
/**********************在屏幕上打出一连串的a字母用于演示程序******************/0 }, e3 B% {2 z% t, Y$ O# ]6 }3 W
' M- P4 V& |9 B8 k. `( l3 C
void puta(void)
8 h8 ?, s3 _" g7 l; {* Z {7 }$ o" K2 q e) F
int i,j;
% H6 K" b& o O5 x3 Q- F0 g for(i=0;i<24;i++){
9 S$ w4 X l' e for(j=0;j<79;j++){' ~% L* Z( W+ X+ c
goto_xy(i,j);; q) v) R. t! l) G4 [9 a& V
printf("a");
( r! _! h) G4 ]1 J }0 F, g7 U$ y6 p+ B3 `# `
}7 i! |; a4 t, }" G5 G
} |
|