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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ h& C; B, J2 a6 `" r$ a# ^) j) T& T; z& x5 B6 [7 z
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ p! m, }# T6 F& I# d( \ B4 n! L3 r; ?3 h; E
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 P7 ?$ k& c4 P7 `& t7 ]
子函数及演示程序:
8 _& ?3 N) w, W! s7 S6 ]
# C8 ^! v% J9 A! ~ #include<stdio.h>( K4 B) S+ i# M) Z4 a) O( e Q
#include<dos.h>
1 _( L/ {5 b5 r4 ~% J+ ]* G$ w( f #include<conio.h>
3 C9 m# I. S* L2 o3 h/ [- x# {! f% v7 I" x: d7 ^
void goto_xy(int x,int y);2 i4 K: N" i; _, r4 N. p* Y
void dcls(int x1,int x2,int y1,int y2);- r- J7 b8 [9 {
void bcls(int x1,int x2,int y1,int y2);
^3 a# h5 Y; @9 F$ a void kcls(int x1,int x2,int y1,int y2);2 D! B) o% \( ~. w: y
void recls(int x1,int x2,int y1,int y2);
: E* Y" v3 q2 q% ^ A void zcls(int x1,int x2,int y1,int y2);( N+ P' B1 V- S; ] ?( Z0 t; S
void puta(void);0 F% k; ^2 R: }% K
2 h3 \5 M, @# @1 C* a0 R7 b+ f" D. X6 I s1 g
/*--------------演示程序---------------------*/6 C6 V3 P3 ]7 Z8 o$ X- K) M
main()4 Q& t/ x+ D% j, _- `
{/ l. f1 ^ S3 \. A
puta();
4 d* J& V3 u A1 W- P0 n6 W getch();
: i9 H4 T, M( V3 U3 u+ M dcls(0,4,0,79);
- G6 K8 Y( }0 q" D3 S& l8 w getch();2 c5 i3 K& `- N+ u- b
puta();
* ?% I. ^ v" u# i e% Q: L# c getch();! u6 T+ q1 Q8 M9 [% e R0 c, `
bcls(0,25,0,79);
: L1 d9 w+ n9 a0 G2 w# _$ K6 H getch();0 J) K% \7 E7 r9 M) ]2 k8 @: D
puta();) }% o6 D' W8 c4 x/ t, t- {
getch();
# X9 m; {9 j' X) A: I" f- B zcls(0,25,0,79);
2 ~5 {; @3 t! c: ? getch();2 i: _: n4 O* c9 f- M6 \' j/ C" _9 J) n
}, K% o" H$ d/ m/ C
/*********center clear screen(中心清屏)***********/
0 `; } d" t+ C% N9 A void zcls(int x1,int x2,int y1,int y2)% @4 W' e4 i& Z! T" A
{3 e1 j7 R7 q7 H
int x00,y00,x0,y0,i,d;
% ~: ^$ \) |& p& P if((y2-y1)>(x2-x1)){
* b* u6 k$ f3 v# O% T d=(x2-x1)/2;
, h5 S9 x5 {9 \ ~ x0=(x1+x2)/2;' P( \5 h5 o& H! L% C. @
y0=y1+d;- C/ `0 |. v, p b2 F9 l
y00=y2-d;
! a& j( X& n u7 S7 S2 @" s for(i=0;i<(d+1);i++) i/ w1 B# `* q2 u/ b
recls((x0-i),(x00+i),(y0-i),(y00+i));3 P, L* H# y, C
delay(10);
, }% W/ O# i) h5 Z }
& N" Z! O4 K' b0 o+ B T5 N- q else{& B( _8 M5 y, P: d m5 G+ e7 }2 G z
d=(y2-y1)/2;7 k# P& K4 W* k6 ]7 A- ]! ~$ c
y0=(y1+y2)/2;& Q1 @1 t/ D# A% Y7 P* V; T
x0=x1+d;
- v& F3 x3 N: m: y x00=x2-d;
4 E4 O$ Z5 b5 t( E0 j( H for(i=0;i<d+1;i++)- G4 C' V B j9 ~5 p" ]# W/ ~- K
recls(x0-i,x00+i,y0-i,y00+i);/ S. B" i/ D: c; m' K- U E( ^
delay(10);7 A' @+ b4 D7 H- l4 N
}
! M1 U4 s! v: z s5 J% R2 |7 K }
4 ]$ \9 Q# c- K0 O7 j' n: k( `& v& h: H0 b1 K' k! Y
/************* clear rectangle side(矩形边清屏)***********************/
9 y' d! X- x8 e- I$ o- m; l) a3 S' e }! G B* k
void recls(int x1,int x2,int y1,int y2)( r( o* ^8 J- G( g
{
) }( i0 g8 T0 a: t3 M- [2 Y$ O* g9 j int i,j;9 \) c" I4 ?- U4 P2 @+ m! h: U
for(i=y1;i<y2;i++){
) l7 [7 p: [ }; P goto_xy(x1,i);, |0 S9 K, R/ o
putchar(' ');' z2 h# z X5 O4 V6 f% R/ }8 {
goto_xy(x2,i);# Q0 Z$ Q9 c: r) `2 J5 \ d
putchar(' ');. h7 U s+ F/ s* G* M9 u. P' k
delay(10);
; F/ n0 z$ @ D8 ?$ P0 u }
/ A( L, I e0 D for(j=x1;j<x2;j++){
& g. p% A2 w+ o goto_xy(i,y1);
7 [0 h" s9 ]; S1 T& T putchar(' ');8 B8 y! i8 w: g4 q; H' N
goto_xy(j,y2);
- i) l/ x. D+ T5 i putchar(' ');
* t: r+ q: Q& A delay(10);+ k6 h* B7 C- @1 n
}
( P" H' g+ I4 q7 r }
2 l, Y: b. e1 ]1 k# f# ] u- g /******************open screen clear(开屏式清屏)*********************/( |7 X, K) B; n6 H; o( q0 h
/ q: J" S% f, t4 x& L4 h
void kcls(int x1,int x2,int y1,int y2)3 M$ o$ n9 R* J# i
{: l& x3 }0 U4 g0 f& S$ M! ` g
int t,s,i,j;4 ^! e& C, B, h# r, a z" j( _) _
t=s=(y1+y2)/2;" U. @. a1 o% E5 J& o
for(;t<=y2;t++,s--)
, k+ C% f. g' f h1 J for(j=x1;j<x2;j++){
4 c6 Y+ x k1 Z- ~2 I+ [2 ?( d6 a# s goto_xy(j,t);
8 }% E& Z- D* ]8 J2 N& {) C putchar(' ');! e8 C n6 }& i. P' A
goto_xy(j,s);
4 D- D. b# t9 V" d# d putchar(' ');
3 T, C! L/ {* X2 v delay(10);9 b* h6 @1 C) U I* o7 M9 O
}
2 O% A7 h6 x) e% c0 |/ ~2 ] }& |. `7 y! V0 J" v. I6 v
/*****************close screen clear*****闭幕式清屏*******************/) U! {8 F0 b) N, B+ ]( K" g
n6 `- V( N: H void bcls(int x1,int x2,int y1,int y2)- t) z9 |- b8 u0 Q/ ? l
{
1 C0 r1 O$ y, k4 S5 C3 P int t,s,j;% Z1 f0 H+ y. Q: F' d' s! R$ b+ u
t=y1;, I1 }9 H# l x; H! Q
s=y2;
2 {; Z* }1 C9 ?( J& _7 c for(t=y1;t<(y1+y2)/2;t++,s--)
. U! n- u/ Q+ J2 C8 v for(j=x1;j<x2;j++){
# e! l5 T. f% Q) i! g' n7 _9 w! x goto_xy(j,t);5 k9 c1 y% z0 }( U* {
putchar(' ');
9 Y1 K! |- n# C9 [ goto_xy(j,s);: i0 E# r( `, b% ^0 z" w
putchar(' ');* [3 N" W2 Z5 W3 g) l
delay(10);+ l3 ? }8 H( P- M T9 C
}8 }; g \& i+ h" i1 N& }4 e
}7 ]( \9 U1 P# @; P {9 T% K
/******************bottom screen clear(自下清屏)********************/
: T9 H- j. m4 k4 p6 |3 I q: C
) [' d8 T: v% M+ p6 @ void dcls(int x1,int x2,int y1,int y2)* j5 n% p+ j2 l f; r! z5 g/ C6 C
{* _$ K0 x& S3 \/ g4 o8 H
int t,s,j,i;
n2 e0 q% @( S/ j! | t=s=(y1+y2)/2;7 J5 P9 k: A8 g2 C
for(j=x2;j>x1;j--), g+ g; x: U3 o
for(i=y1;i<y2;i++){- S7 q+ u k6 N0 W
goto_xy(j,i);
$ m4 E+ b- p7 j- m putchar(' ');/ e! q8 B: u6 r) T* F: G8 k
delay(10);
; J* ~( Q% b! U: H/ k! I4 e }2 e1 n4 i {: x" v
}
- I' L4 s4 ^' j* s /******************设置光标子函数******************/
" r- z" Z1 B5 W$ s( w3 `4 O" n. c
void goto_xy(int x,int y)
' p5 y7 U( J m5 W/ ] H {
& a( ?! Q) B+ {: k3 | union REGS r;
/ ]* y+ J3 V) J" _2 s3 X5 Q* A r.h.ah=2;# E. h' m$ L/ V* V* P& [
r.h.dl=y;
! m% B6 e8 r4 F4 ~ r.h.dh=x;
. K9 C: `: y3 t, j- q, r* V0 O r.h.bh=0;
; J: t8 @" w2 r/ Y# b* f9 k int86(0x10,&r,&r);
3 s9 U1 a2 N, k2 X4 `# q }
' X9 p: `. ^& k: ~/ A' r1 O$ d' l& ~; J# U
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 Q, R% K, R, J3 ~, Q/ Z
4 k* o5 v7 z* Q8 T7 V void puta(void)7 n1 {) e9 X+ U* }# q- l E) Y6 T: n
{; X( P2 B7 D) D" U* I- D0 z6 ?! @
int i,j;7 V& k4 c( u, L6 I( D. h
for(i=0;i<24;i++){& I7 b* X/ `) q/ R. F
for(j=0;j<79;j++){; J; z- L+ C1 E
goto_xy(i,j);- s! u6 w' Q0 f
printf("a");, P h X+ O1 F7 s
}9 B; ]. Q% ?8 ~* w
}
5 N K# U/ y' o% d } |
|