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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
/ P5 W4 g# s" E! X! F' y5 [
9 N2 O! j3 u1 g5 L" K* j- l0 D 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* |" ^. o6 f, H S, j" Z: k( W9 N$ [
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. : ], d7 k, O9 O) g
子函数及演示程序:5 r# v- f$ @! f% m" s
2 `7 d) J0 b" l# m( ]; W- @
#include<stdio.h>
, e r5 t3 ~( v! v3 P( S #include<dos.h>
$ Y1 \' C- g: E9 U #include<conio.h>
' y3 I( R2 C! C9 e# S0 @1 [; D( @+ K4 T. G% ?
void goto_xy(int x,int y);
" e1 q. X2 x1 l. ~! h0 {% y void dcls(int x1,int x2,int y1,int y2);
+ r% l( v* N1 f! c void bcls(int x1,int x2,int y1,int y2);' W5 |5 P W1 Z" ?8 B" U
void kcls(int x1,int x2,int y1,int y2);
6 G* p0 j, P& a void recls(int x1,int x2,int y1,int y2);" G& y+ i: d' Q* B1 ]4 ]! c' K% x
void zcls(int x1,int x2,int y1,int y2);
& r% @0 t' ~; F& ?# R4 c. W void puta(void);' b+ u& Z7 h( O+ Z# B& r
5 r4 G3 y5 ?1 K1 N1 c+ K; ~9 k! |9 n5 }5 f! o4 ^
/*--------------演示程序---------------------*/+ S! ~ M6 k. {$ E4 E
main()4 O! n- N2 V- W: ^6 @0 w8 h
{
" `* l M @) z% A, B6 Q' J puta();- _, {0 j8 _2 P4 C
getch();- x! |4 k }$ J: ]7 t2 ]
dcls(0,4,0,79);( A8 c. @+ r; j9 o" @! d
getch();3 S8 j9 {; P5 F) e! ?
puta();; | N4 R0 M8 R8 i/ \ m
getch();* {' U+ z2 {( |1 W! T) x
bcls(0,25,0,79);
2 z4 } c6 }4 [7 Q getch();+ `+ Y- X6 ^& P. e
puta();
! R S1 l1 s/ Y3 Q getch();8 g8 W0 | P/ ^
zcls(0,25,0,79);
: [) d2 p7 K, l# E, t8 _% W getch();
; U7 ~! D. F. ]0 m( U! V2 r. S }9 P) v: l( Z5 a6 a
/*********center clear screen(中心清屏)***********/" Z# w2 Q3 x: G0 u9 I
void zcls(int x1,int x2,int y1,int y2)
" k% c- }- \+ y2 }: M% b {9 a4 F7 h- e8 h
int x00,y00,x0,y0,i,d;
4 Q9 O( f. S$ Y* Y3 Z if((y2-y1)>(x2-x1)){
5 b; Z$ j* `, N! {" d. ^" G d=(x2-x1)/2;
" f/ \' i' s7 Z$ h$ c. K6 m! z x0=(x1+x2)/2;+ H2 e+ L' d/ c2 A p! _* B
y0=y1+d;7 Y" r5 a& J0 I/ f
y00=y2-d;2 {0 L; P' @9 I
for(i=0;i<(d+1);i++)& H% M5 u1 Y7 b* p
recls((x0-i),(x00+i),(y0-i),(y00+i));
6 B" g$ E( O _" w0 e) O+ r7 a% U delay(10);$ a0 r' e8 c+ U, M: I5 A# K
}5 L& x+ B' \2 E8 P3 s
else{+ N) V+ w( D: h" M) j& k" T- R
d=(y2-y1)/2;8 w8 y: }0 @ |% H) L
y0=(y1+y2)/2;
4 Z* m# h6 Y G x0=x1+d;
3 C. {( u3 g% z# E x00=x2-d;
1 s- K& ^1 M( ]1 ?1 v1 f for(i=0;i<d+1;i++): X2 l9 T U9 }* Y8 L o, X
recls(x0-i,x00+i,y0-i,y00+i);7 ?; {, d7 ] } |+ n7 W& e
delay(10);& s6 \9 S1 K( R- V
}$ X4 v) P0 A2 o; g" R$ d
}
' v4 B1 ?" }* M! A; J0 v x. N/ f k' z, H% A K3 Q8 ^
/************* clear rectangle side(矩形边清屏)***********************/6 C0 v5 E4 B4 r; Z4 l. v! W
0 H N9 e. A* g- m+ }, S+ J
void recls(int x1,int x2,int y1,int y2)# j5 N1 ]4 |9 X
{+ Z& ^" m6 W3 ~$ z3 z
int i,j;2 F% q4 O: N* c6 ?# }9 h3 @
for(i=y1;i<y2;i++){
% m; x" X$ w8 N: X% x2 W1 _2 S# T goto_xy(x1,i);/ x9 J! v# ?' q9 C, \4 `) r" }5 y
putchar(' ');
9 c1 z7 U' j0 A; N goto_xy(x2,i);
: ]1 G, V% @1 H$ W putchar(' ');
% g9 k: O$ `& W delay(10);
G# |. m8 t5 G* O6 Z4 s# M# Y }/ o8 g6 n8 e6 B0 B. h
for(j=x1;j<x2;j++){* ~2 S! S4 g8 J- K$ p6 H3 z
goto_xy(i,y1);
; i; t I% t( T9 r5 z9 y putchar(' ');* @* Z% P* c. R! D9 P5 U. D6 ?' S
goto_xy(j,y2);
2 }9 X; U- `' j' g putchar(' ');1 t% u- D4 C, c) Z& t7 N* f' S" Q
delay(10);4 \* y; m$ @/ e+ ~4 }( h1 l
}
: r( z; r* S% B }
: ~1 w7 k5 e& V5 l/ w /******************open screen clear(开屏式清屏)*********************/ m+ J8 d H: d% j3 c! h+ C4 u: }6 R
% R/ V: }9 ^8 S2 Q, J( d! O* H void kcls(int x1,int x2,int y1,int y2)0 o8 M3 d' j [' x- C1 p
{5 d* n0 `9 Y$ c# Y! C0 \
int t,s,i,j;
0 l! o9 a+ u7 b: N* B t=s=(y1+y2)/2;
" G/ J% M. r: a for(;t<=y2;t++,s--)
# Y+ h" L. o% [ for(j=x1;j<x2;j++){" b: j: M4 f3 `& x
goto_xy(j,t);: f2 W- p4 c7 r( Q6 t
putchar(' '); b0 e4 b% h2 Q) L$ p
goto_xy(j,s);
& k& z$ [6 G$ I# b+ e' f8 ` putchar(' ');
" ]3 W& |$ h& c% [2 o; P8 r! g4 I1 \' t delay(10);; i# {: y' e% U1 Y% w4 X
}# h: d8 l0 }+ l7 m1 E) H
}
. [* ?: w5 M: @- @2 K; U, x( G /*****************close screen clear*****闭幕式清屏*******************/ u6 h; T' W, A. S9 [! M
8 j4 Z2 S P( ]/ p8 A# ^ void bcls(int x1,int x2,int y1,int y2)
( w8 g. S" G0 [/ `* } {- r9 A+ F( h6 j7 C6 |
int t,s,j;- E( M- L) O% S
t=y1;) |1 |. o6 e. Y: Z3 V+ M$ Q
s=y2;
* q1 q; R% g2 ]0 D: \# s for(t=y1;t<(y1+y2)/2;t++,s--)) X2 H7 u+ d. d$ E
for(j=x1;j<x2;j++){
( j z2 ^' O) W goto_xy(j,t);
2 x3 K$ {* B: n! l% p% t putchar(' ');
( K0 A* Z O Y+ S; p5 K- g goto_xy(j,s);
2 D% w; E1 f! r, a putchar(' ');
2 e7 w8 I' L( u+ b; m q9 a3 s( ` delay(10);+ {1 ~! K1 C, z. w3 I8 c
}, R( y2 o1 G' j5 U
}/ u8 T3 h: p. s1 x
/******************bottom screen clear(自下清屏)********************/
1 N, n r" C2 q* r, A) J) |8 Q! t- x
void dcls(int x1,int x2,int y1,int y2)
7 j( ^" b/ M( H {6 d/ `6 G9 {& P' {0 n4 J
int t,s,j,i;, v! P8 S7 u/ i4 _3 A, \! X
t=s=(y1+y2)/2;
" z0 Y9 M6 e7 U/ ^3 ? for(j=x2;j>x1;j--)& ` a8 y3 K( I6 R( w9 m" H$ Z
for(i=y1;i<y2;i++){
_) \' Z- M( i7 v2 e. q goto_xy(j,i);$ N& X8 S4 X" |& B) B) a! G- e
putchar(' ');
/ q, G7 K7 d; n; `! r7 K0 c delay(10);
; _0 ~- \( H) I8 Y. P }
8 H/ F. `& ^. f) y }( Y& S$ h! f+ S/ K, G" n
/******************设置光标子函数******************/
3 ]2 J2 y3 D+ m8 }5 Q2 X$ G- _7 N
. f* w8 |8 _# l" D4 N* \6 K" U8 F void goto_xy(int x,int y)
: j3 K$ _% p/ v' m7 ~$ w8 k {/ c8 y1 g# a2 Y1 U, \
union REGS r;. y* n0 C) d7 |) a+ O5 T! N% V
r.h.ah=2;
: ]% e+ O' f0 x) l8 ^ r.h.dl=y;, D: R d) E6 a; R5 ^9 P) I
r.h.dh=x;
2 u* g# w/ t8 G' o r.h.bh=0;0 g) V+ i; ^' n9 x
int86(0x10,&r,&r);
: p# I# {5 ]8 y5 q; j D& u }
" r3 k# D } p0 Z! `, H4 P+ I) `' a* V- T' s% ?
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
; r, Y+ a8 k4 }4 I7 |( M$ A0 c
% `5 {9 }8 s& }- e5 B' l7 @+ K" N void puta(void)
0 ^5 b7 \7 M) r {! L/ o5 X0 v4 e0 r H) m
int i,j;
- H9 ^2 { Q/ S9 X for(i=0;i<24;i++){
4 @4 g, m S" D8 @ g6 J for(j=0;j<79;j++){
( _$ C \ n- h6 e/ k goto_xy(i,j);! W! u) F* A) ~8 B G Z
printf("a");
; S5 E, _' Q4 d }
) A8 M! k7 J- q4 w& l }2 a- k. t! }3 |+ |
} |
|