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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( h# w# P: d. R- ^5 K) m% o* F& i0 O2 ^$ ^; m0 q" F' v
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
" Y; I* a9 _! ?0 u- \- l' p4 h Y; I+ J/ y4 x7 ?) s
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. N/ i6 j$ o" G* T; j4 l& d% u3 e 子函数及演示程序: l( K4 F" ]9 k: [( N3 Y
* p. @3 G3 O3 C" d5 V4 w #include<stdio.h>7 m8 c H7 s5 ?6 b# q
#include<dos.h>
3 O t& ]( P q9 Z5 ?( O# Y/ D7 m( J #include<conio.h>1 h" H$ c' I% s) Y1 f
0 G! D% V G; M9 u+ j d, x5 j void goto_xy(int x,int y);. }- j; v; |2 s* c3 d1 @/ J& U
void dcls(int x1,int x2,int y1,int y2);
3 f9 H1 H; [6 U void bcls(int x1,int x2,int y1,int y2);" S1 K2 h A: O4 n# ] U
void kcls(int x1,int x2,int y1,int y2);
6 C4 L( _0 w' U& H; V, p3 B' { void recls(int x1,int x2,int y1,int y2);+ T8 q: R' T# R5 h& i1 \ G
void zcls(int x1,int x2,int y1,int y2);! Y8 ^+ P9 B! U
void puta(void);
: s. \3 F0 w; g9 F1 ]$ H% |7 t
6 @, G* U. E5 a1 F& E5 I" H8 r7 c9 a5 |! R: s
/*--------------演示程序---------------------*/
: l1 ~2 l- b+ v main()! s2 G8 X4 G4 U* `5 [( g! n" ?) U
{
. @7 o6 ]1 g! [/ }8 f: u puta();5 o; G+ l2 w. Q4 m8 ]! c7 ?
getch();6 n/ P% Y- Y0 W* t5 Y+ ^
dcls(0,4,0,79);
$ Q8 ^' `) H. R j- T6 g6 l* R' Z* B getch();" s6 _8 H. L5 \( Q
puta();
$ e8 y& N6 x& ~: l( v; n/ P getch();
0 ]; l7 [ v- f8 d bcls(0,25,0,79);
8 o/ h# G) a( c) Z2 o getch();
1 K/ e- `6 o4 _& V7 S' e& X9 F puta();
% s7 G6 T; y. p$ Y getch();
! E) K- M, b9 V& I$ O zcls(0,25,0,79);
* t7 o& h3 n1 n$ y6 Q) W getch();
' _) Y& @5 J* n* C3 w }
- D% z" \7 }7 X /*********center clear screen(中心清屏)***********/
) i- E4 j1 t! Y void zcls(int x1,int x2,int y1,int y2)% Q# x3 E0 V" D, d4 h. S
{& A+ d# X& i/ Y4 m# P, i, w
int x00,y00,x0,y0,i,d;0 z2 E2 W4 }3 {% `; ~( P( D% O
if((y2-y1)>(x2-x1)){2 e8 s# n4 Q( y5 I! W+ M$ ~5 p; x0 }! c
d=(x2-x1)/2;
7 l& T1 k! G- s x0=(x1+x2)/2;
, n2 H. z& |: U% l, p% G! J y0=y1+d;
% `" R0 M- R& u4 i y00=y2-d;
, K9 H0 ~2 ?" j# v- k for(i=0;i<(d+1);i++)# L) X9 w6 U8 Q! [/ q# B5 b
recls((x0-i),(x00+i),(y0-i),(y00+i));
) H; Z( c; @8 _+ M6 c) p delay(10);7 ?. z% i7 G0 u! I( }* |# b; M
}5 I/ ^: U2 p4 f3 c/ ]
else{+ i& n) W: d5 d6 W
d=(y2-y1)/2;
) v& y9 N* ~; ? y0=(y1+y2)/2;
& F+ j: F& j0 m4 P x0=x1+d;
6 V2 o) S( }* u% X5 D7 T x00=x2-d;
, X S Z- R( B4 l& l3 m for(i=0;i<d+1;i++)) @% }. f+ t$ v* X2 Z- `
recls(x0-i,x00+i,y0-i,y00+i);
0 K: R" c, G I delay(10);4 g: R! | |' B4 b5 V
}3 L3 l7 G7 U2 x; j4 y/ J
}$ k7 E- N* b- i
5 k& s4 ~) W7 r& u% K
/************* clear rectangle side(矩形边清屏)***********************/
. U, J, s+ G3 k% m, K3 g+ q2 w; v7 ?, B2 K, j
void recls(int x1,int x2,int y1,int y2)( y! _2 W8 z V0 l& B) f' j
{4 u% B$ n3 i" s' C) w
int i,j;$ Y3 X. X" A( M! I( z
for(i=y1;i<y2;i++){- W4 j- r6 r M
goto_xy(x1,i);
4 G: P3 Z4 L' z- I! T; G putchar(' ');+ Y5 C( k6 w; p& V0 I5 @
goto_xy(x2,i);( e2 H. V, J V1 A) b
putchar(' ');6 Z9 i: h( b1 R' [( @
delay(10);: V" l5 |) j# X" C
}9 c1 D) t+ ?% }1 X& |) t
for(j=x1;j<x2;j++){2 T% L1 y1 x N# c6 [% k+ C
goto_xy(i,y1);% {5 Q* a0 [3 B* ^$ {! N; T+ w& d6 X
putchar(' ');
+ H- \# _6 Y. v% | goto_xy(j,y2);
; p+ u7 C9 ^" r; w# i putchar(' ');5 B6 ?* {2 ~4 S, v! u: g
delay(10);
! @1 z, B& h/ a- a3 T3 j }
" B5 q2 y. x; C' H. R/ e }* w; m# I! R* d3 F" I3 O
/******************open screen clear(开屏式清屏)*********************/
; p" G( R+ V* l, q9 ~6 W V: d1 w5 |
void kcls(int x1,int x2,int y1,int y2) d6 Q0 x& r) Z2 k
{
) X* W6 K' a# c, q7 H5 } int t,s,i,j;2 u' _* h {4 W" w0 D
t=s=(y1+y2)/2;
2 j- @; C) ]' N! r& B/ O' Z for(;t<=y2;t++,s--)
4 s* d; _, A, j$ c5 W for(j=x1;j<x2;j++){
9 }4 T# E5 F% [+ S! e2 } goto_xy(j,t);
( B" R1 H6 J& @4 H0 |" w K( N2 d putchar(' ');) X4 ]5 {/ D& W; a6 o. ?& [
goto_xy(j,s);
Y/ {' _8 L0 g3 a' D D3 f putchar(' ');- W0 e7 m3 s) w" ^
delay(10);
! ]9 m* h7 y1 \( w" } }
3 J9 \! o- w: d3 V5 `% c8 f, k }
% M! Q# |5 I1 Y: v s# l# z' o" X /*****************close screen clear*****闭幕式清屏*******************/
8 J9 ?% a# m* k1 u' l+ M- ?/ X& W* A, n" a: K% K9 X
void bcls(int x1,int x2,int y1,int y2)0 p! v) H& J9 d* i5 \$ _2 q2 ?
{
6 a" c4 H5 }; d* y" w' O int t,s,j;
5 u+ g8 b% @4 i, t% } t=y1;
% ?5 b: Q" b6 @ s=y2;
' s* {& G* a+ P- K9 }, q1 O for(t=y1;t<(y1+y2)/2;t++,s--)8 g2 E' T: F- y6 l2 |$ e
for(j=x1;j<x2;j++){7 { |7 a: u5 ~- D4 B, G8 [
goto_xy(j,t);- \# Y3 l6 Y0 j9 Q$ ]& ~7 H. r
putchar(' ');: s; k* B1 X' c% O
goto_xy(j,s);( n T. Y! x; S
putchar(' ');
6 s( _, y$ m8 l& `) e delay(10);
$ x1 f% \& ~$ R* n }3 m; b3 |7 z; A/ L% {7 B' M
}' A6 ?" i3 z6 j% K3 k
/******************bottom screen clear(自下清屏)********************/
3 N/ H0 t1 y; S8 T. }. F- Y+ K( P, o- Y: t
void dcls(int x1,int x2,int y1,int y2)2 W4 m4 ?4 u2 t% y2 x8 F
{9 H- L7 }% r* c) P
int t,s,j,i;
: `+ S3 F M) i0 M- { t=s=(y1+y2)/2;
& ^; t8 i k! |+ f for(j=x2;j>x1;j--)' X" h2 Y# X# D
for(i=y1;i<y2;i++){* W! [3 o- V- ]0 E: U ^ X [# [8 b# i
goto_xy(j,i);
. S6 }( t5 b% B putchar(' ');; F! y/ ~0 K8 u6 w% h. J
delay(10);
' M' A) \; O3 ~1 A+ s }
# e; x0 d' R [. } }
( V) {1 r; s X1 f9 d /******************设置光标子函数******************/
( j/ l5 \/ q: r% V; y7 A: M/ E% z
void goto_xy(int x,int y)
' U: F5 w& v, K* V' e- j) o {
9 T# X1 m J8 W% t9 }* Z union REGS r;
" Y; o0 F2 E, x9 ~. Q r.h.ah=2;
6 v/ W& H# M8 p2 ]% h r.h.dl=y;/ | g9 r% |( }+ U, U
r.h.dh=x;+ w+ T% \0 F! X- f0 k6 R
r.h.bh=0;$ g& o* Y! O, ^7 }2 B- ^) G
int86(0x10,&r,&r);
`/ t2 x; N9 a E5 h- } }0 p- l0 t! I W5 G
5 U9 l& n; Z9 C9 P* C7 e4 f
/**********************在屏幕上打出一连串的a字母用于演示程序******************/0 Z7 i' w0 h, n
" j1 j7 G0 u8 A! z, J* b8 G' y void puta(void)
3 B, W2 v+ H# D& T: V: @1 i {! q/ E. o+ H3 Y0 H. M% m
int i,j;
& Z; c# D* ` |& ?9 P ~ for(i=0;i<24;i++){
( T0 j* w, H$ W( A* @' I! \1 L for(j=0;j<79;j++){
. q+ H, l+ e/ Z goto_xy(i,j);
3 l8 A! e/ W9 G: m printf("a");
. V6 h2 B5 ^# K! B }) \/ s2 d+ a/ I" {+ s2 o k2 V
}$ D d: A% Y6 }/ h- T( Z$ G
} |
|