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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! a- Q! H7 S* Y& D, i6 @& w4 O9 b7 f# S' g
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# y' P+ J% O" g+ }3 z* O7 \( |$ Z4 k9 x: A! W( e# n' b7 F( |
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
z2 @! ^- z8 h: N4 c- K2 @/ B 子函数及演示程序:8 i& U* h2 n% y( A
; P9 p: Z) q0 `: w+ H& J #include<stdio.h>2 J- g3 }. ^; X( C2 z' L; p
#include<dos.h>( v4 Z" t& a7 ?2 ?8 L$ Z9 e
#include<conio.h>5 C& \& F0 g! \# \6 E( H
" |1 a4 L8 }! D% [2 \; s8 M
void goto_xy(int x,int y);4 h* V. Y# f u( y4 b5 j
void dcls(int x1,int x2,int y1,int y2);
/ q3 Z$ v, J( f! y. e# b. m# j7 g3 q void bcls(int x1,int x2,int y1,int y2);
/ _1 F- C& m& M( j) V" I2 I* F void kcls(int x1,int x2,int y1,int y2);6 \. T1 W& c7 j9 X* {% s
void recls(int x1,int x2,int y1,int y2);
( m3 b( { p3 v2 L% _7 I, z9 p void zcls(int x1,int x2,int y1,int y2);
% G# q% H# G( U void puta(void);
4 z K# R1 I0 h
! |* Y9 t; b, `) F4 S; k- _& t d/ t8 p2 Y7 [; l3 |/ J
/*--------------演示程序---------------------*/
% v: O1 v* R1 k. e8 l/ T main()# f3 A* e' M" S; i5 y
{- R! {* V6 M6 O; v
puta();
- R8 W- t7 Q$ Q! k getch();6 z* ]5 T* V4 f: |2 J
dcls(0,4,0,79);" U, x( b5 a8 J7 [9 D
getch();! D" K7 j$ E) ^9 F, z& _
puta();
9 m: t( y( p, G" `% F getch();+ g2 m3 j6 e& [* O; `) I
bcls(0,25,0,79);" N8 t* Z5 n: \7 G3 G* n
getch();6 O; a( p% l- b9 s1 v, j- T
puta();
3 H1 p ^2 ]( z; ]+ E2 L getch();1 s# G" W Z. o% j
zcls(0,25,0,79);
* s6 \9 I5 n2 V ?2 C( ` getch();
3 P' B+ _& L2 G. w5 } }' o F" a+ c( N+ ] `' A; O; R
/*********center clear screen(中心清屏)***********/
# ^$ w8 Y' s0 d2 ]4 a void zcls(int x1,int x2,int y1,int y2)
& q. b. G }3 m- i }4 X {# Q* \, x2 ]9 G, M: v8 n1 ^
int x00,y00,x0,y0,i,d;; A+ r7 W$ @2 M( W: t
if((y2-y1)>(x2-x1)){* o4 i. {0 ?! Y0 Q& l
d=(x2-x1)/2;
3 ^8 B+ d. C/ t+ ` x0=(x1+x2)/2;
: ~7 a% B6 w) Q y0=y1+d;
. B( {. o+ g9 m8 r; N% W y00=y2-d;1 \/ i9 W* |4 `/ `, o2 U ~: ?
for(i=0;i<(d+1);i++)6 s( L8 i# e/ |- w+ u) | Z
recls((x0-i),(x00+i),(y0-i),(y00+i));* ~. _+ E5 g( H: Z
delay(10);8 Y$ U* j0 ^2 n' B
}9 b j/ N) _- P- ?6 h% S4 x
else{
e* p# P4 n5 l0 V. F5 P( [2 e! B d=(y2-y1)/2;, f2 X0 X$ {+ v& r2 D
y0=(y1+y2)/2;
' }/ z* t4 w9 ` ]: S4 o z, d$ _ x0=x1+d;
: O( B* X4 A; A p/ M( | x00=x2-d;
! r+ Z' }) X2 y$ \0 V; p- O* H for(i=0;i<d+1;i++)
3 s8 q2 b/ U: t- C& l# R recls(x0-i,x00+i,y0-i,y00+i);) n Q+ F1 }; L. S/ T; |# F" ^' R, h
delay(10);
7 N* T! V0 m$ w% k6 l" ? }
( H" V* a) [$ b6 I3 y! g4 I4 M% D" o }& Y U$ o% b% I: y# @' D
8 F0 ~7 O) C7 g. {* m6 b1 N) t* Z /************* clear rectangle side(矩形边清屏)***********************/
1 V |- q: a+ B# V' G+ E2 S- U0 I2 H3 N1 _
void recls(int x1,int x2,int y1,int y2)
7 m4 q& I/ B8 d# P2 L; k6 D! W {% f- g2 e3 R `! g
int i,j;6 C5 G4 s H, d5 Y7 `
for(i=y1;i<y2;i++){
N) ~7 h6 F/ D. W goto_xy(x1,i);, N9 k. d% k9 h' K1 Y
putchar(' ');
$ j$ ?- r% w N- L goto_xy(x2,i); ~- Z$ Q1 B0 Q$ z6 ~
putchar(' ');
' Q1 G7 W2 R4 g delay(10);
* c- H3 F0 W4 j& j, U } i' v* R- q9 p0 ?/ |. O
for(j=x1;j<x2;j++){) P5 G% P$ m3 O+ S' \
goto_xy(i,y1);
) T7 _4 x; P/ q5 f+ U. u1 [ putchar(' ');2 {9 ]) d/ ^8 m7 V0 @# x
goto_xy(j,y2);
; L% r, F. F- R putchar(' ');& C; m, G* C8 C+ g3 g6 k0 y+ z
delay(10);
) Q0 E" |$ ?9 i+ h- @( n }
; m: z" k5 E* e: p }7 x6 w: v6 e, P4 }
/******************open screen clear(开屏式清屏)*********************/0 w) r; Q2 I: H/ Y/ L
5 V$ x" _9 N% @0 i! |$ r! D' F
void kcls(int x1,int x2,int y1,int y2)
9 X% } P3 u& a( \- V q {( a- n) N% w% _ j/ Y& |2 e* W3 U" z
int t,s,i,j;
& U1 O! [- Y1 F3 L3 r t=s=(y1+y2)/2;
: J" R1 l/ s" d" c% R! X for(;t<=y2;t++,s--)
% a2 C& m' x2 d for(j=x1;j<x2;j++){
4 ~' u$ y2 d, a, p( y goto_xy(j,t);
+ A" ~6 S' a; g/ Q5 c4 Y putchar(' ');
8 N2 C2 ~, C9 H; g( ?2 o goto_xy(j,s);2 v1 n; m+ a3 E* i7 V6 ~/ b
putchar(' ');
/ d( j. x" f% S) X" u7 V delay(10);' M( d/ P$ ~! H: r; h
}
# U) X, Y# j O# l% ? [( S }1 ` c# D2 N% @5 R
/*****************close screen clear*****闭幕式清屏*******************/
) U5 p! R; \3 H, j* t
2 m* l- t' n7 ]" B4 e void bcls(int x1,int x2,int y1,int y2)
) H: B% d) i: X8 l; } p) Y0 {. I {2 m" Q6 j/ x) k+ A$ E
int t,s,j;
4 t7 J( E6 e7 G- v5 b t=y1;
& x- j( q% ^* O% d( S( }4 i s=y2;
3 N4 T( Y- N8 D* ~ f for(t=y1;t<(y1+y2)/2;t++,s--)
- I. l3 w) C/ I' y% S; c for(j=x1;j<x2;j++){
' ~3 e1 j o+ I goto_xy(j,t);( Z5 D. D0 a( p# K) w7 w
putchar(' ');1 ?6 P8 A. X. [" N8 o) h! @
goto_xy(j,s);. o' c$ w# d% ~4 ~3 K' w
putchar(' ');5 ~$ ?1 p5 u* r5 X o# T" e# e; Q
delay(10);
) z |1 s G$ _ }" a: ^* k4 L) Y" W; A
}% Q2 m4 T8 }7 ~ h) @4 L& t7 l1 {
/******************bottom screen clear(自下清屏)********************/
( V6 e" ?) j% R' T# W t: \
% O4 M( j) b5 P" |. M0 q void dcls(int x1,int x2,int y1,int y2)( V. B4 F$ U# r& N
{7 ]) k' X5 q2 ~: ^; A
int t,s,j,i;
+ h2 R3 h( C S/ _ t=s=(y1+y2)/2; z* N; Y" c9 _ J6 a$ {
for(j=x2;j>x1;j--)# s2 \5 b! c/ E2 C8 ^+ v. V- ?
for(i=y1;i<y2;i++){5 N: Q. v1 f$ P J# q4 _! ?
goto_xy(j,i);7 d% H3 M4 ~" \# Y# s% K# |/ |
putchar(' ');
, i4 m* h7 n7 l& x5 Q1 p delay(10);
1 N* |. o% v ? }
" O% i& d# O% H) D4 D7 I }
0 {: L+ I( S; }" c+ \+ @ /******************设置光标子函数******************/
( r9 S1 n* z. C/ v" ~; ~; M3 X6 K3 f
void goto_xy(int x,int y)1 B! K* B. O; ^& M. z% v# m3 m
{
( y5 H& g X# y$ t9 e- g1 J l+ H) [/ M union REGS r;. `% g+ a! G+ O9 v# l
r.h.ah=2;+ G& U) G+ i; G) C, |% L1 A9 m
r.h.dl=y;
O% K, d0 p) f# C2 d r.h.dh=x;
: N" M4 Z8 T, r6 x/ q/ a' [# l r.h.bh=0;, r. E0 i7 K" y
int86(0x10,&r,&r);7 u; O6 F- y! N
}8 B+ j. [& I/ \+ r; M3 d
. k9 v" j( C8 ? /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ ] v" E& J. l. a3 u% k3 | X
5 ^" m. f" ^0 W0 ~
void puta(void)
: W' x. h$ C' M+ i$ N {
) ], F( I0 z* t" Y2 z0 T int i,j;- ^9 q. w6 v, i- p
for(i=0;i<24;i++){2 M& E, |) L+ U1 J- F( s
for(j=0;j<79;j++){1 h+ T- I. }% N, _; P c
goto_xy(i,j);( } p8 \% O" ]$ ^! j/ G
printf("a");
6 S, u- m* b3 [& k }& N! y H$ `8 \/ `4 _( o
}
+ ~# B6 j5 @7 s- ` } |
|