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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ f7 ~9 D5 ]6 s' L" G( v
( J6 G8 ]5 b3 k6 s 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里: o1 {: L. T* q
" x( j% C9 P$ U& p, P0 y
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ' \$ {: R y3 q$ w1 U' T
子函数及演示程序:- ]/ M: g3 s( `' X( A
4 ]& d3 x1 Y# G' s# h) Z* [& g
#include<stdio.h>0 A! h" G y2 B! |
#include<dos.h>7 F7 m0 L2 J7 `! ^ J4 Z1 C6 z
#include<conio.h>
5 K D6 p- A: j" R; M; a$ S# a, I6 V8 g! e& f) |
void goto_xy(int x,int y);
2 p3 X$ q# u7 C$ G void dcls(int x1,int x2,int y1,int y2);
: z8 I( D2 g: R& ?6 @6 b void bcls(int x1,int x2,int y1,int y2);! |1 g+ w/ w* k8 I* W
void kcls(int x1,int x2,int y1,int y2);4 Z, F2 J# W( B$ q& R1 [4 _
void recls(int x1,int x2,int y1,int y2);
1 i1 ^5 V7 c. ~3 `$ y void zcls(int x1,int x2,int y1,int y2);
6 O% h' C' I# Z% n* l0 I: N void puta(void);
2 L4 H h$ m1 u* ^2 \7 F8 \3 [. ?7 y9 ?& s4 P: H; W- C% F
2 j+ P0 G3 l) y: P5 Z /*--------------演示程序---------------------*/- f. n4 ^3 o% ^4 E5 w5 ~7 J
main()+ `2 I$ J; ^/ I b
{
S, R* Q9 d. C9 J) w8 U puta();/ ^' a O3 f, n2 O
getch();2 ~3 C+ i9 z2 i& ~. x1 I
dcls(0,4,0,79);
. b2 R; I) O O; W/ q! Y3 s getch();
# z( }3 A) c( t puta();
" p0 w+ ^5 E6 F+ E getch();
, g9 m, ?" M$ d$ ^ bcls(0,25,0,79);: r( Q, n7 o6 k$ w! i, n4 t/ J
getch();* F4 F" s3 I! w) _
puta();
. ?5 I' \/ k: L6 t+ d getch();) n, O- @6 X+ r3 P
zcls(0,25,0,79);$ U3 _ b) H( \8 S, i
getch();8 z3 x. ^1 u- J" S4 I
}6 K4 t1 u( ^) w# u7 w, R0 n, F1 E- H
/*********center clear screen(中心清屏)***********/3 q M% g4 G, H# ?3 {
void zcls(int x1,int x2,int y1,int y2)
: Q1 V( I2 Y" X8 h& N6 T' Y {
7 p. y& ]* [7 t2 ] int x00,y00,x0,y0,i,d;6 }5 L& w+ ]8 i+ n
if((y2-y1)>(x2-x1)){7 b0 r7 B9 A" n K+ n( f m
d=(x2-x1)/2;
' E; S8 [' W: D+ T x0=(x1+x2)/2;" O1 f/ H. h+ J/ a( H6 [ u0 u
y0=y1+d;8 ]; p0 ~1 h# D: U$ H+ _
y00=y2-d;
% Z- w$ F8 ?" g r) Z& c1 [$ ~5 w for(i=0;i<(d+1);i++)
8 \4 J: N: x3 O0 ]& P9 C+ G) L- m recls((x0-i),(x00+i),(y0-i),(y00+i));3 g; h4 y9 o& g( J- B
delay(10);
2 y$ ?0 V( r% {2 H$ M6 d9 Q }
1 c7 N, j2 k3 `) a1 g else{- `! T4 i0 u0 q! N" j; P
d=(y2-y1)/2;
8 ^/ ?9 y6 S n; c ]9 Y1 P y0=(y1+y2)/2;
/ B P& ]9 ]- I$ \* L x0=x1+d;
! d( Q) F7 O) P2 Q2 B/ v x00=x2-d;3 N/ L: ~ x, d' U. E! @
for(i=0;i<d+1;i++)9 `" H8 x4 N S' b9 y1 b2 n8 b
recls(x0-i,x00+i,y0-i,y00+i);; t% n9 q0 z/ P* x
delay(10);& q# o B5 n$ d0 b$ L5 I7 o* V
}
% {5 ^9 V" {, W3 D9 q: m }+ |$ r7 T- {) S5 M4 u& H
/ N! @" f) b! T /************* clear rectangle side(矩形边清屏)***********************/
5 m# ]: l. L3 Y) ]4 p9 k) x8 Z H8 I: q
void recls(int x1,int x2,int y1,int y2)
* W Y2 ? ?" q, j4 z {
# x& ?7 d- h. }' m int i,j;" {6 J7 L4 l/ Z% q, f
for(i=y1;i<y2;i++){9 @0 Z9 n+ p; g n% T" s6 ?
goto_xy(x1,i);
1 g/ t3 n% i& |! G/ D: b: N- N putchar(' ');% F2 d$ R" \0 @4 N
goto_xy(x2,i);
( r9 ]& ]$ S# [- K; K putchar(' ');
% l; m2 B. e: `1 _3 F2 Q) k$ z delay(10);
; \$ K! C& |2 P; D3 \. H }1 X* n! k, s8 B# g( p
for(j=x1;j<x2;j++){
* X3 |- v1 \5 ?, z. S goto_xy(i,y1);1 {- ?2 c% Q. e* x( ?7 P) A2 Y
putchar(' ');, P4 d2 Q4 E' i( P* n* A
goto_xy(j,y2);! s* j$ ]; J% y( B6 \+ D2 t9 f
putchar(' ');. _0 K. j. M9 T, [6 O7 r! T( W
delay(10);
7 ^( B4 t" r/ F# ~ }
$ a& d7 K V9 P$ C }
& {6 W3 b% m" J. I /******************open screen clear(开屏式清屏)*********************/; s$ Y; t% {, r) |, s
7 L' N- i; ~% T
void kcls(int x1,int x2,int y1,int y2)9 N/ ?* X+ W/ p; f6 y2 Y) |+ K
{& l5 [) M$ K* o W( P: z3 \; V6 O
int t,s,i,j;
9 z0 s$ l) B2 L$ I5 B; x t=s=(y1+y2)/2;7 o5 }7 ~6 ~: x, F, ~- y7 @& w
for(;t<=y2;t++,s--)
: |# F3 @3 M; g. }( \ J! T* R for(j=x1;j<x2;j++){
* n1 }. |: f! I) x8 C goto_xy(j,t);0 l+ y! o+ g9 K6 X$ s# f: v3 {$ F$ O
putchar(' '); n- u6 b' I, Y# j
goto_xy(j,s);
# O. @2 b2 L9 l' ^7 y: K putchar(' ');- v, F8 y- U7 H+ w( C3 E. b
delay(10);2 c2 N) v `' M* i" U
}
# r f# E+ p2 Y* Z" `& _ }
( @1 a1 H B8 p /*****************close screen clear*****闭幕式清屏*******************/
# C3 e3 S% d8 u6 V* F3 }2 w5 M2 ~2 N* D6 q: `! h4 c- i/ ^% e
void bcls(int x1,int x2,int y1,int y2)
/ x: W1 p/ R- Q; ? {
1 {( f, C* w( k) P! h. V' X int t,s,j;
+ N! [2 U- g6 h. I t=y1;* g1 B: Q A- A
s=y2;( L; G2 E/ g* X- W P
for(t=y1;t<(y1+y2)/2;t++,s--)) w7 f. Q. M) j; {
for(j=x1;j<x2;j++){
/ A" X3 G Z3 J) E goto_xy(j,t);
) K, ~$ G5 ~; }% R+ ^+ Y, A putchar(' ');
/ _. G( d9 e& d( }" V goto_xy(j,s);
* T$ O4 ~* a8 R6 z, K" P putchar(' ');
4 X8 C; v7 m/ B. w" _ delay(10);$ J P# Q/ R; |
}
) k# q4 F6 Q: {) g8 y }$ m. a+ Q" k# k- g+ m; M' G
/******************bottom screen clear(自下清屏)********************/8 r! c1 _) v1 v) b
5 ~; r# s. R. ? z" p void dcls(int x1,int x2,int y1,int y2)% D& }* ~6 i! t" s* a) U- w/ ]
{
# _" C: n6 ^3 `( C int t,s,j,i;
. J; e$ I- v' R9 I9 v# H; C$ c t=s=(y1+y2)/2;6 ^7 w3 p6 q0 Z: p& c4 p% W& m$ m
for(j=x2;j>x1;j--)
3 ?- d" B: J8 K- _) I9 \% S" v for(i=y1;i<y2;i++){7 P9 q. e. q( u( m G3 q0 l
goto_xy(j,i);7 e4 s$ J1 O2 r/ ?" d$ c, m
putchar(' ');
1 y r# k" Z3 P0 R* R) \; U delay(10);
/ t5 o: r1 Q. |: x D3 G& q }$ O# L1 D* \9 j1 J& L1 J# d
}: F6 h* B' C; r; N( b1 r% P0 m
/******************设置光标子函数******************/
/ u% g, m! U: x+ \9 n' i$ v* s* k, Y
void goto_xy(int x,int y)
. o' j% _, Y, V5 I6 V {
; @5 O# u0 f2 d) _8 b union REGS r;) I$ k, ~3 q& M8 O
r.h.ah=2;/ j1 `% A2 Q" q
r.h.dl=y;
) d* Q& {8 v. O* m: E r.h.dh=x;
5 P5 f" e }$ c" K$ A% i r.h.bh=0;
, u" d, S4 T$ Q5 u% |/ O, |1 \ int86(0x10,&r,&r);
. }8 [; n6 ]" j, y5 ]8 w, O }
& ]7 U# z) X" K$ f8 }. F, E
! i; E Q4 C, [2 L' N2 [ /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 @: r5 `* _: h s; w, a+ [
% w0 \3 n( z6 o# j! v+ z- P void puta(void)0 O N! ]) L1 F8 i/ b( D6 _& |
{
" s( e0 n! P2 T: u3 ?) p, | int i,j; b( Y, O. `8 L T1 w* t7 N2 g. N
for(i=0;i<24;i++){
: e3 ?$ h' c) e for(j=0;j<79;j++){( |& g' @" |0 j/ r, {( h$ ]
goto_xy(i,j);4 ], w% q( z# B, p& P6 K
printf("a");
( ~, w. X, v1 E6 m }
4 {# _7 y% d, p6 P4 E: ? }
/ P M6 J- B; q# Z4 | } |
|