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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, ^+ W. k* q& t4 S" t3 ?
6 v. V6 q( R/ m( y% p( t0 S& D
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里# c0 C, R6 H* c! K+ I/ D' u) H" G
' ~7 _7 g/ X8 n
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" V$ {8 t& @ y3 f' K 子函数及演示程序:
0 O+ v( [" X. Z4 J: X
) n* q2 J: B y9 L& E; [0 d* [ #include<stdio.h>0 K' \# k0 @ u: T% z/ L1 x2 j
#include<dos.h>
4 f2 O- I# a" t0 p4 E% l: }- Z #include<conio.h>
G* y1 L2 j, s6 K/ A* {' z' x9 D: T' x7 `& K
void goto_xy(int x,int y);" ?5 B$ ?& k6 o$ y' L E! U
void dcls(int x1,int x2,int y1,int y2);( Z7 n+ J0 W) J1 T) N
void bcls(int x1,int x2,int y1,int y2);: C$ n; K! h& q
void kcls(int x1,int x2,int y1,int y2);& ?+ d6 Q% |4 [' z# X$ m0 }( C
void recls(int x1,int x2,int y1,int y2);/ {: O; X0 b2 K
void zcls(int x1,int x2,int y1,int y2);
/ g1 H6 K; g7 {: @& K void puta(void); _; G$ y* j3 a
) A! W6 u6 g1 {: r4 j4 F& e
x6 V6 e+ ~: t& q! S: G- P6 y* B4 V /*--------------演示程序---------------------*/; i# I' J. H) I! u$ b- P0 f
main()3 v* G. D" j3 b3 m. a% h' R m2 p
{
0 j- c( Z* \. H, f& r* y puta();
& _! z: V. s l4 F5 b) N7 t$ Z* \: z getch();
; [8 S6 l5 n, L4 B6 P% H dcls(0,4,0,79);9 n- _: }9 S L3 [1 F
getch();
. M% P# D1 b% {- K7 B% m; g puta();7 @6 A6 U3 \* ^- C" N' V
getch();0 L. T/ J& W h! |2 A4 l
bcls(0,25,0,79);
$ A$ N6 g5 W3 s0 i5 ? getch();
4 p4 X' {$ s& u& `4 M puta();
: s! \7 r& K/ a f4 ^6 D( ~ getch();9 g5 b, d. M/ a! h% Z/ N
zcls(0,25,0,79);
2 [7 @" {8 W0 y3 a( f. D; U getch();
) K3 v: {) h1 Z1 S }; K8 z& D+ l1 @. f
/*********center clear screen(中心清屏)***********/
% g: {9 U! q S! Q* Y1 v I void zcls(int x1,int x2,int y1,int y2)5 c8 V2 i! ]2 b: F" m
{
, k3 v& f4 Y0 j- X ?2 j, X int x00,y00,x0,y0,i,d;! h# ^9 C/ C, |! x ?% {9 @" J& D
if((y2-y1)>(x2-x1)){' l9 I0 F1 d: Y1 Y e8 X
d=(x2-x1)/2;
+ ~0 ]# `1 F+ N) d/ C3 _9 } x0=(x1+x2)/2;% R2 w. G4 b8 ^& S" Q# n
y0=y1+d;- @! n7 s4 e% |& n& t1 A
y00=y2-d;" `: P) a y a! W
for(i=0;i<(d+1);i++)
7 ~! u. N' I- i3 P recls((x0-i),(x00+i),(y0-i),(y00+i)); J; X/ D. O& S" o! V2 c& U8 H
delay(10);
- y1 c) t5 v" z: Z0 n }
4 ^! W3 A) b6 b' ^( Q6 n- T0 z else{' u% h" r; e1 T/ j1 g
d=(y2-y1)/2;1 c- V5 }; k. h0 Q' |& ?# O1 {
y0=(y1+y2)/2;% b7 D5 Q2 Z( d: q+ h. h
x0=x1+d;
/ X" M; g$ C# D) W x00=x2-d;
. O. P: L$ ^0 e for(i=0;i<d+1;i++)
4 T4 W0 W& p* k( F7 n# \- ` recls(x0-i,x00+i,y0-i,y00+i);
( p9 Y' p+ v. |6 M+ B delay(10);7 {# V% ]9 y0 x! m
}3 z) ?6 s: G8 O$ L9 ?
}$ s' |) n. J1 K: Q
+ Q- Z5 S9 H, {
/************* clear rectangle side(矩形边清屏)***********************/
3 T8 d7 B$ F. \; t' V
( R; L* x1 r/ M6 C- U8 } void recls(int x1,int x2,int y1,int y2)9 K+ \5 Y: H: @ ~9 @# b/ o9 C
{
, a& a+ ?' i* T) v/ a3 G& M int i,j;
6 x& d+ K& k0 E3 D6 b$ D2 V* c2 e for(i=y1;i<y2;i++){! K! d/ U/ l5 Q9 m* k( p9 Y; V
goto_xy(x1,i);
6 A* A* r" @* q) R% p, ^. [7 W. X putchar(' ');+ `8 ^0 G s! w; @' [% D
goto_xy(x2,i);) R, q: K8 i5 C, ?8 Q
putchar(' ');
. f& o# m0 g: t" v delay(10);! a, d: W8 t! z: d: {
}
6 Q' r& Y7 s1 N& Y for(j=x1;j<x2;j++){1 ]. a0 P2 R. ]0 S. O: I, D
goto_xy(i,y1);
0 y; e0 A( K) d" p putchar(' ');8 s# D/ |+ L: f9 r
goto_xy(j,y2);
! P' A6 A' }4 x: m* v8 l9 Z putchar(' ');( I# u2 b$ ?* ~/ D6 Y
delay(10);
0 S; P0 C" c) B5 n$ U; L }
& u$ ^& l% S. S9 B, y# H }! J5 w- v! k3 l3 m* f2 E
/******************open screen clear(开屏式清屏)*********************/
$ ~& _+ b' O _/ U$ P+ b8 ?3 H' F% O4 H% A* r7 m
void kcls(int x1,int x2,int y1,int y2)3 K- k( M; H" Y- B5 {; q* w4 ]% I
{- y# Y( r$ b& o2 E$ Y7 f
int t,s,i,j;
8 l4 ?8 }5 H$ @4 a: M$ r! { t=s=(y1+y2)/2;
1 h7 x4 v. S% T9 w: l for(;t<=y2;t++,s--)7 _) q, [2 z+ b+ g: V
for(j=x1;j<x2;j++){( V- B! }4 W4 m( G6 I* p
goto_xy(j,t);
7 i6 j- l. w0 P# ` putchar(' ');. a' r- }% A; z- v5 S3 l- d
goto_xy(j,s);
# ]" {- y) J9 D, V: N putchar(' ');# Y( H; Q* }7 O2 H! W, S }# d
delay(10);5 f' c2 C2 C0 M+ ^/ }
}* b1 y6 J" w* s# E: l, Y
}
& d0 o% r: _6 G. Q$ i/ N /*****************close screen clear*****闭幕式清屏*******************// A& ~5 ~$ T* x) Z8 m4 m9 l
4 ^( R: v4 O$ `# {' X% r; K void bcls(int x1,int x2,int y1,int y2)
( B+ `! d5 J) G: E$ g6 B6 K2 F {
]& Y6 w6 B5 U+ @1 K2 ~% L int t,s,j;$ P- l. {: W2 {* F, m; Q! s3 y
t=y1;5 K* Y% `5 E% C) x: ]
s=y2;
, A; Y; I( I" l8 }9 D for(t=y1;t<(y1+y2)/2;t++,s--)
7 V5 o4 r' \3 ?! |9 ^8 @ for(j=x1;j<x2;j++){, }: m3 E1 V |6 Y
goto_xy(j,t);: V5 e2 d; j5 j3 {, J! @" D
putchar(' ');
0 E" ^% _2 W/ c6 g& Y8 o. Y l6 P" X goto_xy(j,s);
5 q1 o9 v1 u+ U/ E! K8 ~* f putchar(' ');, g* M" p" H" F+ E1 @6 D
delay(10);
0 ]5 a1 r& @$ |. h5 ?. A }
+ Q% S1 d4 g# v4 a( ^* P }- V g$ l% G8 P( ~
/******************bottom screen clear(自下清屏)********************/5 i- S+ n( l; h1 @6 v
) m- B' k* u# M- z% Q' I+ A" ~ void dcls(int x1,int x2,int y1,int y2)
1 E4 U$ A" q7 @) r- T( i {
$ e$ u- M; c p) V int t,s,j,i;8 I, x7 Z+ ]. J( m$ r9 p9 S
t=s=(y1+y2)/2;$ I# W- L, q: }) e5 q# p
for(j=x2;j>x1;j--)
4 `, ~; o, f) ^8 ]7 C$ D for(i=y1;i<y2;i++){5 c2 b! n- U* c. K% S/ M. Y
goto_xy(j,i);
. d7 V& {# m1 X0 q+ Z& ~& p putchar(' ');4 Y: t1 b9 A4 X
delay(10);+ c! A9 M2 A3 S9 o7 R0 u4 K
}7 @9 q: G6 d" t# k- J2 a( u* h
}+ M! W- F: U% E9 v7 U9 t0 d. \- J0 ]
/******************设置光标子函数******************/7 B: y& ?4 {/ K9 i
0 K ^% s2 d8 B/ i void goto_xy(int x,int y)
2 c: m' ~1 J! Z# G" { { p& w+ U$ w( p/ Q
union REGS r;
/ E, f- G0 _& s O r.h.ah=2;
- c# L, }( c6 \ r.h.dl=y;
; O3 v# w5 ^) Z+ L r.h.dh=x;
8 H* [. w! j1 b4 [ r.h.bh=0;
7 Q7 f( i+ q7 y. v int86(0x10,&r,&r);
& S- N8 O6 q* { }* B- D8 y; c Q9 X, z
! F, L/ b2 G( Z8 y3 c ?+ f /**********************在屏幕上打出一连串的a字母用于演示程序******************/
' J1 U+ D+ @- X6 h1 S$ I3 n5 ^
! f4 m, Y# O7 W# O) J- A void puta(void)! C4 u: l: k6 y s# ?( P
{) s5 q, f* i* B( B
int i,j;
: T. l* ]2 |! }8 E o, F for(i=0;i<24;i++){2 M/ Z( E* b9 l" K! X
for(j=0;j<79;j++){
2 Z, k, ^9 H' \. H4 | goto_xy(i,j);
& ?6 n# g+ b2 z5 ], N printf("a");) b+ W( g! Q8 ]( C
}
* j4 T! Z) ~8 f }* I2 S0 A* V2 p6 c: ~' d- e
} |
|