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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; T6 K+ ^" r8 W `0 U% w& a% d, N& e3 j5 {. a$ G- [
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, u3 l& I G: N7 n4 x1 m
5 p+ K8 h& j2 ^8 E' F( `1 z 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. h$ o% X, F. Q/ m; t) j
子函数及演示程序:
/ P! O6 [3 i3 T5 q1 p
& s5 r' s. n9 T# T$ E #include<stdio.h>4 u R7 ]4 Z+ N3 g$ C. k& ?' e
#include<dos.h>
4 W) O: N4 n7 s( X# E( a5 ]% B! W) Y$ I #include<conio.h>
7 t% ^; C9 v7 H5 o" h- f( D' ?/ V
4 e. ^9 T8 T0 {5 m5 i, m1 l1 r void goto_xy(int x,int y);2 [1 ?2 z+ }/ @7 F$ _
void dcls(int x1,int x2,int y1,int y2);
: x3 S" [( B8 P8 F1 F0 B void bcls(int x1,int x2,int y1,int y2);- r! x9 @5 W/ v+ g1 z1 o* U. W' k
void kcls(int x1,int x2,int y1,int y2);
& s- M# M/ H. A" e1 Y2 T void recls(int x1,int x2,int y1,int y2);# ^/ Y9 _+ B L$ n* I
void zcls(int x1,int x2,int y1,int y2);
2 m5 d7 ?* B9 _8 m' J) r void puta(void);2 q9 o" {4 S% ]1 n8 W
- d L/ N! n. a7 R# B' d0 N
: r/ p( D$ s$ U9 X /*--------------演示程序---------------------*/
% t k7 ^+ o, p8 F, U main()
5 [/ D" s( X4 i: O4 s1 n. z* d {3 r$ m, U& W G' _
puta();
. u/ f/ H5 S7 Q: V( G, V7 O Z getch();& ]9 E) f! U1 y y% }, k
dcls(0,4,0,79);
3 ~# Y8 V/ s3 Q$ m( U% p& O$ ~ getch();
8 T# C& d3 _' M0 @ puta();
: p- z# r" Z; W$ h0 c9 a. V8 a getch();
# t3 Q4 k- @9 O! e' ^ bcls(0,25,0,79);
; k2 h; q; r' D3 y. V getch();
( M, P/ u) P- ] puta();; q y3 q. F1 V8 A9 R
getch();
' c/ D0 z# k# \1 O2 A zcls(0,25,0,79);& T! s0 R# ]3 z
getch();2 m, p0 f, J; A
}8 E* V6 t( @5 V' Q
/*********center clear screen(中心清屏)***********/6 T! b# r2 n1 `# [; h4 |; B
void zcls(int x1,int x2,int y1,int y2)
+ b/ ?- T, i K+ Q {
0 G3 P; O& y7 O: E: o6 \! o- E int x00,y00,x0,y0,i,d;6 p z3 @1 A# _) s
if((y2-y1)>(x2-x1)){
$ l1 f+ I0 \$ m6 M- g& x# j7 ] d=(x2-x1)/2;
9 v5 H. [$ l9 x u x0=(x1+x2)/2;* A8 L" Z0 `& C @1 f; U5 ?8 Y
y0=y1+d;% t9 Q. x) P1 _5 @/ D3 P6 M5 G
y00=y2-d;# z f. g4 v4 @% O* I+ ?
for(i=0;i<(d+1);i++)
1 @' J* \0 w# a& H1 ~ recls((x0-i),(x00+i),(y0-i),(y00+i));- \+ U6 O% G$ N2 V2 z
delay(10);
3 X. i( ^+ `8 E/ M' m: ]% a }
2 N- r1 ^2 l. A \ else{
b' K }8 U! S1 ?- E d=(y2-y1)/2;
) Y3 [' l5 W! F! h1 P9 M8 ?2 M y0=(y1+y2)/2;
6 |0 e; \5 p5 j+ V x0=x1+d;
2 E0 R& S7 H6 d+ V8 G. r x00=x2-d;
- H6 Q2 c3 b3 G4 s7 E5 U! V2 ?7 G for(i=0;i<d+1;i++)
% k9 l0 Y" | U recls(x0-i,x00+i,y0-i,y00+i);; B- ?. j& T s" n
delay(10);5 z& q5 y& U9 D0 I0 m, s7 `4 ^, d
}6 g& Z N9 N Z% t; j8 j3 \7 }& f J
}
5 }. z9 B0 G& C) A9 K8 @! g3 [* O8 N# T+ j8 Q0 p% t
/************* clear rectangle side(矩形边清屏)***********************/
3 s7 m! P2 M% T1 Y" F, y2 ^7 [5 U _8 s2 ^$ D1 ^- C3 P
void recls(int x1,int x2,int y1,int y2)
; V) z" `$ t \# i2 f2 u {2 r# Z/ W7 _! H2 g5 v# @: \
int i,j;
$ O0 B3 r/ F% J for(i=y1;i<y2;i++){; `1 s, t5 {9 Y6 [$ J
goto_xy(x1,i); d# {0 F! D# u1 m8 A
putchar(' ');
z5 ?7 i/ a `3 K' Z: P goto_xy(x2,i);
! Y7 d; \# x1 H ^: |4 N% G; A putchar(' ');
$ n/ I, P# K+ {" s! N4 N delay(10);! Q; z, I, @+ i& T J k
}
' V, E6 |( f8 C for(j=x1;j<x2;j++){8 z3 G3 O: o. h' O4 d9 G
goto_xy(i,y1);
* d7 B" m7 {9 V$ t+ a8 N( g putchar(' ');' [0 X6 t: i# X
goto_xy(j,y2);
/ L4 s( D H3 T0 c putchar(' ');
& P, N- D# O2 u" w4 j delay(10);
8 N( L H7 i4 i+ x4 U }: U! O3 J5 E' F3 Z
}0 X6 t8 c7 N( u) r, I
/******************open screen clear(开屏式清屏)*********************/
r6 T( s% S7 z* {+ b H" u: F/ @" [ h' g" u% E* H
void kcls(int x1,int x2,int y1,int y2)
" K: u. R4 I; ]9 {3 n/ A {
. ]3 Q" ^* X0 _; @4 R int t,s,i,j;
4 R ]3 |5 \: y& l0 h t=s=(y1+y2)/2;
! Z! F" n) _ n5 I9 ~8 }: n9 P for(;t<=y2;t++,s--)8 K# x( l! R9 ~' i! o3 S t
for(j=x1;j<x2;j++){
8 {* o# G' e, ~+ }# w/ t0 m1 O6 X goto_xy(j,t);. ]6 H& D5 f r
putchar(' ');
k% L$ w; e8 g; \5 c2 M2 W goto_xy(j,s);! R& ]3 H% k7 ^8 O: O0 E" I: [( s- |
putchar(' ');
9 L; Q0 a: H% T$ `. `' J2 F+ G( k delay(10);
1 [: ^: D5 F3 S4 c2 W' n/ S }
: X) p9 m; D2 w/ ]; b }
$ `- K7 d, ]2 k6 L8 }: U /*****************close screen clear*****闭幕式清屏*******************/" [# a e5 P# }% g; g P
, c+ ~9 b1 d2 e; R7 l. B* N! {- p9 s void bcls(int x1,int x2,int y1,int y2)
! t% s' h! S9 y$ v) L {
3 N: n' n) k0 S$ f int t,s,j;5 E6 e3 ]. w0 {8 L) m3 n0 D$ Z( @: z. f
t=y1;0 T* h! e W' }' O9 X5 g
s=y2;$ S, f3 T1 q& ?( [. O7 ]
for(t=y1;t<(y1+y2)/2;t++,s--)
1 M" U% |! J" L* P4 ]- z/ p for(j=x1;j<x2;j++){4 A' u* F6 \" O9 T& _9 r7 e
goto_xy(j,t);0 [8 U6 L4 o6 e8 z
putchar(' ');) e) I% e/ w x* @
goto_xy(j,s);
: v) z- c }2 s. F. U8 n O putchar(' ');
* S( I; v1 x, t7 | delay(10);
q3 L4 A* d$ p }3 A9 i6 Y9 V* o2 b c: q
}; _: I/ ], j+ a3 W0 L0 \
/******************bottom screen clear(自下清屏)********************/5 V- Y4 D" w( v7 ]1 i
9 ?% ^; V) i$ ^) W
void dcls(int x1,int x2,int y1,int y2): _/ V, _' A( @) }/ _1 {, C$ n5 U
{* d& k' J I. {0 _ W5 g. P; M7 A$ N
int t,s,j,i;
* V! Y8 l% S4 L1 J0 o t=s=(y1+y2)/2;) m4 d; z3 A _, Y+ c
for(j=x2;j>x1;j--)8 z1 r' F, |, }' D, I
for(i=y1;i<y2;i++){
6 ~8 h6 @3 G: Q goto_xy(j,i);+ K# |0 I, `2 A( @& l
putchar(' ');! Z% X, I+ }8 X1 s/ L: W
delay(10);
3 F( v0 j6 \5 k4 F1 ? z. V }4 m- D: P! p v) O, C5 D3 e
}7 W z" x2 A5 e/ t9 G- }% p
/******************设置光标子函数******************/
5 x5 w8 J. H% g( L! K3 v' p0 k& w& y2 H0 d2 u5 O
void goto_xy(int x,int y)
3 U! c3 q6 t0 T( G. }( n {
# S J& X( b' ~" m* A3 v union REGS r;+ A! d) E, _8 S! _$ X( {; G
r.h.ah=2;
# ?$ i# p. r5 c$ p3 ?2 j r.h.dl=y;
2 ~0 ~+ I9 X5 g1 q3 Y U& V+ H* U( D r.h.dh=x; `: {) }: @1 b+ V D& F7 f
r.h.bh=0;* j4 k8 B# m v/ P' Y
int86(0x10,&r,&r);
, d- r8 o* O6 T# _- v; b7 t; u! Z }# X5 P: P0 f' R8 V2 _
: N3 f: j" [% u /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" `' ?4 I: a2 d' y3 x: v, H# S A% E) X/ V& _
void puta(void)
! X0 w( N% A A g/ W {
, W" M/ |. S& U, W$ N/ [& h int i,j;
7 i, V# Y' ?) w) O/ T for(i=0;i<24;i++){1 o, c) @3 a5 \- U
for(j=0;j<79;j++){- B. _; k) Y( F% E8 j" B/ {
goto_xy(i,j);2 V8 b1 X3 L' K! S+ Q$ m* [
printf("a");( J! k0 ^: [! b& s
}
4 J5 u, Q. ]9 n9 k( c }+ v3 d; p& P- w; o* ^ c
} |
|