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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 C% U& d( t2 }! r# }6 F0 e8 g) h
( r( b! ], W/ w% _9 U+ J 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ R- P% A2 i2 G, a3 v
q4 k& }$ T9 f; z2 U4 Z
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 P& \6 y; ] ?3 v4 [5 F: ]9 S6 ]9 } 子函数及演示程序:
/ Q; f, V* O8 H% [9 @' x5 o) K& B; j( B8 a/ H/ a
#include<stdio.h>
, n+ g1 C# L, o$ Z! s) O" _) B" c #include<dos.h>
z5 \8 V! V; N# J. K9 v# ?# J, M #include<conio.h>
& G# g. \* o/ b8 z2 V
0 ^3 m# l5 Y5 B- r L void goto_xy(int x,int y); E3 g- h1 _( m: ?
void dcls(int x1,int x2,int y1,int y2);
; u1 X; Z$ X, ^7 \ V7 G void bcls(int x1,int x2,int y1,int y2);- C' Z# m' g& `2 Q7 K
void kcls(int x1,int x2,int y1,int y2);
# ]4 `1 c3 s, ~" [: z void recls(int x1,int x2,int y1,int y2);, \6 H: r1 a0 F( h# @& O( x+ F9 L
void zcls(int x1,int x2,int y1,int y2);. @4 h# H$ u0 h4 A
void puta(void);
2 }0 M+ H6 ~( x: d8 t' o X2 y
+ u1 H t: g7 x \! x6 ~+ }7 _2 x0 c- C8 f- M% n) j8 K3 n
/*--------------演示程序---------------------*/
, } T; l/ |+ V8 o3 `5 I: m% [ main()
& b9 a" U7 u u, j {1 m9 e# C- ~; G* q2 R
puta();
! j( `, a' `7 x getch();
/ p( X- L% T! e: l# } dcls(0,4,0,79);$ c0 z" B8 V% r |; s8 x! v9 v
getch();
; ]* B% P* q$ Y+ w puta();
; B. ?. W$ ]9 u# ]1 S- D% U& i getch();4 ]3 Z7 f. A6 ~6 @5 n
bcls(0,25,0,79);
9 L) e: t! [+ ~4 O2 Q5 u getch();( z+ r! _! B1 L5 A( ~, P" t5 P
puta();
% m& i& f- O- L F4 y getch();
: N8 v% k" M7 A( p, i/ g4 u zcls(0,25,0,79);
: B' W9 O) P4 y& m7 r) t& d getch();
4 |2 h" s6 B8 L; l i5 D }6 h$ W7 R$ @8 |0 l5 ~8 }
/*********center clear screen(中心清屏)***********/
9 d+ ]5 I6 L0 r. K, M& j; { void zcls(int x1,int x2,int y1,int y2)
' v3 Z& d/ P I1 \' v9 w6 ` {
?- |: ^) B% Q3 i6 K* P" j9 t int x00,y00,x0,y0,i,d;1 J' q) F) s- M S% m5 g! F$ C
if((y2-y1)>(x2-x1)){
; ~8 I8 S1 \0 y. N3 W5 h d=(x2-x1)/2;' s2 a7 I2 g1 |( b" a( b) v1 C
x0=(x1+x2)/2;. F8 U2 w& e/ F1 A- Z" X4 w2 H7 w
y0=y1+d;
8 b- z% K1 G# G8 H+ J+ R6 t y00=y2-d;3 J6 X. v. J# r' m
for(i=0;i<(d+1);i++)
- E6 W/ W+ c/ F+ U4 F recls((x0-i),(x00+i),(y0-i),(y00+i));- M' ^# K9 m3 ?! X" M
delay(10);
& x3 Q' C0 B' y5 K! c: Q, m }
; y: X7 S% j' }! r8 B) e6 n2 l2 `8 e else{
$ }! i8 ^7 s1 u2 N d=(y2-y1)/2;
9 u3 @6 R8 O# r y0=(y1+y2)/2;
' x. f/ c% G3 B( Q d# f x0=x1+d;, f1 |8 g+ r! w! @# s! }: [
x00=x2-d;
$ X+ v9 n- e) |7 u9 _+ i0 h for(i=0;i<d+1;i++). p" r3 ~1 X' N) H
recls(x0-i,x00+i,y0-i,y00+i);
U4 g; D* d4 z: a: o delay(10);% S8 b+ X' }5 J5 `5 b, p j
}
D2 R2 g; u& Y } f4 J% N- q6 g/ e, K
* D1 } U& ]* u' X0 Z [ /************* clear rectangle side(矩形边清屏)***********************/+ D# l; g. J7 `: a
9 L% ^! n) _8 u T8 q, X) m
void recls(int x1,int x2,int y1,int y2)
9 y' y1 h: H8 H& K* k: \0 k {
' W7 e4 L5 h/ |! ~. C3 ? int i,j;
8 u( ^" j, c# v( D* I! m for(i=y1;i<y2;i++){
0 E9 [5 x$ x( O) v% A; ^& w goto_xy(x1,i);
, i. S/ m( ^; ?; m# k2 v putchar(' ');
$ `: k: o7 X1 g+ Y# I# R goto_xy(x2,i);
+ ?9 v) Z' Q5 J putchar(' ');3 G( u6 h+ _: I: z0 c8 B a- m8 t
delay(10);; k! V% }5 d+ l) R3 a
}
' F; ~; a/ z4 ^ for(j=x1;j<x2;j++){
& {* {6 a8 q- E6 H' b+ C goto_xy(i,y1);" q4 P0 }2 p( y: h w1 O
putchar(' ');
+ [$ V" w* T* E4 S goto_xy(j,y2);. J3 y# ^8 Y# G9 ~1 ~. T
putchar(' ');
/ D6 v5 k; N5 W$ W3 f# b% d( p% D delay(10);. @ a! g; o9 u- y$ C. \
}
* A0 H- c6 N3 Q5 X, ^ J% j7 J4 k }
. a; ^1 {+ M# l: Q /******************open screen clear(开屏式清屏)*********************/
! f* r/ V, B0 Q" \4 O. ]4 P7 \1 N9 _
void kcls(int x1,int x2,int y1,int y2)
: u- i# s5 _5 r% O& ^. I {
2 F+ k0 h9 g4 O7 A% g int t,s,i,j;# I- g: i6 @' a
t=s=(y1+y2)/2;- {! I. L/ [% g& n
for(;t<=y2;t++,s--): o6 {* J4 C u8 \+ ~0 r
for(j=x1;j<x2;j++){
; j# R: a4 D/ i1 }8 w goto_xy(j,t);" w/ \% ?7 A$ |* E4 G
putchar(' '); v6 d$ Q6 S1 A5 N- U) d' v
goto_xy(j,s);
' `. T& |9 M+ ~: x+ Q" j5 _6 ~9 m putchar(' ');
# h R! B5 p- ?/ z delay(10);# P9 z- |# g+ p: n5 ]5 Z2 D
}
' M$ a6 w3 |( \: Z) e5 t' j, T0 m }
: ?9 D) H" j; e9 Z" D) X; k /*****************close screen clear*****闭幕式清屏*******************/
; x e6 X5 L% _4 ?6 a+ d9 @" k6 [' k& A" F2 n" F' H
void bcls(int x1,int x2,int y1,int y2); l8 M |) ~$ B0 o B
{& f4 Z& x) h) W% F9 {
int t,s,j;
0 ^7 [& ~4 V/ z1 R* X/ D( H/ X! U t=y1;
. T" j/ e# L, }2 c) ? s=y2;
5 H, O5 \0 {* P0 _ for(t=y1;t<(y1+y2)/2;t++,s--)
& v/ k2 f3 `, u0 j5 N% p! d/ t' Q for(j=x1;j<x2;j++){' A x3 v: K3 X/ F
goto_xy(j,t);
3 r' Y G2 ~& c) v( O* j0 L+ Q8 O putchar(' ');" D! J0 V( L7 A7 w( O
goto_xy(j,s);
( E. x; A( k0 ~! E2 O- q7 D+ M putchar(' ');' n2 Z! b/ ^ U6 T$ F
delay(10);
' J* E, v# B& X }! P y3 _3 a5 P v) L
}4 _0 U' f; I |% O5 A s5 i7 }. ?+ Z
/******************bottom screen clear(自下清屏)********************/5 Z6 D: D( A/ ^
7 X D1 M5 }7 a$ A0 l
void dcls(int x1,int x2,int y1,int y2)
8 W# |3 D3 w2 W g {7 E0 P# q& P' U- a% Q5 t
int t,s,j,i;! @: `' z+ s2 }
t=s=(y1+y2)/2;9 {$ f* g) _4 V* o
for(j=x2;j>x1;j--)
+ m( u; u. \3 k! f: { for(i=y1;i<y2;i++){
. T: P3 h" @$ S5 v5 b goto_xy(j,i);' |2 G# c5 k; W! b2 C! v- X+ c! f
putchar(' ');
% G$ j) q( _, f: n) V0 W delay(10);
& a1 j7 I/ ^$ |2 z& E$ f }
" F4 L) B4 H+ ?) k" l9 L! F* } }
R1 L! @2 K4 E /******************设置光标子函数******************/5 q. B8 S1 `. v' J6 s, z% _
, Z1 z& m$ q# g void goto_xy(int x,int y)/ z' |( |7 U- G
{; i+ Q8 m4 X$ u* j% y) R# a# }
union REGS r;" E% }4 M; F* j4 I* b" @, [
r.h.ah=2;7 u! `) }9 u% ^( Z
r.h.dl=y;: g! p4 A+ g0 l0 M
r.h.dh=x;
( f7 ~6 @' M- i r.h.bh=0;- k U3 }- t; x3 C" N$ h
int86(0x10,&r,&r);
7 q; Z' z @. J/ } }* x, M! w$ U, q
' x, b# X+ t8 D( x; _- P) ?* f4 { /**********************在屏幕上打出一连串的a字母用于演示程序******************/* t( ~- P3 G) A4 Y7 a
/ X2 L, @% O2 [, h
void puta(void)
, l6 O$ x) Y$ L W( Q {" H4 y1 `' E. h* F" a
int i,j;1 \: J+ ]* X3 t7 ^0 J
for(i=0;i<24;i++){
# w! B" U9 P+ r for(j=0;j<79;j++){
; k4 O! G K7 U, M) G3 s6 r goto_xy(i,j);7 C! ~8 s% p! y: ~" V" C* `
printf("a");# k ^ l$ S/ W0 M! H5 C0 j
}4 l" c6 q* Y& H5 L. K
}2 U* T& P ~: `: h7 t& s/ f
} |
|