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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,% ?7 s- {% {) Z5 R& V) w
3 K/ s. N9 Z# A# j& Q/ x 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 }: u1 U9 T$ N5 K' H
3 O7 t0 [8 N# K+ C+ t, S7 } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 o5 ~5 G5 z2 `+ W: P& R" h
子函数及演示程序:
q2 L" u9 C! W& f- k2 d$ s* O; R0 o* F) }5 O" Q! T
#include<stdio.h>
$ C, @, f8 l# c4 D #include<dos.h>
" Z- M" n6 B' s: b #include<conio.h>
, @ x" A) V8 t; R9 y
/ c/ W; k% @! m3 j/ P8 j3 Y void goto_xy(int x,int y);: e4 t) G6 X) n* E- ?3 k' H: K
void dcls(int x1,int x2,int y1,int y2);
* p7 D" @6 u+ _% Y3 ]1 o void bcls(int x1,int x2,int y1,int y2);* E9 f7 q6 A+ Y! I" l7 m' h% ^
void kcls(int x1,int x2,int y1,int y2);8 z$ u q# `7 b" U" j0 t
void recls(int x1,int x2,int y1,int y2);
+ I/ o; U2 N9 r void zcls(int x1,int x2,int y1,int y2);, P; p0 n7 s! f- W
void puta(void);/ Y3 R5 ?- u: h) o1 t9 }
6 R7 Q+ y7 F9 u+ u
( \" P+ M+ |+ i( v /*--------------演示程序---------------------*/
" i6 k4 i! _6 X2 q7 D% R- s main()4 X9 I& L& f6 _, v
{
( u' B( v5 U$ j7 ^0 J8 u/ n puta();6 f% W3 A- V' X" }
getch();
' d) g; b6 }; ~: D dcls(0,4,0,79);
$ E" H4 V$ G1 o getch();8 r: A: z1 E9 {7 _* Q- H3 X
puta();
& V! Z/ a0 g& E% @3 Z getch();
* R: m/ m% k+ B4 Y0 P& \6 Z J bcls(0,25,0,79);
1 ]: W2 T! V1 Z+ e9 Q5 i getch();2 C( z" B% i. T% u
puta();6 ?' B$ {' [, @! L/ E# o1 R
getch();7 B) e/ r1 T. g
zcls(0,25,0,79);9 `7 u `( n1 c: _5 w1 f/ {- b
getch();0 A$ {' M' W# O! R' [: {
}
. y8 O- Y& L* ]% ]- k; r* n /*********center clear screen(中心清屏)***********/) [( Y: v, ?1 v
void zcls(int x1,int x2,int y1,int y2)
R- }7 Y' {& L$ Q2 s {
; ^1 E) d8 T. ~; _$ b4 n% w int x00,y00,x0,y0,i,d;
; R1 o; w) N& _) t9 [$ T" V if((y2-y1)>(x2-x1)){
! M* O% X# O1 `/ L/ M, U. O, @1 x d=(x2-x1)/2;( Y/ M2 Y5 B2 x5 |4 e6 {
x0=(x1+x2)/2;9 r7 v4 b# l* ~' K
y0=y1+d;
& O, i7 o9 n, t& O, A9 Z- {2 m y00=y2-d;: d* K! e K0 \( F
for(i=0;i<(d+1);i++)
- Y5 n2 F5 [; F2 f recls((x0-i),(x00+i),(y0-i),(y00+i));
4 t$ ^' Y9 R- l3 r# Q delay(10);. J" N* p8 R$ Y8 q+ i
}# [9 e0 k1 \# K8 G& S9 f: G
else{
: f9 R( c2 c) O% Y+ O d=(y2-y1)/2;- L. q$ @( u2 T, P; k! s+ S
y0=(y1+y2)/2;' M3 U* V$ Y. p. J( o9 q; Y+ b
x0=x1+d;
* |9 g0 w9 G2 ?0 r2 J x00=x2-d;8 c" v1 @) U7 W9 z7 v
for(i=0;i<d+1;i++)2 C2 G. d, |! g/ a
recls(x0-i,x00+i,y0-i,y00+i);4 s* e7 B8 o) i5 }! N" E: P
delay(10);4 c: K2 h$ X+ c
}
- N, A8 U7 w/ C" Y. ?- l }
" u- m5 D8 r p q
- K t+ G' S2 o+ ~0 @; W) X /************* clear rectangle side(矩形边清屏)***********************/
6 O9 C$ W3 d0 z) a% ~1 L D& B1 G8 O+ W8 x
void recls(int x1,int x2,int y1,int y2)
2 f0 d& H) t0 \. @+ K! M. p+ O5 D {! l6 a# F- C* h5 w3 J6 E$ ?- z: F
int i,j;
4 [! I, |$ r# ], k& T4 s for(i=y1;i<y2;i++){: Q. K, m0 Q. h% [ r: g0 R% ^
goto_xy(x1,i);; `0 u* c% _8 u/ [2 w
putchar(' ');
) U$ ~: j& r. M. o/ E goto_xy(x2,i);
, i; w/ }, o; L% j% `7 j) a2 Q1 X putchar(' ');$ p8 O1 h! @$ v
delay(10);
3 E- C4 Z7 A8 v. o }
/ A* `/ K+ k! f# {" N: {- s3 p for(j=x1;j<x2;j++){
+ } I% R* t9 l goto_xy(i,y1);6 p: W) E# d9 S: W
putchar(' ');
1 \% A, j) B# q* ` goto_xy(j,y2);! p3 p; Q% V& C0 B
putchar(' ');
, I$ o5 E) W- w+ _/ Z delay(10);
' V% k7 d5 w$ y5 t' ~* W }$ I: v' Z( z4 c1 Z2 a4 H% q
}, i. j2 d4 U- J5 Y% o1 T2 q
/******************open screen clear(开屏式清屏)*********************/4 w, @" H& ]" I2 J, J
7 y' o2 K B! X void kcls(int x1,int x2,int y1,int y2)
6 y0 ]5 M: c3 ^/ L: `( o3 f {
# r3 _) ?3 J2 d int t,s,i,j;" ]( [* V9 ?5 Z/ K- B) H& e2 w" g o) }
t=s=(y1+y2)/2;! i# t( R9 M+ N. [+ e
for(;t<=y2;t++,s--), r9 Q# a* D! S1 _$ L
for(j=x1;j<x2;j++){
$ W/ _& k, u ?* G goto_xy(j,t);
% k: Q. n' U4 p putchar(' ');
4 E5 o) S5 y" J7 N2 ? goto_xy(j,s);4 I/ N6 q3 x7 W& |, p
putchar(' ');
# j# i4 E h. d delay(10);
5 ^4 G3 X8 _) M; s* T: V3 B }
4 C# w, k6 N) o }
9 S3 a2 a2 ]8 h4 ?: ?* X2 @ N /*****************close screen clear*****闭幕式清屏*******************/+ M% F; T4 s6 U7 Y3 F
) f+ o# X9 k9 d- o, R* f, C* `! j' S
void bcls(int x1,int x2,int y1,int y2)
1 h4 Z) Q. A" u9 u j3 { {
- o. ^$ A4 M2 t; y int t,s,j;
: P! v8 O) Z4 m& \5 k t=y1;
6 U" J. Q3 o0 q s=y2;8 i3 y; J+ k5 u, P3 h% g; e
for(t=y1;t<(y1+y2)/2;t++,s--)
0 Q* L5 f8 M) L" b: L for(j=x1;j<x2;j++){
4 h( k" }, T. u2 [1 P/ L goto_xy(j,t);
+ T+ @7 Q9 T+ X5 L9 _/ [+ V putchar(' ');" S! w% I9 c/ w
goto_xy(j,s);! [& [1 T( z z5 V9 n' p6 k! m
putchar(' ');
3 {9 I2 R# O7 v delay(10);+ F6 ?# D! m- ?) _' O
}; u; L, y2 S# E1 B
} S$ i% W7 \- M9 r! i4 }) ]
/******************bottom screen clear(自下清屏)********************/& l/ ]/ X+ B% F8 x9 S
' s7 ^6 b' v, J" @+ a9 ~: A
void dcls(int x1,int x2,int y1,int y2)
- V7 R- b$ E) V C; Z2 L8 ` {
6 W7 [+ j# x: L! |7 [/ G int t,s,j,i;5 y L5 ^ X7 Z9 e
t=s=(y1+y2)/2;
. m \/ o, a. ]1 P5 a+ X/ m for(j=x2;j>x1;j--)5 L$ y+ V5 j" e* `) X, g2 z' }
for(i=y1;i<y2;i++){
1 Z) B( O. L! ^" Z4 u6 m4 D9 ]9 I goto_xy(j,i);+ Y- M% ?, \3 r3 O K/ |
putchar(' ');
& k- z0 t7 m' a, [) A3 h delay(10);
" o( N1 r$ t8 S$ F }
/ t+ ?$ ]# h9 ?. G9 y% T }
% D, p6 N; b; f' ` /******************设置光标子函数******************/
- ?2 |+ ~0 F8 b6 p6 h6 ?$ _% z7 W) p) \$ Z; X. Y- h, I
void goto_xy(int x,int y)6 {; I3 Z6 F7 r6 u! m
{
. a1 T9 f. Q9 J2 [ union REGS r;
" g8 q9 M- M. \% w r.h.ah=2;% |) W+ N! L- f% e' q0 Z
r.h.dl=y;
( `) T& w& n _# y r.h.dh=x;. j) W# s1 V/ W, Z
r.h.bh=0;
y2 B/ a, i" K; P: O int86(0x10,&r,&r);
' u3 f; u8 k4 I. h }
& Z0 r, Q5 p9 w/ _# d9 \; N1 L% G3 v0 V" H+ Z% J! S
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ m# C# Z9 `) {* P+ M) ~ v8 e
i1 K4 V0 R/ Q! _$ a void puta(void)
' I, X# v; V6 W. B {/ h' B8 s8 y6 O c: ?6 {0 R
int i,j;3 z6 m& o7 \" U( r7 e" z& ^
for(i=0;i<24;i++){
! K+ R6 Z# A0 t9 [ for(j=0;j<79;j++){2 F/ j! O, k, V4 |$ a
goto_xy(i,j);
$ E& U; [0 u& @0 J/ e$ [ printf("a");: d, w1 @5 l0 @7 K6 c( W
}
6 l' {, f3 S: C5 s) p. D5 E0 c }
1 p8 ]! Y5 a) E# {& s } |
|