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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,' ]. @ @: ~4 O1 `
; [1 c9 ~* d: ?. G! f) M
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
1 F4 j* \7 A6 {# i( N! O
5 t& y2 i% I7 c9 E7 U 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. m( e2 A; q" B+ p! |* N0 N 子函数及演示程序:
0 `+ |2 d% f2 U2 q/ ]6 _8 C* @6 n& k1 j$ [7 w, K: f. |, n
#include<stdio.h>, h) u4 k! E) z" x! h0 K
#include<dos.h>$ C0 I3 {* \; J$ I% \7 W
#include<conio.h>$ y* ]3 _/ I* d' c
- S e% ^. I3 R' h
void goto_xy(int x,int y);
1 r6 F& Y# u3 L C' f+ Y3 `# L- O: M% e void dcls(int x1,int x2,int y1,int y2);
# q/ b( c- c0 w+ w$ b* Y) p3 N void bcls(int x1,int x2,int y1,int y2);
# e, Z2 E5 n. d( f4 O+ _ void kcls(int x1,int x2,int y1,int y2);
* w, G$ k8 K: b; ^: T% ? void recls(int x1,int x2,int y1,int y2);
# ]4 d2 L' C" ~0 J6 ] void zcls(int x1,int x2,int y1,int y2);* ~3 O5 K* \, q r% m/ O
void puta(void);
, F7 u9 N9 [6 R2 B. ?: L0 ^; e0 D+ s, P" @) r$ G+ `) t6 \( }' o/ r
6 ], T: f6 X- i% j2 S3 }6 Q- C# f
/*--------------演示程序---------------------*/
" t5 _ p/ E( ] l4 T( m main()
0 ]/ D6 X/ L5 @ {
; j/ I. Q: c& w& {+ R0 C% m puta();
, d X' o, {# C. ^: n+ g9 ] getch();
# R- t3 S# c: p7 a" O% N7 r. R dcls(0,4,0,79);
( [+ ]* c3 n+ M7 W' N7 F7 ] getch();' L! V* X4 y" F. t+ D+ z5 D0 c* d) R
puta();
$ [6 l- C5 m+ e( o9 x getch();
0 y3 r$ c( W: `8 [6 R bcls(0,25,0,79);
& Y8 E" F: h0 i" @( _7 ?: ?4 V8 o getch();7 p) B. s* F& `
puta();
) s `5 w" w1 N+ a getch();- b. v9 g F7 f+ c' T: d
zcls(0,25,0,79);
4 J8 p# h5 R* j7 W/ T, O. p getch();
! f- }, q9 c( H9 [9 S; u }3 U" M6 v8 }. {# x2 k7 b
/*********center clear screen(中心清屏)***********/! x" D, D9 {8 n9 D- w; R7 j
void zcls(int x1,int x2,int y1,int y2)
/ Q; v# Z5 L% P% w {
9 E( k) z d: c* C int x00,y00,x0,y0,i,d;; M, j4 c, `5 K8 s2 ~
if((y2-y1)>(x2-x1)){
$ `8 P: J0 M4 D d=(x2-x1)/2;; M/ W' u0 \' F \
x0=(x1+x2)/2;
' Y7 y5 ?2 E6 A, r! x, E0 ` y0=y1+d;3 u' r/ @1 s6 \6 v8 _
y00=y2-d;, p. j, c! Q" ~4 T" e% f
for(i=0;i<(d+1);i++)
7 o; c" I2 `, e$ ^; Y+ h, O' x- M recls((x0-i),(x00+i),(y0-i),(y00+i));
( Q( _/ S$ M2 A T5 _8 h$ d! m- U delay(10);
9 A6 Q6 S0 m* ^; Z }
8 B" E1 ^. p9 d8 V else{9 G$ s+ S1 B1 n/ X2 v+ p
d=(y2-y1)/2;
2 Z* Q: @) d6 N }) c1 ]' p y0=(y1+y2)/2;
( l9 k/ x4 B: A+ [ x0=x1+d;3 u) M2 S1 l- l1 K. p; k
x00=x2-d;
' G. p4 t" Q1 |: q4 { for(i=0;i<d+1;i++)
* C- p! b$ W' v5 Q2 c recls(x0-i,x00+i,y0-i,y00+i);9 b8 u4 z( c, f; N. P
delay(10);" f+ \, [: H8 Y+ D% ~8 b$ X
}
5 S4 m" S. `- z6 [7 h }
# C+ q' c/ p$ e) D$ o) E6 [6 H* y
" k5 N3 I( r$ I* f* K; s /************* clear rectangle side(矩形边清屏)***********************/
3 Y6 b9 h) X3 g4 |
! n/ x& }' v& @" M void recls(int x1,int x2,int y1,int y2): L; M4 w& ^, y3 i4 j Y- L
{9 z; {+ u8 K E" l
int i,j;
7 H" s5 ~7 W0 r* B6 } for(i=y1;i<y2;i++){0 |; `4 j7 T f, h8 b' S% Q+ E
goto_xy(x1,i);7 N/ a9 i1 q- f5 }' o
putchar(' ');
0 \& s% r4 |6 q- X" b2 c F goto_xy(x2,i);
9 @2 J/ ^9 v: g3 t$ A$ r8 L putchar(' ');
/ p$ w* M: L, ?; V. r! X$ d delay(10);
+ A1 E3 a( e. b! ]) Q3 P }3 n; t$ X! }# V
for(j=x1;j<x2;j++){
1 E+ \! J8 u. W goto_xy(i,y1);7 F1 y, \5 k& g$ m' |
putchar(' ');
2 v6 d* t; s5 d* d! U/ R1 H goto_xy(j,y2);* a! J4 }! T9 A( c9 m# v
putchar(' ');
8 `5 `! ]! y- h delay(10);' v0 t- b) v4 e1 \8 `) q
}
9 P/ m: D) Z) x- \) N7 u' | }5 a" c3 ^) l' O& O. C) S
/******************open screen clear(开屏式清屏)*********************/! \& y1 \' x( c/ X- d- ~
# q7 }+ t! F6 L
void kcls(int x1,int x2,int y1,int y2)
3 L7 y3 A* t: A" b* n- h u9 A {6 w6 B& T- M5 S0 B
int t,s,i,j;8 q! x' r8 g' L @+ U$ L E
t=s=(y1+y2)/2;
+ ~7 c& j" {- ^9 O, T. X @ for(;t<=y2;t++,s--)( `- @7 |% h, a/ y3 `1 i2 M
for(j=x1;j<x2;j++){
* \2 e1 V9 u! n goto_xy(j,t);
& ?; O& R4 Z# P% e putchar(' ');
3 ?! [! x- A5 m, `; x2 H# q, f goto_xy(j,s);
" G/ M9 r& l8 G7 m putchar(' ');
/ n# D0 H. G6 u) _ delay(10);
5 |2 F8 y) {- ]5 @6 `8 |7 ? }& Q0 R; ?6 O7 h$ C& X0 Z. b
}
7 `6 [; T7 d9 W* A) B) h; i0 U4 Y /*****************close screen clear*****闭幕式清屏*******************/: G9 f. h& ~6 a$ r3 {) B8 l
( W$ M' K( E6 x void bcls(int x1,int x2,int y1,int y2)
9 _2 T, X4 }, H! f {
) O( D. E% n4 }: c7 b8 k int t,s,j;3 i. O' o7 w7 F) b x& v
t=y1;8 H: E% p" W$ ]! H
s=y2;
" w! n* r: x- @; g for(t=y1;t<(y1+y2)/2;t++,s--). W/ e* Y, F% f# d" J
for(j=x1;j<x2;j++){* K0 C( Q6 h9 E9 Z
goto_xy(j,t);
! r2 N8 u8 `3 U* S$ D2 o: |( j putchar(' ');# G& M. ]" ?9 J; p2 ?
goto_xy(j,s);. M& Z9 K! g; ]( F: Q
putchar(' ');
! j# C$ W1 p; G, |3 b9 P delay(10);* o& r9 z1 J2 r
}! v* F8 I( {4 |) ^. u5 f; P
}' C. G7 ]$ D. K4 ]/ m8 P# `
/******************bottom screen clear(自下清屏)********************/# ^2 i$ q0 F9 g6 i, J9 ^
8 T F# d, F3 F8 D4 O' A9 G void dcls(int x1,int x2,int y1,int y2)% h8 M% b' X- J0 D a1 P+ S9 ]
{3 r. @, I7 ^: c
int t,s,j,i;! L# `& J8 U2 L; |
t=s=(y1+y2)/2;. ]5 ^4 T( ~6 [1 h/ ~
for(j=x2;j>x1;j--)
3 b$ d; q& N7 e/ k3 i( U for(i=y1;i<y2;i++){% k3 |) N6 ? A# z( g' m4 r
goto_xy(j,i);- \7 g# d: a. i# M1 z, y Y2 {5 U- N
putchar(' ');7 y' ~3 M- i6 r
delay(10);
; d) W. ?$ a1 t' u, P- y }2 K! K4 Z4 ~$ m1 r3 r" r% E
}
) y' z, m0 n7 E6 s$ } /******************设置光标子函数******************/
0 ^9 N$ w" B6 d ~# s( D* H0 I6 M/ `' \( J' T. V/ q
void goto_xy(int x,int y)7 E9 l& z6 K2 b2 Z* {; T0 a2 f" m, b
{
% p0 X; U3 B8 p9 s A" \, | union REGS r;- P+ P% F% q8 i0 T4 S7 _. U
r.h.ah=2;
9 c% z0 w! D2 o/ r! F r.h.dl=y;
' u: s7 j. ~# m6 _3 ^; Q r.h.dh=x;
* l p1 c9 J U6 R! l7 A" B- U* u r.h.bh=0;
( H k/ S* _# F. l7 \ int86(0x10,&r,&r); g) ?5 S) z0 v' _. _, J# A
}
. V6 Y4 X- a. ^3 V6 i! n2 | u5 O4 z2 n4 \2 U$ d
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 e* q% L' O1 z7 X" `0 x" Z" A. N% @" n
void puta(void)
" p6 G9 w, y' z' o$ K2 K {
& x& _ D6 _. Z4 n4 Q9 a int i,j;
, {1 x; @9 J0 i+ C' N6 S for(i=0;i<24;i++){, e- |5 D7 F9 I' e& L: N$ C' H. Q
for(j=0;j<79;j++){
9 i( O( B. u6 o. t% p* Z! K& s. Y goto_xy(i,j);
$ u* L- t9 y" w( E1 t! _' K! M printf("a");
+ \! Z1 _" T& r+ O. ^ }
$ u' P8 f% G1 I: T7 E }
3 l( p8 H# u m4 E1 n } |
|