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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 j. |* R& e7 W9 g# r
% v2 Q4 b& C' o 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* _4 [& n; e2 \4 ]2 g* w* x0 M5 W
1 U4 W/ J- s$ F" E 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 K7 ?, c5 J6 t
子函数及演示程序:) a+ |0 J8 t- p" u% N; D, f5 m
! ` M( b$ L5 S; H! z, N #include<stdio.h>
0 j" X2 N4 q5 ]9 ^2 j8 L #include<dos.h>
) B& I2 d* M1 z* V. C/ B R #include<conio.h>
0 e3 g# F' M* \8 f# S, t
( L+ p( F2 [" | p/ v- `. F8 L& D void goto_xy(int x,int y);
4 A8 t& I1 y0 ?1 [" z# _; c w void dcls(int x1,int x2,int y1,int y2);
+ p: | d5 \$ m7 Q* f) C void bcls(int x1,int x2,int y1,int y2);" r% X m F, s# t% Z$ y9 d
void kcls(int x1,int x2,int y1,int y2);
5 U6 H- l& [% F8 ` void recls(int x1,int x2,int y1,int y2);
+ O. a, j: K" P+ l: S" J3 o void zcls(int x1,int x2,int y1,int y2);5 m, }8 O9 [. _1 y0 H
void puta(void);
# \ l% n# L; T" }* {" x* v/ E( b8 s; n3 }
4 R! F. ` x; p3 f' } /*--------------演示程序---------------------*/
; m* ]# L% v) O0 q main()
$ [+ @2 x2 K" b9 z) W( X- A1 M {! e& d9 p8 M5 k1 H& @% c4 o
puta();; o" q$ F' u4 H9 ]0 i! A7 k
getch();' P7 g z5 G9 k4 Q& |- v
dcls(0,4,0,79);
8 _" {& C+ {$ m, _8 p5 s! n8 r" [ getch();4 g, \# J5 f+ p; }% W
puta();1 L$ M$ j+ X2 _6 F4 ~" _, J
getch();
3 U p# @: P% D- W( G- y bcls(0,25,0,79);
! F' y* p, \1 V getch();+ U! j. o/ {6 m: o% W0 W$ q
puta();
" `1 }) s' h4 H9 B p getch();
4 l$ F( y4 H3 b0 e9 c8 M zcls(0,25,0,79);' ?1 {9 K5 |8 c G2 D' U8 u% c8 w
getch();
" s$ C/ Q9 u) t. U0 Q$ s }
! i7 n) U( ?! W3 \- g% {' F6 S X4 a /*********center clear screen(中心清屏)***********/
; T8 A" `$ K) C$ W3 f void zcls(int x1,int x2,int y1,int y2)
& b6 m9 b! V; d2 ^- p) k! \& y {% X# d3 }4 @$ M
int x00,y00,x0,y0,i,d;! \, r; V, b) c, [0 @
if((y2-y1)>(x2-x1)){
6 L" D% T3 E: f0 _; J6 C' c d=(x2-x1)/2;
1 {" v, U* {5 ]: ]4 t x0=(x1+x2)/2;- [& ?; ?! ~- S- D- v9 q% B5 k
y0=y1+d;! E4 J) G n. m& s0 `1 |2 O
y00=y2-d;4 T& L% g- F ^" c/ Q. t8 o$ Z2 c
for(i=0;i<(d+1);i++)2 _( F) h6 [7 v) @* b& T, j5 ]
recls((x0-i),(x00+i),(y0-i),(y00+i)); g4 J# u# M) i; r
delay(10);
1 B2 H) O9 V8 x$ y }4 z5 q1 F, e- {3 \. ~0 ]( W
else{
/ q3 f+ s' F" D; n0 Z d=(y2-y1)/2;9 z8 v4 V) A: Q" D9 e" d
y0=(y1+y2)/2;
" K) S5 V. z% X x0=x1+d;
9 p+ G4 W0 `5 T9 i U! U- G# Y% I' I x00=x2-d;
/ H) j, | Y/ M) E7 Q for(i=0;i<d+1;i++): a0 A# c) j2 L! N" u' W
recls(x0-i,x00+i,y0-i,y00+i);
! P' T" t6 r5 ^$ O: u! |1 y delay(10);1 T3 A; l9 `2 V1 s# T
}* N8 y* P/ u: a2 a
}
; v9 f5 ~) f# S! x. E2 a: y
0 R9 \0 Y. R3 {2 Z( C: s+ j: H1 j /************* clear rectangle side(矩形边清屏)***********************/
5 Z: @5 U( b) c H$ ^- D) F' ^% |3 y" @7 n$ b) T
void recls(int x1,int x2,int y1,int y2)5 X5 y B; U4 a9 k% ?* e0 r
{
; }; s; J5 V/ b X$ ~ int i,j;
7 S2 T% E% V$ ~7 J for(i=y1;i<y2;i++){
* K! Z [* E7 Z3 ~( r: W- M goto_xy(x1,i);
3 p% R3 ]( ]4 {; q4 L* J putchar(' ');8 [) T& M7 V# w9 H# k2 y: {
goto_xy(x2,i);
- d: j& x' E& f- I putchar(' ');
/ N0 K1 T5 P2 t7 e e1 t, u8 v3 [ delay(10);
! P" l1 B1 I2 e9 m, t) W }
* Q' X+ m( ^1 U% C, r r" k1 o for(j=x1;j<x2;j++){
, U0 _/ t, W% N B" p( U goto_xy(i,y1);/ h5 R1 D$ |2 [
putchar(' ');1 R* D5 n/ N) B2 \4 O
goto_xy(j,y2);
) M' \: x) X1 E8 j i F putchar(' ');
# Y1 k1 v7 M3 k$ k delay(10);
3 B$ @6 b+ V% l6 e }
! H' g3 j# p! |( C }
$ q, w9 E9 k8 |- C9 [ /******************open screen clear(开屏式清屏)*********************/
; D5 |- y: V; z% J7 c! z5 i4 Y( C E
void kcls(int x1,int x2,int y1,int y2)
5 G$ H, |4 W. M, g& A. ?7 t {
2 g' S7 ^4 o& H# f int t,s,i,j;2 m; @, \0 [. A$ R$ e/ ?$ }
t=s=(y1+y2)/2; ^% ?1 N4 `' Z
for(;t<=y2;t++,s--)
3 H( V; W N5 e. Z2 r; v' T for(j=x1;j<x2;j++){; E6 d2 U5 k* J: R% P* T, a
goto_xy(j,t);
' q0 m$ Y) f) c3 L3 t4 K9 W) |. b putchar(' ');
/ h6 Y: Z) Q) m4 o) {5 Z$ X goto_xy(j,s);9 S0 p. I4 F+ q- a, [
putchar(' ');* z5 k. I; Q7 A5 T+ M
delay(10);
6 L0 \2 J5 U( C5 m }8 ] B1 P3 g& R! c
}
/ Z* t$ ~* P+ \ /*****************close screen clear*****闭幕式清屏*******************// n4 j% t! S' [3 B' T Q
( [6 U5 Q' c; x
void bcls(int x1,int x2,int y1,int y2)& H" R, T/ M9 T" _! o Q
{" W+ W& Y$ {& o+ X6 l( |4 s
int t,s,j;
2 H( Z4 Z- N# g) d t=y1;+ j5 v, B# M$ G8 h" p* ~5 ?
s=y2;
( r' j T+ T1 J for(t=y1;t<(y1+y2)/2;t++,s--)
* P; N k; F( l) F9 \3 j for(j=x1;j<x2;j++){# G: W; q% l! w8 \) g! z
goto_xy(j,t);5 I$ ^% Q1 ?* L
putchar(' ');
! A) d% O/ p4 u goto_xy(j,s);
# I) c; A" [/ t5 I$ D3 ~7 ^ putchar(' ');
0 s |1 m5 t5 q$ M9 M delay(10);
( N( `& I/ {& {/ v* z$ N }
, T D* s0 s% M' q; u" w }$ f% l4 z) u& @9 t
/******************bottom screen clear(自下清屏)********************/4 U4 @4 U# V$ s- n
- X- l( Y/ u" L0 b
void dcls(int x1,int x2,int y1,int y2)( E5 V& a6 X/ n( n, A% {
{/ D S! g; Q, y4 B* y/ m s K
int t,s,j,i;" B" q: F! f& x' {/ G& J5 W$ R
t=s=(y1+y2)/2;$ s4 q* t4 L6 ~+ a( p
for(j=x2;j>x1;j--)1 q6 H: P0 t3 [) Q. ~) `
for(i=y1;i<y2;i++){
6 F0 S7 ?% y g" m: u# {4 K goto_xy(j,i);, Y/ u$ g0 A- Q' {( Q$ W7 }8 b* m
putchar(' ');8 {7 D- t' G# F" L+ t8 m# G
delay(10);# i0 E, i- l9 q) c
}
1 N: W( `- H: s }# C6 ^2 e/ B+ l* c" B) t
/******************设置光标子函数******************/7 D' R$ j* w/ e' ~: A) u
; s9 F' G7 X4 @, W' k, j! G2 c
void goto_xy(int x,int y)( T. J) r- J: o9 o
{8 e; c0 f1 ^: n$ Q, M" |
union REGS r;. m% d2 O x6 L# ^6 P
r.h.ah=2;
5 t: f7 \3 s, h0 A8 t9 V4 e r.h.dl=y;5 g4 H6 I$ g; h+ V: f
r.h.dh=x;' g' Y$ L9 u y7 N
r.h.bh=0;3 O( b `: }: U1 B* V$ S" D) \
int86(0x10,&r,&r);# A, Z3 ]. `/ S$ @3 a$ o
}$ ]" e" x! b4 z0 [! D) T" h# a
7 }" O0 t0 Z, V7 f1 f8 ?5 Y
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
, g9 T) r E* p/ o9 n; E7 s, @& |3 d4 [8 @
void puta(void)
! D% f8 G6 o9 i1 `$ h( p {' z3 @7 }3 z8 N3 E
int i,j;- I/ S, P/ o* C& w
for(i=0;i<24;i++){+ G4 e( t% r9 q6 W( \+ O8 W9 k
for(j=0;j<79;j++){
2 h W/ P. G3 F8 F1 O/ D( Y goto_xy(i,j); V- h) E, i, D. i6 v
printf("a");
, w; ^( e/ I! w }3 f$ z& O( I E5 |+ I
}
0 p0 c$ I5 z! i } |
|