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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ } g$ m Y( O4 y h# l/ h/ w) z$ b
% j$ ?4 H! k& p) d 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- G: t) w$ C3 M$ O/ h
0 V1 @7 |7 Q* ~ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ( ?8 F M1 q9 H( Q C0 S* b6 o
子函数及演示程序:
! r4 g$ ~( D4 Z$ `% A3 F: z0 u- g
#include<stdio.h>8 {3 y% T+ N2 F0 z4 n* y" E& a3 ^
#include<dos.h>
3 u% k8 y4 n' O6 Q: } #include<conio.h>2 c( H6 \/ `) m7 b3 M- {# h
7 a G+ y1 U) r* f void goto_xy(int x,int y);6 k' P" z4 E. \' W# C3 C
void dcls(int x1,int x2,int y1,int y2);
/ I- X- w5 J1 f: ` void bcls(int x1,int x2,int y1,int y2);
+ M0 y9 W# S) ~) O& l, n% M void kcls(int x1,int x2,int y1,int y2);3 I) z0 n6 b& r' _# Y
void recls(int x1,int x2,int y1,int y2);
; A4 A+ \, @+ }7 w void zcls(int x1,int x2,int y1,int y2);8 a8 l* W, o1 _: R/ `. @- @1 E% W3 \
void puta(void);
/ J9 G6 b( y9 E; m5 b8 g$ B$ p
3 J: g# Z, h" G$ z3 W" B9 D, U% U8 q# G. u4 K3 R$ a
/*--------------演示程序---------------------*/$ u: \( t5 @, w" M T; ]8 O3 R
main()
* J1 h+ R' m. ]+ u! R {* p- f+ H6 @7 G+ a
puta();
3 Q" ^' @0 B/ ]; x. I getch();$ _5 t7 g. P% ~' F' B
dcls(0,4,0,79);$ k% ?- `6 B2 p. Q2 @
getch(); K! u6 A X# e+ O7 v
puta(); s0 I% m5 q1 ~. R7 g
getch();+ W# X. }: K t7 s7 v6 o4 R% P
bcls(0,25,0,79);, d9 r3 w9 G+ Y4 T) t0 ?7 i" M
getch();
, o. M9 O4 @ M& U puta();7 L4 A" d8 ?$ U9 N6 F# d# J- E
getch();
6 N7 ]6 O- O) d" [0 T7 q6 W: ]1 Z zcls(0,25,0,79);
6 h/ a: W) x/ f$ G/ P7 y getch();9 @" E- k2 N- k# s' ?( c
}
( ?3 k3 J7 F; w% ~- O4 I /*********center clear screen(中心清屏)***********/$ X8 c# F! ]6 {" p9 e0 {
void zcls(int x1,int x2,int y1,int y2)
: L( _' i! g! p3 Z; g6 R4 }' m- z& Q {: f; S+ E- V" p% n3 U' f
int x00,y00,x0,y0,i,d;: m2 b4 b3 h9 M! Q
if((y2-y1)>(x2-x1)){- w8 Q1 V3 i! ^& t
d=(x2-x1)/2;
7 y9 C* v% v. Z2 F x0=(x1+x2)/2;
" }( B$ c, u a7 a" K* C2 Q: S! ? y0=y1+d;
3 x& p7 M, R- J% k4 e y00=y2-d;
! A: `1 T! v, Q7 G3 u1 A for(i=0;i<(d+1);i++)9 e4 S" A8 M J8 X1 t6 D! Q% [9 W
recls((x0-i),(x00+i),(y0-i),(y00+i));, u2 C8 Y% k$ A( O& e% a4 Q! C
delay(10);
7 N" B- h" j( [& J" f- L: {$ x8 |) t }$ m1 s7 ~4 x+ O! u
else{+ v4 c! e; {: I8 N+ B
d=(y2-y1)/2;
( w% u! C, b& d, U1 g8 ]8 S/ Z y0=(y1+y2)/2;; P) V+ t% m l p& O3 n- `! i" K7 R
x0=x1+d;
( B+ ~8 l4 e7 k* F* ~: h x00=x2-d;
( `/ W2 N6 z& h9 F* X for(i=0;i<d+1;i++)
5 D+ t5 Y& |2 P8 m% x" f( F% U: P" S recls(x0-i,x00+i,y0-i,y00+i);
- p3 K' ?( l# |/ h, v delay(10);7 w% d4 V% y' ]& A
}
/ p6 z# q, E0 W% D }/ a- Z% N8 L0 P' K
E5 p* ?2 h. b7 E /************* clear rectangle side(矩形边清屏)***********************/( u. Z( M7 x. P
% P9 @4 B* |. _% T6 k7 }" [
void recls(int x1,int x2,int y1,int y2)9 ~( t# e5 ^# W7 ?
{
% w% n J8 ?( H$ W: c int i,j;
6 A! f. W/ T0 B% b- N' L/ B( u for(i=y1;i<y2;i++){
+ Y, v. K- F& ?! g goto_xy(x1,i);- M$ }; w) }* y3 i1 C/ g
putchar(' ');+ r# s1 S" t; l" o
goto_xy(x2,i);; ~% u0 s: }/ g" W1 D( F
putchar(' ');
( ?6 ]2 o4 T9 p# ]/ { delay(10);
9 R l! {% i5 c$ s" e }& R; K7 `5 S0 F+ {) B! k$ r k
for(j=x1;j<x2;j++){) { f& W: F1 l' A
goto_xy(i,y1);5 |! i9 n' i1 Y' q4 N* o. J$ Q5 f; O4 g( N
putchar(' ');+ T6 p# `! |2 s
goto_xy(j,y2);
0 q z1 @4 [: K, j% C) d putchar(' ');
7 _ w" [4 }' n* O+ d1 d( \# Z delay(10);
+ Y' g; P& F; F' o; i" O8 g- ^ }
) E; ~9 u: Y+ f: ?# o6 X- p }
& ~9 L+ ^8 y( a( o& ~# l /******************open screen clear(开屏式清屏)*********************/
' y h) b/ ^, z( o) y2 b2 c& [
4 D' x: v: \1 m g; y# T* M void kcls(int x1,int x2,int y1,int y2)4 u' U. |% P* N
{
7 K4 _% i# t0 d& x) S) N) A int t,s,i,j;. X* V2 g" V% P* ` o9 |4 o( y, h; r! I
t=s=(y1+y2)/2;
o; I1 A# t3 d. R* ^( A! Z8 H for(;t<=y2;t++,s--)) O9 K1 }# e3 \5 y) B+ n3 M U
for(j=x1;j<x2;j++){
9 u$ L6 V4 O7 j' @ goto_xy(j,t);
' p( W7 Y5 Y' a putchar(' ');1 W @$ v# Q9 F$ O; H
goto_xy(j,s);3 m# z* v% S% h- Y
putchar(' ');
$ Y5 o. ?5 b) N9 e delay(10);/ K4 {$ h3 W2 H9 [8 x/ k
}
8 N% r6 @! e3 ^9 R' Z" b' t' t }
8 b& A8 u, T! U9 p4 c# e& o /*****************close screen clear*****闭幕式清屏*******************/: d0 ?7 O$ [* C4 D" U4 L1 L
0 o8 X# x8 _. P' s3 J void bcls(int x1,int x2,int y1,int y2)
5 p# i$ K1 e* D& G2 j2 u2 f6 h {
" x( L2 l9 X' I int t,s,j;* h6 H% r6 J& T! H& q/ ]% x
t=y1;$ i* Y4 u% E1 q# c7 T: |! d
s=y2;
0 h2 h5 s4 f. O/ f: o for(t=y1;t<(y1+y2)/2;t++,s--)6 }: Z. O* |+ A' }! u; i* D0 R, K
for(j=x1;j<x2;j++){7 M' W& Q3 k% @
goto_xy(j,t);
3 x1 ?" z/ }, \* G putchar(' ');
+ e- [3 B6 @' d: C ~3 y goto_xy(j,s);
+ m# }- r$ z. X putchar(' ');
i( ]- G1 t5 S! {; P5 R delay(10);- N! B* D4 @' Z. q7 f7 T
}
' M0 h4 F" p" h3 H: n5 t }
! M* e+ I+ G2 I) c; c/ I /******************bottom screen clear(自下清屏)********************/
5 I/ `: \% l8 T4 J L; P1 [9 F
0 `0 n) F& P6 j$ C( ? void dcls(int x1,int x2,int y1,int y2)* }- W X+ S- a$ u
{; O9 Q& w3 g, K' \2 ~
int t,s,j,i;
5 i/ ?& G" Q m8 T* c% ]5 r1 |7 E t=s=(y1+y2)/2;
% O1 x& i; S' z# v! t5 u for(j=x2;j>x1;j--)
) ` H7 s( t' C U: v6 Z* h! k for(i=y1;i<y2;i++){0 c+ E3 z5 C# \% A
goto_xy(j,i);
) p" c6 J) a' R n m' l putchar(' ');
8 z! G1 g: g" X delay(10);
/ i5 {8 p( v( ?1 C. ~ }
! T0 \- q: |2 {/ K# @ }+ r. u1 A( w1 a/ z" x% N& }+ ?
/******************设置光标子函数******************/1 w& s- w; `2 a5 q
! k$ a( w7 h: ?
void goto_xy(int x,int y)& x8 Q* L/ [9 _ M: \( w
{
$ M5 F0 G r. d; r3 t union REGS r;5 F! `! u& E( \
r.h.ah=2;# G8 f z: r A* E
r.h.dl=y;0 a d9 l- |9 w( k
r.h.dh=x;8 R% V' u5 ?! j& ~- `" } u
r.h.bh=0;
4 t2 z7 B% S% {3 F* g4 o& d* { int86(0x10,&r,&r);2 E/ S2 J6 k, o# O
}
+ G, f& ^3 E3 a ?! k; v8 b
( T# F U1 w9 Y3 z0 Q, @ I3 H8 { /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 z ^0 A& o8 V& J {& s
$ L/ |7 ] Z) K) q! ` Q void puta(void)
) a2 ?' X6 y+ k7 j2 n6 Q0 Q {
0 T" x8 R# j6 Y3 w8 Z, K A! h int i,j;3 a9 h/ L; A5 S% ^
for(i=0;i<24;i++){
* E8 P4 \( h; l6 o* M# F for(j=0;j<79;j++){! b) p6 T4 |$ T$ m: ~
goto_xy(i,j);
: X% K, M# G& f# T# x printf("a");
* @, t) f+ t# L }/ b; w5 h Q7 m6 R/ d0 x8 S: n; {& J
}1 c3 w6 m r2 L4 q7 T
} |
|