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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,3 ^7 y5 \- j# g5 r
( x, l1 U* l0 K4 W 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" K& S8 h* R: O3 U/ D
9 k6 t7 E- v2 v' r% O5 R7 `
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 V5 B1 d7 C6 `2 }2 |
子函数及演示程序:1 H9 F8 h& S* S! E" ]
3 m% `# w5 E1 B T$ U% \ #include<stdio.h>
5 l" z* M: ?, v, D1 M #include<dos.h>0 j1 J5 n- h% ~( C5 S2 @ o
#include<conio.h>& L2 Z6 y2 f2 b$ T9 F9 }
! F/ }( t) X1 }: L- l v! G3 T
void goto_xy(int x,int y);
3 t% T. L! T: d) A% V& N5 u void dcls(int x1,int x2,int y1,int y2);
9 c2 E0 z2 U2 m void bcls(int x1,int x2,int y1,int y2);
4 x; e: d! i0 ~' R) y void kcls(int x1,int x2,int y1,int y2);3 `% {' k3 a& u) X+ T
void recls(int x1,int x2,int y1,int y2);
. R; f# K( d- z- j& D `6 C void zcls(int x1,int x2,int y1,int y2);
5 j. E% G4 H9 k: n( p9 C# F3 D void puta(void);
5 s, b0 n1 B+ N# K+ `$ E/ B3 F
3 f i2 }3 |% f% j2 _ /*--------------演示程序---------------------*/
4 Y( M& e* N' L; F( z: y6 M6 q. j7 R main()3 ]5 ?" ^' Z5 `; v3 N
{
! \* y* T0 }6 o7 y1 T$ R puta();0 P3 Y* ~6 u3 o$ r- T; X: L% d/ _
getch();
: ]5 Q6 p; m* `' I8 Z* A dcls(0,4,0,79);" M$ Y' |: R/ R0 t( _# n
getch();
/ T4 M. i h3 ^2 | puta();
' X0 p5 G6 ?% d; h. z getch();4 _0 D- ]2 X; I( `( @ G
bcls(0,25,0,79);
t" K& x$ @' A0 D getch();
% n& @' f/ k" e* j p' v5 h4 k puta();5 Z( z. ~: o+ s: b9 `5 y
getch();$ k+ `1 J- Z# C. d
zcls(0,25,0,79);) ^' ~8 i0 n% C1 E8 z7 j
getch();* Q+ W4 J5 |. c/ q4 o0 q
}
8 a+ ]# A0 g' R* @$ T5 L% ?) x /*********center clear screen(中心清屏)***********/
' M! V7 m% z' k( p: V void zcls(int x1,int x2,int y1,int y2)
_' v+ R+ }. B$ o" K {
. o0 B$ ~+ K8 d+ H int x00,y00,x0,y0,i,d;: l Y/ S, a! E8 r; w% W" B
if((y2-y1)>(x2-x1)){0 ~# u+ B& \2 W) I& `, |* `+ b
d=(x2-x1)/2;
# I3 w/ Y9 h5 C6 b* A4 u x0=(x1+x2)/2;
5 n4 E: R$ o* }! K+ i2 i' w7 O( o y0=y1+d;1 p# b7 c2 Y% B& ~7 |& F V( S& Y
y00=y2-d;1 o* n1 @4 Z1 T1 V/ E: U
for(i=0;i<(d+1);i++)
2 X% ?3 V& |4 e: M1 i' C recls((x0-i),(x00+i),(y0-i),(y00+i));
0 t' C) k3 k$ U delay(10);" x& e: h3 d+ \6 l4 w, K
}4 o' n6 Y2 y8 K5 r
else{6 ?: m' G: j3 r, m' w* k5 m- n
d=(y2-y1)/2;0 y8 Z4 o1 g, b& ?% P5 i, @% h7 h
y0=(y1+y2)/2;( @6 \- c1 V$ U7 x0 R
x0=x1+d;# ] ^' B1 N8 g0 V. Z ` V
x00=x2-d;
, O, W! g7 }8 _% V! E for(i=0;i<d+1;i++)# w9 T5 q9 q, y- o
recls(x0-i,x00+i,y0-i,y00+i);3 |1 Z- \+ R$ N! O& D, m/ ~2 ^5 v* o4 p
delay(10);
, r( C; |' p; S1 q5 q# L2 b1 R, b }
+ J4 I4 f, S( h }4 G+ L" T7 ?+ X+ B0 k
+ q) X: z: R- Z% U/ @4 }+ n; R4 G
/************* clear rectangle side(矩形边清屏)***********************/0 [0 Z* y, S% W' f
4 l( S! W) ?* d9 c
void recls(int x1,int x2,int y1,int y2)
4 u# L* W7 _3 G/ I {" W. \: v' t4 O9 A
int i,j;: P/ C o( R |+ u
for(i=y1;i<y2;i++){7 r( y6 ?" T# z _ v
goto_xy(x1,i);
& ^2 @5 y4 [9 K( i9 `4 R putchar(' ');
5 }/ i5 d2 |$ p3 G1 s# J goto_xy(x2,i);
' Z( H* R. Z/ |# j3 z+ B putchar(' ');
' Z7 W% e+ `+ }5 M) q4 K0 q delay(10);* ~) a: ]. Q% q/ c6 x$ S$ n
}
c& A5 Y% U6 m; V8 W( h for(j=x1;j<x2;j++){
% l6 o+ t: ?! _+ D8 V, l# m goto_xy(i,y1);
, j" O9 i7 y% `6 }7 o& R9 O putchar(' ');
3 J) l9 Y; ]+ o+ H( Y+ T goto_xy(j,y2); S# }0 T9 o7 U: P, H( S5 P
putchar(' ');
" z- Z6 T3 |, N, ^5 B7 v- V7 n3 m( Y delay(10);1 d( v- d; w c" P
}( D5 ]7 G# b( E4 @
}
! {: k# G# Z h2 j' I /******************open screen clear(开屏式清屏)*********************/% X; t% x4 G2 k! c8 [
! m u7 v1 M1 C9 Z/ w/ d7 w void kcls(int x1,int x2,int y1,int y2)6 Y& E8 j% u$ }' O+ f
{
8 {5 S/ r# K2 M- T9 L) T int t,s,i,j;
6 ?3 E% m* n$ j+ T t=s=(y1+y2)/2;
7 r1 {# e1 T% a9 u: s& p2 Z for(;t<=y2;t++,s--)
0 |! p" C5 g- G for(j=x1;j<x2;j++){9 N+ @& w: K$ g
goto_xy(j,t);
6 D) ~4 n& M' w: g7 y% S$ x putchar(' ');" c) V$ c3 q8 z5 x2 k/ G
goto_xy(j,s);, v) I" ^/ C: Y+ a, P# H
putchar(' ');
% s, q' m) v& P& S# w: m delay(10);3 k: E1 q+ U3 F$ {, s) P( f
}
5 I) d& f! ? s& F7 ~ }9 n4 O4 I2 Q. ~: t" n
/*****************close screen clear*****闭幕式清屏*******************/$ G) N: c+ ]# r: [1 s0 F
% `3 R# I6 G, d# D8 x0 l
void bcls(int x1,int x2,int y1,int y2)1 ?' ^. f4 K5 P% U: @+ o
{7 @0 e+ n( `2 ^0 L& r9 L" h
int t,s,j;2 V' }" E: A- b! s. b& Y
t=y1;
7 e6 P6 Q' _9 B s=y2;9 L3 x3 r' Z3 q/ f
for(t=y1;t<(y1+y2)/2;t++,s--)
5 x+ @$ C" @- c- q6 f; L. e for(j=x1;j<x2;j++){# ]' c# Y. U7 }6 }
goto_xy(j,t);% p1 [% _; m5 Y1 R+ d
putchar(' ');
5 K. e+ A5 {, A! U- K. _ goto_xy(j,s);; v5 P$ V% b1 J
putchar(' ');0 H g* a$ F ~- P, ~2 q
delay(10);
% S* |9 g4 W" M' V# i* Q }
2 U- h& e* K, q& \) Z6 Y }
; @& R! z' f( o# K( V+ K /******************bottom screen clear(自下清屏)********************/% S2 K$ _: G1 ]
- P$ M8 @. H9 [& F" @ void dcls(int x1,int x2,int y1,int y2)! W) ^5 Z/ f# p t7 M
{
2 u8 y; ^3 `, b4 H& ] int t,s,j,i;* S1 j8 q. B$ f6 _5 l# I
t=s=(y1+y2)/2;
% v' `& p) U- T u; J4 p for(j=x2;j>x1;j--)' @& @7 { S }$ I/ d: o! ?9 B" m
for(i=y1;i<y2;i++){
; w7 z `# r" U0 y$ |; [ goto_xy(j,i); F' t' Q" Y0 E6 g
putchar(' ');
4 P4 `/ T( ?* u delay(10);
- n. B4 g: N/ p v7 m, V* ^ }
" M% j+ I2 X, f }
+ N* {' t& P& N& t /******************设置光标子函数******************/
8 j- z; \! g I* \ k0 J8 O5 X1 ~! t' j( b
void goto_xy(int x,int y)
' G9 p5 ^1 U( A5 Q9 Y {
3 I. m8 W9 T* j% X6 r0 B2 f union REGS r;* X+ U9 w/ H2 j" o. O# T3 z
r.h.ah=2;7 ~' J3 n& G+ v9 P _
r.h.dl=y;5 n" w* \7 W9 }
r.h.dh=x;
" \! V9 i0 i% \3 i) P8 s; k r.h.bh=0;0 y. C/ e7 M) L$ ~" h+ N$ w
int86(0x10,&r,&r);
- U9 a @' Y! v. x2 q+ @1 I }
1 l) g/ J3 ?3 q+ |2 Q$ F$ ~, q2 G1 ]! p) P0 ^* P
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
* |% `. d, a4 s% a+ T4 q" w0 Y/ p+ Y
void puta(void)8 b0 o: G0 Q* w: j
{/ E9 u. g$ `. l C& e
int i,j;
5 S$ q+ C# s; R/ ] for(i=0;i<24;i++){
$ S6 V+ [ X. z' @; s- d" ]5 U for(j=0;j<79;j++){- n8 M6 s' B+ s4 b% E
goto_xy(i,j);
1 J; b4 A: u. e3 g( O- p; b; ] printf("a");( N' d2 s8 J8 Y
}
3 N6 ]8 M' X/ w1 m3 O% e2 F: h# h }) @% f8 X8 m- w* s' o
} |
|