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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8 Q- l, V0 u. N* i, t( w6 J
* f; }" @+ V y- y& G! p 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 a3 ?' ]1 w1 A$ e4 S( p9 e
$ h! ?% _, s5 C# i6 C+ j8 C0 q
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ b9 [3 ~8 _- @0 r4 K* [5 r 子函数及演示程序:
$ ^$ L6 z: Q7 b4 C% e
Z/ `& L7 E/ v9 @2 U- ? #include<stdio.h>1 M M; f* u1 T3 y9 Q% G- S7 F! m
#include<dos.h>
2 H, J" W$ n+ E1 j& _5 D N #include<conio.h>
" Y5 |, u i% S! c9 h5 K
' T ?# [7 c4 a: h8 ] void goto_xy(int x,int y);
^4 h2 I& S( W: P void dcls(int x1,int x2,int y1,int y2);4 N, @. W: D1 j( M/ _2 c3 H
void bcls(int x1,int x2,int y1,int y2);
( p! g& M& c/ {# j C, h! u void kcls(int x1,int x2,int y1,int y2);
U1 Y" a6 ?" ` void recls(int x1,int x2,int y1,int y2);5 p: Z# {5 y) Y: P
void zcls(int x1,int x2,int y1,int y2);
3 W8 |' i4 A' e$ j( P& w3 R+ T void puta(void);
+ i% O! D- F/ L! W7 n' N
: @4 F6 E- S% z5 e( Y2 H! @* @, v' W8 y5 V
/*--------------演示程序---------------------*/
. @. `; i5 Y. ?% q main()) x1 M( {8 m3 |$ i9 ?) v. V
{
4 f8 a6 v5 t Q. ] puta();
4 A$ }# n( C$ v2 a' o7 q6 y getch();
6 w* Z1 M9 A- \9 f* i3 T dcls(0,4,0,79);+ F6 U# t0 q* e! M' m
getch();
0 A; T# S' a/ {& G/ H5 j( a puta();
! y' Q% |0 M. j. `; t4 l' Q, n, x getch();1 p$ Z, s0 x; R ^& [
bcls(0,25,0,79);) @- W7 C7 D" u
getch();7 E+ g; d: c. |' m) G+ h- D
puta();6 N% l$ |$ ^6 e0 Y. _, X
getch();- l. b1 h* O5 n+ T. ?6 v; }
zcls(0,25,0,79);4 E4 E4 a0 n! V1 e. _7 y N. N
getch();" K& s* U& r. @" O8 n# v
}
# }) x) I h2 V! Q* O1 w4 v8 H /*********center clear screen(中心清屏)***********/# v+ z3 |! b8 M! o% O3 A
void zcls(int x1,int x2,int y1,int y2)
, Z3 T$ j: l. e( g* \ {- \. _# {3 J! i: `- c- R, w
int x00,y00,x0,y0,i,d;
& J0 X+ j; f8 }8 ]/ s7 P2 M: u if((y2-y1)>(x2-x1)){
- P1 i; J( {6 U d=(x2-x1)/2;- ^. ~+ ]* q ]0 R; w
x0=(x1+x2)/2;
. R6 s7 R8 J+ m) P. K y0=y1+d;* T' Z- F) i" w+ H" A
y00=y2-d;
1 N2 U4 ~9 e6 }# Q% z3 W$ y# p for(i=0;i<(d+1);i++)
+ H9 A$ K/ }6 l6 M: G7 {% Y9 m- Y- \ recls((x0-i),(x00+i),(y0-i),(y00+i));
1 f' f2 C6 Y; x& Q) w delay(10);; _" m6 t. I- P
}
3 ~1 Q6 f+ t4 J% `! W9 W. C' p else{1 S# ~% C5 Q/ N% w( ?7 ~& h, q& X
d=(y2-y1)/2;) K- j6 ]; x4 b
y0=(y1+y2)/2;
* p5 R6 T/ B5 k x0=x1+d;% B5 O( K' u7 }
x00=x2-d;
2 w: y# \6 g% S' ?3 Z# g1 h for(i=0;i<d+1;i++)
+ x1 n, y1 n( y. ]/ Q recls(x0-i,x00+i,y0-i,y00+i);& d- h/ D+ h3 y8 j4 q
delay(10);
5 T, p; q( V4 n: } }6 Q$ J6 Z( I A# Z1 w7 H5 W, D
}" O, d# P T. Z6 X2 ?
+ N# Z, y: \) a0 U: _& k5 A0 I5 [
/************* clear rectangle side(矩形边清屏)***********************/4 g& R) B+ ~: u) @- |' l
" A, a; L' Z2 P+ O1 t! _0 x void recls(int x1,int x2,int y1,int y2); }- b. R5 {, B9 ?8 u- d+ A
{
$ k2 O( B7 \( i8 _) e0 b' Y! ? int i,j;
3 ]% W6 Y. Q, x: B2 g" ^. T' ? for(i=y1;i<y2;i++){6 z* Z# g' U; }: E3 {% n/ Z; a
goto_xy(x1,i);9 [- Z/ m4 {$ J% q& F5 D8 Y1 \' ]) _
putchar(' ');
5 ~" a+ L4 X& v goto_xy(x2,i);( D6 J. i \' y, f. i3 N! i; W) @4 n. Y
putchar(' ');2 g9 i& O. n9 U* ~9 K/ b
delay(10);
+ u, P1 J' \8 | }4 w% U6 `9 Y% y1 e8 k
for(j=x1;j<x2;j++){1 N3 c+ r+ U1 |: A& O r$ t
goto_xy(i,y1);
+ a( b. ~3 g* d c: u( b8 R, g& ? putchar(' ');/ q# `* V9 i: t5 w1 ~; T
goto_xy(j,y2);
) l4 {* i$ p' K4 k( P putchar(' ');
6 V5 h K8 w6 O$ n+ m delay(10);4 k7 N' K5 V9 b( f4 x8 U
}" @* |3 T; A7 o& ?) a/ S) G
}1 K6 s$ K" u# z$ l) X* p0 x
/******************open screen clear(开屏式清屏)*********************/
- e) q+ V1 [1 G3 B2 s& C: w/ v" g6 T. f, t
void kcls(int x1,int x2,int y1,int y2)% N7 g7 ]3 y, t- k: s' f" U$ {8 W
{
2 d8 z0 ]( x$ I int t,s,i,j;' ]- q% h8 i* w6 C% o d8 j
t=s=(y1+y2)/2;
9 P: _2 ]# n6 M- ]( ?; c for(;t<=y2;t++,s--)
' T9 {7 o7 P% ~1 z; H S for(j=x1;j<x2;j++){
' m; k( O( j3 c) G" }/ n$ I+ S+ G goto_xy(j,t);
" q) c1 _$ R0 o+ Q% _' O& p, Y putchar(' ');% t$ m2 e: x6 w! e7 }* l: b$ j
goto_xy(j,s);$ W& w8 e" [5 r* Y4 W1 ~9 P
putchar(' ');
W; m& C4 U% m8 W- L delay(10);+ L2 H5 _1 p. R3 N1 b+ w( u0 }2 Q
}! x+ h& r9 |0 T
}8 O* f* s7 y* B H
/*****************close screen clear*****闭幕式清屏*******************/
" ^- K/ L9 ^3 w8 [( \" C/ I2 Z: n$ z* \0 T' M
void bcls(int x1,int x2,int y1,int y2)
) M& T% n+ M w+ S1 o {7 A" K) l7 S S# U: f& c
int t,s,j;
+ B0 j) T2 ^4 y" H9 G X t=y1;
8 C5 ~, U5 v# o. h7 | s=y2;4 p, X2 x. p1 F( ]% T
for(t=y1;t<(y1+y2)/2;t++,s--)
" Z4 Y" |) p# ]) F) B. ? for(j=x1;j<x2;j++){6 r: S0 T7 l, V7 z8 ^( y
goto_xy(j,t);
" k; o, W2 _2 {. b$ l: H putchar(' ');
& P5 U% b' g& p- A4 m; p goto_xy(j,s);
1 J. y$ w# @& a9 F1 n+ i putchar(' ');% ?7 {4 b% L, c1 H
delay(10);+ h& f; C- @, |+ b1 G
}3 f. V, w0 i. [4 i6 @- P
}
c4 |: A0 H4 X! q; S1 W /******************bottom screen clear(自下清屏)********************/+ ^2 j* e7 { o: V4 B
5 _/ y: r! `' ?" r
void dcls(int x1,int x2,int y1,int y2)+ P3 a( ?4 v6 [
{
2 s. y9 t1 x) M5 g# ` int t,s,j,i;- S4 p2 h4 H' ?9 L$ U
t=s=(y1+y2)/2;4 z& i3 Y# ~5 R! k, L: }# S
for(j=x2;j>x1;j--)3 X: x: K+ ?3 Q# F1 _3 T# T
for(i=y1;i<y2;i++){
3 `, ~: x/ z" [" ]) j9 n goto_xy(j,i);" \$ E" `& a/ V2 k0 A1 K9 m1 C
putchar(' ');
6 v0 J% ^; c" P. { delay(10);3 q, O5 s2 ?& h: k# ~- F$ ^
}- T2 x3 J, |2 r: F" N& l
}
/ F! R- f, ~8 l9 o( J$ K /******************设置光标子函数******************/
+ \; I) i, u# p2 B. B; n$ N, d! S$ O3 L' D$ y0 L; p# F
void goto_xy(int x,int y)
. R; B3 J- L! }9 t3 U' D {
6 o& f2 c$ ?, T" Q. A1 W4 v7 _* k union REGS r;, Z V, O7 I6 Q
r.h.ah=2;
! _$ a. V) i. N: Z( } r.h.dl=y;9 ~6 ~9 J9 |/ t
r.h.dh=x;$ f: D! ?0 z a# k
r.h.bh=0;% b- c2 ]) [7 U0 L- d5 W
int86(0x10,&r,&r);
- M: W0 |, ^" o. k" {, o6 ? }
! H9 s5 J6 V( c7 g1 T
* a& D- Q! G K /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 X/ L# X p, a$ W6 v$ x* s7 _
% \: X9 R) Q- f# T void puta(void)
$ Q$ U) {/ f. V# Q0 V: |( }* o {
- E0 H& M8 [, j8 e8 M6 j' } int i,j;% |& ~5 a- d8 `8 J d4 _
for(i=0;i<24;i++){
% H) l0 z0 v9 o5 B7 ?$ b! {' o for(j=0;j<79;j++){
& t" S# L4 W7 M0 g; V( c) Y goto_xy(i,j);7 Z6 w' E. F( b2 {* r3 F, q1 J
printf("a");- k+ K0 a6 f0 |2 p/ b! b- n/ p" q$ W
}
i9 Z* b: I# H$ ?2 O& y$ t }$ W6 t" h% O& d$ S
} |
|