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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 A0 M; `/ W) p' h& Q. ?9 D$ R N6 N" M
- f+ `; f+ _- ]/ R 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 H/ W7 I+ e! Z0 S! j8 p
p1 w% D5 Y v' `* ^7 T+ ? 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # ~' L1 _% |! }/ a
子函数及演示程序:
( D3 B% s0 i; P3 q0 ~8 S4 Q: J" W& ^6 i: D4 f P6 h
#include<stdio.h>
4 g1 O& S' A- f# G% D$ } #include<dos.h>) ^* f/ |3 d, u
#include<conio.h>
2 ?! u3 j9 P1 y3 b& A/ Q( A3 [) G' e
& g$ M: n& t1 Y, i) T$ } void goto_xy(int x,int y);
3 F2 i( \& {% E. I# j! r3 g void dcls(int x1,int x2,int y1,int y2);
1 L! @& T. K* ?: _2 e6 {) F void bcls(int x1,int x2,int y1,int y2);
1 j6 [3 P+ P+ Z" Q, w void kcls(int x1,int x2,int y1,int y2);4 \+ C9 B2 H+ @- H4 t4 X6 n4 I
void recls(int x1,int x2,int y1,int y2);8 i7 T A K x" M$ f
void zcls(int x1,int x2,int y1,int y2);' P; O' e( P5 R7 T- Z+ p3 g
void puta(void);+ L) n( l8 x3 {- g! Q1 @. p$ _* ]) r5 ?, _
( l3 A' s X4 ^' O4 k. Y; u7 b" D' e. U7 r {- _6 D
/*--------------演示程序---------------------*/5 u, w" X. D& W Q
main()/ M' V: L9 o; j4 \, Y, i4 q
{
0 P* o ]5 E7 [9 t: M5 ], k' K" K puta();
) c9 d3 T( X2 f0 B# }# Y$ s getch();
. a0 g" L+ F& j1 H! r- ~" p3 m dcls(0,4,0,79);
: f, [+ g- \: t3 y getch();
/ E& H- V* g" W' s9 Z9 B# B puta();* d$ \/ }+ q6 j: O) Z
getch();
0 @$ \, m& {4 v2 J bcls(0,25,0,79);
) `$ l$ |: p* Q3 {+ Y9 J getch();
" s. ]0 U# ^& |& s/ x g puta();
" k6 I" B& O5 B) O getch();
! U9 S# o& J. H9 H8 F! [+ z' r zcls(0,25,0,79);
8 m6 m, D. F m getch();9 a: I1 \9 C; |7 m
}
" T) S) M/ a$ e2 ]3 V) c /*********center clear screen(中心清屏)***********/* D8 ]5 C2 ~" g- F! V; D; _
void zcls(int x1,int x2,int y1,int y2)8 o& W0 p( V% J$ D# T; q
{
, {+ {9 p4 Q4 Y" H0 T int x00,y00,x0,y0,i,d;
2 w4 h7 u4 Q2 O if((y2-y1)>(x2-x1)){
) Z$ q" ^4 j5 f. a0 }; Q d=(x2-x1)/2;
" e( F, f- r; } L2 X x0=(x1+x2)/2;& K, C' r- H3 Y) c
y0=y1+d;
3 |9 w) W4 Y F, i y00=y2-d;
, N% G. V. d5 z for(i=0;i<(d+1);i++)
2 n) O* B2 x5 T. v* w6 L: @ recls((x0-i),(x00+i),(y0-i),(y00+i));/ a6 I1 }* |; d5 ` I
delay(10);
4 I, n: s; l8 X2 M }
9 W) f+ g6 ~$ b5 f, ~ else{
, @* q% Q8 r4 P/ M- N9 V3 E d=(y2-y1)/2;% [4 @1 ]+ I$ j" g# K* ~+ j
y0=(y1+y2)/2;1 v7 V* I- Y/ [& j, _+ Y: V
x0=x1+d;: ~" T5 o- [/ f3 i" b
x00=x2-d;9 _# K3 m3 N4 ?, a/ Z
for(i=0;i<d+1;i++)& \6 J, w+ Q, S. U5 u
recls(x0-i,x00+i,y0-i,y00+i);
+ p0 G! \" f* g7 @# W3 a delay(10);
* i1 |3 S! B+ l. w+ C" g }3 u+ U5 r/ ~2 M2 F8 k2 b
}, K7 q& i. R) O' Y& M3 i y6 n
/ ?9 e' @) C6 N2 l& ] /************* clear rectangle side(矩形边清屏)***********************/
. B5 S: I/ m1 T% B% t; A
' d" q$ d0 Z; X; O* C1 l void recls(int x1,int x2,int y1,int y2)3 j4 m; j5 X1 U( q) D+ q
{) N/ [& Q9 O* X! k7 H
int i,j;
* p, B9 X) x# Q3 b* }- R! `3 ] ^ for(i=y1;i<y2;i++){, q/ H4 ~: k& m+ y3 b2 O
goto_xy(x1,i);2 w% f2 ]; D: O: O
putchar(' ');! r( w8 {9 s8 Q' P: L" u5 O
goto_xy(x2,i);
: `) r4 y0 e" p i4 O! \+ R9 G putchar(' ');
# u* n. _9 o' r delay(10);
6 f7 i$ ]9 F/ }% y: I% |1 t. E' y }( u: S7 F- [: P0 r' Q+ `
for(j=x1;j<x2;j++){! }2 B9 i# E" ~9 @2 v( P* ?1 g
goto_xy(i,y1);
m+ I$ o5 A% f* a- C+ H' [ putchar(' ');
( ?' G- u$ J/ Q9 M% w# m g7 h goto_xy(j,y2);
) s6 U- f b+ W1 g7 n putchar(' ');6 a. W7 `' O5 ]3 E$ O% c* u
delay(10);
V+ `$ q7 c$ j }$ v8 C2 V; i ^- i" D& Z) a4 G
}+ N; A, S9 H2 |" Z
/******************open screen clear(开屏式清屏)*********************/
0 H& h9 d O- W' S5 z
6 I7 N& G, U0 {& R void kcls(int x1,int x2,int y1,int y2)
: t9 `4 s7 @; |/ C9 V8 | {+ q1 m6 L, a4 d7 _, ?5 Y" \: i
int t,s,i,j;
( N! b# e" g% B2 g4 V1 n( c5 i t=s=(y1+y2)/2;4 U% Y( o% s" Q! [
for(;t<=y2;t++,s--)
1 M# U' `! |4 ^, }: W2 f% ~ for(j=x1;j<x2;j++){* g. d ^2 G* A$ D/ i# D3 _8 J
goto_xy(j,t);
- Y) L4 G' [# o6 b% U" P8 T4 c putchar(' ');$ I4 k# x V' p: h: x
goto_xy(j,s);
7 t p U D% }6 c9 i, L& T$ d: I putchar(' ');: y7 x5 @2 m/ w6 k
delay(10);, u- q* l% m7 \4 w. y3 y9 F7 ~6 r
}
% k, ^+ x& F2 U% w5 E2 K. w% n9 F }1 _3 W7 ]8 H8 T
/*****************close screen clear*****闭幕式清屏*******************/
- ^8 }9 R1 M7 W+ p
4 S3 U* ~1 [0 z ?- A9 M i, { void bcls(int x1,int x2,int y1,int y2)" p1 R, I0 N5 W5 g4 `
{
# Y' n* f+ B. X$ v) R0 @ int t,s,j;7 s2 t, J( `& ~
t=y1;8 s+ ~2 d& C& P
s=y2;
9 G9 K3 u6 I1 j" J for(t=y1;t<(y1+y2)/2;t++,s--)* Z5 ?: R. T; z6 C6 X4 X3 F* E
for(j=x1;j<x2;j++){
+ y4 W8 z3 S' G3 I) a: H, e goto_xy(j,t);# a3 e- M# j9 i
putchar(' ');" ] }5 y- U7 O" d" ~, B
goto_xy(j,s);7 B0 b* q0 S% E1 e
putchar(' ');% N* W: ]4 X: A9 q, n4 \
delay(10);) ^. V, M; _7 [0 d- ]' H' C0 G! r
}
: j. ?$ [' O+ r% v: Y0 I& {, T& _) k }
y/ F7 C4 E) l# d+ I /******************bottom screen clear(自下清屏)********************/
- D" I2 `: |8 m2 t5 u. _# b# Y: o# T
void dcls(int x1,int x2,int y1,int y2)
; j: }4 W, T1 V- j: |, |" b$ i1 s: H {
2 _3 _* w" `2 M, ~7 h1 F. N+ J int t,s,j,i;2 H& Z) X2 \, i
t=s=(y1+y2)/2;
4 [: p0 H7 |' P for(j=x2;j>x1;j--)
" n3 q# L+ t/ ^: j6 ^ for(i=y1;i<y2;i++){
8 V3 }. e) n T$ L4 g, X6 H% ] goto_xy(j,i);
* R4 l/ c( | i. l* l9 ? putchar(' ');
4 q* e1 D( U' f. x+ n delay(10);! D3 T: |1 K* P
}
5 g4 [1 X+ i8 T2 A# k% v6 P }
8 A6 P* i- I: e /******************设置光标子函数******************/
. ^0 F5 @/ D" H9 _% D4 U, `. g% }1 P2 P
void goto_xy(int x,int y)/ H$ c8 m8 s& L! K- ]
{# {) P# k6 s' Y$ M7 [! d7 N
union REGS r;
6 h3 L& u/ {9 e: ^& K+ x r.h.ah=2;+ Q$ L Q# x; \7 r/ L4 ?
r.h.dl=y;
% X. o6 F7 U# C$ b& K* S5 {9 `3 m r.h.dh=x;: H. I0 A; l5 B8 C
r.h.bh=0;
3 h& r) h y; _" K! U int86(0x10,&r,&r);3 H& Q a. ?5 q) O
}
8 v+ }9 O4 F: ]/ F, G3 x: i9 l3 H4 K& U6 _% t/ N5 f. u
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 w! W7 R$ V+ |% o. v! H. B1 N& E! e, t5 ~# n
void puta(void)
1 d8 I" S! Z4 q, c7 ]& a {
4 {8 B: e" z: {1 ? int i,j;& a* A+ m% N/ g. x6 Y% R
for(i=0;i<24;i++){& }/ G9 [" m; Q
for(j=0;j<79;j++){
E8 J; E2 D+ }% Y1 K goto_xy(i,j);* \) [ f( k# `. M# u
printf("a");' {- F M6 u* K1 h X$ c/ o3 ?
}
0 W) ]3 g1 w* X% w% e. l$ u }
* C L( P& C# G0 W6 s5 n6 X( L } |
|