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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" L0 o4 g; _9 F. L7 E: L. }6 w# }. c: X Y, P1 G, b, D
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. z- B, a4 |% `% O$ V# h5 F: I9 x* p, I4 \5 r
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% k; R7 C, j1 [ w H* i3 f! ?* K 子函数及演示程序:3 e. O; ^# @5 B$ d5 i2 V
. P/ w% u. ^1 M: W$ M; z$ s #include<stdio.h>
8 \+ r- z) @+ `6 `/ v; O' u #include<dos.h> |" p3 N% b! x; y. }1 a7 @) {* c
#include<conio.h>+ C+ K' a- d/ [$ |0 Y
; l8 d0 p. |* g& o void goto_xy(int x,int y);
2 s8 Y0 H) B) D3 i/ A void dcls(int x1,int x2,int y1,int y2);7 i8 U: N$ H8 T( v. ~
void bcls(int x1,int x2,int y1,int y2);
, ?0 l6 \( S* u% a1 J$ q% t4 w void kcls(int x1,int x2,int y1,int y2);9 u% F y/ t. b* [8 J2 E( }; z
void recls(int x1,int x2,int y1,int y2);
) r; v4 u( }8 J" o6 H* l( u void zcls(int x1,int x2,int y1,int y2);
C0 T. O( v: q0 ~ void puta(void);
. x* t. z1 a% j( T0 J
f/ z0 V, A$ U' `
, t0 K' K6 K2 x; u9 I* [6 ` /*--------------演示程序---------------------*/
" a X/ F% f1 F+ ] main()
2 }7 `! [3 Q/ T {
, g- `/ T! B3 }; i8 @4 b' w" C puta();8 |* {2 g- V1 r8 P0 I; t+ d7 D
getch();2 ]4 u) {3 w$ J# H& K: L, {; E1 P1 n; ?1 ~
dcls(0,4,0,79);1 ~2 g6 u" @3 q! e. [6 v; ~' o+ I
getch();3 f* ^9 |( v/ L, Z- T
puta();- F6 G: k( z A
getch();' A& N7 o) S7 B9 O$ F+ o( U
bcls(0,25,0,79);* t3 Z8 G! C u5 S9 P, t
getch();4 w4 M/ H% t P: N) P
puta();3 O% A/ Z* T/ c6 Z# @: R% S& m1 c
getch();+ u9 |) D$ N" b& f8 F% Q8 n
zcls(0,25,0,79);
- s1 F9 l; R5 |/ I2 j U getch();
2 N0 s2 |, b( |1 n }
8 |. r1 ]4 c/ e /*********center clear screen(中心清屏)***********/
0 d' N. o) {: {' S, u5 Z, u void zcls(int x1,int x2,int y1,int y2)5 a$ I: {% d0 i( o
{; |/ D2 i; G' D
int x00,y00,x0,y0,i,d;; d' s9 B l( k
if((y2-y1)>(x2-x1)){
T" p+ L# F* S. A9 P& T; x% ~ d=(x2-x1)/2;" ]. C, Y# m* ?4 K4 Z
x0=(x1+x2)/2;
* m. F9 Z2 ^' h( r) N: V4 ~ y0=y1+d;3 L; r: l3 [2 O! I2 d
y00=y2-d;; s4 ~$ U& M: n- E& K2 l
for(i=0;i<(d+1);i++)
; ~6 a# n6 q" o2 S1 `7 P recls((x0-i),(x00+i),(y0-i),(y00+i));( a, X4 V; G+ ~
delay(10);8 ~1 j. D/ ^1 B: D
}
' j9 b$ r3 n L# M$ ~ else{ ?- C9 p. J9 A5 c; Y. A0 ?
d=(y2-y1)/2;
; V. K2 _3 G# o3 l, K, g y0=(y1+y2)/2;
2 _. Z2 \8 {" w7 u) n2 b0 U x0=x1+d;0 i8 U8 G9 p) [# @3 W) z
x00=x2-d;
6 q2 s D. S6 _2 l$ S( u j& Q0 K for(i=0;i<d+1;i++)$ H; {% n3 D5 i; E
recls(x0-i,x00+i,y0-i,y00+i);
3 G! E K" q& e( z delay(10);
" J$ P) J2 \* b6 i }
% J5 a; e3 ^/ v }: Z* s( I+ l0 _* }
/ d% w) K# r- D5 Z2 x9 r! L8 A/ h
/************* clear rectangle side(矩形边清屏)***********************/
- S' Y6 k0 k. G
* h: b9 a7 N' U void recls(int x1,int x2,int y1,int y2)& o0 [/ u* A; O5 ^# I4 K
{' I' N7 i% B# @8 Y
int i,j;- u/ [& a8 y) D7 s$ d3 n! u
for(i=y1;i<y2;i++){
8 y4 t9 Z/ Q6 _, R! @( U4 A goto_xy(x1,i);2 I5 X/ ?2 K# _
putchar(' ');+ {2 o0 g0 y3 W+ B1 Y5 w0 @
goto_xy(x2,i);2 V3 i/ u; _! b; N$ `6 l
putchar(' ');! n/ a8 I/ J5 c( i8 }- T$ a
delay(10);" o" P% z( @- s2 c# ?6 ^
}
* o9 g) n: E9 z) y D4 V for(j=x1;j<x2;j++){ M5 |2 x* w- t. r+ r
goto_xy(i,y1);6 Z* I0 p" Q1 L
putchar(' ');5 |% y+ H! B. t+ Q( Q
goto_xy(j,y2);
6 J- w( @5 f. L9 ^ W putchar(' ');/ t6 |$ e. Z+ ]/ O. l- |
delay(10);
# o3 y0 U }1 E. D3 v: I( ] } o% a4 C4 X( `, `: D* {
}* {8 `8 | W# _2 L* M' ~
/******************open screen clear(开屏式清屏)*********************/
: P, e' T, J0 w+ `& L% W+ m4 ]$ d) t- Q; m& P# L
void kcls(int x1,int x2,int y1,int y2), J. n' \8 ^' Z" }* X% _: H
{0 O1 I L0 f- J- f
int t,s,i,j;# |4 P4 I+ q5 R1 r
t=s=(y1+y2)/2;) L: L9 a$ X* h' l1 I& }( f/ h2 G, q# t$ u
for(;t<=y2;t++,s--)" {* l+ G0 b1 T" Z
for(j=x1;j<x2;j++){& c' g: Y4 v1 m
goto_xy(j,t);) J3 S: Y' Y, [% }- Z) H6 U
putchar(' ');
2 c% u/ D' M; r: V9 E goto_xy(j,s);
% \0 X( u* Q7 A+ p putchar(' ');' r) Y* g+ _, {3 G
delay(10);
9 P4 P2 M) T3 d* x9 G }$ h2 ]: H, R# J; V- u' Z8 `
}% e% b$ V# D2 ~& I
/*****************close screen clear*****闭幕式清屏*******************/5 @; q: Q3 T" K* j
0 a3 G$ J2 Y3 c# E5 m void bcls(int x1,int x2,int y1,int y2): ^8 ?, F# S: m1 t/ f3 d
{
" X6 o# a9 w0 y9 v& U4 I int t,s,j;
7 e1 G/ J2 S [4 h) ~+ J t=y1;5 e3 E2 }3 {8 s, {4 O
s=y2;3 b9 F$ w2 L* R8 }
for(t=y1;t<(y1+y2)/2;t++,s--)
$ z+ x4 h/ y3 \5 ^ for(j=x1;j<x2;j++){0 s* r v+ n' x- |' V- N4 O1 l
goto_xy(j,t);4 V2 P4 r5 J Q7 x) G% N% C
putchar(' ');
/ k3 W7 X! I) q0 ` goto_xy(j,s);
8 ~) N9 ?# @8 K5 x d! J( z' G1 g putchar(' ');
" z" l: M- ~, b/ b4 J) f delay(10);+ w# R! [$ p1 k0 N9 D2 E
}; V8 y$ H K: G( c ~
}
8 j: W& J" X4 o. b" {' R0 } J /******************bottom screen clear(自下清屏)********************/
' J; C5 _$ R: k: H: M- v5 E1 s* O
void dcls(int x1,int x2,int y1,int y2)
6 [, r$ T& a5 S! e( T& A Y" J9 W7 x! w1 J {
* [4 b. w+ [4 g: G int t,s,j,i;$ P% h7 c7 b% y6 J- s
t=s=(y1+y2)/2;
" j; a+ w9 L+ k0 z1 R) e for(j=x2;j>x1;j--)7 f* @/ n7 I2 ~
for(i=y1;i<y2;i++){
( \4 b7 D% f3 o5 y! \ r7 ?) W! s goto_xy(j,i);2 N0 E+ R( ^9 z8 {; }6 i' W9 U' D
putchar(' ');9 K7 o1 r4 v( ?! P
delay(10);
$ x4 \3 s$ [7 R, x- B+ X; [2 A }2 k+ K5 ?* R2 f/ `/ j; p4 u
}
+ `2 I. B# o/ q3 ~ /******************设置光标子函数******************/
7 |" F' \% U0 f: @. q* t* B/ h: g' ~. m, F# p9 I
void goto_xy(int x,int y)" @9 a: w9 O$ b) o/ k
{
4 w; Q+ q. s9 e, _, b7 e union REGS r;
: C8 g5 k# G: J9 b r.h.ah=2;
. B' I$ }: v# y2 z& D r.h.dl=y;/ K% D# d% _$ i M
r.h.dh=x;
7 I' @: R" X$ i' ~& o0 L* A r.h.bh=0;
0 B" R& l" V9 ?; n: }3 R4 U/ F int86(0x10,&r,&r);. }6 q, R( a4 v6 T* p/ E' }# V
}3 ]2 @: P( [& E2 K3 w* g2 N
8 {% w Z6 \( d9 E /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 G5 F4 q" u, Q0 v8 A" k9 r" k* g( B6 v: z1 j9 }, A# `$ Q& b( H
void puta(void)
+ G1 K8 X; w3 C! Q) c1 I" O {2 e9 G$ z% {& r8 I/ D! ^
int i,j;
^4 b2 e7 h! {& n' F' U- A; ~& t for(i=0;i<24;i++){
! h! }9 i* H4 e+ ? for(j=0;j<79;j++){6 e. D0 P1 h0 ^5 U$ f' ?$ W2 W. [
goto_xy(i,j);
5 }- V! @* y) {; N printf("a");: w9 m1 W( s6 `
}
, A7 X" y6 Z! q5 ? }
7 Q: {) f8 E3 `$ |+ b1 g$ U2 b } |
|