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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- N0 i* y- X& v8 {" Y
' e# f0 h/ X3 o) p7 k+ w
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& ?! a- W) q0 S
: z0 C7 z, U# J2 c3 u5 g
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 Q. N- A3 m3 g) \! R 子函数及演示程序:
1 | J. L3 R9 L* A% j
1 O' r/ c6 h; h4 ?9 R7 r #include<stdio.h>8 d- [3 f1 i' D/ w$ F: p( Y$ @
#include<dos.h>$ z* _9 S. h! K, h) o
#include<conio.h>
8 t/ q T7 |8 Z& D# ^% d* g0 I) ?! v( D
void goto_xy(int x,int y);0 z# g# b: m" k/ n( H$ ?! ~
void dcls(int x1,int x2,int y1,int y2);4 `( X2 a) n( }* J. W. j
void bcls(int x1,int x2,int y1,int y2);
( ~! |0 t. j$ `" T- V, W void kcls(int x1,int x2,int y1,int y2);
: |" ?9 Y8 R6 G; o% F J void recls(int x1,int x2,int y1,int y2); ~+ q+ z7 {! W* @; I' A) `" m3 H
void zcls(int x1,int x2,int y1,int y2);
! n$ V! ]. n5 j8 X$ p3 j void puta(void);
' W! ?: P: S" Z; E5 H5 b
& ?1 ~! }9 v1 l- N! }+ B4 |( v9 U
/*--------------演示程序---------------------*/
! _0 { \2 Y7 B- q% \ t" `4 T main()3 i- p7 g3 a4 S) C( ]
{
4 c# x6 M6 }: q9 \9 B. K- u puta();
+ x7 L3 e- ~ ^ Q) H( ]* U$ F1 p getch();
& p5 H5 h: \5 ?, i8 E$ W dcls(0,4,0,79);9 V$ l2 C' r- ?: l' R& ~/ U
getch();
% T* o9 ~7 d$ k( M, ?; D9 r puta();
% m1 J4 F5 Y2 ~: P2 V getch();
. x+ F2 ?- f% C$ n) ?0 F( b bcls(0,25,0,79);0 [* {2 t% L9 t% I
getch();; r+ p6 f, {; Y# v# F: G. E
puta();, I% y. ~& f; h, c
getch();
5 G, h2 v/ a+ C4 d+ c zcls(0,25,0,79);; p' {( Z0 i7 f4 b2 x
getch();% A% E1 F6 P1 d, ]; X9 E5 X* m" m4 n$ t
}
% e% g6 ?4 o3 X+ a8 I' I& N! J8 w /*********center clear screen(中心清屏)***********/
0 n' c( k! u( O( L* ?( E void zcls(int x1,int x2,int y1,int y2)
2 b7 z" N& {/ ]' ]; e; d7 {" H6 f {
* d) z. c2 c; m; S0 U, u int x00,y00,x0,y0,i,d;$ ]! u1 Y6 V% l) j+ I J
if((y2-y1)>(x2-x1)){
- t/ K) f( n9 o/ `% u0 U2 B d=(x2-x1)/2;
' C% t5 C# h+ }( h. f/ F# _8 J x0=(x1+x2)/2;
- L; m+ M- J6 h7 U y0=y1+d;- k* x9 ~* r9 n) K/ q% W. E
y00=y2-d;: E. f+ T) w% p) C U9 T
for(i=0;i<(d+1);i++)+ k* ], R# y4 N7 I* |) L. F$ p
recls((x0-i),(x00+i),(y0-i),(y00+i));
' t9 V3 W. G# z5 Y3 t# x2 h delay(10);! B% T, O% ^0 H; Y$ u- c
}. {. c K7 e* d
else{
( u* Z, f/ A8 p$ u8 c9 I: T& D d=(y2-y1)/2;& s4 h k8 i0 f3 Y5 F
y0=(y1+y2)/2;+ r% f' U2 G0 Q
x0=x1+d;, f* |! q! V0 N9 y! ]" E
x00=x2-d;
4 Q* v/ D) d0 B) M0 { for(i=0;i<d+1;i++)! S) B+ `# Q& e0 }. X
recls(x0-i,x00+i,y0-i,y00+i);
5 Q/ z2 I6 E2 g& E. Z delay(10);! h6 Q+ n: P9 K% e5 L1 ] B8 @, U% ?
}
H) R/ M/ F& \$ h$ z V8 D. E }4 ?) I9 e4 }* V d3 M! T# P. d
& C: n: y, a7 F7 e, L J /************* clear rectangle side(矩形边清屏)***********************/
+ n. C, B; K0 p9 q
9 A9 Y% h8 h- ^# T) u( g' y void recls(int x1,int x2,int y1,int y2)
# G' m7 R6 E# r$ b3 J$ c2 b {4 p% a3 @2 D5 W' }; ~
int i,j;* d; T; v; Q' l8 _: {' b9 L
for(i=y1;i<y2;i++){- D( j5 L1 X6 L3 e
goto_xy(x1,i);( w( o' V7 W2 C7 n2 h: G
putchar(' ');
& U. c; d$ B* ?$ A+ @" t goto_xy(x2,i);
; X8 u& W5 |: d% Y E- k" d$ V putchar(' ');7 Y$ A9 @9 O. ^0 z) ^0 g* q- i2 y
delay(10);
$ [. G, F6 t6 ]* g# ? }' u* S9 L! C3 G
for(j=x1;j<x2;j++){
. ~. O; F" i" ~, M5 U0 Z7 Z goto_xy(i,y1);) n9 F: F8 ]* o! O8 u# z0 G
putchar(' ');; y7 W U9 r; }5 h* i7 o6 G$ F
goto_xy(j,y2);! k( z0 V. g$ `/ K* f: h/ o. S8 |* b% g
putchar(' ');" x6 h0 n' H" U. z
delay(10);+ E$ \% M* I* }- L' ?4 \- u
}
% t+ s& P; Q9 o6 Y1 t+ C& f% D }
, o6 v5 i% Y% [- ~9 K /******************open screen clear(开屏式清屏)*********************/
+ k( M. Y! g1 e5 b y! ?; X9 n. N8 Z( H- F% j7 U" T" d
void kcls(int x1,int x2,int y1,int y2)" G; V `4 `- T8 S% V2 w. n" D
{
! Z0 F3 I* T6 u0 b4 n) ~+ ~, j int t,s,i,j;. I7 ?3 W/ m0 u: H
t=s=(y1+y2)/2;
S5 z+ q& [2 }) d for(;t<=y2;t++,s--)3 H9 v0 ^3 z& F( ^( r
for(j=x1;j<x2;j++){/ z& p* G& ?5 J/ A. _
goto_xy(j,t);
; n1 U4 I6 O' u9 G# m7 { putchar(' ');
. r" T& T: v( C% n goto_xy(j,s);
5 Q V2 d* Q7 y0 |2 Y6 @: S9 s% ~ putchar(' ');0 m: x% t# @* C4 e0 o
delay(10);
4 }1 c) H( _! s }
. A( _+ u7 V* s5 B, a }
( E m: W" r. J% Q: H /*****************close screen clear*****闭幕式清屏*******************/
! U5 u# c4 C* ^9 N* L
+ c8 E" {) j. a7 j0 [' W void bcls(int x1,int x2,int y1,int y2)
! R6 E9 ^ ]. X9 u$ A% v# P, [$ } { L! c' P* ~' N( o2 {( a. M* d0 k5 K
int t,s,j;+ l7 V; e; O% }& p7 k$ ?
t=y1;
6 l# k' C* X" D! ^ s=y2;' u, P( X3 z t) {, @0 s, X, \- V
for(t=y1;t<(y1+y2)/2;t++,s--)# A6 V' ?- s4 ~2 y! v- \3 ~
for(j=x1;j<x2;j++){
% C4 G7 s; K+ q( { goto_xy(j,t);' F& [+ e! K" N
putchar(' ');# I% A" {6 X' v4 z
goto_xy(j,s);
T, G) S O& C1 E putchar(' ');; A9 h) |+ ]1 m2 N% N |
delay(10);
* W4 R, r/ o* W$ e }
4 n, ^! h$ P9 p8 ^3 y: c }
1 t' L: F! q. O7 K# Z* _( b /******************bottom screen clear(自下清屏)********************/; H# Q/ r1 e$ E0 r0 b# v, a
* O4 d% i" S4 L1 A. B/ o
void dcls(int x1,int x2,int y1,int y2)
' l8 p' n$ `6 _: y6 _( o" ]8 P {
`/ q v8 i/ g$ l" \ int t,s,j,i;# w4 e2 F( a# G7 s
t=s=(y1+y2)/2;
4 T+ C) G K$ M* V7 t# L | for(j=x2;j>x1;j--)
. _* R' H0 K4 N4 d for(i=y1;i<y2;i++){
( s2 v' d0 A6 L0 h: y: u+ Y goto_xy(j,i);" X8 X$ I( {) u) b2 w
putchar(' ');6 _. ~( s1 o, P; P" C
delay(10);$ {5 i3 L6 E) [9 e
}
" f! P0 \3 X1 v4 S' c }
! ?0 v9 G/ {0 n' R) Y0 I: S1 Z /******************设置光标子函数******************/
4 ~' _% n, x$ `' J% t2 X( m* o @# R3 R- K5 O& V6 h! A
void goto_xy(int x,int y)
1 ~' R2 L2 S& V" | {
: x5 L+ @) T7 b+ s" t1 M1 V5 b" x union REGS r;7 V, i/ V1 ^$ x
r.h.ah=2;
2 P% }+ X. X/ k6 g. U r.h.dl=y;
! X: I( h5 u+ {* V r.h.dh=x;
# o% a6 Y5 [0 U; P. i, ` r.h.bh=0;4 Q. J2 j1 M0 L+ |" K: Y% v
int86(0x10,&r,&r);
/ r8 D; G9 b% ? }% P9 W5 R0 ^3 W( |1 u9 l
h' e4 l8 j3 z" T G9 V A
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ a& r- ~% h7 q+ ]! P% [4 s; |2 m$ y8 \$ c1 G& x! J& Z
void puta(void)
+ k% z y' T9 M: j {0 d8 j5 C; |/ s
int i,j;, b! e( k0 B* y
for(i=0;i<24;i++){
, i# O7 \$ i& G6 d) N6 g for(j=0;j<79;j++){
2 `' H' F* e$ f: U6 f+ L2 q V goto_xy(i,j);9 F# I$ U( Z0 q" s' ?
printf("a");
3 `4 ~4 V1 V" |7 D, z o }
. K( S* H4 |9 N. I! @4 i( s }: @% o% K/ }; Q l3 `# p1 O
} |
|