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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% v$ c7 L$ \+ c1 O0 N2 r4 ^5 ]- M3 R0 t
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# W/ \+ j+ L4 x: B6 ]9 v E* X. k
3 F. `0 `+ f3 {: S, S \/ e2 f 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! A) ?7 e* M* ` 子函数及演示程序:
( O2 o& o$ y/ x2 G) T- w! S1 k& J4 K* [+ }/ m0 k
#include<stdio.h>/ ~( x q2 I# n' s, g7 W7 B. ]* u
#include<dos.h>2 O$ x7 g( z+ R( u: ^* Y5 K
#include<conio.h>* m+ r; ]: r+ g: {. O+ R
: I0 T2 H. F' l+ n# ?) d3 n& |" Q9 v
void goto_xy(int x,int y);
2 r$ K: R. o$ R void dcls(int x1,int x2,int y1,int y2);
$ ~) W4 U$ l$ [% \ E* ` void bcls(int x1,int x2,int y1,int y2);
* {0 E9 T# Z- O" i7 S/ V void kcls(int x1,int x2,int y1,int y2);8 F+ o$ O+ m3 E2 O' e
void recls(int x1,int x2,int y1,int y2);3 l, a m7 w; ^
void zcls(int x1,int x2,int y1,int y2);, h1 W% y' L$ c3 K) S
void puta(void);( M5 _1 F: E; d. L9 H
& M( E( e% ]8 u8 W# i
# D( r3 M' J+ D) K& [
/*--------------演示程序---------------------*/% O( P( ~$ ?( G) |& G+ O
main()* R( `1 @! I8 Y7 I
{% G6 [/ F j- W+ A
puta();
* A" x+ v6 h: H. m getch();7 `$ i+ L- s: v" y) u9 L: v
dcls(0,4,0,79);: J4 \6 X' y' U6 E1 b" B5 v; Z
getch();
! L0 U! b# I3 Q- O v# X puta();
9 P8 D' J1 h e3 |( @& F getch();
: I+ H/ J8 e2 H. N* G8 f bcls(0,25,0,79);
7 c6 j! t1 _0 S6 S6 U) J; v8 V8 ` getch();- D0 R6 ^! e) r: u& @
puta();
, |# \ ? V ] {: f2 U2 I getch();& f: }( V7 o5 @5 ^9 b) N, m( n. B
zcls(0,25,0,79);, l- d) ~ J; D2 o0 b. n
getch();3 [4 b) W5 S% e) k3 U
}, j3 _* N7 }# M5 b" S. H' c
/*********center clear screen(中心清屏)***********/. h: X: R9 f) M4 g% j
void zcls(int x1,int x2,int y1,int y2)
5 ~5 |, R+ n. I; G$ t; K6 z3 O8 g+ }/ f {
/ [# f! n" i! A3 a& {6 W& w int x00,y00,x0,y0,i,d;
* C* n, B# v+ u if((y2-y1)>(x2-x1)){) t" O$ S+ H( r& ?
d=(x2-x1)/2;( M4 f0 Q$ N. ^- @/ H' K
x0=(x1+x2)/2;
9 E: l& K8 V: y% W) L y0=y1+d;
0 f0 v. [- R3 P% q- Q y00=y2-d;
8 a* W* _; b$ X ?7 N! q for(i=0;i<(d+1);i++)- x; E. N/ \& J
recls((x0-i),(x00+i),(y0-i),(y00+i));
. r% \6 H. j$ o# N delay(10);
+ _8 f2 l7 M! t' s }
; \# Q9 B0 K% R% S. }: S( S, v3 ] else{
. n9 u9 R; t! \: z) z g5 z d=(y2-y1)/2;0 T2 K8 m& j! G# _6 w7 \
y0=(y1+y2)/2;
4 a! {' @% I3 S$ \7 m, \# p( n x0=x1+d;2 b8 o8 u E$ n0 T' a3 Y( T
x00=x2-d;* Y5 f3 j1 l, E4 U }% d! E
for(i=0;i<d+1;i++)# K/ e/ d0 X$ f% ^) e5 l9 S! q* _
recls(x0-i,x00+i,y0-i,y00+i);4 F- P+ a i' v8 J; `, G. G
delay(10);$ w9 B# Y3 S! K
}$ G" z) x9 R% i
}+ T1 ^2 s% d% D8 I: u T; e
~2 ?( Y+ P+ z8 I* b4 G
/************* clear rectangle side(矩形边清屏)***********************/
4 A+ ]% X4 t5 u) _
" ^2 f1 n4 z3 Z+ F. C2 a void recls(int x1,int x2,int y1,int y2)
" q& d- w# L1 y- _4 O {
1 @7 B$ G& J }: x" P int i,j;% r& d: N. y* _# [ z5 l# w
for(i=y1;i<y2;i++){* l* [% }; c [
goto_xy(x1,i);6 ]) ^! @3 L2 K. ^* h/ v
putchar(' ');
3 C; T' A9 _! n% y4 l goto_xy(x2,i);1 b6 d4 ^! {1 e2 [* Y+ v
putchar(' ');
( w: x2 F3 W2 m# a3 u delay(10);
% {+ y) m9 p+ ]' n }: N; ~) m- c. C, n3 r: P
for(j=x1;j<x2;j++){
5 C9 Q& n' M2 U1 o. v0 X; Z+ ^5 c goto_xy(i,y1);
% c' v4 u& z( U, X9 o; r. a# N putchar(' ');7 i. d" d7 m; e4 d* T9 k- A6 ^
goto_xy(j,y2);
8 t0 F" o0 q: ^8 m" F* v& n putchar(' ');
' h& R: R: r# [: \* E2 S delay(10);0 ?- n1 W1 Z5 A$ E( E
}
. F0 T: k5 }/ M/ i+ I3 f6 Z! t }
3 t$ s9 s' m9 ~4 b' ^+ G" y9 e /******************open screen clear(开屏式清屏)*********************/
. u/ k% y# ^7 Q- X) f+ P4 v3 y9 x
- i# ?: o1 K! w9 ] N; x; J. S+ ~ void kcls(int x1,int x2,int y1,int y2)# s2 I( ]+ S* b/ W6 V7 t
{
, u/ [' X6 i! Y) T. ? int t,s,i,j;8 Q+ c# R/ c! V f
t=s=(y1+y2)/2;9 ?! }7 x- C) e/ _. {0 E& |
for(;t<=y2;t++,s--)2 o3 P! C& Z. n- X
for(j=x1;j<x2;j++){8 _/ S, ]2 V7 ?1 J
goto_xy(j,t);
4 n. |6 h+ \; q6 T putchar(' ');
! R2 t* L3 R5 x) v$ Q goto_xy(j,s);
& W q3 V+ m3 ^ [4 R: F1 G7 N putchar(' ');
& o) q& v$ }) x% }+ X& M- x delay(10);
% A/ @$ T+ Z3 \0 v8 t5 d; ` }
& E; C; I- H+ {. Y/ J }$ T) ?& f9 e3 T% k( Q
/*****************close screen clear*****闭幕式清屏*******************/
" Q: s( a5 @, i& w- e) H3 S
8 [$ v( m D8 ~ void bcls(int x1,int x2,int y1,int y2)5 {' w$ M& ]: e
{& S: z, T6 g% L5 }8 g7 Z
int t,s,j;
% y6 d' ?. a j" V% ? t=y1;
( i7 r0 c, w! I9 t s=y2;
0 G/ Y6 ?' H( N& m; O. e& S for(t=y1;t<(y1+y2)/2;t++,s--)
^9 ]. i2 Z9 V& g for(j=x1;j<x2;j++){/ Y" v: @/ Y8 n% U
goto_xy(j,t);( x7 K3 D2 P4 ], w
putchar(' ');
! L# _ | R% I9 ~2 @ goto_xy(j,s);5 h9 ?" \8 C6 s2 l
putchar(' ');7 m i2 R# R: ]+ [/ G
delay(10);
+ [) q0 {; k" P. H }; t; O5 Y3 r }
, l9 L, t; J+ r; g; f- Q* v! D }
+ Q# w8 Q2 {# y3 F: U2 I /******************bottom screen clear(自下清屏)********************/
4 Z$ F" E/ u! W; W7 k* C. R$ H$ S- B" n$ D* L8 t! F
void dcls(int x1,int x2,int y1,int y2)4 h$ y' L1 z0 w8 B2 q
{
" w( P6 F2 o: Y; E, V int t,s,j,i;
( w) i& Z- H+ ?, t5 n t=s=(y1+y2)/2;
6 @& ~9 e- b# o: Y, T3 Z for(j=x2;j>x1;j--)
. `0 w& b. o7 I8 X( F1 z* J2 \9 o for(i=y1;i<y2;i++){
- e* Y8 l! J# d9 _" C goto_xy(j,i);
* f% q. @% L3 W$ U. ?9 ?* Q0 R putchar(' ');
" R* o" F% h( Z% y delay(10);
( e( T; m7 X. `3 |. r" J8 B }
8 [. t/ {% z3 Z+ |+ {1 L }2 `1 {. f6 s* X! k0 R. @
/******************设置光标子函数******************/
8 ~2 [! z9 x" }' y, Q }* q. ]3 v
void goto_xy(int x,int y)7 R5 w: V2 A) \. _( O! x! y
{
0 F v9 } x$ e n9 f9 p union REGS r;
% i2 t, J) X! |+ G$ Y, z" H r.h.ah=2;
- z1 `! N& R; t, r. j r.h.dl=y;
( v$ w3 G. y6 M% P$ y/ } r.h.dh=x;
' G& `9 @, C W r.h.bh=0;/ R L+ F3 u; E
int86(0x10,&r,&r);8 V, G" W ^- O0 G
}' T% c1 \- B% Z# A' a2 g
' m ?5 V5 Z& j+ O- L/ Y
/**********************在屏幕上打出一连串的a字母用于演示程序******************/, @9 d8 f) {0 N: ~8 R
( X- P+ e8 l, @. J
void puta(void); ?, i! X& b1 J! h
{7 { s: `- F7 u, I
int i,j;* X0 |" g) c9 W/ z/ _$ `4 B. w! M$ Z
for(i=0;i<24;i++){
4 V' |- ?# @* k/ j for(j=0;j<79;j++){: [ t& `2 }7 c+ n2 T( K
goto_xy(i,j);1 G" W$ x H" f9 p& L+ r8 y( c& y8 z
printf("a");
. a" p$ |5 H$ C% g8 d' E; J }" E' @8 n+ i8 h# G3 D* w- ?. V d1 {
}
& `- m1 r) j" m* T( |9 ?# V; }, O } |
|