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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" K9 N, t9 c- x- j. @0 }: Y
: c5 G8 j7 P" Z9 N 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 [ `# Q) ? L! m' |
. \: P2 R0 j$ I* Q# }2 d 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ A/ J. y7 [* x* a 子函数及演示程序:% H/ H3 M2 q/ E# V' N
& t7 A) e1 C' z0 |; L' j8 M #include<stdio.h>" j. q3 V; ?( t
#include<dos.h>! ~8 @) p8 w& t" J
#include<conio.h>, D$ p3 E. x' D$ _) M
- y3 C; n' _: D8 N/ B$ f
void goto_xy(int x,int y);
1 b0 J' L; y' H8 }7 F void dcls(int x1,int x2,int y1,int y2);7 M; ~( {2 d/ H7 S* A3 B' z
void bcls(int x1,int x2,int y1,int y2);
; k6 Q8 A6 }6 s, c( p' ?0 }! f void kcls(int x1,int x2,int y1,int y2);
+ `- Q- y& e1 x$ \+ y void recls(int x1,int x2,int y1,int y2);4 w0 |- o& ~3 t% J1 r3 p( r
void zcls(int x1,int x2,int y1,int y2);
# c1 e0 p F$ k) z. [/ Q, U void puta(void);
2 q4 h& @4 P# M$ E. L+ B/ g( B) H! Z+ C! K R) ]- w
& V; R$ e0 F2 I+ c' @
/*--------------演示程序---------------------*/
4 j5 @$ g: b, s2 c% v# W main()
4 k5 M0 u- j% C5 s1 T {
" E' ^! T3 b$ ?: a6 w7 _ puta();: m/ T* a! G6 H+ ~' y
getch();6 C, M( D% [4 D- [, p6 q. H
dcls(0,4,0,79);
# @+ r* f+ w" c9 h getch();
( c4 U- G0 w- N. W9 m7 ~1 M puta();# j5 |! |% R% m
getch();
% H/ P; ?- S$ [ Q bcls(0,25,0,79);3 r- {0 Y+ z4 E' j/ g$ U3 f9 X. }
getch();
+ i9 G" N7 k5 C! I, a puta();
& y0 Z; O( r) l- z4 Q' y1 A( B, ]! y getch();5 Q1 N* X& V2 ^
zcls(0,25,0,79);
5 ?2 I" Y; P( E' [ getch();0 E; I7 D" W, r+ E `9 C
}
' v8 u6 W% C0 B2 r8 A /*********center clear screen(中心清屏)***********/1 f% E; |! l& m! ]. z- i
void zcls(int x1,int x2,int y1,int y2)) s! `& ^# B' c/ ^0 U7 w
{/ n0 i) Z4 M! U
int x00,y00,x0,y0,i,d;
. Y, A* p+ C: w! t, B8 |* F if((y2-y1)>(x2-x1)){% U+ ?( L' b1 p( [
d=(x2-x1)/2;
. W- E7 I8 W, R! [+ \$ I% t x0=(x1+x2)/2;
- X2 `) { S8 I8 F y0=y1+d;; O3 y' A3 M* ~ d' u0 l0 Q* v
y00=y2-d;
' ^ O# _/ w& h, T6 K9 b for(i=0;i<(d+1);i++). Y) n4 h, |; _7 T; r
recls((x0-i),(x00+i),(y0-i),(y00+i));
) c: O4 P9 U0 t, j; L5 q8 \* f2 r4 T9 G delay(10); {3 O% i+ h7 @4 l. h& Z4 W
}
0 V7 `' z. ?* n else{4 n$ O* ?: W$ F4 {) m3 y) m
d=(y2-y1)/2;
; b5 p- ^7 Q( C8 k W& e y0=(y1+y2)/2;
7 Y6 ^2 o$ C: \! d x0=x1+d;
H5 h6 [6 ]: u& E' V x00=x2-d;9 N4 R) K" c" Q$ z
for(i=0;i<d+1;i++)
5 g) a% Z- `) Q; ?+ b7 o recls(x0-i,x00+i,y0-i,y00+i);4 Q4 V5 o4 B9 I
delay(10);. L. W( r3 r& W4 Q6 ^
}
" t6 @3 v( p# ~: b }
( v$ r+ T" c7 P ]
+ I( L$ z3 y% h& c0 Z /************* clear rectangle side(矩形边清屏)***********************/
/ R5 p+ H: h. M) ^ R' e' O
+ Q& a: J. O% n void recls(int x1,int x2,int y1,int y2)/ H6 B9 M" a J
{
- |9 c; K+ v0 {+ s, _ int i,j;* b5 V% `# X& \. q
for(i=y1;i<y2;i++){; r/ ~+ u0 |% h8 M) b4 {
goto_xy(x1,i);8 P8 w7 U; A9 \6 Y1 D
putchar(' ');- T5 `7 ~! L5 a4 [9 e b
goto_xy(x2,i);
* z! J& I9 X3 L putchar(' ');
0 R+ I1 J$ q- B- u delay(10);3 d7 D* D6 o2 N
}: m7 h3 v" E( ~
for(j=x1;j<x2;j++){2 |# M- M* |1 {) P) i( Q6 E3 j! ?
goto_xy(i,y1);" ?) [, x- m! k1 l1 K
putchar(' ');0 ~4 M( J+ T/ Z3 n- o
goto_xy(j,y2);
$ K, V; m U$ m. k putchar(' ');1 ?- X4 |/ n0 n# ^1 W- ?
delay(10);/ ^% @% {5 _+ e* U$ E! s0 G( n$ U
}
3 X) a e$ D/ s+ `/ h- o* s }
8 s1 }+ l5 w7 r' t& \ /******************open screen clear(开屏式清屏)*********************/
. F) X% J. e2 h
$ h) C5 r* }* y' D1 x! a e void kcls(int x1,int x2,int y1,int y2)- M2 p, i; q7 \* o2 y3 y
{
! U/ I/ |7 h% B8 Q P. h% W4 g& k int t,s,i,j;& e/ o2 ?, E' d5 @! }
t=s=(y1+y2)/2;8 F6 i+ i6 T1 G9 `( w) u
for(;t<=y2;t++,s--)
6 q& R3 @; H+ Q for(j=x1;j<x2;j++){
; [, s2 c1 H# p) h( j7 _9 N goto_xy(j,t);
% ^& @+ T( C9 q7 v putchar(' ');$ f2 w3 H9 D$ a' x( H, P% d
goto_xy(j,s);0 o: t. d8 b0 u) i( B& }
putchar(' ');: L2 X) ~% j+ z& H
delay(10);! v6 Q* P* ?( p6 `
}. s/ K: Z8 p2 c( S: h5 s* v
}2 S4 f: n8 p: e" E) X7 N
/*****************close screen clear*****闭幕式清屏*******************/0 N9 U, i8 Q' f# d3 | ^
9 Q* A" `+ o. w6 o8 m. x7 A
void bcls(int x1,int x2,int y1,int y2)( H. ^8 n6 w8 C& f. L
{7 |* D: {- W% j! I9 O1 o
int t,s,j;
: T. D+ g* o k7 M0 N" W" i$ j t=y1;
. T8 G7 w2 Z; D& z- m" ~6 B s=y2;4 V$ q0 i/ P9 Q* U1 L
for(t=y1;t<(y1+y2)/2;t++,s--)( p4 `0 Q$ S, a! P/ Q; r
for(j=x1;j<x2;j++){+ x3 X u& H% N( @# W1 U# a
goto_xy(j,t);
, I. h% }9 f. i+ u: W putchar(' ');5 _1 X" h; t; \4 _8 g' j. R) [
goto_xy(j,s);7 }8 ]( D9 D" R+ p) ~
putchar(' ');
& l8 R' B& b B+ E0 f6 V2 F delay(10);9 D! s" m1 Y3 o3 k$ ~
}9 l& r- u# G+ w2 d; A& D, F7 }
}
$ O' E7 n2 @$ t- J /******************bottom screen clear(自下清屏)********************/" ^/ x4 d1 N6 [0 }2 m) W w- O
5 u; B# O7 U( J; L( `8 Z
void dcls(int x1,int x2,int y1,int y2)9 B- h5 p% J( g5 ~; K
{
" u) k9 b: f+ a3 L* y% \ int t,s,j,i;' I- \0 A: e* k5 F: @
t=s=(y1+y2)/2;' o: G3 ^/ F! `1 o4 z
for(j=x2;j>x1;j--)$ \& x/ p4 \4 _+ a9 C" s
for(i=y1;i<y2;i++){
S7 @- p0 h- |5 i$ p5 p. a goto_xy(j,i);
, O+ @/ R6 [8 x8 _ putchar(' ');
8 v6 }$ X/ ?* D/ W! j0 }: n H delay(10);/ `8 y/ b- G. H: Y
}+ }3 ^- ]9 X. U! T% q1 f; i/ M
}# b7 v7 y+ N! I' h
/******************设置光标子函数******************/
, H8 g) ^1 i0 |/ q' I( w4 j# {. @( A9 n/ R8 c" ?% \
void goto_xy(int x,int y)
% D6 q O# Y8 e& z% ]4 L9 u/ a/ u {0 t- Z# Y4 X, Z. Y
union REGS r;
$ H( a; H1 V5 P2 g2 v5 O r.h.ah=2;# i/ R+ u" E. b6 W
r.h.dl=y;
3 `% |/ |7 C2 }1 ` r.h.dh=x;0 _7 a- ~5 W- g# O2 a: g" x
r.h.bh=0;% D# d: ^/ K# d9 P
int86(0x10,&r,&r);
5 R) q4 J: j g X5 Z }5 ]$ ]" w; s6 B( k$ }* x7 r
0 Q* \2 N6 x: M2 X* i5 e& Y+ \
/**********************在屏幕上打出一连串的a字母用于演示程序******************/; { k1 D" J# y* ~9 O
J- Q% } M* [/ p% B% h void puta(void) ^- H6 B8 S& Q0 O a' R% m
{
' j6 A4 N- H6 x h& w% B+ U int i,j;6 [: c0 d4 \6 H6 {: b* f
for(i=0;i<24;i++){2 S( W( U3 t \) M/ O7 |6 C3 f, ~
for(j=0;j<79;j++){
1 J- k2 F. f' P7 w. O, I& ~# V/ T goto_xy(i,j);2 t3 C6 A- }3 v( k
printf("a");. f9 q% T5 w) ^5 l1 S
}
2 U |% Z! y3 h0 ~1 S3 Z0 ^* W }
4 b& d+ r$ |. R1 s" C$ K# v" Q. z } |
|