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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,: U5 {$ A4 E: \: `' E" |
d' c+ F9 T- L/ ~7 [$ Z; {
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里 x, k4 Y5 n6 R
! d5 m8 u7 Z# `. ~5 E 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 D/ g$ o: A: I) T0 E6 \ 子函数及演示程序:
9 H% E* Y0 i6 U# g- ]% u5 x! N) ^
, M$ q9 h: E* s# }$ M- {* P #include<stdio.h>5 U* L# F6 h& l4 o# W( Z& E* x" H
#include<dos.h>3 d1 V( J2 J' C
#include<conio.h>0 t1 C. D& M4 A4 a+ _5 N
% T4 U1 O+ y6 D4 H9 S- ^& n: i
void goto_xy(int x,int y);
2 _2 w9 }3 k8 q7 E, M; E void dcls(int x1,int x2,int y1,int y2);7 b2 V0 h* v# Q) A# d7 T5 n
void bcls(int x1,int x2,int y1,int y2);9 M$ e s( T# c0 X* M) D
void kcls(int x1,int x2,int y1,int y2);
1 t) i3 ]6 J/ G void recls(int x1,int x2,int y1,int y2);
. x5 R9 O5 f: F# u) @9 H0 F5 ] void zcls(int x1,int x2,int y1,int y2);
/ B9 M6 C, L2 ~ t void puta(void);
0 U! L3 s' q9 r2 O, P1 W4 a/ @2 M& y" H4 d& X: J
% K3 V& g$ \/ q$ d/ \' X: O, B
/*--------------演示程序---------------------*/
# T. f2 p* W8 a( j main()
+ o( n) n- G& ]2 m8 X7 k7 g/ _, w {' j _ k @/ w/ e: H) K2 m
puta();
% Y" o5 m) D* j8 ^ getch();7 Y; G+ H# }5 I2 J; O, z
dcls(0,4,0,79);
@+ g6 L7 r+ S' D4 E5 l; x l* U getch();
" A }5 |( L9 a7 h5 F! D* _( m puta();2 Z9 m' @# q- ?* D C2 P
getch();" u7 _6 A% u4 g @( \# E
bcls(0,25,0,79);
: [# |* z$ g m: R getch();
" R- y. q' P# \* k8 b puta();
' y$ U* W, Q' v5 @ getch();
! s1 q x/ c* f zcls(0,25,0,79);! B1 ~; o4 \5 u
getch();. [3 x" J& u& Q6 m
}! x3 q5 H# ?, X/ y* B& e* v
/*********center clear screen(中心清屏)***********/
1 c! F2 @" P, ~) u void zcls(int x1,int x2,int y1,int y2)
9 P8 x3 x# h* ^2 i2 a {
3 C* l& u- x% q' U2 d1 M int x00,y00,x0,y0,i,d;
0 V( P# ^1 B" n! q. H) y8 T if((y2-y1)>(x2-x1)){1 X" a0 s- ^, q0 t1 ?& x) W! o8 |# [
d=(x2-x1)/2;* J* A; u$ x7 M# m$ h; P
x0=(x1+x2)/2;1 ~, u N4 {' k( Z
y0=y1+d;: W. L6 L9 J& Q1 _& L0 w( |
y00=y2-d;
: o3 s' X7 h+ f5 Z& B for(i=0;i<(d+1);i++)1 N0 Q& i/ T/ u- s
recls((x0-i),(x00+i),(y0-i),(y00+i));! u, J9 _; D! E9 \
delay(10);
& w+ \: M9 C9 n( b! z }# i6 j+ z7 M5 V% v' k- O( D
else{
$ f @! ?. z8 o& ~& A5 P$ J d=(y2-y1)/2;: b, h, Q0 w" b0 k/ l) |
y0=(y1+y2)/2;
) A4 u* i. \6 X; l/ I% H& ] x0=x1+d;
+ a( C+ @- n( C. L5 I& o* P# c! Y x00=x2-d;5 N7 z7 z) A# f p: I
for(i=0;i<d+1;i++)( I3 e: \$ z! _3 M; i! V1 |
recls(x0-i,x00+i,y0-i,y00+i);+ c8 e, w; X" P# t- a
delay(10);* O% _, {3 `' H v4 b
}
5 u# w9 }+ c. A; `4 H5 y z% N1 O }
; j- Y4 R: i: R; @
: a. J$ E% I' q* e/ C% r /************* clear rectangle side(矩形边清屏)***********************/
7 r; w; j. D- a/ x' E7 Q* O
( d A Y) H& a' _! K9 g% p+ | G void recls(int x1,int x2,int y1,int y2)
, b9 J$ P, }; x) V! L {! m6 X, `: Z. k
int i,j;( z7 F I x1 o
for(i=y1;i<y2;i++){
% C6 z# M4 ?! v% w, [& ^* R goto_xy(x1,i);
# u. ^' S8 I$ N8 a- I putchar(' ');2 ]/ V4 S8 U7 ]& o
goto_xy(x2,i);
& \$ `: o8 ^! }& b1 X2 m* d putchar(' ');
$ R( x% L$ G+ ] delay(10);
3 f3 F* W7 g/ l9 F/ q }; U# J& V. W* l4 }% l& q+ G
for(j=x1;j<x2;j++){# g+ T2 y7 u% t/ U6 b
goto_xy(i,y1);
% F# V" I2 k* |6 p" ~- w putchar(' ');( I2 l$ B2 V9 ]" F% i. b1 H! f3 ]
goto_xy(j,y2);
: m/ Z" ?7 @( `7 L putchar(' ');
^$ v+ t6 h" q o, |3 t4 b8 b/ d delay(10);$ H0 {2 k) |8 l7 ^8 [
}% j4 E" J3 c5 F; ^/ E+ `
}
4 `: c9 o8 |9 H) E6 D, k7 e& R /******************open screen clear(开屏式清屏)*********************/3 r4 [6 T! I( W2 j
, B% W3 M' f* p' B3 u3 ^ void kcls(int x1,int x2,int y1,int y2)
" Z( X+ s" [$ \ n- W {3 \0 m9 I/ F. t# O! c9 O
int t,s,i,j;
" [& x& i; Z7 U j. z t=s=(y1+y2)/2;
8 Y) C( V8 Q9 n7 |! l3 j4 I for(;t<=y2;t++,s--)
0 Y+ Q5 y& U5 f0 _( | q for(j=x1;j<x2;j++){
+ A6 p; h& M% x% l# J) A goto_xy(j,t);
m, N; d" H4 X( y4 Z8 ? putchar(' ');$ P# u- {7 M; z1 X
goto_xy(j,s);
, f' q, d; H6 U$ H$ F& G. o, x( z$ l putchar(' ');* p* y% P* j* @( F
delay(10);6 \" r- ^& g6 E/ _& d. y
}
- h0 X( J" p# [4 J* H+ J) M }
. |% m" r3 g$ } /*****************close screen clear*****闭幕式清屏*******************/) D% k: [0 u& }) |
8 t' o+ T% v5 s1 c6 S: X, W: y/ L
void bcls(int x1,int x2,int y1,int y2)$ @1 e: B! \ @/ a
{
/ O. c6 r; k; K7 n* S3 u2 V int t,s,j;
: c5 }9 X: V, x' S: M1 P t=y1;
/ P( t+ z5 \ } s=y2;2 D7 k9 B5 } E/ p: `0 E! z: T
for(t=y1;t<(y1+y2)/2;t++,s--)
8 s1 h" f( w) S9 X% I( x for(j=x1;j<x2;j++){/ w( e2 L1 z3 c
goto_xy(j,t);6 Z* M& a2 I! H+ f+ T
putchar(' ');
' b0 L" D7 b0 r0 g goto_xy(j,s);3 g. E E- M) _0 R3 ]. p1 d! d
putchar(' ');
( O! L9 x- `+ t4 }; @2 C1 w2 m delay(10);
8 J+ Q. i: s" p }: R! [' Q: C, X; V" {2 L) n
}
6 k" e- L) Y9 P# I /******************bottom screen clear(自下清屏)********************/; H& ]8 Q/ y* I- h( a
9 x/ |; r& u4 `, J7 @$ t- d! w& Y3 k4 i void dcls(int x1,int x2,int y1,int y2)
0 V+ Z. \$ E% k {
" `1 @, u+ j5 R8 W0 q, o int t,s,j,i;
, m$ t4 \& p# L8 R6 k+ t/ Y+ E2 } t=s=(y1+y2)/2;- I! Z/ u7 f6 ]
for(j=x2;j>x1;j--)
- ~9 E9 H% h$ u9 O/ Z for(i=y1;i<y2;i++){; j+ z4 b7 h( M7 x% i+ L: P
goto_xy(j,i);+ _7 J- j3 {. v0 u5 Y
putchar(' '); T8 C9 d0 q( |0 E( Q
delay(10);( h8 c& O1 x' A5 w
}+ N6 f6 ]5 }" L2 V
}
2 ^ ?9 N" ?. d8 f% c6 @ /******************设置光标子函数******************/5 Q! v# U4 J5 R) \. X
; b; P+ d( Y- U1 v
void goto_xy(int x,int y)
. |* S. p ^9 y: a. W9 v5 O! J3 q0 f {2 T" S! y9 e- \, v$ D# R
union REGS r;
+ i' ^! [$ }0 C" {/ m r.h.ah=2;# l4 G( r/ S [+ l9 b$ b. r2 n
r.h.dl=y;
B" O# P0 Q9 ?! e w p% ^, W7 }1 k r.h.dh=x;8 y' {$ l2 f1 W0 @% ^+ d/ o' ?4 ?, ^
r.h.bh=0;; J6 S. E2 }/ V: [. S: D' F
int86(0x10,&r,&r);
% d+ i, ^1 h3 ~/ g' U }. [" k: `% F. C0 u+ R4 K9 J
/ q. Z1 n: w: O" e$ g" S /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 ~( U) N7 _( J; s5 r) a
" h H1 V: A2 U void puta(void)8 T6 n; y j4 a
{
8 q7 G% ?% Y& X9 e) x int i,j;( |5 R, Z6 {4 q: i
for(i=0;i<24;i++){( [+ Y h/ g/ a+ K0 ^
for(j=0;j<79;j++){' i5 u8 R( g7 m3 p1 V6 B9 |
goto_xy(i,j);
9 k8 |4 p0 d3 F! r printf("a");
X* J c5 k; l4 W3 S$ U: z }8 a! Y$ f2 s4 [
}9 P1 B7 G. _1 g& W8 i8 t; A1 M
} |
|