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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
9 _4 u0 S! ~8 P( ^; t% C- A
4 A( z. o( X' ~- r5 U. I 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 `. ]& h7 y+ }0 _1 n1 A
& o0 t5 Z. z6 Y$ C1 F 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ b! P. |4 F+ j6 z5 _% R E5 F, @5 c 子函数及演示程序:0 D! s% ^: e% A: u- ~% L
. ^# J/ S" l5 O7 i: X
#include<stdio.h>9 p# ^! p2 s; j
#include<dos.h> n, h Q9 U% X* e0 v5 Y
#include<conio.h>
8 C2 Y7 }8 L8 i! b: R5 O, s. n8 H' H& ~$ G/ a3 o% v }/ U. j# `
void goto_xy(int x,int y);) ]4 p+ i: X, t- o
void dcls(int x1,int x2,int y1,int y2);
* ^/ G* K1 q; M1 M! x6 `: W void bcls(int x1,int x2,int y1,int y2);6 v# N) b2 D" A' D5 [! L
void kcls(int x1,int x2,int y1,int y2);
; j( \9 O' M4 V& f. ]' w0 y void recls(int x1,int x2,int y1,int y2);$ g7 C. I6 Q) u' o# k% v) O* v
void zcls(int x1,int x2,int y1,int y2);, @% a' o: E) e9 }. u6 a
void puta(void);* C5 E1 n( K% l1 K5 t* @5 u3 O
% |! x* H( u' q1 t8 ?# \! [( |
/ G: `' i0 D4 P5 ?9 ~" H& M /*--------------演示程序---------------------*/
4 _; s5 W, s. n: D; D" H main()
" c7 y! |5 o5 X* n# C& ~ {
$ n6 [$ T7 `4 O8 T$ } puta();
( k# ]' X+ N+ [7 G getch();7 o; o8 D: H7 K% R* P3 ^
dcls(0,4,0,79);
" d7 u9 f \' c T+ G4 C7 D getch();8 X* x4 L4 e# d% P; @7 q+ B' x
puta();
& y" Q0 I6 T: S' C getch();
$ R8 g7 _: D: X. z2 m bcls(0,25,0,79);
. y" P4 R- f) g/ m& n getch();4 T. j9 I/ n: h$ M0 A
puta();7 U: L% Z' @9 i+ [! s$ t
getch();8 b& `- u+ G) k! k
zcls(0,25,0,79);3 L4 _2 n9 Q b& I; N$ r E
getch();
0 y$ l1 t8 Y: X }$ e3 c" N; _; N( Z4 {4 n+ u$ F
/*********center clear screen(中心清屏)***********/
- O& Q o W O! A void zcls(int x1,int x2,int y1,int y2)
5 A# B1 f; X2 U( U {
# `* h# X( |& E% H# W0 Z int x00,y00,x0,y0,i,d;$ t3 p1 \* U9 v7 Q
if((y2-y1)>(x2-x1)){
@8 e" `0 N- M$ e4 C$ u" b d=(x2-x1)/2;9 @7 y# p3 ~' b2 e5 `
x0=(x1+x2)/2;' T6 [ r4 @4 g& U: n, V8 u
y0=y1+d;; s+ z% G& ]! j/ E
y00=y2-d;
: I1 N: `1 U0 |2 `7 R for(i=0;i<(d+1);i++)
8 q! t U& ]: ~# ~3 l recls((x0-i),(x00+i),(y0-i),(y00+i));
+ O; h% w+ F; z, j delay(10);0 r9 D6 S3 p$ P% B, o' e
}
4 R- j$ q( L, J, L' C$ j else{
, i: S# [, ^1 D! `+ s7 T d=(y2-y1)/2;
1 A$ Z$ ~! o e y0=(y1+y2)/2;9 ~% e) I+ Z% W( U4 X
x0=x1+d;8 e2 S5 {8 P0 |* |% m, ]
x00=x2-d; P2 A+ m7 h# r! L: W
for(i=0;i<d+1;i++)
3 t+ h0 H4 l( w/ _5 r recls(x0-i,x00+i,y0-i,y00+i);8 _/ P" O( B) U. Y4 Z
delay(10);* u. T, P5 J' D% d4 l& |* M2 C* U
}; l4 y9 c H0 f; Z. V* O
}
7 q5 T# _' o5 }/ m6 S, N8 Z
4 W. Z& G7 u7 M! d/ j. g6 k /************* clear rectangle side(矩形边清屏)***********************/0 v7 o+ n1 e3 Z7 V$ s7 c F
0 H+ L3 o6 w* l4 ?/ v
void recls(int x1,int x2,int y1,int y2)3 P m3 u3 S3 S. E+ T. }. c
{" w( ?; J6 [7 }" h" D
int i,j;
! R* s% Y: F6 g/ J* ]1 i5 R% r7 P for(i=y1;i<y2;i++){0 `. e2 E5 L# g/ G
goto_xy(x1,i);
8 T& C( Q6 a# z putchar(' ');
- Z( |* b# N: l4 D! a( m# M; m goto_xy(x2,i);/ k' y/ m3 Y5 \1 n% |
putchar(' ');
3 V/ g+ h* |9 ~) j/ }1 k7 D, i delay(10);
; Y/ f) v9 ]( G% t' W8 Z }/ N: Q. L4 \5 [; m# L- r
for(j=x1;j<x2;j++){
8 N- n# `# U$ j8 y0 g( N goto_xy(i,y1);3 ~/ G. K0 t: T9 p
putchar(' ');
0 D; h- U' q2 X& H' i# S5 \ goto_xy(j,y2);
& _1 @% U* d7 F, _) f8 X' L putchar(' ');1 ^, ]& m8 w; e( X3 ?
delay(10);* O' p) u1 m/ \$ T: Z% W4 X& k
}/ x4 w/ r+ A8 O% k: o$ _. h: e" {
}
2 u: y: ?. K' \$ E- W E /******************open screen clear(开屏式清屏)*********************/
: u( z" [. I5 Q! ^. z! t0 o: A' e7 ^
# E+ `3 ]6 J" c0 w void kcls(int x1,int x2,int y1,int y2)
/ c6 y. G! h7 S$ d% Y9 K {7 k* W( d0 Z: p$ B
int t,s,i,j;
' ^3 i& F$ ?8 ^* H2 x1 X0 a" R, G t=s=(y1+y2)/2;6 U& C5 i8 d6 i
for(;t<=y2;t++,s--)
' B, R' p# m @7 l+ { for(j=x1;j<x2;j++){* d9 |! x) v' M3 a
goto_xy(j,t);: w3 p1 Q2 [* {1 X
putchar(' ');$ v2 [& ]( J0 o0 m* s
goto_xy(j,s);9 G. S9 d2 A$ Y6 T/ _& ?6 u
putchar(' ');" V( O5 y7 x: c, j
delay(10);
* w+ h. L0 ^# f6 J8 E }& j2 U$ v. ]" W. U" j$ P8 {9 J* b
}: K- e& B3 J% ~: [
/*****************close screen clear*****闭幕式清屏*******************/
: C* B* e3 k3 z! ~
$ u8 g0 Y- Y% ?4 s5 { void bcls(int x1,int x2,int y1,int y2)2 V- E9 R# S: R* o3 v
{" l" E: E/ b3 g$ k8 p4 Z. U( K' ^
int t,s,j;
' o. ^" ~( H( i: x/ Z8 i& K t=y1;
. f1 M! L1 r5 l" D0 g s=y2;
$ X/ y8 k8 U5 a' H for(t=y1;t<(y1+y2)/2;t++,s--)
# K! d2 E& p, N0 c for(j=x1;j<x2;j++){
2 C6 X1 m: K. ?! [5 f! u4 b" D5 t goto_xy(j,t);
$ K; K/ h+ D% u5 ~ putchar(' ');
! R( n( u; t- y9 ?) l, w" { goto_xy(j,s);6 T" s4 ?' @- H8 h. p
putchar(' ');8 W+ K U% E: m$ h! P
delay(10);
! {- s/ s! {7 V2 g }
: {3 E I# w( V# u7 i }9 z) E/ r8 d6 F6 M% L
/******************bottom screen clear(自下清屏)********************/0 j. p% \3 W6 p7 J B/ b7 o$ M
U% i# Q& n. {' C
void dcls(int x1,int x2,int y1,int y2)
' O7 }$ L5 q1 f! t {
5 u; J0 @3 b; @4 N3 I8 m+ a int t,s,j,i;# w$ i S" D4 I1 C7 Y( Y
t=s=(y1+y2)/2;
/ }% b. e# L9 H9 y; {* n0 T for(j=x2;j>x1;j--)
5 H. O! \0 X8 B* I! h for(i=y1;i<y2;i++){2 G9 Z# y$ {# f! d0 v
goto_xy(j,i);
# A" W9 r9 w7 Z putchar(' ');- M3 p1 x) j. | q
delay(10);. y2 K& d, \ w: m+ n% v
}/ e2 y* C3 w9 P! g
}
' L7 ^, D3 @- a6 G% B /******************设置光标子函数******************/1 F U* s2 k+ A; t7 I; t3 _% H
2 y- z3 e8 F! S1 J4 t
void goto_xy(int x,int y)
- o1 _% N- V2 V0 l {
! B& ?: W6 p& h2 {8 m8 {8 N2 A union REGS r;
* B& R* F7 y Y; e6 c4 u8 F: D, [ r.h.ah=2;
/ l' a5 H. I- o+ F ` r.h.dl=y;
& c. t* y* L( B9 Y' b1 S& d r.h.dh=x;3 F4 i8 O8 v" W
r.h.bh=0;9 R* I( h" Q& r2 G' y( D& {6 a
int86(0x10,&r,&r);6 X8 K! ~$ f ]6 P
}2 \- e" t/ B4 }/ Q: ^8 R
5 K! Z- i/ f' p! x: h9 {. |3 D0 D7 T# ~
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 l% M- r; R3 e$ O4 s: _, E+ b, h9 R3 }
void puta(void)
' S9 E2 k9 S9 d3 L& g' y3 Y& J" e {
& I i5 p2 x( [: \. u0 d% n int i,j;
; G% C. \; G0 ?1 M; }, T$ J; b for(i=0;i<24;i++){8 u: R+ L+ S( P! I" D
for(j=0;j<79;j++){6 n: @1 p5 W& ^) u1 \& @6 D
goto_xy(i,j);6 y Z( r; E' n f& J
printf("a");
; ~8 s! v! P$ w5 F. F& Q( T }
* b) s4 @/ h' d5 l. z0 _ }. g0 J3 H. u# }* f. j6 a2 c, k4 p
} |
|