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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏, `$ x3 I) M4 `" T7 m
; @3 q) n: q6 I- f( c4 i$ Q5 c' \ 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 d" ~ U2 I; U7 x0 T; {9 f: R
- g7 i% W3 v4 c4 S( O 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
* M& L0 r$ b! ~5 I5 ?& ^ 子函数及演示程序:
/ t6 E% b0 \+ d" D' k% h5 ^$ T+ R
& a; _, _0 ~& ` #include<stdio.h>5 C9 ?/ i9 B' A" U
#include<dos.h>. I) A$ F8 r$ `- j# {/ o5 A
#include<conio.h>( Z* H( Q/ K4 C- t
6 u) E6 c- o/ `) v0 B" M
void goto_xy(int x,int y);" |% S7 `( V- ^' Z1 c
void dcls(int x1,int x2,int y1,int y2);3 k* h$ `- w: }% c' p- l C
void bcls(int x1,int x2,int y1,int y2);7 Z1 \6 c3 x4 [1 i7 T
void kcls(int x1,int x2,int y1,int y2);& C! ]2 E+ ]/ p. Z6 P7 c
void recls(int x1,int x2,int y1,int y2);! S7 Y4 w5 w# R# B! D
void zcls(int x1,int x2,int y1,int y2);
, p; j* }3 T( d) A void puta(void);
k2 ]6 ^( d/ E0 @# p6 |$ h7 _. z6 T# i" o0 N' W- j
: E2 }6 h+ ~0 F3 D( ^; h% b! u- o- w /*--------------演示程序---------------------*/0 F1 j' u/ |) Y f. z/ Z" Q) A
main()% Y( _+ K$ s* `" ?$ \/ T
{
/ e1 w g9 l9 R( D' _/ t" ? puta();! m& Q+ W, D- J! j% |1 D4 ~# y; W
getch();* r0 n& R2 R$ i) v B1 g) f3 ^- }
dcls(0,4,0,79);
0 w( e% A9 L4 W1 T# [+ l getch();
. g% L8 P) a, v) @: S d- B' ^ puta();
- ~3 |1 m3 K+ z- ], I, u: `* A getch();1 ]( ~( O- X, H, U2 [2 R9 G2 W
bcls(0,25,0,79);7 `7 m' J, v+ Z$ Z8 c
getch();
. t) s" F! x1 h' z# s6 o puta();3 h9 I( X2 u& X
getch();
; a4 t3 I" D* Y. E: m zcls(0,25,0,79);
! y, a% }$ U- }* f8 T! z getch();" i- @4 g& t8 Z( _& E" _+ J2 N$ e- B
}9 J$ h2 J# d' O' M( `# O7 f
/*********center clear screen(中心清屏)***********/( W+ e0 O! H" q
void zcls(int x1,int x2,int y1,int y2) J& n8 a/ m$ e6 S
{' ?0 l4 O# D! N- c q8 v) [& l
int x00,y00,x0,y0,i,d;/ u$ ]* h |+ B( r. x
if((y2-y1)>(x2-x1)){3 L8 S5 U! X6 u; B9 E' Y( e# n
d=(x2-x1)/2;" |8 Z! n6 ]' N8 g, c1 C& m, I5 D
x0=(x1+x2)/2;2 d P8 Q6 y$ u1 S/ }( R" |2 i
y0=y1+d;( C% S4 s; u. R: g6 i
y00=y2-d;
+ ^& p) P! H3 F% |& v/ V9 z for(i=0;i<(d+1);i++)9 I4 Q( G/ R3 Z. o
recls((x0-i),(x00+i),(y0-i),(y00+i));
) {7 m$ d. o) q' U5 V2 r delay(10);
& D& k! w1 m2 f5 C) A. c! V }( K' j9 E5 W8 S5 ?
else{4 S8 @5 }* B3 k. b8 E2 f
d=(y2-y1)/2;
" i, l1 f- j( U# H8 W y0=(y1+y2)/2;- v' u6 Y. W! E
x0=x1+d;
" a. w$ H. a2 U0 I m" z+ p x00=x2-d;
5 v8 M3 }3 o% f6 e7 X2 a T! w for(i=0;i<d+1;i++)
2 b/ l' O2 ^" q! i" v- L0 O! E recls(x0-i,x00+i,y0-i,y00+i);- t- O6 ^0 J) @; e) {6 \- n
delay(10);
5 w( N: c C1 _ }
0 ~& `' f4 y/ i$ G5 L8 z }1 Z9 b+ }/ ^3 d1 J- y# Y9 T Z6 R. u
" t0 Y7 f0 c! f0 a- N /************* clear rectangle side(矩形边清屏)***********************/% R. q7 q: G. S
0 [% y/ v% F& h# {% h& J: \ H) N void recls(int x1,int x2,int y1,int y2)
5 _' i% p3 @ I& g1 }, c {$ z% S4 x4 u# n( [; K( R
int i,j;
2 r3 [! H* Q6 u( o for(i=y1;i<y2;i++){' a. D/ r, \; N! g# K9 L
goto_xy(x1,i);$ j4 Z/ R8 ~, c8 k. P1 `
putchar(' ');3 N1 z1 } W, p( i8 m
goto_xy(x2,i);
5 \( Q* V: y G' e putchar(' ');
, {+ @3 M- T, n# r; e delay(10);; G8 c! ?9 Y* S1 R
}9 B7 B& |" B: D7 y/ s5 W
for(j=x1;j<x2;j++){
& ^8 S7 B3 P5 b goto_xy(i,y1);6 S) W% N5 R1 `8 @- |0 @
putchar(' ');
8 ~) [# } ~/ B, h. r4 D! r! I$ L- L goto_xy(j,y2);0 f1 r; Z! _/ W3 ~
putchar(' ');
4 W: q1 \! J' W- ~ m delay(10);/ I$ X( U7 o' }( k7 N6 N
}3 Z; Q5 S& M* t
}
" Q. n3 T; j1 _ /******************open screen clear(开屏式清屏)*********************/ S# V# u6 k/ E% j' ^# c8 y
* ]7 [& [# g4 ^: |" g. k0 e
void kcls(int x1,int x2,int y1,int y2)
. j- x' Z2 ]) b- _( |! E4 e' T {
, m$ f5 Y0 W. d. C; ? l int t,s,i,j;8 S: A3 P7 ?' I1 |7 S# b+ J
t=s=(y1+y2)/2;7 F* y8 A+ Q3 \- Q. z- a
for(;t<=y2;t++,s--)! w! H, Q1 A4 N, M2 }9 ?* \
for(j=x1;j<x2;j++){
9 [0 {$ W2 l8 m2 @* ]+ E$ H/ ? goto_xy(j,t);
5 D! i; r& p- Q2 U b9 h) e putchar(' ');
~9 r5 q4 B. l6 ?9 r7 G goto_xy(j,s);8 x$ _7 i+ v' |
putchar(' ');2 W% N0 c8 y [! e1 l* z
delay(10);
& W$ A/ d8 p; ]$ w2 {5 ]0 c' u }" M- P% G. U4 O, J* D- ? f! W
}( i- P6 x- D9 J! X9 `& W
/*****************close screen clear*****闭幕式清屏*******************/7 |* s$ w2 {8 F4 _0 e6 p( o4 K
$ @8 B W# B: x
void bcls(int x1,int x2,int y1,int y2)
" o) ~4 K3 i4 c8 a# ]! j7 K& C {! g( L$ w, C/ L' ~
int t,s,j;
: E+ s' R' }; p1 _' I t=y1;
" _: T% [- F9 P* Y( j5 q! g/ l s=y2;
; M- x9 n3 A! k" o' j& @4 u for(t=y1;t<(y1+y2)/2;t++,s--)8 J, D4 N S' L1 p E4 c5 C( W
for(j=x1;j<x2;j++){8 C( P* R, O! f2 n. T. \
goto_xy(j,t);# U2 u- R9 ]. ~* L! b* T
putchar(' ');
) [3 U$ A9 H1 F" d& G9 m1 R goto_xy(j,s);
" D0 r( O2 @: F putchar(' ');
4 k# ^: [) G2 z; s" |6 C delay(10);
! V9 K h2 b: Q. p }
' ^ |- _7 t# i2 f. S2 x }
/ u, j! d2 h$ L- r0 @( G7 L9 T /******************bottom screen clear(自下清屏)********************/. F7 n: z7 l$ \) H7 t4 w! A
. A5 [2 ], y8 a
void dcls(int x1,int x2,int y1,int y2)
4 Y; d: m* T% d2 c5 q$ Z1 z4 _ {2 L& s$ C1 H7 j8 O' U/ F0 g
int t,s,j,i;4 ]* m& S5 O$ |* t' l9 P
t=s=(y1+y2)/2;6 U4 y, c3 }6 X
for(j=x2;j>x1;j--); H* Q7 e! B( [2 c3 L Z
for(i=y1;i<y2;i++){% c+ E. z' L! U: H# Y
goto_xy(j,i);
& t3 A% k5 ~ T putchar(' ');
; ^& y% n9 S% c7 b* a6 c2 b7 q delay(10);, R9 d+ |! O% v% B7 i5 E- U: d6 N
}+ S, ]5 S% S w; C/ I
}
9 O$ [9 D2 G2 `! U4 p /******************设置光标子函数******************/( R8 U N7 Y! c
: `" n7 ^: e" y+ s void goto_xy(int x,int y)
9 d* Q8 o: o- F, V {
" M( T3 _, E! U3 X8 E6 e6 @ union REGS r;6 y5 J4 r6 j% M+ U& N; E/ s) @5 L
r.h.ah=2;
8 C) I3 D% q1 a1 Z' q E r.h.dl=y;
5 ?. C J5 | ^& g1 L' q r.h.dh=x;
' L" m4 v1 P' _( A; j! D6 _ r.h.bh=0;
0 s: @4 M1 O6 l7 X int86(0x10,&r,&r);+ ]8 z- s* Z$ w: [% U4 ~- q' Z9 }
}
9 S' v" g! e* \& N9 ^
0 q; `0 U2 U* } /**********************在屏幕上打出一连串的a字母用于演示程序******************// }- z8 t8 |7 @0 @" \1 o/ W5 H2 O
# r6 h/ w: y9 Q8 W3 Q: s void puta(void)
7 u0 D) n) Z |0 ^' d! I6 n { h4 l. x1 _) E' P7 k/ l
int i,j;" [& T- A$ O; @1 |
for(i=0;i<24;i++){
R# F& ? y; w( d V' l; C; V) _ for(j=0;j<79;j++){2 ?4 Y" C8 |: A: g, z6 k( i
goto_xy(i,j);
- m" i8 G: p. _. r4 m0 b& d- E# l printf("a");
8 v( G( R: K" c1 f, U$ | }/ p0 W5 C+ B# ` f8 T6 I/ _
}! m8 U2 ?5 Z9 G1 \% C
} |
|