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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ Q# }( v, `) t/ H9 Q- V! b8 |
$ X( ?/ g6 o0 A' V% I3 B 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里1 r6 a0 t' ]+ |5 [# _
0 u" g( G3 Q: N
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ! w J7 L5 u1 {9 z: F" ^
子函数及演示程序:
9 y1 f6 Y' v Q, z+ i3 m- a% A: H4 j: v5 u2 W6 G( u' H
#include<stdio.h>' l. q. C& f& e. H2 h' g0 r
#include<dos.h>% }5 P l& |) k5 q* x1 i4 ^4 ^
#include<conio.h>
0 @- D, X9 w: x
$ K7 E3 E/ u/ r5 g/ t void goto_xy(int x,int y);
; X% L+ \6 [9 { a/ W$ Y6 Q void dcls(int x1,int x2,int y1,int y2);( ^! R6 c" D9 x% r7 C
void bcls(int x1,int x2,int y1,int y2);
" ~) i+ i' c: _0 D4 h# i void kcls(int x1,int x2,int y1,int y2);
# |& k, X' C" N2 Q void recls(int x1,int x2,int y1,int y2);. y( v! x: v3 } i' @
void zcls(int x1,int x2,int y1,int y2);2 m8 q6 e1 i0 |! M" J" b
void puta(void);+ t+ _. A- b! L0 w, C( B) z# v
, h" B1 z" V' p6 l9 f- X: |9 s0 y/ R2 x5 _% t
/*--------------演示程序---------------------*/
9 x0 O* K; F: W, H. t( Q2 a, [; d main()$ D% S \) x6 w6 r+ X
{: F" y& \. N9 p! @# i
puta();% x7 [# c0 r4 E6 S4 l4 F8 u
getch();( ^% X, a$ N9 @/ }6 d4 V
dcls(0,4,0,79);6 g4 I* i, c5 y. p9 `
getch();
+ X( B/ a" O2 B' f puta();- W- ]' v6 Z2 s4 t. A+ H% r' y
getch();2 k& U* [1 r, D3 b& t# o7 W3 i
bcls(0,25,0,79);) @$ @% s9 `9 [" i4 n T
getch();
% j* J% Y& z* I! V q% F# j3 O, x0 G puta();
) u! ~; @; h0 |6 H, y getch();( V9 T" n9 c% s) l
zcls(0,25,0,79);
1 D: k" L) t5 d4 B3 `, Z0 Y! F; ? getch();5 N/ a p: C" V; ~
}
( T( W/ Y8 s' @0 { G /*********center clear screen(中心清屏)***********/4 b" E7 u6 L8 `
void zcls(int x1,int x2,int y1,int y2); y" d/ j. H5 _
{
! Q; J( O( h& x/ }5 S( Q. W9 v int x00,y00,x0,y0,i,d;
9 o' ?# f' S# A if((y2-y1)>(x2-x1)){
4 p0 Z; E8 @7 L4 E d=(x2-x1)/2;+ c4 g' Y. [2 J* n
x0=(x1+x2)/2;
4 \3 V; C! Z3 Y0 J! U9 C0 H- u y0=y1+d; p8 A4 E! g- i3 z
y00=y2-d;
' T" |( U8 S- q B* [9 R for(i=0;i<(d+1);i++)
6 G& r1 e" A8 R) N- a, ? W recls((x0-i),(x00+i),(y0-i),(y00+i)); C2 |: L# ~& `1 u
delay(10);
/ x$ r& F2 g$ U' b: H }
9 u/ n$ q2 h2 V5 Z: N/ \ else{
4 W) R# \+ u1 @" s0 H% R d=(y2-y1)/2;! j1 u( c3 Z% y+ \0 ^* S ?2 J$ r% {
y0=(y1+y2)/2; i$ |; O) J3 l X/ {
x0=x1+d;8 d7 H+ {0 V0 }+ S: p
x00=x2-d;/ S9 X& g7 d' Y$ n8 H; z
for(i=0;i<d+1;i++)
, ?! ]4 N' Z. Y, Y$ `+ {6 p recls(x0-i,x00+i,y0-i,y00+i);: I0 X' R- J0 h0 X# H' O+ |
delay(10);
J0 S& N. Z% a- X W$ D }6 T, `* K, K7 u' P0 O
}
3 n& H1 I: w6 l" B7 g _
- T9 M& D. d# F /************* clear rectangle side(矩形边清屏)***********************/
9 P# t/ d! o8 m
7 Q! e/ L8 a( H. e% \4 j void recls(int x1,int x2,int y1,int y2)4 d6 @6 @# y: B7 s* V5 v% H
{
' n/ Q9 {# U. y" E$ f int i,j;3 Y. a. D3 m3 P& G3 J; {% W# E& F
for(i=y1;i<y2;i++){
. K0 ]' O0 I4 |6 {3 k$ G& y) W goto_xy(x1,i);( c3 f8 d) f% y/ C6 E( V
putchar(' ');; X% {6 @6 {9 v6 s) v( H
goto_xy(x2,i);& T& K. P6 q+ k9 J A
putchar(' ');
( s7 w" g5 e5 n8 K6 h6 x; ?8 h& s delay(10);
' u9 k! x4 `# {" G, q$ y* N" R }% O: B }7 C. O
for(j=x1;j<x2;j++){
. o" a+ X4 M/ l' n4 o goto_xy(i,y1);
( w" u/ n. \# B) u3 R/ n. i putchar(' ');
" \# C. @7 ^4 f goto_xy(j,y2);) G$ Z1 U8 |8 G4 s2 g
putchar(' ');! f _6 Y2 N, ~2 k
delay(10);
6 i7 z, }* v5 M- s0 ] ?* Y: I }& O2 E Y* @) \' C2 _# g
}
4 I1 f0 G. h) ~. t* j+ _ /******************open screen clear(开屏式清屏)*********************/+ U! {' ]) b* a J
* K; R+ l$ w6 W: m void kcls(int x1,int x2,int y1,int y2)$ `$ _ Q. x7 X9 N7 u
{( h/ p8 f5 h1 x" P( U
int t,s,i,j;
1 M5 C% C9 b' ^% j, b0 K t=s=(y1+y2)/2;
& e0 [; t+ f0 z for(;t<=y2;t++,s--): Z1 l% z0 T% U4 O1 S
for(j=x1;j<x2;j++){" N& C5 g& L5 }4 M
goto_xy(j,t);
- Q& ?$ F2 B- r0 e6 Z% R" Y# a* B putchar(' ');
' W- B8 W3 m0 Q$ M goto_xy(j,s);* f- R8 C' b# e/ P' S5 X
putchar(' ');
5 e% z9 z, c: f9 X# @3 Y7 s delay(10);$ x, g/ o+ F$ j# V
}
8 y) H9 N4 ^5 z- E }
$ \1 U5 C$ o6 T0 o! n4 H /*****************close screen clear*****闭幕式清屏*******************/+ v$ P6 M9 E2 y% n0 }) Y
! b1 r. A, {2 G1 r
void bcls(int x1,int x2,int y1,int y2)
! C$ [, D1 }; |" H3 W" R5 y0 o5 c {4 g. B# y) e* H, J
int t,s,j;
, h% c( f1 `; F- ?+ d t=y1;
- s3 ^/ f# A' v: S3 a R) G s=y2;
; r% n" B3 l" a' E& V, j A for(t=y1;t<(y1+y2)/2;t++,s--)7 Z* W# r- G6 {; p: \3 }/ l& z
for(j=x1;j<x2;j++){" e2 u. a' A+ ?
goto_xy(j,t);
6 ?4 A0 S2 b# T/ o# H& h putchar(' ');
|" x6 s( C5 ?9 D goto_xy(j,s);3 f: S) Q! W3 {0 U* r
putchar(' ');, r! Q9 h' i4 n+ j7 H- ?0 q( h
delay(10);
: i+ M* a; B" ?' k }) C% _7 `/ w' ^0 g" H+ W
} j" f& _# u9 p( l/ f' p' H9 f; d h
/******************bottom screen clear(自下清屏)********************/
" x* Y0 D8 S. W) m5 I/ y8 V! c! ^
void dcls(int x1,int x2,int y1,int y2)
/ V' B9 ?: {& H9 I' ?/ { {% I8 p3 ^1 W" M- `
int t,s,j,i;
3 X7 a) B% k* _. j& z' n. N t=s=(y1+y2)/2;. D4 o6 ~" F: P7 b
for(j=x2;j>x1;j--)
/ q% @( t) D$ X+ j: Q) Q6 m for(i=y1;i<y2;i++){
* ~1 [' o6 P7 M+ i# X+ J goto_xy(j,i);
4 `" f n# G6 ~3 e) y2 f1 Y putchar(' ');! J2 [1 K5 o) x% a! q4 Z* V
delay(10);
' O( Y( e7 e6 \9 I( J ^ }2 w7 ?* i0 O' p9 c$ z
}
8 D' A# q/ n( D/ b# r- G /******************设置光标子函数******************/% @5 G" o" s7 Q5 \% N- }9 i! [
( |, c& e: T! X" |9 k1 R0 \ void goto_xy(int x,int y)
$ ~1 s' A6 E9 [& u0 h: e7 d {
6 R# q4 j. P9 N2 S) n4 _* ~* Q union REGS r;
5 |% R9 I9 t( R' g; [ r.h.ah=2;
! }; a$ D4 U/ f7 U: I6 N r.h.dl=y;
# x$ Q; B# P; d$ z% r+ ` r.h.dh=x;3 W$ Y3 n! T! ?% t5 \ H: w1 @
r.h.bh=0;
, p( B; c0 e; J int86(0x10,&r,&r);$ g" S; [: C4 J5 O8 F
}. [6 w# N3 ~4 Y
3 _. ^( Y) m% D6 A4 d3 b4 j
/**********************在屏幕上打出一连串的a字母用于演示程序******************/. r( _2 w6 \7 I! }
- X9 ^! E: E1 V* k; p5 B
void puta(void), A/ y5 C8 j) {4 g7 b) u, E8 `
{8 t1 V' J& ^' g: c
int i,j;
3 e3 z8 R/ @' ^ for(i=0;i<24;i++){
& e* z! {( _8 q) `5 }8 Q! l7 h for(j=0;j<79;j++){& I3 t- N! s" S `$ J
goto_xy(i,j);
2 N o& d* w2 Y" ]- B. X printf("a");9 R- [( V1 Y3 g( J' w
}; R7 W8 j) T5 z5 A5 ^9 H! p8 m, t
}
/ N: C% z# P: s6 W# s' r+ Z } |
|