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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 N. B+ j1 O; A l' e# _
1 x* m, J! W5 b$ M
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( n2 u; C- }$ b. v) y. H
: N5 B+ `( ?1 l7 H/ @9 y 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 s7 \% R C: }, ^, U5 y: b 子函数及演示程序:
/ h5 b- d+ j; v0 `. D
! Y4 e$ h8 p g/ {6 [. }5 Z! S$ B3 ~ #include<stdio.h>0 C F) z' U5 H# ^( r: I
#include<dos.h>, Y+ R6 m2 _. |& p' @$ ^
#include<conio.h>! V5 n L4 x9 ~# O' n# |2 E- B
9 l* |0 Z B3 V5 L1 G void goto_xy(int x,int y);
( G, v* m6 a# ~2 V6 t0 l void dcls(int x1,int x2,int y1,int y2);
" }. F5 m$ w7 H0 T1 c% S; I! ] void bcls(int x1,int x2,int y1,int y2);
3 x8 s- P) ~' Y! L5 R' q0 m; F( F# D void kcls(int x1,int x2,int y1,int y2);
: X; D* p* C+ d# t# z- |$ B; N* ^ void recls(int x1,int x2,int y1,int y2);% z% V. _: Q& q
void zcls(int x1,int x2,int y1,int y2);
/ \2 }6 @6 E# L! b9 M void puta(void);% v" i( p6 i$ r% S" z* K
& i1 j0 p, n# v: o* c2 i, f4 @' x
: t% T* `! B1 `7 w* b4 B /*--------------演示程序---------------------*/
: A! U- t4 k n9 E! \! ` main()
4 A" S! Z) _, S2 B {" l3 j6 c4 a, w f& z4 g5 S
puta();9 ~) n! C: N1 Q% c: V
getch();
% R5 Q& g, q( d- ]& @* f% @5 R" U dcls(0,4,0,79);
: I6 k0 O" q0 c& d; V$ ?1 @0 U getch();; r3 k. ?9 q( a/ M
puta();& B5 B! d2 c5 F: k" P
getch();
8 [+ K- d/ a$ U8 o5 G$ C# C bcls(0,25,0,79);
0 C) p7 P2 |" R6 {5 A& ?& C getch();1 D( Z3 c8 Q: K3 l
puta();+ Y/ K+ O: g5 y' M
getch();
9 r$ A m9 a! K4 @ zcls(0,25,0,79);
) {: C& k# P, g& m0 t3 L getch();
) s" J4 c& j& T5 P' T }
1 T( V5 R! I2 H" w' c4 h /*********center clear screen(中心清屏)***********/2 w* j& T8 J) q- k" U9 K- f u; ]. z
void zcls(int x1,int x2,int y1,int y2)6 l! x- Z3 ` p1 U' j- Q
{) T V9 ]5 K" I
int x00,y00,x0,y0,i,d;/ T5 F* E1 S# _3 h' p; R- G( @; f
if((y2-y1)>(x2-x1)){; A- i5 s. P/ @% t, b" D
d=(x2-x1)/2;
- k7 Y' @5 B1 v8 @+ w x0=(x1+x2)/2;7 c9 L! C& m+ G5 C. l
y0=y1+d;
8 I: t6 Y5 V! z; b6 \# e. S( J' A y00=y2-d;( m3 p6 A; C5 G8 S
for(i=0;i<(d+1);i++)
) A: M$ T7 o. M5 s' g l recls((x0-i),(x00+i),(y0-i),(y00+i));
$ F9 r3 \: P7 c- d+ V% r! t! h delay(10);
; n8 X& p1 E. Q- a" \* u2 h }
( W9 I0 s4 [4 ^$ d! v$ v else{
1 _; c3 t. G. W d=(y2-y1)/2;
9 u, p ]6 E v# u3 w& U y0=(y1+y2)/2;
# T8 r- { c0 E' u x0=x1+d;( G' G5 N4 Y; Y2 I, f5 h) J0 q
x00=x2-d;8 w1 p: R% \$ P1 x- n
for(i=0;i<d+1;i++)
- m& Q0 z! i& y# _# d; ^0 t' e4 \ recls(x0-i,x00+i,y0-i,y00+i);5 x4 E* i8 f' O- L, d# L5 ]
delay(10);. Z/ C- j! l4 a: [" B
}
3 B" N: n9 i' L- u }
5 C5 |( T8 }" k
/ q/ ^) |2 r- L /************* clear rectangle side(矩形边清屏)***********************/
6 G* u+ A5 D' B5 j3 D
5 M0 J' I% ]$ S) y W1 u4 f# O0 ] void recls(int x1,int x2,int y1,int y2)% b) M$ P: K3 V* b+ B" E; X
{
7 F% |0 e( Y Y$ V% g int i,j;; S) ^* ?* O+ b% {& s; t# z* ~1 f( {
for(i=y1;i<y2;i++){. D( c% W: [5 D5 F* q6 ?
goto_xy(x1,i);
' B8 y6 _$ F0 n9 a. U* i putchar(' ');2 k5 R* X( _% N+ }0 m( U
goto_xy(x2,i);6 Y6 s% e `+ v! U* B
putchar(' ');$ k- ~# N: i; r _" c T! V- H
delay(10);
. T1 y1 Q+ G4 p- Z, K/ z' f/ i }3 ^: t+ B6 y0 z& E& D; @& u
for(j=x1;j<x2;j++){0 f- m8 P- m1 r! O8 Z) @$ ]* y
goto_xy(i,y1);& `) F" D3 l/ b- z' s
putchar(' ');
. O, s- p& T( m" L5 c3 B goto_xy(j,y2);
* ?) ~/ o7 ~. |3 \/ N' @ putchar(' ');
; P+ j) d% v J. ~ delay(10);! Z/ {9 M @! n2 t
}/ P& {7 U+ T, }% Z+ }
}
3 w- v7 M7 I# s) a' L: v5 T6 ] /******************open screen clear(开屏式清屏)*********************/
3 _4 ~2 y! j) j; w2 V+ f3 v0 R+ _
& m0 s T2 ~: | Y2 Y% x void kcls(int x1,int x2,int y1,int y2)
) s, j2 v3 S3 N$ ?* b( k$ v7 } {& ^$ ?4 \1 U, r/ ~# O: T
int t,s,i,j;/ }7 e9 b2 e' E* L$ g
t=s=(y1+y2)/2;
7 V. ~$ ^& m t) ` for(;t<=y2;t++,s--)
% J+ ]+ C9 {& _4 n- D for(j=x1;j<x2;j++){2 R' E& D( t' E* \7 e
goto_xy(j,t);. b! {+ `2 J- w+ D4 H+ V1 ^3 {
putchar(' ');: O1 i7 b+ S7 c1 @
goto_xy(j,s);
6 M" Z; t! B* T/ S+ C) Y1 M# J putchar(' ');, l% h3 S0 ]2 X: o5 X
delay(10);* _ s, }$ g# I* Q- S
}
6 h$ Y2 Y" i0 k8 A, Q }' @; I9 @" ^% j9 `# U& p! }
/*****************close screen clear*****闭幕式清屏*******************/
- O7 e3 u# y( L) N% W& r" i- B8 U6 G
void bcls(int x1,int x2,int y1,int y2)
5 N3 R4 s! N) o. E; N# m {3 I" o h8 z& H4 D
int t,s,j;6 F3 }% [- w w# m
t=y1;
+ J( f. W- b- Z( w3 D) T8 f s=y2;
' G1 ]; n/ [" Z for(t=y1;t<(y1+y2)/2;t++,s--)/ T3 r2 @3 Y( _9 Q- h2 N
for(j=x1;j<x2;j++){2 N: h8 n2 t; F; C# v1 f8 p
goto_xy(j,t);
a6 S7 v# K+ t( N/ X' l putchar(' ');
! v$ n6 m! s" \. {& V' X( I Q goto_xy(j,s);3 G6 q4 F8 c2 {1 F' D
putchar(' ');2 A: | d3 B4 O
delay(10);
* ^$ E z+ k/ r }2 T- U e1 m1 O; ?
}
) N! \* k: Q+ C, S /******************bottom screen clear(自下清屏)********************/
7 h& G" ^( |0 e) \% Y5 i- r) ]
. h* `# p1 U8 h) M void dcls(int x1,int x2,int y1,int y2)
0 K' q3 `9 b; R8 K {
& x% C" y; K9 ]% Q( J7 D- M int t,s,j,i;: h0 V3 H; u5 ^% L
t=s=(y1+y2)/2;8 @. r8 I- W& O4 r0 Y
for(j=x2;j>x1;j--); M( r; |( Q3 U% ~# M
for(i=y1;i<y2;i++){+ o$ \0 ?, Q8 {8 A y
goto_xy(j,i);. R$ [1 y) q% j# L+ Y4 k4 T
putchar(' ');; u* Z, O! X# f+ ?1 L
delay(10);$ |3 N! n+ }- V+ _$ d
}( _+ v7 p* q6 [
}* O4 G# s6 P1 z) m
/******************设置光标子函数******************/* e, D% s7 T8 f8 |/ |0 s
" k, }0 A8 Z) s( c) n- W0 O7 k) o# C/ J+ \
void goto_xy(int x,int y)
3 L+ N* u0 J* ~ {
- |6 v2 A* P# `! v7 k9 D) r union REGS r;
( ?7 s) M% A4 Q. g8 } r.h.ah=2;
* X. f- U* Q. Y9 u! ] r.h.dl=y;
+ \- \# J5 K/ O) Y/ p# S r.h.dh=x;
' j+ @! |( ?# Z/ m) q$ v r.h.bh=0;' `& q3 m8 i; h. s: H
int86(0x10,&r,&r);% _4 x2 R7 k2 [0 c
}
- ^2 i" J5 z# @8 E8 ~ o# V; X' N& i- Z
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
& y* c8 t7 }- N9 E1 T* n$ [* U: @3 S
void puta(void)# i/ Q& G4 z, ~* G2 O4 b
{
+ r* Y% n8 U$ d" Y- {+ ` int i,j;
! i# u8 ?2 V. z& d. B/ a for(i=0;i<24;i++){
% b* l( n" T/ E' x* ^ for(j=0;j<79;j++){8 s3 X9 m/ r" x) W9 @
goto_xy(i,j);& N: j5 f( p% l, K
printf("a");" ]* D% h2 D- b4 u' R5 Q. }
}5 J' T4 g p* z H _2 h1 b
}- Q5 C3 N2 a! V' q4 H, p
} |
|