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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ ^8 @+ }6 a I/ O9 N0 ~! ]! {, Z
, U7 c7 ?/ @# }- o 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' C% Y5 e& R+ n' i! X
N+ [, z# a2 q# W 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' Y9 S8 n) \( ?" H 子函数及演示程序:
+ v6 F8 n0 T1 [/ S2 ~- Y6 ~: S2 {8 A% I _1 }/ L
#include<stdio.h>
9 j+ o2 A' D1 }! A- Y. K @* q #include<dos.h>
; P4 G( ]) C4 `, Y. k9 ]; E0 J #include<conio.h>
+ o( `# Y8 F: z5 D
8 A6 K% ^/ M9 B5 f. i% C void goto_xy(int x,int y);) q6 t* B, t7 k3 _+ Z! Q
void dcls(int x1,int x2,int y1,int y2);0 n, z+ Q1 f) ?3 l; [) n" m; ]3 W
void bcls(int x1,int x2,int y1,int y2);
4 _+ a+ i9 R1 l( m Z void kcls(int x1,int x2,int y1,int y2);. [6 u9 F% }8 N1 ?+ g
void recls(int x1,int x2,int y1,int y2);) R& t' U, s" o& B6 r# b5 p
void zcls(int x1,int x2,int y1,int y2);2 l. T/ E" }+ H* T" O9 H
void puta(void);
: f0 C% Z {+ ~
9 s- f- x2 v) O; P4 g& r4 j
; b) t) [8 s8 v, O' a1 g7 e8 \ /*--------------演示程序---------------------*/( q7 F# d& V. I
main(). b+ r2 v& R! ~. c
{
2 O; L q3 E; t- P9 q$ y' w# J puta();% w0 P+ x7 x! Q9 ]
getch();# i, L( V/ ]2 B5 z. C" U4 { b
dcls(0,4,0,79);
) `( O1 S/ l. J _0 L: A getch();
. x- t# n$ O8 h, ]3 ] M puta();" V7 t/ Z* x* @2 H
getch();
9 Z4 [/ o" p$ u bcls(0,25,0,79);% `1 @6 ^# \8 v1 C. g) F# e
getch();
: f: H9 Y S& ~2 J8 U, k puta();( O; n# N) _% s+ L3 T! r+ t$ }4 Q$ G
getch();
6 c% u5 m+ l" b- n/ q# S& n zcls(0,25,0,79);
2 F6 u- m/ Q; t6 U! d5 s getch();
& X' C" T" T4 p4 M9 A }
" f; C% \' ^3 R8 M/ z! t% q9 B3 [; ]" U /*********center clear screen(中心清屏)***********/
3 x9 C0 H# a: H1 U7 v) r void zcls(int x1,int x2,int y1,int y2)
. K0 @4 z4 ] a- F7 A {
# ~: k9 z5 D4 t( L, H/ [$ o r7 q int x00,y00,x0,y0,i,d;* N9 _- u% _' R8 T! c4 @
if((y2-y1)>(x2-x1)){& \; E. x' I( a( ^3 {/ m
d=(x2-x1)/2;
- B& B' m M* P: @ x0=(x1+x2)/2;
, D2 C+ X! \5 j! ]1 ]3 T y0=y1+d;& i/ L1 _' d4 p; \ Y
y00=y2-d;9 y* y3 a0 @' _# D+ ?4 b" \
for(i=0;i<(d+1);i++)) E% z' c8 C0 P0 y: @
recls((x0-i),(x00+i),(y0-i),(y00+i));1 c' }$ p8 C+ q( \$ E
delay(10);
. f9 s- R9 R8 {3 ]! y; W }/ { A1 g& s: {5 B X! o
else{
|% H" k; Y0 T, H8 ^ d=(y2-y1)/2;
7 K" I$ r& {9 x y0=(y1+y2)/2;3 ], C; O% W, B! G3 m+ o @
x0=x1+d;
: _: i$ V6 ^% P) p x00=x2-d;
5 J9 Y# N! k! r9 ^6 ] for(i=0;i<d+1;i++)9 J2 n3 B/ f _1 o! s8 P
recls(x0-i,x00+i,y0-i,y00+i);/ k, d/ a# V/ C+ x- f
delay(10);
8 z# N7 n. o( P% _; X }
, ?2 n) a/ E% {" \ U }
$ v" F4 I) O5 |' k$ |, C- P) S: v) F4 x
/************* clear rectangle side(矩形边清屏)***********************/9 K* {3 V% A( L6 Y' w
/ Q* ^! ?/ s4 M% j0 N* ] void recls(int x1,int x2,int y1,int y2)
6 C" Z! k! M* x% \7 |; \& p$ C {
7 Q* Z2 \2 l' G7 @9 K- g int i,j;( |1 x! g* N1 _ X6 R$ Q) D
for(i=y1;i<y2;i++){+ v. v1 P/ M, \1 f
goto_xy(x1,i);
+ A) L8 H$ @* u3 z1 C2 L- Q putchar(' ');2 H% ~7 H" H. e% @: [. J* z2 X* ~
goto_xy(x2,i);# A0 i8 R$ G7 L7 E; r0 l. u3 K' b
putchar(' ');
( {, ?1 l. B/ a* O7 s* G delay(10);& E; Q4 X* D- |# c) g- ]
}
' c2 F! q2 C7 ^' M; E7 h# M8 ~ for(j=x1;j<x2;j++){/ B' \; v- [8 }9 x
goto_xy(i,y1);
4 d# M8 Q9 p, Z; o! h @ putchar(' ');# j3 M( K0 s: W: l
goto_xy(j,y2);
2 t/ b$ y" }& N' G1 ]; z, f putchar(' ');
, J) P" c) a( e7 X: f3 { delay(10);3 Z5 s. X6 R; Y
}8 B. A/ W& J% ]6 H0 _) v
}
, ]1 Q2 ]# Z7 G W: B1 Y; m /******************open screen clear(开屏式清屏)*********************/$ j& L( @, B# F# i. a: Q
* N5 O5 M/ y" a- C3 z
void kcls(int x1,int x2,int y1,int y2): W+ A+ X% l+ L5 x" I$ d2 H
{3 `5 J# r$ q! P) l3 w
int t,s,i,j;
' H4 _/ J& B: ?- a t=s=(y1+y2)/2;9 a' l. H+ S% Q2 `* C# l
for(;t<=y2;t++,s--)
0 D+ ~& ?- X J for(j=x1;j<x2;j++){/ s# B5 s! s7 L c4 p! {
goto_xy(j,t);
- n4 b% _' O* `" O+ H0 v5 `& u putchar(' ');/ [$ H2 A% q v3 [7 i" l4 Y
goto_xy(j,s);
$ G Q" q( h# h$ h putchar(' ');1 l5 {$ m$ G2 S/ e
delay(10);
& e1 F% L: n6 }8 T# Y! H8 m }+ [$ J6 h5 s' t1 }
}; H. ]- G h+ E
/*****************close screen clear*****闭幕式清屏*******************/
5 i: f+ Y0 o. Y! F1 j# `
( z1 B8 u+ U5 G* v/ a; E7 p1 e" B void bcls(int x1,int x2,int y1,int y2)
# n% a8 P& _% O5 y2 H {
$ Y& g/ l( U' \1 W! a int t,s,j;* @8 e2 f6 } {! ?5 `0 a
t=y1;
- y \7 P0 _& e# [ M& d$ ` s=y2;1 \3 \- o! W9 Y6 }
for(t=y1;t<(y1+y2)/2;t++,s--)1 D$ N/ G; o2 F) o
for(j=x1;j<x2;j++){
9 e. q! {" ^. U- i- ^ goto_xy(j,t);
$ ?! i$ Y% _6 o- I+ G putchar(' ');
9 h6 B5 ?9 M2 K; p goto_xy(j,s);* X% o* F8 b& F
putchar(' ');
' v8 a4 u: {4 M delay(10);
# h: K3 |- L4 L9 X5 N }) Q. ~; } E( y5 G% z
}* `- G* G# s; I) J
/******************bottom screen clear(自下清屏)********************/
% H: F! U+ \) [& j: [! j7 G' z e! f. W& R( \ \( ~6 e
void dcls(int x1,int x2,int y1,int y2)( n3 x n: k# s: }, y
{
* P+ x; u u/ R0 u int t,s,j,i;! r3 `3 ~$ {, Y- e2 z* J
t=s=(y1+y2)/2;
, J9 B+ M0 ]7 n( M8 Y# v" p for(j=x2;j>x1;j--)4 j+ E9 o \+ v
for(i=y1;i<y2;i++){
" u" @$ `9 ?1 _* ]6 K; T goto_xy(j,i);
! |9 d' _& r+ S6 ]& N" t! j putchar(' ');( ~- _& ?" ^5 p$ z$ Q
delay(10);
6 l0 e9 R' ~4 d% K9 j) m+ h }0 G$ A; a0 [4 x9 h# U7 L
}6 A0 E5 K3 T1 k6 `% W( k
/******************设置光标子函数******************/
, K$ [- X& E" v9 `' n( }$ |8 Y/ M# l" u7 k6 f1 P; f' r7 i" b! b7 j
void goto_xy(int x,int y); G7 i1 Y4 i0 l( U. R/ t
{
, K$ n+ V$ H! |, a5 _$ Z6 {4 z union REGS r;
$ C; W4 I: n7 m) ^5 j& e r.h.ah=2;
7 n$ u0 d- L" t* x4 d5 t4 W& I' e& } r.h.dl=y;
* H7 r0 M ]% G. o! E8 ?/ ` r.h.dh=x;
! D+ ]/ b, d7 l0 A1 J3 ~; k6 ^ r.h.bh=0;# \ j# H- u9 N2 z. g' W
int86(0x10,&r,&r);7 Y" U% [ b5 e6 Q
}
5 v0 g( j# P# {5 }; G0 o
3 n( H, |+ o7 S3 E /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ S# U/ j, L- r5 I" c: m
& l3 j4 \1 H% u, h4 s5 H! a, K1 o: k2 X void puta(void)
1 F' A+ M! y$ H0 @ {
( g% N" ^1 F! ~* [ int i,j;
; }! D8 J; i: I- z f5 _( U for(i=0;i<24;i++){
) B) h1 O( \' R, M. b for(j=0;j<79;j++){
: e7 _8 ]9 \/ V8 s/ q% l! G; _ goto_xy(i,j);
8 B8 @% n1 I4 t4 ]4 K printf("a");
/ p! Y% \9 [- r. @) B3 K: ]- p }+ W$ x$ T! C# C# F: n i K
}
5 d! h( d& s% B% M$ y } |
|