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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- @; s% o2 _- o5 o' k
0 M x( H1 m: M4 `, Y
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里4 n5 E: Y/ ^# h) k6 {" w
' l- v& q3 H$ [; s& r
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- [' b/ ~! _( r# r5 v6 u: Q8 f 子函数及演示程序:
% f% a% S! S( L* F
7 b/ y! E1 y' g2 {5 N #include<stdio.h>+ w$ D" \: Y' e) d( F
#include<dos.h>
3 @' V% l6 Z" I1 A #include<conio.h>9 C7 P# v- k$ U. W& F0 }
# |& K& h% K& V4 u; ? void goto_xy(int x,int y);! B: c* F3 S) s; R
void dcls(int x1,int x2,int y1,int y2);7 F/ i/ J9 u+ \' V) |
void bcls(int x1,int x2,int y1,int y2);
; m6 r' S2 L+ W( w P! ~ void kcls(int x1,int x2,int y1,int y2);
4 i! O; [; N4 M/ F: t* e void recls(int x1,int x2,int y1,int y2);
/ A: q, q% j% S2 E+ H/ g void zcls(int x1,int x2,int y1,int y2);
6 F4 M; |. T+ d2 J% M! o void puta(void);
M5 o/ }. `2 u7 ~
. {- J! }! y1 k. P
z8 l W* a$ f) D1 P /*--------------演示程序---------------------*/* [( m6 v, a6 p
main()
, x8 j# `0 C. u8 X8 d7 [2 d {9 D1 u7 O0 |3 j
puta();" K1 |9 i, _2 O4 v9 S1 H' \% ]4 s4 t/ u
getch();
# `% S# |! r5 M4 p dcls(0,4,0,79);: x: [ e+ J; H& \
getch();/ Q5 u1 r2 V1 ]9 @( r$ m2 y
puta();, `/ F+ _% W1 m& j1 W }
getch(); f6 t. V0 p P# a: Z) t
bcls(0,25,0,79);
+ d3 | l4 `+ A- y getch();
, o7 S) O1 A, J2 k puta();
A- q j- @1 v$ P; L- [$ C# I5 m$ @ getch();2 F5 h: O7 J* G# @- G
zcls(0,25,0,79);
# M% p* `; U) \; e. l& f( Y5 Q getch();& @/ l2 o) {* m Q6 e
}
" _7 m Y# I, P9 P: x, x9 C /*********center clear screen(中心清屏)***********/
: _' f3 X6 X; t/ B& t' v0 Z void zcls(int x1,int x2,int y1,int y2)
+ P8 c! E" w4 Q8 G0 o$ e: i5 f {
/ s5 r$ @2 |2 g int x00,y00,x0,y0,i,d;! X+ c0 N# v& a' A; n) K6 q* Y4 i
if((y2-y1)>(x2-x1)){
" a6 @: j$ F1 v2 L1 V2 N d=(x2-x1)/2;, Z; Q) \# c) {+ D& {
x0=(x1+x2)/2;5 y6 ?( W9 k3 a4 f
y0=y1+d;5 c- @+ g9 G, B0 t* _- H5 z
y00=y2-d;! a: i8 s& d5 w8 B
for(i=0;i<(d+1);i++)
+ F- Z; O O+ W- }) T recls((x0-i),(x00+i),(y0-i),(y00+i));
% k1 Z' ?! J3 b, ] L' ~: @, w2 u; v delay(10);
9 W$ o9 Q/ N9 m; _ }
: E# b7 V9 L; Q6 G+ z P else{5 |3 v: x9 V0 z7 U; b0 E
d=(y2-y1)/2;
2 ]5 }% H2 b% g2 B y0=(y1+y2)/2;
# S& } f9 ~% w8 }8 r x0=x1+d;
# j2 d! u" j- X4 ?% F x00=x2-d;# x$ q. U3 K" [+ c3 F/ R6 i9 \
for(i=0;i<d+1;i++)
- M4 p6 y& V& o/ `2 R/ l$ U. x recls(x0-i,x00+i,y0-i,y00+i); K. @" a- L0 r9 \( O3 j
delay(10);5 [0 Y4 ~7 o( H# p
}2 \, l0 }- u. E4 B4 z
}
' n# v/ M) i! h
! j0 k/ x# p& S+ {8 x' _7 R1 g0 e /************* clear rectangle side(矩形边清屏)***********************/
6 Q5 Z( ]* Q/ B; ?4 f% |3 {- c! Q7 ^- {- H
void recls(int x1,int x2,int y1,int y2)
) D# V* e0 I( O/ H {. V" V# R( ]) ~+ o3 b" b
int i,j;9 z" q P1 a a" C: f# }, d
for(i=y1;i<y2;i++){6 f7 Y5 n3 r% _0 F8 t* O3 G7 Y+ e
goto_xy(x1,i); F+ r( G9 X- N
putchar(' ');
" v! G# R# U) [; Z, f, s goto_xy(x2,i);
! Q+ v( D8 q8 D. L" h* D2 Q# L putchar(' ');$ v- @) h. w. S1 W. I$ \
delay(10);' G1 ~" ~5 U: E; a) K& S
}/ }3 i. I5 a' C2 K9 y' i' t+ h/ X
for(j=x1;j<x2;j++){
* f: \ }% h' ] goto_xy(i,y1);
; U5 ^9 M1 O: E) l: q, o! e putchar(' ');2 z/ \$ D3 P6 H/ C5 a1 g
goto_xy(j,y2);6 W* c0 k1 i- P! `' |7 U: q
putchar(' ');
( f$ W& p# S; t6 F4 Z3 ~, d i4 u delay(10);3 I! ] w t: X9 f" a2 y
}& v. O D8 u' T5 K- D' C
}
" w* H2 C4 ^* k; ]& @# ?+ f /******************open screen clear(开屏式清屏)*********************/
0 g7 }) k1 ~$ h. V4 b1 t, R8 q+ m: U; r6 H9 B% `' \2 f, M4 t
void kcls(int x1,int x2,int y1,int y2)
* i7 I' w1 Z$ C5 c* N4 D {
; t' q( O7 f" A int t,s,i,j;
" i/ g( h, f! w$ L* K. C0 o4 M t=s=(y1+y2)/2;. R% B2 U9 P8 [
for(;t<=y2;t++,s--)/ [8 C+ t/ Y: A8 Q2 b0 y$ z+ N
for(j=x1;j<x2;j++){
; v* b5 B2 j* E6 r" |9 Q/ y goto_xy(j,t);
1 }' I: l2 Q) J3 n. i, A; l putchar(' ');
" l$ l1 Z4 m: X4 b# C# `# g goto_xy(j,s);! n' c9 o0 o4 d0 Y/ v( A& c; ?* G
putchar(' ');
: {: Y% y$ [) g* I/ j+ Y7 R delay(10);. X% H% k4 I4 _) o u, D
}
8 h* @1 q" R: N6 e }# s7 p. g) R1 w
/*****************close screen clear*****闭幕式清屏*******************/
6 L8 Y7 s7 P- z
5 D! L% e: f/ z7 W void bcls(int x1,int x2,int y1,int y2)
. [8 j2 n7 t" |+ B% A. | {% q( `5 O! K- j6 n2 A9 N
int t,s,j;
+ u+ e+ H- s4 S9 B. d1 W0 |8 ` t=y1;
5 e0 S+ v& ]; |1 x" n2 v$ _ s=y2;( J3 x) A* D! n% V: N% S
for(t=y1;t<(y1+y2)/2;t++,s--)$ r8 H1 J( H, ^ K8 N
for(j=x1;j<x2;j++){1 b8 E* d7 f" l9 _5 t
goto_xy(j,t);; r& `" ~9 ?' _) t+ `* i( G7 \% h
putchar(' ');$ D/ F8 b" X5 N6 g$ @$ {8 w
goto_xy(j,s);: q7 ?" S N0 i5 G1 X
putchar(' ');3 }& V0 u' n) s, t6 H* H+ }6 [
delay(10);
0 ~1 t! T! ~; P9 X }
9 h& k3 J% ]+ V0 ]1 E }
8 V0 y& w: h9 s /******************bottom screen clear(自下清屏)********************/
! k8 [4 C; t$ Z3 y" {& R# F% n. E4 X6 ^8 X8 o0 U' P( ]6 P% B7 `
void dcls(int x1,int x2,int y1,int y2)8 ]2 b: M# I% u3 u
{
2 W3 }& r7 Z' c8 `6 ^' ~ int t,s,j,i;
6 z3 I" P3 l# f$ X Y8 c8 E t=s=(y1+y2)/2;7 B% y: O1 Z/ ~4 ~ D( a. h: f
for(j=x2;j>x1;j--)- J9 T% h, B2 Q
for(i=y1;i<y2;i++){- ^& c g3 ?7 f- i8 n- f- x
goto_xy(j,i);$ C3 r7 ]( r9 [3 C& ~
putchar(' ');
( ?# e% t! Q* Z# ^# k6 B. d delay(10);9 @( g3 q. ^: ~+ \ t0 _! X
}
' P- e6 D e# P3 f }
6 O/ S2 I9 T' ^+ f7 t/ v! u /******************设置光标子函数******************/
6 f+ O# j2 Q* s+ u9 _; s- w" x! V
! j! l! j; k8 m* A void goto_xy(int x,int y)5 d- D' u. k9 S7 u/ L+ ~& l6 {4 Y
{
C0 _9 X) l7 `' p# [- _ union REGS r;
/ i F# X: F2 Q/ y4 h& M5 ?0 o r.h.ah=2;) }3 o) B: ^0 {7 h& X/ f) ?
r.h.dl=y;
; x: M4 r6 ?( k; I$ ` r.h.dh=x;3 u( L" [* y* g2 ~5 k! G$ Z
r.h.bh=0; q9 _( C) Q. @3 U
int86(0x10,&r,&r);- v; l! ~( w( i. x9 \* y3 J
}0 e- D! s5 I! Q, y7 k$ z
/ y3 A: W8 O" j /**********************在屏幕上打出一连串的a字母用于演示程序******************/& `! Y# E+ d1 U- ^' E
( b: ~- L9 p4 C. F* J1 m void puta(void)
+ T" m! J, I9 Y* w* \5 E: f* b Z { ?& f5 k6 ^# _0 O7 A, e% R
int i,j;
$ i* F9 I. @$ A for(i=0;i<24;i++){/ \7 M# z" X. K% t9 G% \
for(j=0;j<79;j++){
* ^& c2 V) N* R7 }6 @3 q" q goto_xy(i,j);
! N, w" ~2 P( V' f% R printf("a");
2 l+ h4 I' Q/ O* O" P }
. _' R$ z/ t7 z9 O7 y3 o. J }
- S, U T) T7 J% P4 O' R5 S2 \1 d } |
|