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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 f+ q4 @& A: [. |" W0 S3 [
3 Z' d$ h, J7 l, g2 v& z A% g 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. L3 b$ p2 k3 \! `* n) f0 i
" y6 A# O3 t6 k8 c' O 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. , d+ l' _* T7 _# l0 p
子函数及演示程序:
" x! u3 P3 ?' W: s. q
+ G/ k M* K6 b( }" b( Y #include<stdio.h>
; @6 n( C/ J1 w# e$ V #include<dos.h>3 y/ v9 t: P+ R* w
#include<conio.h>5 _ z" \& ~$ H1 G- [* z
) R; m# {* Y. z2 o. O
void goto_xy(int x,int y);/ g. Y. _8 o1 I x
void dcls(int x1,int x2,int y1,int y2);
, s" \7 J6 ^1 G7 {+ ~% Y void bcls(int x1,int x2,int y1,int y2);+ \8 U' E$ ?8 @
void kcls(int x1,int x2,int y1,int y2);
! Z* d# f& h. x! O) W void recls(int x1,int x2,int y1,int y2);4 \% A! x; L. v* A9 n
void zcls(int x1,int x2,int y1,int y2);
: Q7 u% p5 W M6 W void puta(void);
+ @: }8 m* b- T) x6 S3 c2 O- b
2 G9 d1 n' R. {, F# U
# W% |% R4 `/ [* ?* C# S /*--------------演示程序---------------------*/
" g) h, u- b& Q7 g. J% j main()# }! C, [" i# O/ U1 v( a$ T9 u2 g
{
& ] Z9 h! [, K3 P puta();" U: G- g( W7 u3 y3 C7 m- C
getch();
+ i5 }$ \/ X Z7 } dcls(0,4,0,79);
' r$ J7 Q- `/ S* E4 P5 f getch();' W( L9 D; ^8 X2 L: h( l+ I
puta();
/ S1 K$ X% o4 {2 V; B/ v getch();
. o3 t7 h% q, o- e& b bcls(0,25,0,79);
5 B( j0 l' N% O8 l- W getch();. y% {0 n; u+ U! e! B
puta();
8 W* Q L8 `8 `# H9 F getch();' F/ }0 n5 K' `) k( q3 H
zcls(0,25,0,79);7 N: z8 U& L/ S/ x, E/ B
getch();
8 C1 z/ X0 k s3 c* | }
x% l1 H1 z- D1 I0 v# m" b9 Q# ] /*********center clear screen(中心清屏)***********/
# @" q9 D1 M0 s" _/ c void zcls(int x1,int x2,int y1,int y2)
, `9 q) I# x5 H7 { {. B. Q, K$ G1 _& P) e- D
int x00,y00,x0,y0,i,d;9 x2 F; d/ O+ k: J7 u
if((y2-y1)>(x2-x1)){
; U g! V0 R. m/ j; @ d=(x2-x1)/2;- V9 I8 e1 ]* K; T4 W% }& G
x0=(x1+x2)/2;2 Q9 X X) B; `0 P# `( Y- T8 J) k
y0=y1+d;# T/ C. d- z0 a0 y/ E7 D4 A
y00=y2-d;( _9 X3 H' B. H+ h
for(i=0;i<(d+1);i++)1 y. T" N5 F# g, G9 b
recls((x0-i),(x00+i),(y0-i),(y00+i));
9 p3 M5 y& [* q delay(10);
5 v8 W9 `: s4 r5 ^" i }
" v' \. ?1 G* C else{3 ]8 ?4 ?% e& }' x
d=(y2-y1)/2;6 R- T. v4 }" k* V& E6 U
y0=(y1+y2)/2;
1 l u0 f+ l6 d8 w+ m) c' I x0=x1+d;3 v I5 W2 U0 _: f" }; N1 m R
x00=x2-d;
' b& j' }( \5 _# S2 a/ U, Q for(i=0;i<d+1;i++)4 l8 x7 K6 a: w V3 W) j6 c
recls(x0-i,x00+i,y0-i,y00+i);% ], m- a% E- H$ R9 v; f4 T
delay(10);
, G8 R& M9 x; C: i }
/ D0 G( C5 `) T' G }
4 C( b b4 L% ?2 v- V+ B% n
6 O* s& }! h; F7 K6 s7 j, f /************* clear rectangle side(矩形边清屏)***********************/
, `% n* I' R2 M2 w U Z+ ^/ j# ~ n4 |' o4 X2 |
void recls(int x1,int x2,int y1,int y2)8 T$ x4 a: c( ^3 i9 v
{
6 X ]1 w* H3 Z; O; Q, a0 u int i,j;
; J: L! |9 ?: U# g for(i=y1;i<y2;i++){/ W; o9 d- [) A( N
goto_xy(x1,i);
6 s% }+ B' `0 J9 }# [7 z2 a putchar(' ');3 p7 u' A% E/ _5 f
goto_xy(x2,i);5 Q) l) G4 y) s2 C/ H
putchar(' ');
, Q8 ]2 Q$ [! `! Y7 w# M delay(10);
9 c1 S4 m; L; q$ Z }
( v7 F, q/ Q* J: N5 l for(j=x1;j<x2;j++){
: q# D, ?8 S4 |, ~1 q4 u/ s goto_xy(i,y1);
7 q/ [1 q# r5 ^* C% _ putchar(' ');
: I k- E- L" u+ w: h goto_xy(j,y2);
4 r. w# X* a* j1 b2 Z! P4 g putchar(' ');; M+ @- T( \$ H
delay(10);
# K' [3 h! W u* f }& {8 ~: z3 j) a+ O" A/ c5 ~6 \8 h
}1 n* J, U6 x O( n
/******************open screen clear(开屏式清屏)*********************/
- t: O$ c+ i+ I, e- p
2 t, O$ p$ H0 ?2 Y% m void kcls(int x1,int x2,int y1,int y2)
9 M' N- n. E6 ?* o; t {' f/ m# t* h f- U1 A. L
int t,s,i,j; x5 M; c* O7 c0 A7 Y6 N" C8 f/ O
t=s=(y1+y2)/2;1 V3 g& X4 O! U8 ~3 i4 V- N! a
for(;t<=y2;t++,s--)4 p( B( m6 F/ q5 |: ~' R
for(j=x1;j<x2;j++){/ A1 R7 a, [7 N0 U6 m
goto_xy(j,t);& \, M9 P& K+ [% d! m
putchar(' ');
# |$ j) Y0 ]; t goto_xy(j,s);
' F# |0 N( P g, R. R& ] putchar(' ');
" r& k3 J' f$ R5 P7 G delay(10);
- `: Q# Q1 J0 @5 M7 f$ A9 H }3 q' S( Y1 Q; o# z
}" _' F6 [" ~+ E! V
/*****************close screen clear*****闭幕式清屏*******************/
) F1 ~7 A7 [3 q
8 }, F# h9 i' V/ e void bcls(int x1,int x2,int y1,int y2)
* ^ S9 l( j) S; Z$ _ {
$ y3 Y2 B' c l( b) Y8 ~0 E int t,s,j;
5 U. F' w7 O3 s8 s: x% I t=y1;4 I* f. _, A7 H' _
s=y2;; `1 z# s( @% o1 S# f
for(t=y1;t<(y1+y2)/2;t++,s--)" U; a) f) t7 ^, |7 k0 o0 z( e
for(j=x1;j<x2;j++){; x' g$ z/ w1 P
goto_xy(j,t);
6 z) ^- K1 F$ @+ b, \ putchar(' ');
7 P# t* v3 f8 d. I goto_xy(j,s);
( y; a) m0 \( X, V& w putchar(' ');% r2 G3 M9 t' T9 Y2 G
delay(10);. k0 f3 S& g7 A( u" ~
}
) u! r. m6 R# v5 D$ R% d }; V0 A" c" g) a. j
/******************bottom screen clear(自下清屏)********************/
" z) N9 t3 V' a+ s6 C9 i3 P
; g: n8 K7 W% ~" P2 N void dcls(int x1,int x2,int y1,int y2)
" F$ H6 p! X6 b {, D- c5 @ m/ X( w+ n, ~
int t,s,j,i;
) m; C5 {5 V4 ~3 R t=s=(y1+y2)/2;1 Y h+ W) C5 |: ~. G# K3 t
for(j=x2;j>x1;j--)! @: b2 }4 q3 `( d0 G
for(i=y1;i<y2;i++){
, P( b' I% m- d+ Q1 b goto_xy(j,i);' }! a w1 `3 q# i! y4 P0 `- e
putchar(' ');) `/ X! Z, d# H
delay(10);) I P0 K8 N; N- ]0 f
}* X% w- B# z+ ^$ O5 W8 G
}
) _/ d+ t, f" M) f! L( r /******************设置光标子函数******************/8 A2 B2 Z. J' A' u) N/ v# w4 C
. c. ?1 a. l" k3 M. Q! H void goto_xy(int x,int y)* e6 \' E7 e; Q& n% I U
{3 D: L3 t. v- i. O4 a- q0 I7 ?; W
union REGS r;& q+ c' q$ n7 I1 p7 C
r.h.ah=2;2 R- [, b5 [- B( l& c" A+ |
r.h.dl=y;; t6 q8 \& [! [5 A- [) t! P
r.h.dh=x;
- S. \+ q; Q5 p- ]# @, ? r.h.bh=0;
% f* l* v3 S; t& a) B& h- C! U int86(0x10,&r,&r);* F& G# i- y8 S* d
}0 ] i( g4 R6 G6 W5 }& Z8 C4 {* F
9 q! ~# v; f2 b! t /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 ]: b- Q+ x( E( a: b! j
' ?+ W+ f4 z& W$ f/ q" x9 k void puta(void)
* m; I/ S$ [+ r' Q- y& y( T: e- q {. o$ t M4 u4 l* _, q0 q
int i,j;
/ F% Q+ _. B* y1 _ for(i=0;i<24;i++){- ]3 z6 _, i: v
for(j=0;j<79;j++){
+ S3 h- m: y. ^, c4 ^ goto_xy(i,j);
5 @; a' J" u" t, g+ w printf("a");
. x; h4 f, }. v# q* e* j3 `6 C }
% U0 Y1 Q& g5 w; u6 f3 e }
; j8 D6 k! [: B: |9 j } |
|