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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 \* q/ }6 B9 R1 `) S
# y, r: G7 S2 t 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 }3 r1 z9 X' @( a5 i* e% \
! g: |- F4 ~9 _& x5 I b8 X
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
m8 d1 I0 [3 |# }, p 子函数及演示程序:
O/ E C y: R0 E3 d) d, e2 _& J7 M
. K+ s* S1 H9 o #include<stdio.h>7 Q& n* Y6 Y# a) U6 f+ {% J0 L
#include<dos.h>8 K8 |7 u: W1 H, V: t2 P
#include<conio.h>- V, [. y0 i+ \8 j: |6 b
9 m$ Z& A+ @: q" U: l8 X# ^ ^1 K void goto_xy(int x,int y);
% ]! ^3 A) U- d2 O( W" l void dcls(int x1,int x2,int y1,int y2);
2 o) _# f9 b1 d+ a2 G void bcls(int x1,int x2,int y1,int y2);4 h+ x( y! j3 P6 s. l
void kcls(int x1,int x2,int y1,int y2);0 l/ g+ G6 t* y, a
void recls(int x1,int x2,int y1,int y2);: K* K1 H4 b2 I. d2 n `
void zcls(int x1,int x2,int y1,int y2);( I9 O: e3 a, B8 k! T6 E" o
void puta(void);6 j5 G9 F( R: z
' B5 P g9 c" ]
' y/ O( ~' d6 ? n. ^( R
/*--------------演示程序---------------------*/) M+ t! v# q: h/ s* {
main()
$ N1 q a/ ~5 n/ E {% @7 ]* }' Y0 t& I6 a
puta();3 i) {" H% s6 @4 g4 S5 ^
getch();
. K) G/ P W y! b$ K dcls(0,4,0,79);5 f6 Z8 W& T: |2 h& U+ z
getch();' L+ r/ `2 I* A( _: F# D+ u! R
puta();
3 l& c( J, n1 M getch();
0 A5 A& e# N# s5 ^ bcls(0,25,0,79);
; G- {! T% Q2 ]/ k5 K4 s getch();
; d. R/ @! [/ f, t ]) \& s puta();
/ P8 ^ V' W) y1 X" u9 Q. r- Q getch();
c, @2 v# R% v% o$ F. N9 h/ N zcls(0,25,0,79);
9 L) n+ D8 s9 l* Y5 P" m getch();
; k" [+ f! d O( z( T }
- Y. q7 F' [: O- I3 ?* f# B /*********center clear screen(中心清屏)***********/
1 {; K& T3 o7 B+ J! h void zcls(int x1,int x2,int y1,int y2) a1 E0 ^( h/ [- S" |
{
- f9 \( W U6 ?9 k int x00,y00,x0,y0,i,d;8 O: g/ {! M0 V6 v
if((y2-y1)>(x2-x1)){
( a- V' v) G9 \6 S$ ? d=(x2-x1)/2;
5 c9 T+ k9 z; m x0=(x1+x2)/2;2 d# F1 [$ w8 r$ J, J+ J
y0=y1+d;
8 R0 |& g5 g: q7 o4 M2 h. I' u) ~1 O y00=y2-d;
: f1 b/ r! a$ x1 B; x: z. K8 P for(i=0;i<(d+1);i++)% P' k) G, O8 Z- c% E! r
recls((x0-i),(x00+i),(y0-i),(y00+i));
1 W6 P- }9 m7 _' B0 ^+ e delay(10);
/ Q$ `6 d5 m6 ]0 n4 q }- x# \4 M6 M& K* g
else{
- `# e0 p6 M5 |) f6 _6 l) ~ d=(y2-y1)/2;+ o7 Z5 _) [$ x2 [* e1 M# a
y0=(y1+y2)/2;
% y9 R! F8 k3 r* Z$ w x0=x1+d;
5 H6 w) ?% B) U6 {( d x00=x2-d;7 A' P4 W% L7 s. l4 H, K
for(i=0;i<d+1;i++)+ o( W* Y; a1 j$ @9 h/ t
recls(x0-i,x00+i,y0-i,y00+i);
8 t3 G& T* T, I delay(10);& i: _5 P' J. C
}
8 |8 I+ N: }( U }
# [" p3 J1 C9 G" r4 J6 j: u+ F: }# c I5 Z( i9 @
/************* clear rectangle side(矩形边清屏)***********************/# `( h; c+ f! w3 X/ ?8 w" n5 ]' G
7 A! v: i; Z- }0 o5 L void recls(int x1,int x2,int y1,int y2)" D: v4 E. M/ a- T( F0 g# W
{! S0 @9 |" f4 _
int i,j;! Q* j: [, M4 o7 [+ \ e
for(i=y1;i<y2;i++){
2 N2 ?* |" v9 p goto_xy(x1,i);$ k! A$ e* B% k& u& y# t# @
putchar(' ');- G3 ]0 A3 D, S* q' K
goto_xy(x2,i);9 \1 L1 u- n0 l3 I& ?
putchar(' ');
) ~+ Y+ R8 Q" {: ?9 {9 u2 I delay(10);8 A* b( A' I5 y
}' |! a, f9 J; e3 A
for(j=x1;j<x2;j++){
/ i' V# }6 ^) n goto_xy(i,y1);3 B, X& C! s) L- o7 A% F
putchar(' ');
* e/ `/ L, y: g H, \ u7 j G# p goto_xy(j,y2);
. A+ n* j7 i5 D X& x8 _ putchar(' ');4 j ^0 w: c3 V L0 i" I6 c# B z& k @
delay(10);
6 v" E3 u/ \9 Y# v. U+ |. H* d }
, a: l" P1 m; _% W: s3 p! Z }
/ O* Z% x" y1 L% Q K5 e8 y+ x! B /******************open screen clear(开屏式清屏)*********************/
7 Y4 i, ^/ {/ m2 D+ l/ ~5 w/ U8 p8 r6 r; n7 `$ V" g
void kcls(int x1,int x2,int y1,int y2)' [- _, g: z+ t7 V( t" v& X
{
! g$ }8 w& N: h: H' {! y int t,s,i,j;
/ A/ L% H- `. K t=s=(y1+y2)/2;
' E. H+ n3 ]$ k! }- Z( _ for(;t<=y2;t++,s--)" ^6 p: y6 K! ?. v" @7 i
for(j=x1;j<x2;j++){6 z5 r& b2 O' `# W6 W6 m( d0 ]
goto_xy(j,t); T" w6 o: E; t5 ~$ Q3 j$ t# \# F
putchar(' ');
' j0 B" [. _3 c goto_xy(j,s);
1 }7 t# N1 r( e2 A+ \" B putchar(' ');
* `1 c- j0 J. @( K+ y$ O delay(10);
3 c! c8 Z7 h/ Q" M! o6 y# A E }
- w( Y: n j% b/ {; h }" A# ` t# P' M; P- \: w/ ~7 [
/*****************close screen clear*****闭幕式清屏*******************/
# X1 L+ q8 i+ }$ p+ N
3 k4 S- h7 [" O" |# N0 Q void bcls(int x1,int x2,int y1,int y2)
: j- ?" o4 b8 P {
7 T6 ~7 p8 J9 I8 X; W, O5 K) U int t,s,j;9 z5 x1 C6 F( ]: F) ]3 c
t=y1;
f W v, Y: {6 T) y3 j; P; I s=y2;8 q" N( F2 a1 M* O' x5 N' C5 N
for(t=y1;t<(y1+y2)/2;t++,s--)8 D; b9 p! l/ u* P* Y8 a( E4 E
for(j=x1;j<x2;j++){
. ]( s8 n3 A* B6 h' P0 e7 i( \ goto_xy(j,t);
( H# Q$ ^& z' D& T: S) ]' [; z, Q putchar(' ');( q" r1 S a2 j$ Q
goto_xy(j,s); T" t7 y1 l) k) k
putchar(' ');
; Z9 R( [9 a2 h delay(10);
/ `* V0 N& s3 M2 x } O( n/ S" r! I7 C8 T7 e
}& @: K7 V Q; R: X& i- B8 h8 ~' Y
/******************bottom screen clear(自下清屏)********************/4 Z7 Q& E9 Z1 ^3 G
& c# K+ Q: b+ S7 g+ H) k: x void dcls(int x1,int x2,int y1,int y2)3 r8 e2 L8 r/ r3 Q) g
{
0 f& Q1 x0 H+ k4 ]' ?2 v, g int t,s,j,i;# |$ e7 P- x. `' G# k1 y
t=s=(y1+y2)/2;) ?" o8 `1 @3 h. V4 u
for(j=x2;j>x1;j--)' J1 y# {5 \, w* g( s7 C ^. x
for(i=y1;i<y2;i++){
q. I% c" \- \" ?2 }! X' Z. x goto_xy(j,i);1 b0 Y; ~- r+ ]0 w4 Y
putchar(' ');
4 K1 k9 d! p7 i* q: H \ delay(10);2 E9 `! I3 a/ p5 ~7 n6 V' D
}
7 O4 U/ X- e) f! H8 t' R2 V; `9 } }) z5 } j# `- L
/******************设置光标子函数******************/- z u5 S4 E# W1 e) |1 v& ]1 V
, ~* `9 ^8 S& r7 s: E void goto_xy(int x,int y)7 u0 ^0 K4 a) ?4 K2 C* c
{
7 r0 o3 V1 T8 | union REGS r;
' I3 p x) o% n" y- j) t r.h.ah=2;$ i, H, P, o& w4 Y8 k" d! Q3 ?
r.h.dl=y;0 ?! u1 Z) _. g2 _7 S/ h& j
r.h.dh=x; ~; }' y9 j, D
r.h.bh=0;
* J3 v1 V. R% m- ?! ~ int86(0x10,&r,&r);
7 _9 _3 C$ m: b3 V/ W2 Y9 p }+ ~$ d. l& B0 r6 J
: h- m7 w( t! m" T' Z, z W
/**********************在屏幕上打出一连串的a字母用于演示程序******************/4 d% q3 ^% s1 B. B. {/ b% J& q0 D
1 L f8 I0 `- y' y
void puta(void)
n' T# [4 Z, |$ z* V! }/ f- C5 w {
; |8 v3 r. a4 E \' k9 ? int i,j;
5 m# j' d5 S6 x5 e for(i=0;i<24;i++){
9 e' z2 B+ e3 J' x for(j=0;j<79;j++){/ N% d- t7 p) i3 Y2 N0 i4 V4 [
goto_xy(i,j);
- ]( |5 p9 B5 G: H0 b) V9 _' ^& ~ printf("a");9 T* V4 ~, k6 w8 c) X, V! A: ]
}; a4 |6 W$ W3 \) c
}/ Y0 P6 ]& B, k* O9 S) ^, ?
} |
|