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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
# V( M# \! z" [/ x' e$ X- D% T) j, i
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里) N, g& {9 S0 s0 A
/ w* M% M7 v$ d5 T, x 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. , D9 d- {" H$ i; S( E
子函数及演示程序:" f- N. F" X( J+ I B# z
6 m* e9 A8 j* f# T# f6 I #include<stdio.h>
2 R8 c* y& j: Y0 L #include<dos.h>% L, z, O% }( B2 w) t5 r: ~ X
#include<conio.h>& ^+ n4 E) t7 M2 J1 I$ W
" a# ~" D2 }. |0 {1 V void goto_xy(int x,int y);" J! w6 b/ v/ ?% w5 |: M$ P6 @
void dcls(int x1,int x2,int y1,int y2);" E6 u9 Y6 ]5 z" d$ W9 z4 B
void bcls(int x1,int x2,int y1,int y2);7 g1 I& g* |8 ^. u, z
void kcls(int x1,int x2,int y1,int y2);# ]. S7 x' t( S$ j
void recls(int x1,int x2,int y1,int y2);/ c; `; a; g& D3 ?5 H) Z8 M# Z
void zcls(int x1,int x2,int y1,int y2);
( |5 x6 E" E- b: r void puta(void);) j2 z' ~: w# ?. m8 G
3 B5 F5 E5 v8 J" y' E9 D* ^
7 }' ?8 I* u7 | /*--------------演示程序---------------------*/5 ~3 E8 l8 O2 q) g, T
main()/ c! \, g' B& a( U; w
{
" o5 R5 Z) [/ l9 K# N( h7 e puta();: i& H; L9 B; M" v+ D1 `' x# r
getch();
. ?3 @! `8 E& _; c" g! i6 @& T dcls(0,4,0,79);
; K. f6 `9 W4 e getch();
6 O7 n9 K4 m0 e. y- L1 A8 _" A) ~9 Z puta();( e" p5 ?* w w0 G% O4 p8 i
getch();! i* D9 M1 J* J! e, ^% Y* L6 o; f
bcls(0,25,0,79);6 r K$ \- Q' g& k1 {
getch();
3 M* T$ l/ g' u+ `$ V puta();! C2 B+ y' I& q- y) ]
getch();: X0 q3 ^7 Z% u( e; ?
zcls(0,25,0,79);
5 i+ t# c0 c. V9 N8 S! C7 x getch();
! P9 ~; l \1 l U4 A/ r }; `. h8 ~8 \$ f
/*********center clear screen(中心清屏)***********/
* E8 p8 u" f6 r+ j! }* Q& r. E void zcls(int x1,int x2,int y1,int y2)8 E0 f0 |* H0 T- w# C) u( d
{
: I7 o+ W/ u7 d4 ?* \ int x00,y00,x0,y0,i,d;
8 X( m$ z4 \6 y& u4 p1 m if((y2-y1)>(x2-x1)){6 Q6 w Z, I1 `. b
d=(x2-x1)/2;
4 D/ S6 R+ e* b x0=(x1+x2)/2;
" B l/ b O" U' `+ C! ~ y0=y1+d;
8 T2 Q" c7 u# l( I2 c7 t1 v- M7 C3 C y00=y2-d;
" ?: }9 { ^/ y9 d: z* }" r for(i=0;i<(d+1);i++); ~* ~8 E& ^5 W+ U/ I* P
recls((x0-i),(x00+i),(y0-i),(y00+i));, U$ u; i, ?, r
delay(10);
; j( P0 J* ]/ y3 I5 @ }
, J; q! r) A2 ? else{3 @6 ~& f) z6 b% d" L; j* A% Z
d=(y2-y1)/2;
2 H$ ~+ q$ j0 ~* }' o y0=(y1+y2)/2;
+ K: H/ P/ H5 V9 B x0=x1+d;* K% k- ~# G* j& O! \% Q0 {6 L+ I( a
x00=x2-d;
. D) x8 d3 |) q2 b2 A for(i=0;i<d+1;i++)8 c D' x4 S+ V3 {: }6 G) H
recls(x0-i,x00+i,y0-i,y00+i);, C, I$ o v3 N- g0 e9 [
delay(10);
9 I$ w" n4 I; S2 d* e) r# w/ Z4 | }
+ l# `& k( r6 E) _7 G }
, l# x) {" x' X! W2 b' z2 S# E
+ s2 C& M5 e0 V' @ /************* clear rectangle side(矩形边清屏)***********************/! H/ C! a8 N2 }0 L
" K4 T1 b+ ]% _/ x
void recls(int x1,int x2,int y1,int y2)6 R2 k' X) Y" o& }/ m
{: L% ?) p, T7 }2 Q( d: i7 A7 r
int i,j;3 D! S1 Y. Y. S' G3 a
for(i=y1;i<y2;i++){
# p( G1 ^' z1 J' \2 q goto_xy(x1,i);
8 m8 F1 p9 n9 P. n! H putchar(' ');* s ^# X, c, q) m5 y& Y' m
goto_xy(x2,i);! ], X: T8 X" u
putchar(' ');
- t) @: u3 C6 K5 q! D0 E6 S delay(10);
1 V- W% M2 w- E7 Z* J! w: p5 p+ q }
% f6 C. ]- A* ?( h9 c2 q0 l3 j for(j=x1;j<x2;j++){
% J% c5 } c. O% B3 s) x goto_xy(i,y1);1 f3 v! S5 }& _9 ?7 r
putchar(' ');
; Z2 J! I+ S& Z; n$ t5 V1 Q goto_xy(j,y2);' d8 @4 r6 g* U# S
putchar(' ');+ q9 M$ V% M; c/ V- ^4 I P5 v+ {4 s
delay(10);% C5 {3 O( C2 o0 ~
}
6 b, h0 |- y5 t7 A% E# Y }
1 J8 x* J+ s) w' }1 s /******************open screen clear(开屏式清屏)*********************/9 Q+ I2 x, l! H f% ^
$ J& j4 F5 b& Y" h
void kcls(int x1,int x2,int y1,int y2)
. |5 ]5 f1 H9 A' v0 G; \1 E% U {
u+ @, f$ `3 F+ G int t,s,i,j;. C( z- d8 Y' i% C( R
t=s=(y1+y2)/2;
2 S+ X1 w- a5 k9 M6 `0 c+ X for(;t<=y2;t++,s--)
v2 [7 Q/ N( f' T1 ?6 l for(j=x1;j<x2;j++){
. w- L2 b" p8 b1 b goto_xy(j,t);) i$ j8 h- M) e3 Z8 Y
putchar(' ');+ {7 ~9 j% B& C& x3 y2 a: V6 U
goto_xy(j,s);
) D W( }& V, Z$ Q) X3 s8 m putchar(' ');" n L# X% Q6 L+ c+ m. l2 q
delay(10);: A* _5 ]3 y7 O& O0 c: h& a# t5 Z! B
}* e$ `9 P( ?2 m4 U5 f' J' N
}
$ P' ?& e, K: A /*****************close screen clear*****闭幕式清屏*******************/$ c, `1 B1 c* G6 i. r! n) \4 _
" S6 |. x2 O8 |4 {3 b8 e
void bcls(int x1,int x2,int y1,int y2)! h6 ^8 S( n. Y% |* G
{
I' s, R3 B0 B. I/ q2 ~4 _7 ]0 J& f int t,s,j;6 y/ v/ S7 |3 B, x- N% d l# k: D
t=y1;) i% M* b2 h* J& U* _
s=y2;7 i( s* C A5 @
for(t=y1;t<(y1+y2)/2;t++,s--)
9 f; Z4 W9 E( ?( j; M* A/ x6 I; K for(j=x1;j<x2;j++){, K' r. k6 y9 N" r4 E+ X w+ ~
goto_xy(j,t);
; Q* a0 ^# r( z1 c1 r putchar(' ');
. g8 W, q q2 o1 y; f* s5 D goto_xy(j,s);- X# C& l# s: f* c& r6 y3 D
putchar(' ');- \3 o% a8 ~) h& A. {; {
delay(10);
* i. l: ]+ C+ G" O, q+ A) M }
* U7 O9 C3 T5 _4 W- X+ D }
' w4 L( l; H; e* y& Y# k4 J* d /******************bottom screen clear(自下清屏)********************/1 {( s& i# |9 I" G4 P9 p
+ ]* Y8 ~" B9 R) U2 @) f5 g
void dcls(int x1,int x2,int y1,int y2)2 z' w9 ~ Y; l, g
{6 J- c0 H2 Z( ^ u
int t,s,j,i;
! Z: g7 n3 n; Y6 U t=s=(y1+y2)/2;" @1 h' Z! z5 A
for(j=x2;j>x1;j--)
) e9 _& n, c& p& h for(i=y1;i<y2;i++){- j6 H# r; T; D
goto_xy(j,i);/ T& T, H# p+ ~
putchar(' ');
( J4 l; }5 E8 W$ R7 o) ]/ V4 ] delay(10);
9 p0 g, k# i$ H4 v K }- O0 M* [# o6 ~4 ~1 S
}% w; @ G, k; y( L
/******************设置光标子函数******************/1 q0 U5 t ]; o9 w k
$ F6 E9 g H; b# F) B- c! N+ { void goto_xy(int x,int y)
3 ^9 E) t/ A$ ^6 y% y {2 w6 R' h# H! J
union REGS r;
; \3 z7 O; X( ], h r.h.ah=2;3 m A9 V) z/ n: M A2 {
r.h.dl=y;% ~: t3 ^8 {1 m- ~
r.h.dh=x;5 z4 A" V: H/ c- k
r.h.bh=0;: l# G- e9 C: p+ s* e& M. F
int86(0x10,&r,&r);
( q. }6 Q9 e+ k1 e" } }
]( L, q. ~' u* _
* e* @! c+ B: z# h1 p8 E# a /**********************在屏幕上打出一连串的a字母用于演示程序******************/
: \! d6 D3 x4 M9 I" X6 m- \7 H0 V9 T9 N' |# z
void puta(void)# q/ E& t2 U; n5 o
{
( R1 m2 p4 o# ^( ] u int i,j;
4 @8 x9 s" A4 H% s5 x$ h' o for(i=0;i<24;i++){
" _2 x6 f8 j K$ V. I7 `1 S for(j=0;j<79;j++){4 h, i& @4 I) c( \6 K2 c
goto_xy(i,j);$ M8 F# B: ]- H
printf("a");! T+ F5 ?; B- n. a b
}( f: l+ M0 M7 d+ H0 R( }! [
}
' ]9 @, _8 w- m5 Q# c } |
|