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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
3 v4 {* u5 K3 {3 q& l. a
3 k8 p# o$ S! Z( W5 j 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
+ s" \7 a! W) d. o b+ Y% l3 q" j4 L+ s( |; B$ E ^& a
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. + `$ c. i4 ^# I* D2 c
子函数及演示程序:( Y: d( J1 A+ I& Y+ Y
8 w$ n8 ~$ _( z9 j; O- C- V, p
#include<stdio.h>
# @* J+ s+ n5 { #include<dos.h>( Y' L7 b8 ]: r q! G. a, C* B
#include<conio.h># v1 x4 J, g5 B. Z
& U! e. h7 f" q
void goto_xy(int x,int y); R& B( h$ G q
void dcls(int x1,int x2,int y1,int y2);
- G9 ]$ S2 [& z2 Y/ R( y void bcls(int x1,int x2,int y1,int y2);6 b( S1 m* t% ]) _
void kcls(int x1,int x2,int y1,int y2);5 X( l: k, V- F1 B
void recls(int x1,int x2,int y1,int y2);
' |* G& E7 J* }% `$ ^8 O" X5 u void zcls(int x1,int x2,int y1,int y2);
7 q! B `" K1 {: m2 {' [% X; l void puta(void);
* P# u( e0 Q" {0 ~1 u' U3 k H# @! k; ]& j; @
6 E: g" t4 Q [# A' N$ | y
/*--------------演示程序---------------------*/
- q9 u( m5 _/ `8 ]5 ^' r2 v! W main()
2 E# s* l( ]8 ~ {
0 d; H2 N, ^- X3 q0 c; d% h: \ puta();
. N; u) ~' s& t6 D. s getch();
' S- }4 i# E" f4 l dcls(0,4,0,79);( |% l3 ~5 q+ ~- q" J5 t# U
getch();: j3 p- o6 z& q% ~4 y: s
puta();
5 t. ~# f: ]& s/ r$ U: e getch();
: X0 P- g. c- x bcls(0,25,0,79);
2 r9 M, b# L/ ^) L getch();$ \+ ~$ H9 l! K# x* M
puta();7 K" y( C; r5 V3 x4 ^, y% j
getch();
! o9 ~) `3 e! O8 J) u zcls(0,25,0,79);7 ] z E/ [' [1 N
getch();
* f2 o, I& Z* C4 Q6 d9 i }
* S( I: p) V W7 Q2 k" X /*********center clear screen(中心清屏)***********/: p: o+ W5 \5 @) J1 c2 n
void zcls(int x1,int x2,int y1,int y2)
& n' J! O& _, X& B {
. ^) n8 d+ e' y$ { int x00,y00,x0,y0,i,d;" P v# n: L+ }% p
if((y2-y1)>(x2-x1)){! c- p! f" a. `
d=(x2-x1)/2;+ N9 [6 D- e" g4 F$ f6 x
x0=(x1+x2)/2;1 C& ~# _! t7 W& x' m. t
y0=y1+d;
2 O2 p+ E* c% N, H* o y00=y2-d;
; I# i9 q9 K% {6 u8 r. r for(i=0;i<(d+1);i++)
# h1 u* r# ]6 C recls((x0-i),(x00+i),(y0-i),(y00+i));/ z. H3 w5 A1 Q. A9 Y' k
delay(10);' |2 D$ R0 c( E) `
}: d4 W( m' l: i. y9 L' w
else{
% \" b/ A) _1 \* x6 _ d=(y2-y1)/2;
* p- V8 _. T" d6 a y0=(y1+y2)/2;
4 M) n2 y- S# g0 E; W/ E x0=x1+d;+ J. Y1 G2 R( T7 ]9 ]! W
x00=x2-d;$ q' v, I) k/ ^" ]
for(i=0;i<d+1;i++)
2 B2 c2 \/ m9 B/ A recls(x0-i,x00+i,y0-i,y00+i);
7 n5 |+ R( d" Q. o" n+ V$ f# ~ delay(10);2 H! K. ~! f& ]5 v# V
}
& [# k0 {! P7 X( O8 x9 e9 ?; l3 i }4 \, `( x) J w" o" I) L
* y" d& N6 k ^" g0 p' s /************* clear rectangle side(矩形边清屏)***********************/
6 m f }' \9 ?+ k; b# S0 u# G
8 N2 X8 R) E/ m) E void recls(int x1,int x2,int y1,int y2)
1 g! ^/ _4 t5 ? {
( z P* A9 r% q* N0 |7 N2 R int i,j;4 x3 y3 f6 @, _1 C& h8 d
for(i=y1;i<y2;i++){
, }, e- x$ d# Z' g" L2 {& C goto_xy(x1,i);
V# q7 s$ W, D& z+ V! Z% X, r4 m, _ putchar(' ');
& C/ ~6 o. }; B% k$ a goto_xy(x2,i);0 \7 W7 e l/ Y! M/ j5 B0 e; t
putchar(' ');; k" c' _5 I2 C" k, ~
delay(10);, V/ d7 w$ w1 S$ O5 k; \2 m
}
/ e% D4 y6 i3 v+ X. s for(j=x1;j<x2;j++){
( w1 r' [. [8 e& `& z6 f goto_xy(i,y1);( Q) x* I3 i; V
putchar(' ');, D0 o5 ~+ w+ i: s
goto_xy(j,y2);
% U# B8 U# X( J: u/ ~( }- o) J putchar(' ');1 J& N5 _, K* a+ S, [
delay(10);+ x7 z6 W# i; X2 n. K; x/ w8 U
}
, g0 @$ L" m r( Z4 ` }/ i4 G, R4 r# c/ O: H8 M* d
/******************open screen clear(开屏式清屏)*********************/
. u* R/ J e% E) ]. u; F/ e/ n6 i2 j. z7 C$ W4 l+ t! n. _% Q
void kcls(int x1,int x2,int y1,int y2)% j9 V% ?8 a! ~! m6 @4 ^* W
{
3 X; a6 v. m* y9 b9 e/ r int t,s,i,j;
7 t: ]$ L1 X6 |9 d' @* }# f t=s=(y1+y2)/2;
! K9 g+ j, f W: L" T8 E$ e# ^ for(;t<=y2;t++,s--)4 Q) u) I# c4 j! W0 b
for(j=x1;j<x2;j++){
! z4 y7 O E3 D! t6 `3 h; @! j goto_xy(j,t);/ `% [) I; @; P
putchar(' ');
8 P3 F' j/ J. Y6 l" J. k" b goto_xy(j,s);
! [; `! @9 z( ?/ G4 w* w putchar(' ');
9 }8 I) \6 {2 J9 O delay(10);
: q1 w! E/ a0 g# R" v }& H4 r/ _) D3 V
}
' _6 U7 ]# _+ Y) M" i /*****************close screen clear*****闭幕式清屏*******************/
4 F& |% {) M+ F4 |
8 U2 I( ?. `$ | w, q/ p void bcls(int x1,int x2,int y1,int y2)& B4 e) s) y, p
{; p$ l4 v/ {) V7 H
int t,s,j;
, e, x8 a0 V2 a/ K8 l" C t=y1;
_+ l& u( ^7 Q0 O! C s=y2;+ c# F- _' O! d$ u, `
for(t=y1;t<(y1+y2)/2;t++,s--)
% z# F; }0 x- m+ u7 f for(j=x1;j<x2;j++){) u; x' s" y/ _) A
goto_xy(j,t);8 [8 ~( U' r) D2 E& _* G* U3 t7 ]
putchar(' ');
5 X0 }: o6 j0 e- M: ]; a goto_xy(j,s);6 x' D& Q" \( L$ E
putchar(' ');& \& N9 y" N% l: E3 \
delay(10);% I0 x' f9 H J9 N: m3 l" o
}
2 i$ [2 O8 H" I/ h }
2 Z: v. k; N! d! e* |7 } /******************bottom screen clear(自下清屏)********************/
$ u) Q. Q: D# g- K1 e5 o3 f3 A8 v2 M% g' q$ s9 U8 I* {" w
void dcls(int x1,int x2,int y1,int y2)
& U6 `$ N' f. {; ~; N6 i9 T8 { {3 |2 P% f2 @) J/ ?1 J
int t,s,j,i;
# Y* i2 _, c5 C. }, I( l$ u1 Q t=s=(y1+y2)/2;, r1 U& J" X+ A7 C: e
for(j=x2;j>x1;j--)- N3 _# \1 }1 U! ~+ l. ?6 P3 }
for(i=y1;i<y2;i++){
% l3 f( p, G: v/ O, F goto_xy(j,i);
: {5 S; M& M- c. k2 n8 J% J( U" m putchar(' ');
# F9 c! a* c. g6 n r delay(10);
& e/ s. |3 U6 J( t$ e3 u1 }. ] }; |8 r0 ?4 _$ O' V
}6 ?3 f* g' n* G! |7 q
/******************设置光标子函数******************/
- y5 ~" d7 D, B
& i% |4 j7 L$ l) B+ [- H2 y void goto_xy(int x,int y)
' S$ L% v$ k7 A+ p1 u& x {
1 G( `* x: z4 S5 n union REGS r;
4 f3 s0 _, L, L; U2 k8 B r.h.ah=2;
& }2 n1 B) e7 }1 Q/ Q r.h.dl=y;
& ]) B' X+ u$ l/ \+ b" n* q r.h.dh=x;
7 f0 T. p |4 R9 o7 Q r.h.bh=0;
, q" J* o5 q8 y8 {. F int86(0x10,&r,&r);
# v+ e+ E& K: Q# a0 \5 X1 N }
. i! t. z, C2 _& s4 E2 {/ N1 @1 J- m* i
/**********************在屏幕上打出一连串的a字母用于演示程序******************/; m* w$ }: ~5 W
S5 a! W& K a% H& A e void puta(void)
# z9 x% w* G# `3 S$ N {
0 q5 w4 A2 k3 M9 }, q int i,j;
5 P/ H! Y, w$ o; ~9 a6 B# X for(i=0;i<24;i++){1 {, Z7 F! l# q$ X
for(j=0;j<79;j++){, _1 G! Z9 @2 L
goto_xy(i,j);+ ]; g; Y3 ?3 i4 |" G; v
printf("a");; o; \+ g. y# E; J# _8 V0 G
}) T: q- y) m. k! [
}# K. u* M5 _& F5 T4 o; J0 Q
} |
|