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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ?$ f$ E- x9 R) F$ u- m% E7 @$ Q# I u/ b9 q% i5 H
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- h* e8 d9 y$ g: Q7 M/ n
; [ D. x3 s' m& ^0 w0 a
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 y. k9 }$ j+ R) h8 }; t5 m
子函数及演示程序:' e6 d+ m6 W9 F" l
2 C7 ]7 s; o4 L% h. X' \- F #include<stdio.h>
% a. F" p/ P4 N# \% H6 B' h #include<dos.h>
9 E$ Y1 O2 j* f #include<conio.h>( y: o7 g- M7 Q2 \2 l- H" d! s7 @3 ]' h
6 L! G1 i7 S& r8 Y" _3 G S
void goto_xy(int x,int y);
* a U3 r, P/ G0 y void dcls(int x1,int x2,int y1,int y2);6 T* T" _' D# u, O, B9 r5 L
void bcls(int x1,int x2,int y1,int y2);
, ]" O S/ t2 y void kcls(int x1,int x2,int y1,int y2);4 N$ E0 m1 o5 y3 p- v+ Z
void recls(int x1,int x2,int y1,int y2);- r0 C$ V; R1 A# T/ r9 z2 I& }4 }
void zcls(int x1,int x2,int y1,int y2);
! J1 s. ?5 Y) [8 ~7 [3 D! M; i void puta(void);4 b# v2 _( K: y/ g5 m2 f( \1 ]: E
( k5 F7 L$ v# n5 _- [) u" d
+ M4 H5 ?$ @, P* @0 \, E9 W /*--------------演示程序---------------------*/7 z$ a6 \/ D7 J0 I( Q8 P3 v
main()* g* x3 Y! E8 k/ H g; u- e5 ^
{
& s* h! }, Y w+ r& h puta();
- V" X1 q- a9 ~+ A6 M getch();5 m" f9 s k7 P0 b; O4 F& S
dcls(0,4,0,79);- f0 F0 c8 S; H8 v0 L" _3 \5 i! ]4 m
getch();
4 W! o* }" H- F" B4 v. Z# h. N puta();' g6 ]! i3 ?# h* b0 v7 c
getch();
2 A/ P: ]5 q) X bcls(0,25,0,79);
. j, K" J" V, Z; g( ^0 t getch();9 k5 L+ ~9 I0 \
puta();7 V$ T% x0 @9 \8 c
getch();
+ Z1 Q& N: K4 g7 o zcls(0,25,0,79);6 Y, _ y; S+ ~. E' h
getch();
0 H% Z/ [, a# r# A* x/ x }
$ e( G& ]- w* ~& ` /*********center clear screen(中心清屏)***********/- L" s8 i3 {+ X
void zcls(int x1,int x2,int y1,int y2)
0 E! A, V8 L/ D" ~' l9 c* F {
# e1 v" i2 h4 n: K- y1 y int x00,y00,x0,y0,i,d;2 d! D" {# t7 D+ h# B; |; I
if((y2-y1)>(x2-x1)){
# L/ u5 B4 z1 l' R' l1 ] d=(x2-x1)/2;8 H2 o W9 O: T' c A
x0=(x1+x2)/2;: [% Y3 [; b! m' D6 Q- `+ M) n2 d
y0=y1+d;
- z9 j8 D5 r# r: f7 D V y00=y2-d;
. R8 c, @, j+ A1 J for(i=0;i<(d+1);i++)
: P9 f5 K S. E. y( Y* b& d( W recls((x0-i),(x00+i),(y0-i),(y00+i));, [4 z, I7 \0 |
delay(10);4 I) H9 v2 i2 P; @' W
}3 f/ ]/ l9 N @9 A; R$ ]
else{# v% k0 u8 B5 u# o
d=(y2-y1)/2;1 g& M8 w }4 B1 L7 s; y
y0=(y1+y2)/2;+ W3 \7 U5 ]' O t' V! T% _
x0=x1+d;
1 j1 a( T% b) f* ]9 j& x }& S8 } x00=x2-d;
1 q, k, v0 m& u; T& R- i for(i=0;i<d+1;i++)( X. V; l7 C7 Z% R: @/ @$ b8 @/ D
recls(x0-i,x00+i,y0-i,y00+i);: |0 H; G' h! ^) ?2 ^
delay(10);, L2 i1 }' R) p6 F% N( T5 s
}
( n# @, B, l8 w: |3 j4 w }3 e. `- y% v6 X$ B$ B0 ` t
/ `2 e* I; s1 [/ q- g /************* clear rectangle side(矩形边清屏)***********************/
7 }1 Y0 G/ J a! x& L; H6 C3 o+ a* A5 c( S
void recls(int x1,int x2,int y1,int y2)
2 L: T1 d* S' e# c3 i {0 S) ]; N+ n* h2 { U* x9 m/ W
int i,j;
/ p3 [9 y1 ^+ h0 J, E/ u, [ for(i=y1;i<y2;i++){; h: Q% s* j2 k" p9 o6 b
goto_xy(x1,i);- g( {5 ^) o7 l& {; o
putchar(' ');
7 b' u. A. L& @) M% h2 X goto_xy(x2,i);1 b q6 V$ b& X) l# c$ f. k) \
putchar(' ');
$ T. F* k5 d. ^9 u+ @8 l3 B delay(10);
M" Q+ D1 g0 R# l }2 B" ]5 v7 O6 u$ d, s- ^
for(j=x1;j<x2;j++){5 Y' E, G4 H4 H3 |0 V
goto_xy(i,y1);
& b7 b1 A, _9 u! s putchar(' ');
9 @: T/ u, q$ D. L$ E" b goto_xy(j,y2);
* e( J* u: \$ y putchar(' ');
f# F- Q9 {% w4 s& O delay(10);$ e0 y1 ?# ^, n- Q
}
) R7 B, @; E6 c$ e3 @ }
# o! L* `* @$ [6 t7 G/ w /******************open screen clear(开屏式清屏)*********************/
. r$ K6 v+ n, x% ^: U2 H3 a) o% L9 s. Q6 \/ J- `5 e
void kcls(int x1,int x2,int y1,int y2)
; B7 H4 L K {# b {
7 u7 l; {; a$ ` T X9 ? int t,s,i,j;
+ t: B6 ~$ }5 U6 B t=s=(y1+y2)/2;# z. j( Y, u- @0 e2 U1 R0 \
for(;t<=y2;t++,s--)( N+ n9 D5 \* q
for(j=x1;j<x2;j++){7 j4 Z+ S3 A; b0 }% e( o1 C
goto_xy(j,t);! k; r1 v& }( \+ j- ^, L
putchar(' ');" c( [- }. i$ Z/ e3 j% h( J
goto_xy(j,s);
# u: f) }$ u% @0 u4 ], D putchar(' ');
# _" n3 c* p$ |! u) z- b! o delay(10);! O3 `! _) q6 \) I: ]5 _/ I# |
}) B8 r1 O! z; y& J- E/ L, }9 k. d
}! _ y2 l, W4 i
/*****************close screen clear*****闭幕式清屏*******************/1 D" {+ m0 ` Y. K: J1 u" ]( g
; S3 S% ]5 A7 [! ?1 Z
void bcls(int x1,int x2,int y1,int y2)/ [; p8 f+ F! ?$ u r! r
{
3 k8 g3 K4 y% u3 u) y$ V* _+ E- [ int t,s,j;5 x) y' z a3 S# ?. T+ i6 ~
t=y1;
2 W$ H# n! s- X6 y: K2 ] s=y2;
& ]4 f3 v" o4 w1 J for(t=y1;t<(y1+y2)/2;t++,s--) ?! A6 |9 E4 I6 J
for(j=x1;j<x2;j++){- F: o; ?( E# r
goto_xy(j,t);) A8 R" F. ?) c2 |; x% `+ w; _
putchar(' ');: r; e$ a3 f- i: F- O1 a! h/ ^
goto_xy(j,s);
: X5 j" W2 p9 k1 n2 z* u2 ]" f putchar(' ');
& g% A @3 Q/ b- A( P2 b- G delay(10);2 U9 J6 N& z0 Z6 P* C2 Z
}
V8 F* i4 D- y3 L }
7 i! ^0 V: d1 Z+ J% u, A. {. Q5 l /******************bottom screen clear(自下清屏)********************/
+ ?4 ~9 V2 G4 S7 y% x6 t( s4 ?) N3 l' ]' n, |* X! x
void dcls(int x1,int x2,int y1,int y2)
6 o" X1 C6 O8 T9 J6 l0 i6 y! j3 G) ? {
& q% Y! p, d7 \# q3 n- l% b; ]* @ int t,s,j,i;* k# Z$ c" @" [+ p) k0 F K6 W
t=s=(y1+y2)/2;
; w; K0 K+ ^9 L8 X for(j=x2;j>x1;j--)
- O' [; P% D' W3 J for(i=y1;i<y2;i++){3 K1 @1 L- q% C1 X
goto_xy(j,i);
4 X7 y& M p8 q2 Z9 G3 N M; R! f M putchar(' ');8 z& Y6 }) @+ t+ I. k. l
delay(10);$ z( A1 T7 g% @2 r) z/ p- w
}) v0 w+ N' Y9 v( s7 ~
}( J# e: s( e, s0 O. u4 g
/******************设置光标子函数******************/2 P, N- t$ _% H* j5 e4 C0 ^
( \9 m9 p; Y$ L5 w$ e9 b void goto_xy(int x,int y)
' I( g" I0 E; r+ h6 g/ ~ {
' ~6 u2 ]) M( L union REGS r;3 }+ i# [5 `) Q" ]
r.h.ah=2;9 z8 m( M$ }' S' M2 P) V
r.h.dl=y;% v. H y, ]+ B) ^4 L9 k- J" L' K
r.h.dh=x;7 }- e2 B/ }( p/ o5 B0 _! z* a. a
r.h.bh=0;
h0 p& W% [& p( k3 w int86(0x10,&r,&r);
7 J* R! c2 Z+ \5 v' H7 C+ B% Y }
! X; F& B: l" o2 V" c) W# {3 |: A9 S
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ b- f3 T9 W6 D% \. p+ B" G5 J4 c" K7 Q
void puta(void)' q6 ?3 O) ?0 v! j7 g/ A5 [/ R1 u7 n
{
9 T$ G p5 s9 W int i,j;0 O# @+ d& A4 o; f
for(i=0;i<24;i++){
3 M9 v0 Y; x" F& h; z. @( w for(j=0;j<79;j++){
- L* `& [/ [. f; I6 O& u; S goto_xy(i,j);
/ ?; k! i& Q9 j& w printf("a");7 y) I! x! R8 _3 E5 K
}7 }4 O3 O0 x0 \( f
}
) ]9 q) z: _7 G7 n0 I- z' l" R } |
|