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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
[2 R+ `& I) r, s1 T6 I" q' u# P8 N7 ^, g
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& {, Q! T5 c* t2 W8 Y3 B2 V
3 T) J0 b; ]) n5 s6 a) ] 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. % T# g: h0 Q9 E3 {, o
子函数及演示程序:
; d9 o, v( C Z u4 Y# [
/ `% i) Z" V# l' R6 |: Z9 \ #include<stdio.h>
9 p, B2 s% t' M4 ], H- D #include<dos.h>
. e( T! t; E# D# v0 ~, k #include<conio.h>
+ Y: n. r% r6 u$ ?2 ~' x" Y1 O) ^0 t5 G- } G5 X( k( f
void goto_xy(int x,int y);: J$ ^; c& h4 Y X' ]; k
void dcls(int x1,int x2,int y1,int y2);
% x: D- w! R: v0 } void bcls(int x1,int x2,int y1,int y2); W0 r J7 f, g! S6 [+ @0 O
void kcls(int x1,int x2,int y1,int y2);0 o8 `: C& f- l2 U' q F5 @: ]
void recls(int x1,int x2,int y1,int y2);, |- m6 E, @8 ]# U7 ~
void zcls(int x1,int x2,int y1,int y2);
, K, u# {3 o; H+ P void puta(void);
; Y0 \2 o$ k4 M1 d
: J0 G! A2 ^: a9 q( m6 v. f5 _0 \1 A/ u% e
/*--------------演示程序---------------------*/9 Q8 u8 e% u4 B6 l
main()
8 r, E% u0 M7 P; j- I$ M {; ]5 w1 s+ z' z( H) x: W9 S$ N
puta();' \) t& y M8 k' }; @* ~
getch();
; V$ \# h" A4 N' P: d dcls(0,4,0,79);$ p$ A, i. [1 R+ c. O
getch();
) i. m) P, S* q9 }2 R0 w0 K" a: j% b puta();
% F" I v0 h F+ l getch();
# J9 [( m" V# |6 v6 w bcls(0,25,0,79);! ^2 k2 A% e2 r' D. H) D d
getch();! R# J# ]3 y5 o$ l) [
puta();
9 S8 A; H9 Y4 d& p, `7 w getch();
3 i% I4 r. B- i9 R+ ` zcls(0,25,0,79);
: I% C" ]% w8 N) h0 @( H7 r7 v getch();! ]+ r4 |* V3 w
}' e/ U: D# g- r3 \1 q& X
/*********center clear screen(中心清屏)***********// ~0 u# U2 K/ m* g$ r7 s7 i& f4 e
void zcls(int x1,int x2,int y1,int y2)" o' V6 Y& F2 x$ f
{
6 c1 P) k( l3 y2 E- t int x00,y00,x0,y0,i,d;! p$ _3 U% M1 Y1 ^5 }( V
if((y2-y1)>(x2-x1)){/ c1 f0 ~# q1 L# B Z% C
d=(x2-x1)/2;
6 @ M0 o( R! g* g: I$ p) l, v% d9 ]# V x0=(x1+x2)/2;
- n6 Z+ {! q( w y0=y1+d;+ T" A3 A" I" y" V
y00=y2-d;# s. H+ ^/ c8 [( T2 p1 T6 @- e
for(i=0;i<(d+1);i++): c8 r. e+ b* y4 b& ?9 f; ^# S7 J
recls((x0-i),(x00+i),(y0-i),(y00+i));# W ]$ F9 T* W* @
delay(10);
5 J, T0 q( O9 I, B: c( `4 | }
) ?; I7 p% k; K$ c else{8 ?% O" c' p' m {
d=(y2-y1)/2;0 y, c8 r( {9 P
y0=(y1+y2)/2;
4 ^- j1 i W G7 C. W& d2 ^% S x0=x1+d;
9 J1 j [& _2 ]% h1 _, e9 ~) x x00=x2-d;+ x5 T4 S9 y+ E: B, ~% J3 Y4 |2 o
for(i=0;i<d+1;i++)
$ o/ s. O& Y2 b: { recls(x0-i,x00+i,y0-i,y00+i);0 W4 x2 ]- S N o: M
delay(10);
% r% J) O1 I# ]8 @ }
4 Z0 b6 _' ^5 l" _! d8 |$ C+ F0 Z }
3 m3 m0 ~" R1 I0 B# N7 V, t
F* ~2 C+ k" K9 L /************* clear rectangle side(矩形边清屏)***********************/2 C/ P% {9 E H. ?
# s; D" v. w; @, Y
void recls(int x1,int x2,int y1,int y2)
8 ?/ n+ Z7 U8 R/ e$ W {4 g4 k, K( J% t' ?7 z& D4 n
int i,j;
1 d, B- `" @( R! G2 s% ? for(i=y1;i<y2;i++){
; g7 d n) R4 }$ ^ goto_xy(x1,i);6 ?2 w* r1 `- \
putchar(' ');
9 C7 |8 m, u8 H5 r' ? goto_xy(x2,i);
2 q V" z) L* z0 @# Q) V6 w4 Y x putchar(' ');" Z5 `2 c9 b+ X6 y
delay(10);
5 _0 f0 X3 u- y& Y; U- ? }& e9 @0 m# F7 |9 B- X# X
for(j=x1;j<x2;j++){& s* u& p3 {$ u5 X& o9 `9 m
goto_xy(i,y1);
" o7 e& ?2 e9 r7 s! y' W putchar(' ');
4 ~% ?+ }4 j* b3 J4 C% U- n, r goto_xy(j,y2);
' Z% g, p: {! Z+ M3 m% n putchar(' ');$ ]! Q- _1 Y a, \0 h( Q1 x- o
delay(10);
& ~' ^0 t, Z: `, B }
z. ^+ m ~2 _3 r }
" ^3 T' Q, A1 f$ K* [ /******************open screen clear(开屏式清屏)*********************/
' i, j- f9 Y$ \' }$ u. K7 S7 a3 @% H6 @* e
void kcls(int x1,int x2,int y1,int y2)1 N- R8 `% K; q8 Y o
{
) b+ V+ G9 n7 p0 P* n q int t,s,i,j;, o+ y; c/ a) T! z; R
t=s=(y1+y2)/2;
" }2 }. ^" i; K B, u for(;t<=y2;t++,s--)
. a$ O3 Y) O% A- u9 o/ b for(j=x1;j<x2;j++){$ N) t5 w' [. j( [: T# G
goto_xy(j,t);
3 q" p7 @; k8 y* X- P* V$ { putchar(' ');
8 r- L! x0 t2 L P8 y' J `* L goto_xy(j,s);
7 q/ o5 n, T" e2 K7 k" [( } putchar(' ');; p& M4 e+ ?% M* f& ~1 y
delay(10);
! |# e O% F3 ]' r- o: A1 u }( l1 V8 P5 w9 d5 V8 T6 D' {
} r X, m% C; G1 F9 h
/*****************close screen clear*****闭幕式清屏*******************/
5 k3 S8 X( s" B4 { ~2 i3 C& ~! h" X9 x6 J
void bcls(int x1,int x2,int y1,int y2)) D9 Z+ l# h ]' s4 }! K3 b
{4 i0 _4 w( K- ]4 ~5 c h& O
int t,s,j;% W/ B$ w# U: b( L0 B) x& k& l
t=y1;0 m' \: L. ~2 c8 a" s8 P$ m
s=y2;
; N6 l- _" j8 Q* Y5 U for(t=y1;t<(y1+y2)/2;t++,s--)+ {+ j3 \2 b3 G! [7 }3 v
for(j=x1;j<x2;j++){% D% |. E$ C5 f @; Z& w
goto_xy(j,t);
) t) a* @( B2 v putchar(' ');6 g) j9 g0 n% z
goto_xy(j,s);
; x8 S* ]$ ~, v9 x4 K putchar(' ');
, c$ L! k/ l) c$ P, g! A delay(10);
$ l4 d* w! N- n2 {5 n8 l( z }7 P3 B/ z N0 i o9 w
}
: D8 ^+ v( P0 O2 ?7 K3 I+ q8 T /******************bottom screen clear(自下清屏)********************/$ z- k0 y) _6 i6 L; D* q
0 @' t. _( b6 F7 [ void dcls(int x1,int x2,int y1,int y2)
& F6 B, w+ L5 g) v7 q {
* s( i9 B) Z }8 N3 d: p P1 t int t,s,j,i;! ~ U7 d$ P0 U4 L8 g
t=s=(y1+y2)/2;* d- T( K$ @! s8 A8 e+ p; m
for(j=x2;j>x1;j--); w: w8 H) y J) k# K9 U
for(i=y1;i<y2;i++){- n) R( Z7 J3 p$ f
goto_xy(j,i);! M$ ]+ W2 Q3 Z. v9 u6 O9 o% g
putchar(' ');$ B j$ h* \! o$ Z8 w
delay(10); P# G3 |4 z1 f# `1 r
}
+ z8 D/ `% O) e2 B3 T' f } y8 S/ P# Y' \! S* e3 W+ ^& A
/******************设置光标子函数******************/3 I! b9 Z1 O- ]+ j3 Y6 ^3 ~
9 ^0 S1 q% I9 @2 @) L% p
void goto_xy(int x,int y), k& ?2 s/ e) i' P/ e& d" Y2 j
{7 c+ z' p F8 _/ p$ y
union REGS r;
0 F# b4 `. D3 U$ D r.h.ah=2;* S. x& m; _2 R h/ F- n# u
r.h.dl=y;! f) j2 m0 e- w! D8 e* B
r.h.dh=x;
0 Y% c0 {8 g1 f r.h.bh=0;
" O% `& o% a$ c& D' @ int86(0x10,&r,&r);2 y G7 s% [1 g& _, T
}
) L2 [6 a. N% Q; `" a! K9 x! N/ h- f
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
) Y6 F7 F& x+ O/ Q
( \8 a$ n6 x" \2 Q2 z& S void puta(void)/ h& B4 y' o) g* ]+ h
{
/ }9 k7 C/ H& I1 @) m, z9 f int i,j;
& B1 Z0 x; c/ o. a) Q* o$ c for(i=0;i<24;i++){, K2 l# y: B1 A/ e- ]: j
for(j=0;j<79;j++){
' b& W8 E9 S9 C! Z8 G, R# s goto_xy(i,j);
8 y- O' O. X8 R/ \0 o printf("a");
/ I/ N* z+ v. e. ^ }
' G- N( l& J K: N }
) F! L# S( F% E% k. N8 J K } |
|