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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,# _9 Z: p# n/ R% s; x. v
% k" V1 b' K w' r: T9 m
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) [( d7 B- C6 R, x6 L% c3 C
. _. P, x" I& }& l0 g 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 R, g B/ M9 G/ W, c 子函数及演示程序:* ~* u5 ?' I" `
" U# m- J9 i W #include<stdio.h>
8 T2 [: o; Q& b4 ]0 F( n ], F# L #include<dos.h>/ @9 `) I. E. f. C$ K5 M$ [1 I' u
#include<conio.h>' O# k1 T7 w5 D+ l7 x: s9 o2 X
* r3 n! Y$ t% Y+ |( O
void goto_xy(int x,int y);
/ d: ~& n8 A: O* I void dcls(int x1,int x2,int y1,int y2);# u4 y8 }$ `2 P
void bcls(int x1,int x2,int y1,int y2);9 |5 X2 I4 m& V6 z/ W6 o+ a& p
void kcls(int x1,int x2,int y1,int y2);5 Q( z% J) W! k4 t- i' J2 O* [5 _
void recls(int x1,int x2,int y1,int y2);1 O2 U) {0 R+ t3 i# r6 I
void zcls(int x1,int x2,int y1,int y2);
/ V/ e! Z! S' { _/ B: A5 v/ P, p void puta(void);
& h& i7 H; W) n- m' m1 a8 G( p+ g5 Q2 y- Q4 b3 x4 q
- Q' b6 L" B! N5 z; y
/*--------------演示程序---------------------*/$ _! m. {: X0 @$ G) y4 Y
main()
% B: y5 A8 _/ S3 G3 d {* K- X0 k, C: e9 i" b6 _
puta();
/ T! |! \/ S6 o. A6 l7 d7 S! W. l* |$ e getch();- o6 O% c. Q5 d3 p
dcls(0,4,0,79);
, B* m! j# I( c3 ]: T% U# l getch();# u+ V3 I# i; u( z6 q! d9 t
puta();$ L5 E4 ? B" Z: d' d
getch();7 a$ O) d+ [( t1 {1 X
bcls(0,25,0,79);
g1 o1 O( {1 _. X getch();- }4 E/ c' y- `6 e* l! n) f% I% w, A
puta();
; Q3 w* R% A- r$ h+ {1 A( S4 { getch();
5 t. C$ E, s, n: }6 E& t" } zcls(0,25,0,79);7 @, D* X- O0 `
getch();/ q( A% s( z# V1 \0 d u9 ^
}
5 p% Q' N8 A% Q& P8 \ /*********center clear screen(中心清屏)***********/' S3 y6 f# T+ W) B5 ]
void zcls(int x1,int x2,int y1,int y2)
; e) P' u. w; y- p2 Z; @ {
) M: b# U, G7 _- g& ~ _3 M3 U int x00,y00,x0,y0,i,d;
6 E6 J- P/ K+ G- Z& h ^ if((y2-y1)>(x2-x1)){$ X' o- W" E( n# N+ K T
d=(x2-x1)/2;
1 W% g3 h8 ~0 Q x0=(x1+x2)/2;
! Y& u1 ~3 E3 L; @* g Q y0=y1+d;
* `+ y, @( X `& v- M* A$ r y00=y2-d;/ d3 W/ x- o2 N( q1 W" c
for(i=0;i<(d+1);i++)
# l' o5 M& o3 a; M recls((x0-i),(x00+i),(y0-i),(y00+i));
" m+ y0 G$ ?$ x2 W9 v! w: h2 {. P delay(10);0 z h0 T8 j% o! _
}2 I# z8 u8 a0 o( g( z' X4 |
else{
$ B2 ~: U! k5 Q4 E5 g: F. \ d=(y2-y1)/2;
: H) ~- o2 b' V `1 E y0=(y1+y2)/2;
1 [6 ?0 U& j4 | x0=x1+d;
5 [ J; ], A! k9 D, F. |% l x00=x2-d;
3 J8 u0 U. x' a for(i=0;i<d+1;i++)
; X- I( K4 Q7 a3 y recls(x0-i,x00+i,y0-i,y00+i);
& E% i/ j! m2 c) U0 b% i delay(10);# X( W# h& S7 X: R, J
}
+ q' k3 }; v& X; l+ b" ^ }& E3 Z- ]; l F3 Y; s
3 C7 U+ M& E+ z /************* clear rectangle side(矩形边清屏)***********************/. x# e. c. L# {
: _/ v) n; r" K9 b9 }2 k: u, O void recls(int x1,int x2,int y1,int y2)7 J" M8 j; f/ A* w
{0 J* {& O' l& ~
int i,j;
4 m$ d* s( d x) c for(i=y1;i<y2;i++){
4 B- U3 S# E4 E' V. m3 i goto_xy(x1,i);( c1 }+ Y7 |8 a2 Q% Q- l2 n" _* E
putchar(' ');$ R: @& D" i7 d1 H# ]
goto_xy(x2,i);
8 h( A% W8 S t" b: K: v0 r putchar(' ');
! L, ^2 y& i6 b& u/ Y9 T delay(10);
5 s: u, }; E$ Q7 D6 {$ h0 D9 q0 k }; H) J+ a0 K4 M; M/ \' L! c
for(j=x1;j<x2;j++){
y0 M8 d% k/ a$ P& C goto_xy(i,y1); ^ p# g7 Q1 t |
putchar(' ');! N9 ]2 K; ~; ?' R+ g& A
goto_xy(j,y2);
# E" B/ ^, f8 g3 G4 {4 X putchar(' ');
' b* x# h, O1 ~ delay(10);! |- N& D2 @, c( P& G- B# j
}" c0 H9 c* Y* H/ n4 R: D) ?: K6 e% J
}
# V9 m3 n8 h9 H9 z% A /******************open screen clear(开屏式清屏)*********************/2 _" n/ }0 ^5 c3 S9 f2 K
7 j* K' _! \- {. ]$ Z4 e9 _6 S
void kcls(int x1,int x2,int y1,int y2)
' \, @- |) h3 g! X( { {0 X; J2 d G5 w+ m! O
int t,s,i,j;
- U( d5 w/ w9 S4 a- x4 ~ t=s=(y1+y2)/2;
* w) L4 N+ y% q/ u for(;t<=y2;t++,s--)# T" N* n- |& @+ |
for(j=x1;j<x2;j++){% a% i; \) R: w0 o W! N
goto_xy(j,t);* c) ?7 Q0 U4 U% p5 z( n4 E
putchar(' ');
$ c$ Z; P/ _/ o' p4 c goto_xy(j,s);
K9 G0 _5 Q2 @' b! Y# i putchar(' ');" {2 X7 d: E% G+ n0 g/ q3 O6 I
delay(10);1 N+ X F& y# V; C
}
, L" W! {) w7 d0 |8 w }
" ^ H+ ~ M9 k* o /*****************close screen clear*****闭幕式清屏*******************/; W& X* ^; V2 k' E. y
2 i( c" B7 b7 d/ m: p void bcls(int x1,int x2,int y1,int y2)/ n: f* q* `% C
{$ C0 J7 c# S- U& Q$ \
int t,s,j;
7 ?" c: ^$ X4 f& {4 Z) H t=y1;& }7 n0 d- r" F" ?" j) y) c
s=y2;6 r' }: l' Z7 m7 d2 K* r, s" {6 x
for(t=y1;t<(y1+y2)/2;t++,s--)9 M' \+ l6 r" i
for(j=x1;j<x2;j++){
- V6 G$ r8 r2 O goto_xy(j,t);
* P% {0 v# g' P putchar(' ');/ \, w% f7 M: F5 S; z& r
goto_xy(j,s);
; Z, {$ u7 ?1 J putchar(' ');! g; y; ] h2 h
delay(10);
6 w2 `4 k+ o4 P0 R+ M }/ A$ K5 g& N0 M( S+ n% l, K' U! i
}5 O) g% s: y: C. p
/******************bottom screen clear(自下清屏)********************/' V9 I0 Q1 y+ _8 `. V. }
! O; C! B K' F
void dcls(int x1,int x2,int y1,int y2)
: o1 v* {: Y& l) W. h4 ^ {
$ X$ E2 d/ [' E+ Z% Z3 x int t,s,j,i;
R8 [3 R; w) m$ j$ H2 z% x. i t=s=(y1+y2)/2;
/ `' [7 |3 `1 m0 y; {5 X for(j=x2;j>x1;j--)
- ?+ p: J4 i) z# k' R+ X; h1 n for(i=y1;i<y2;i++){
" t2 g- k6 a$ G* b7 _ goto_xy(j,i);( V1 T2 g! [% L- T! ]8 O# Z
putchar(' ');
* @ D; H" {# T; X' l3 ~' I delay(10);4 n( d$ g( O0 V8 ?9 ^3 U5 O
}
: A) s' L- |3 d' D, ^( h5 q" G }) V, c4 q Q8 y6 w! f8 b
/******************设置光标子函数******************/
3 Z; R% f; E4 W j T0 C
) j# M5 ~+ [- [: } void goto_xy(int x,int y), F- X/ f [* d' M; U& M: h; g
{6 Y/ O( L& Z. Q: w' S
union REGS r;8 B7 c% U X: F% Q
r.h.ah=2;" m0 Y. T/ ]' Z/ B, L3 j# D
r.h.dl=y;
3 B" w+ y9 L1 e5 c& C2 [ r.h.dh=x;
, N9 w, I& W. n1 c& q) \ r.h.bh=0;
& t2 g Z; @/ ^" _ int86(0x10,&r,&r);
6 a' g0 p h5 V) \ }) e$ ]9 v/ A' @9 s6 g% ?3 v4 A
' D3 G$ d; e, R( W' p /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 v* ?( h! u, d) g2 z/ T& N" J/ H) E
! H7 ]4 u# b& X7 P( a void puta(void)
- H0 m$ v3 h" Q1 S% \ {
1 `; x$ z/ e5 [) l9 s! s int i,j;# f! h1 W S a" r
for(i=0;i<24;i++){, k) F5 b+ h0 b$ p
for(j=0;j<79;j++){
. C) Q( n' q6 j! E4 P+ } goto_xy(i,j);( ]9 r) C) ?. q: ~& I$ j
printf("a");
3 r2 R: C2 m" v2 l* e; S O2 W }% L! W- D3 I. m5 R
}3 {) S# a$ T6 Y; f
} |
|