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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,( f) S& ?0 t+ h
" \: ?( a& A" v( O
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. _& c$ T( E$ h& o$ a# f6 d" u) Z$ d! L
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 k5 K8 B7 }- q& u& C7 L! o- m
子函数及演示程序:, o$ c; ]: F8 a9 V# N
% c& A: q7 U" I0 f
#include<stdio.h>
9 s: t0 h+ H+ B5 I4 u7 g% ~ #include<dos.h>
* _# u6 S8 S: [/ C4 t& Y; z #include<conio.h>% u- \( N7 N% A" k; f
# L8 k9 O: P* B! o, v# f% @8 f void goto_xy(int x,int y);8 I* }) R3 s9 j" B" Z
void dcls(int x1,int x2,int y1,int y2);/ o& Q9 p" q0 o: ?! e/ W
void bcls(int x1,int x2,int y1,int y2);6 h) D4 _ e7 U$ T
void kcls(int x1,int x2,int y1,int y2);
- G4 ^: b% ?7 A `/ _1 z void recls(int x1,int x2,int y1,int y2);3 i+ F# a3 f/ [4 |3 n' \
void zcls(int x1,int x2,int y1,int y2);+ B2 @; `& |; R$ C; S
void puta(void);/ G8 g; P G6 h# L2 U3 N! }
- l* b2 [- e! Q. n; E) f( ^5 i3 a) H% D, |- v, F3 U2 _- H
/*--------------演示程序---------------------*/
- ^/ L6 U- r: v5 ]/ c main(): A4 }4 [$ d! ~& k+ g% b5 S
{
6 S" l% n9 H3 B% {9 _, i puta();
0 S: Q1 q; g: K7 u& A getch();) |% l* |7 r \$ S/ A
dcls(0,4,0,79);9 l) Y6 w8 L) M
getch();
& {. `; d6 `: D2 Q' |4 t* X# p puta();: u* H5 I( B" v8 O7 p8 Q
getch();
: a2 }) u. N, d bcls(0,25,0,79);
5 Z% ]0 i: ~+ Q, H5 y) r getch();$ S8 Z5 y: ^9 Z7 R
puta();5 ?- L7 g8 m$ |& t G
getch();6 F8 A0 q( ?; x' m) I
zcls(0,25,0,79);
# Y, u5 K) z6 |" r4 M getch();
7 A+ b9 T/ ~. J: o }
1 c2 D; U7 n w. J) t% l /*********center clear screen(中心清屏)***********/$ v/ V* _4 y# \! Y' |9 D2 z: @
void zcls(int x1,int x2,int y1,int y2); `8 V1 m$ f% W3 Q2 h& U8 Y8 ]* [
{9 d$ \. V) o8 k1 w& e+ k
int x00,y00,x0,y0,i,d;5 @' t( X- C% R- z( ?8 }1 b" m
if((y2-y1)>(x2-x1)){
$ ]$ a h4 `# ~$ p5 a6 v d=(x2-x1)/2;
1 i, Q- G3 r/ n Z x0=(x1+x2)/2;' C& V# @4 I6 ^
y0=y1+d;
. A3 F; C8 D7 K& u# E y00=y2-d;
. h) J R" M5 X8 `- G5 y9 ] for(i=0;i<(d+1);i++)
, r ?4 S. ^/ G, C recls((x0-i),(x00+i),(y0-i),(y00+i));
: N) ^! b/ T. R0 \; i4 T delay(10);
+ B+ v8 g" ~. ~ }
! m( |! n3 [- R0 L5 W% ^# H6 x, A8 e else{" S: Q0 x: f R, E
d=(y2-y1)/2;" Y/ J& o9 y- ~7 N0 x
y0=(y1+y2)/2;, N `4 o3 v1 a8 M% R
x0=x1+d;
( s; T, X: B8 K) `' y& [ x00=x2-d;
7 n9 g* R4 E; z for(i=0;i<d+1;i++)$ c U2 P2 k) z% b7 O% G8 q
recls(x0-i,x00+i,y0-i,y00+i);- D4 S$ K' \% q& |4 a! A* ^6 L
delay(10);: Q" P4 K" K4 D* s
}
. g5 w) g4 h. E, x; j }7 Y4 C/ z+ A. u' s: u- |
; p" l; @+ c' J- _: w7 ]9 y* K /************* clear rectangle side(矩形边清屏)***********************/4 D+ j$ e7 S0 q- c# v9 r6 ~
8 Q1 l) b. c! Z2 }) D S8 u
void recls(int x1,int x2,int y1,int y2)! Y- I6 ~1 ~$ V7 T6 x: h# z
{! y- ^# Q7 U' O K/ N/ G
int i,j;: M5 w4 |# @! y1 F$ b
for(i=y1;i<y2;i++){& {. S f v0 f) M* ?( B3 q. i8 }& \
goto_xy(x1,i);
4 p) s# r: h t( [- J- Q0 a0 a putchar(' ');" n9 E. K$ a% b5 t" Y
goto_xy(x2,i);
6 C1 Q6 I9 y! r7 M, r" ^ putchar(' ');
- B' m* ]% p- l delay(10);
* P# T( j- @9 ?3 _ }* C4 {' ^/ f- T! G7 o
for(j=x1;j<x2;j++){9 b9 f" x7 {0 M: U( J# [( \
goto_xy(i,y1);
$ ~/ x( V: r( ]; z+ z putchar(' ');! K* n$ R9 L# F" l+ A
goto_xy(j,y2);
$ M9 r" D; O% k- ~) y! z9 ?0 H5 e- t putchar(' ');* _! N% A- ~3 x& `7 V1 T
delay(10);
4 z) V- N t! }. u }
1 T* S$ y. a: h3 O! q, S | }) m- o3 ]. T3 k C/ ^4 {
/******************open screen clear(开屏式清屏)*********************/# }0 q4 P7 T' q: y' L3 o
$ i' U( P: I: N* E3 J& ? {
void kcls(int x1,int x2,int y1,int y2)
1 O+ Z+ \! }9 a C T8 | {
' C9 U: E: G) N& ~" S+ Z* j int t,s,i,j; u! B& n4 n7 R E
t=s=(y1+y2)/2;- H6 L. |# O c; g1 l. K$ `
for(;t<=y2;t++,s--)
7 B$ j' |) @ I0 v5 Q for(j=x1;j<x2;j++){
# l, g9 f0 d9 L) ]5 M goto_xy(j,t);0 _* t' }3 C, @5 Q' z0 n
putchar(' ');+ R W) n5 i# M* ~0 D+ s p
goto_xy(j,s);3 p. v. d' ?$ d @# C" W
putchar(' ');, A9 G, W# j N
delay(10);
" o$ x- K: x# q. R% E1 J }1 o; u! J! q: l+ H, I: k3 I* _1 L
}
5 b9 w9 B8 e- m /*****************close screen clear*****闭幕式清屏*******************/
3 Q# [+ {, g# k1 H! s* t: h$ z4 y6 V! X5 f6 [( Q! c
void bcls(int x1,int x2,int y1,int y2)
$ |5 P( K) r+ P0 \; {% q3 M {6 Y, o; P3 R3 X
int t,s,j;
, Q n7 d# J D) s0 J% |0 k! Q% p/ [! V t=y1;
8 K" {5 d" { F9 c7 N s=y2;. x* P/ e8 u; E0 N* T
for(t=y1;t<(y1+y2)/2;t++,s--)# J0 ]! b* j7 o$ f& O- n
for(j=x1;j<x2;j++){
1 Q8 P$ M* Y& E# i9 N ~* a; Z7 g goto_xy(j,t);0 _3 x5 S* M* O2 Z
putchar(' ');1 n- k2 ]3 n- K! q" e
goto_xy(j,s);& m& T, v# s: l9 F
putchar(' ');
3 l4 E0 `/ |( k delay(10);
. D; o9 [6 Q, `% d7 { }- {$ t9 K# K/ N; X* M- X4 r. g9 T [
}
' v: V* [1 H5 h6 T2 y4 d /******************bottom screen clear(自下清屏)********************/
1 w7 j+ v- s( A& l/ E
1 c. y9 r) v- i. n+ F7 D void dcls(int x1,int x2,int y1,int y2)0 M, v1 Q) ?1 R9 Z1 k! ^ n
{
8 k; |& [" p- ~7 | int t,s,j,i;' \/ T& s1 q: B; v) x( h
t=s=(y1+y2)/2;
" X3 @, E% ]! A; _) T for(j=x2;j>x1;j--)
! Y! v% F: P- M8 ]6 A7 n/ h1 t for(i=y1;i<y2;i++){! b$ _0 B- G' I4 ?% j& {
goto_xy(j,i);
; h# e4 \6 V. H3 B' p. u7 y* X putchar(' ');
! V8 X3 q8 m! V8 u0 J( d delay(10);
3 F3 {& w3 f8 \7 i4 F: {2 C }/ q$ J4 K' o+ H8 M" b9 t7 v% b& p; R
}
' C3 h, k/ ` x( q! m /******************设置光标子函数******************/8 f s2 ~' g5 l, ^* N1 j4 u
8 E/ J Q1 R/ @; f* g& Y
void goto_xy(int x,int y)5 l N/ q, \4 _! F0 D
{
" R6 O% W& T* J union REGS r;3 J h$ K+ t8 X) u
r.h.ah=2;; N! S3 s; ?" P- Q
r.h.dl=y;$ m# U: Y2 c0 S2 U: e
r.h.dh=x;
0 C! q; U8 p) l$ R) Q r.h.bh=0;
; A) P/ I6 @" s* t int86(0x10,&r,&r);& u1 m2 L+ E) D. h3 N, z }
}3 }7 i8 q4 k# W8 V5 P, [/ |
/ M! @1 G) b& |$ n; N/ R
/**********************在屏幕上打出一连串的a字母用于演示程序******************/8 ^5 h4 b4 D8 W2 t L' C
8 c I/ p; {3 y- U3 d& C, l3 a void puta(void)6 I3 F, W7 b* i( O" V+ {7 h
{7 d7 x! d# M z
int i,j;$ ^2 i4 c; G% ^$ W2 d2 C
for(i=0;i<24;i++){5 t' A7 P3 y8 E8 z" h2 x8 I
for(j=0;j<79;j++){, r& y7 F7 B! E/ ^7 `" T
goto_xy(i,j);
: C, F4 ^0 \) Q# ~' P5 ~$ ]' _ printf("a");
2 Q- O5 @* m1 G) a }
) ] e9 n" t* I# m4 h9 | }4 W, ^: a* h3 L% _; J" I
} |
|